From 89bbdbfcba9face902c7b92d7ec5f87e40e54911 Mon Sep 17 00:00:00 2001 From: Mark Gregory Date: Tue, 29 Sep 2026 11:12:07 +0100 Subject: [PATCH] Initial Commit --- .editorconfig | 18 + .env.example | 87 + .gitattributes | 11 + .gitignore | 27 + .npmrc | 2 + AGENTS.md | 47 + CLAUDE.md | 47 + README.md | 17 + app/Console/Commands/SonarDeskAdminCreate.php | 36 + .../Commands/SonarDeskLicenseIssue.php | 29 + .../Commands/SonarDeskLicenseRevoke.php | 22 + .../Commands/SonarDeskProductCreate.php | 21 + .../Controllers/Admin/AdminController.php | 49 + .../Controllers/Admin/CmsPageController.php | 35 + .../Admin/SupportTicketController.php | 59 + .../Api/LicenseActivationController.php | 164 + .../Api/PaymentWebhookController.php | 78 + .../Auth/AuthenticatedSessionController.php | 35 + .../Auth/EmailVerificationController.php | 31 + .../Controllers/Auth/PasswordController.php | 43 + .../Auth/RegisteredUserController.php | 29 + app/Http/Controllers/CheckoutController.php | 38 + app/Http/Controllers/CmsPageController.php | 14 + app/Http/Controllers/Controller.php | 8 + .../Controllers/Portal/PortalController.php | 142 + .../Controllers/Support/SupportController.php | 92 + app/Http/Middleware/AdminOnly.php | 17 + app/Models/CmsPage.php | 15 + app/Models/License.php | 36 + app/Models/LicenseActivation.php | 14 + app/Models/LicenseDeliveryOutbox.php | 14 + app/Models/LicenseProduct.php | 12 + app/Models/LicenseWebhookEvent.php | 12 + app/Models/SupportTicket.php | 46 + app/Models/User.php | 22 + app/Notifications/NewSupportTicket.php | 43 + .../SonarDeskLicensingServiceProvider.php | 26 + .../Licensing/LicenseDeliveryService.php | 40 + app/Services/Licensing/LicenseIssuer.php | 46 + app/Services/Licensing/LicenseKey.php | 27 + app/Services/Licensing/LicenseSigner.php | 59 + .../Licensing/LicenseTokenVerifier.php | 40 + .../Payments/LemonSqueezyWebhookVerifier.php | 22 + app/Services/Payments/PaddleClient.php | 82 + .../Payments/PaddleWebhookVerifier.php | 38 + app/Services/Payments/PurchaseProvisioner.php | 246 + app/Services/Payments/WebhookVerifier.php | 10 + artisan | 18 + bootstrap/app.php | 22 + bootstrap/cache/.gitignore | 2 + bootstrap/providers.php | 7 + composer.json | 88 + composer.lock | 8720 +++++++++++++++++ config/sonardesk.php | 46 + database/database.sqlite | Bin 0 -> 184320 bytes ...026_09_08_193343_create_sessions_table.php | 31 + ...0000_create_sonardesk_licensing_tables.php | 92 + .../2026_09_08_200758_create_cache_table.php | 35 + ...08_205000_create_sonardesk_auth_tables.php | 37 + ..._08_210000_add_sonardesk_portal_fields.php | 30 + ..._100000_add_paddle_subscription_fields.php | 34 + ...eate_support_tickets_and_notifications.php | 47 + ...26_09_29_100000_create_cms_pages_table.php | 25 + database/seeders/PaddleCatalogSeeder.php | 29 + deploy.php | 61 + docs/PADDLE_SUBSCRIPTIONS.md | 71 + docs/PORTAL_LAUNCH_FRONTEND.md | 24 + docs/rsync-studio-paddle-ids.env | 7 + package-lock.json | 2354 +++++ package.json | 19 + phpunit.xml | 36 + public/.htaccess | 25 + public/browserconfig.xml | 9 + public/favicon.ico | Bin 0 -> 11471 bytes public/icons/android-chrome-192x192.png | Bin 0 -> 37737 bytes public/icons/android-chrome-512x512.png | Bin 0 -> 150404 bytes public/icons/apple-touch-icon.png | Bin 0 -> 34252 bytes public/icons/favicon-16x16.png | Bin 0 -> 1334 bytes public/icons/favicon-32x32.png | Bin 0 -> 2383 bytes public/icons/favicon-48x48.png | Bin 0 -> 4404 bytes public/icons/mstile-150x150.png | Bin 0 -> 26267 bytes public/icons/og-sonardesk.png | Bin 0 -> 150404 bytes public/icons/safari-pinned-tab.svg | 3 + public/icons/sonardesk-icon-128.png | Bin 0 -> 20786 bytes public/icons/sonardesk-icon-64.png | Bin 0 -> 6899 bytes public/index.php | 20 + public/robots.txt | 2 + public/site.webmanifest | 13 + resources/css/app.css | 9 + resources/js/app.js | 1 + resources/views/admin/cms/form.blade.php | 14 + resources/views/admin/cms/index.blade.php | 9 + resources/views/admin/index.blade.php | 6 + resources/views/admin/license.blade.php | 1 + resources/views/admin/licenses.blade.php | 1 + resources/views/admin/support/index.blade.php | 24 + resources/views/admin/support/show.blade.php | 14 + .../views/auth/forgot-password.blade.php | 1 + resources/views/auth/login.blade.php | 1 + resources/views/auth/register.blade.php | 1 + resources/views/auth/reset-password.blade.php | 1 + resources/views/auth/verify-email.blade.php | 1 + resources/views/checkout/buy.blade.php | 91 + resources/views/cms/show.blade.php | 4 + resources/views/layouts/app.blade.php | 315 + resources/views/legal/cookies.blade.php | 16 + resources/views/legal/privacy.blade.php | 39 + resources/views/legal/terms.blade.php | 19 + resources/views/portal/index.blade.php | 113 + resources/views/portal/show.blade.php | 80 + resources/views/portal/welcome.blade.php | 19 + resources/views/support.blade.php | 100 + resources/views/welcome.blade.php | 223 + routes/api.php | 12 + routes/console.php | 6 + routes/web.php | 65 + scripts/create-sonardesk-catalog.sh | 247 + scripts/install-overlay.sh | 17 + storage/app/.gitignore | 4 + storage/app/private/.gitignore | 2 + storage/app/public/.gitignore | 2 + storage/framework/.gitignore | 10 + storage/framework/cache/.gitignore | 3 + storage/framework/cache/data/.gitignore | 2 + storage/framework/sessions/.gitignore | 2 + storage/framework/testing/.gitignore | 2 + storage/framework/views/.gitignore | 2 + storage/logs/.gitignore | 2 + tests/Feature/CheckoutPageTest.php | 27 + tests/Feature/LicenseActivationTest.php | 85 + .../PaddleSubscriptionProvisioningTest.php | 105 + .../PortalSubscriptionManagementTest.php | 66 + vite.config.js | 24 + 133 files changed, 15743 insertions(+) create mode 100755 .editorconfig create mode 100755 .env.example create mode 100755 .gitattributes create mode 100755 .gitignore create mode 100755 .npmrc create mode 100755 AGENTS.md create mode 100755 CLAUDE.md create mode 100755 README.md create mode 100755 app/Console/Commands/SonarDeskAdminCreate.php create mode 100755 app/Console/Commands/SonarDeskLicenseIssue.php create mode 100755 app/Console/Commands/SonarDeskLicenseRevoke.php create mode 100755 app/Console/Commands/SonarDeskProductCreate.php create mode 100755 app/Http/Controllers/Admin/AdminController.php create mode 100644 app/Http/Controllers/Admin/CmsPageController.php create mode 100755 app/Http/Controllers/Admin/SupportTicketController.php create mode 100755 app/Http/Controllers/Api/LicenseActivationController.php create mode 100755 app/Http/Controllers/Api/PaymentWebhookController.php create mode 100755 app/Http/Controllers/Auth/AuthenticatedSessionController.php create mode 100755 app/Http/Controllers/Auth/EmailVerificationController.php create mode 100755 app/Http/Controllers/Auth/PasswordController.php create mode 100755 app/Http/Controllers/Auth/RegisteredUserController.php create mode 100755 app/Http/Controllers/CheckoutController.php create mode 100644 app/Http/Controllers/CmsPageController.php create mode 100755 app/Http/Controllers/Controller.php create mode 100755 app/Http/Controllers/Portal/PortalController.php create mode 100755 app/Http/Controllers/Support/SupportController.php create mode 100755 app/Http/Middleware/AdminOnly.php create mode 100644 app/Models/CmsPage.php create mode 100755 app/Models/License.php create mode 100755 app/Models/LicenseActivation.php create mode 100755 app/Models/LicenseDeliveryOutbox.php create mode 100755 app/Models/LicenseProduct.php create mode 100755 app/Models/LicenseWebhookEvent.php create mode 100755 app/Models/SupportTicket.php create mode 100755 app/Models/User.php create mode 100755 app/Notifications/NewSupportTicket.php create mode 100755 app/Providers/SonarDeskLicensingServiceProvider.php create mode 100755 app/Services/Licensing/LicenseDeliveryService.php create mode 100755 app/Services/Licensing/LicenseIssuer.php create mode 100755 app/Services/Licensing/LicenseKey.php create mode 100755 app/Services/Licensing/LicenseSigner.php create mode 100755 app/Services/Licensing/LicenseTokenVerifier.php create mode 100755 app/Services/Payments/LemonSqueezyWebhookVerifier.php create mode 100755 app/Services/Payments/PaddleClient.php create mode 100755 app/Services/Payments/PaddleWebhookVerifier.php create mode 100755 app/Services/Payments/PurchaseProvisioner.php create mode 100755 app/Services/Payments/WebhookVerifier.php create mode 100755 artisan create mode 100755 bootstrap/app.php create mode 100755 bootstrap/cache/.gitignore create mode 100755 bootstrap/providers.php create mode 100755 composer.json create mode 100755 composer.lock create mode 100755 config/sonardesk.php create mode 100755 database/database.sqlite create mode 100755 database/migrations/2026_09_08_193343_create_sessions_table.php create mode 100755 database/migrations/2026_09_08_200000_create_sonardesk_licensing_tables.php create mode 100755 database/migrations/2026_09_08_200758_create_cache_table.php create mode 100755 database/migrations/2026_09_08_205000_create_sonardesk_auth_tables.php create mode 100755 database/migrations/2026_09_08_210000_add_sonardesk_portal_fields.php create mode 100755 database/migrations/2026_09_09_100000_add_paddle_subscription_fields.php create mode 100755 database/migrations/2026_09_09_160000_create_support_tickets_and_notifications.php create mode 100644 database/migrations/2026_09_29_100000_create_cms_pages_table.php create mode 100755 database/seeders/PaddleCatalogSeeder.php create mode 100755 deploy.php create mode 100755 docs/PADDLE_SUBSCRIPTIONS.md create mode 100755 docs/PORTAL_LAUNCH_FRONTEND.md create mode 100755 docs/rsync-studio-paddle-ids.env create mode 100755 package-lock.json create mode 100755 package.json create mode 100755 phpunit.xml create mode 100755 public/.htaccess create mode 100755 public/browserconfig.xml create mode 100755 public/favicon.ico create mode 100755 public/icons/android-chrome-192x192.png create mode 100755 public/icons/android-chrome-512x512.png create mode 100755 public/icons/apple-touch-icon.png create mode 100755 public/icons/favicon-16x16.png create mode 100755 public/icons/favicon-32x32.png create mode 100755 public/icons/favicon-48x48.png create mode 100755 public/icons/mstile-150x150.png create mode 100644 public/icons/og-sonardesk.png create mode 100755 public/icons/safari-pinned-tab.svg create mode 100644 public/icons/sonardesk-icon-128.png create mode 100644 public/icons/sonardesk-icon-64.png create mode 100755 public/index.php create mode 100755 public/robots.txt create mode 100755 public/site.webmanifest create mode 100755 resources/css/app.css create mode 100755 resources/js/app.js create mode 100644 resources/views/admin/cms/form.blade.php create mode 100644 resources/views/admin/cms/index.blade.php create mode 100755 resources/views/admin/index.blade.php create mode 100755 resources/views/admin/license.blade.php create mode 100755 resources/views/admin/licenses.blade.php create mode 100755 resources/views/admin/support/index.blade.php create mode 100755 resources/views/admin/support/show.blade.php create mode 100755 resources/views/auth/forgot-password.blade.php create mode 100755 resources/views/auth/login.blade.php create mode 100755 resources/views/auth/register.blade.php create mode 100755 resources/views/auth/reset-password.blade.php create mode 100755 resources/views/auth/verify-email.blade.php create mode 100755 resources/views/checkout/buy.blade.php create mode 100644 resources/views/cms/show.blade.php create mode 100755 resources/views/layouts/app.blade.php create mode 100755 resources/views/legal/cookies.blade.php create mode 100755 resources/views/legal/privacy.blade.php create mode 100755 resources/views/legal/terms.blade.php create mode 100755 resources/views/portal/index.blade.php create mode 100755 resources/views/portal/show.blade.php create mode 100755 resources/views/portal/welcome.blade.php create mode 100755 resources/views/support.blade.php create mode 100755 resources/views/welcome.blade.php create mode 100755 routes/api.php create mode 100755 routes/console.php create mode 100755 routes/web.php create mode 100755 scripts/create-sonardesk-catalog.sh create mode 100755 scripts/install-overlay.sh create mode 100755 storage/app/.gitignore create mode 100755 storage/app/private/.gitignore create mode 100755 storage/app/public/.gitignore create mode 100755 storage/framework/.gitignore create mode 100755 storage/framework/cache/.gitignore create mode 100755 storage/framework/cache/data/.gitignore create mode 100755 storage/framework/sessions/.gitignore create mode 100755 storage/framework/testing/.gitignore create mode 100755 storage/framework/views/.gitignore create mode 100755 storage/logs/.gitignore create mode 100755 tests/Feature/CheckoutPageTest.php create mode 100755 tests/Feature/LicenseActivationTest.php create mode 100755 tests/Feature/PaddleSubscriptionProvisioningTest.php create mode 100755 tests/Feature/PortalSubscriptionManagementTest.php create mode 100755 vite.config.js diff --git a/.editorconfig b/.editorconfig new file mode 100755 index 0000000..6df8428 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,18 @@ +root = true + +[*] +charset = utf-8 +end_of_line = lf +indent_size = 4 +indent_style = space +insert_final_newline = true +trim_trailing_whitespace = true + +[*.md] +trim_trailing_whitespace = false + +[*.{yml,yaml}] +indent_size = 2 + +[{compose,docker-compose}.{yml,yaml}] +indent_size = 4 diff --git a/.env.example b/.env.example new file mode 100755 index 0000000..1204def --- /dev/null +++ b/.env.example @@ -0,0 +1,87 @@ +APP_NAME=Laravel +APP_ENV=local +APP_KEY= +APP_DEBUG=true +APP_URL=http://localhost:8000 + +APP_LOCALE=en +APP_FALLBACK_LOCALE=en +APP_FAKER_LOCALE=en_US + +APP_MAINTENANCE_DRIVER=file +# APP_MAINTENANCE_STORE=database + +# PHP_CLI_SERVER_WORKERS=4 + +BCRYPT_ROUNDS=12 + +LOG_CHANNEL=stack +LOG_STACK=single +LOG_DEPRECATIONS_CHANNEL=null +LOG_LEVEL=debug + +DB_CONNECTION=sqlite +# DB_HOST=127.0.0.1 +# DB_PORT=3306 +# DB_DATABASE=laravel +# DB_USERNAME=root +# DB_PASSWORD= + +SESSION_DRIVER=database +SESSION_LIFETIME=120 +SESSION_ENCRYPT=false +SESSION_PATH=/ +SESSION_DOMAIN=null + +BROADCAST_CONNECTION=log +FILESYSTEM_DISK=local +QUEUE_CONNECTION=database + +CACHE_STORE=database +# CACHE_PREFIX= + +MEMCACHED_HOST=127.0.0.1 + +REDIS_CLIENT=phpredis +REDIS_HOST=127.0.0.1 +REDIS_PASSWORD=null +REDIS_PORT=6379 + +MAIL_MAILER=log +MAIL_SCHEME=null +MAIL_HOST=127.0.0.1 +MAIL_PORT=2525 +MAIL_USERNAME=null +MAIL_PASSWORD=null +MAIL_FROM_ADDRESS="hello@example.com" +MAIL_FROM_NAME="${APP_NAME}" + +AWS_ACCESS_KEY_ID= +AWS_SECRET_ACCESS_KEY= +AWS_DEFAULT_REGION=us-east-1 +AWS_BUCKET= +AWS_USE_PATH_STYLE_ENDPOINT=false + +VITE_APP_NAME="${APP_NAME}" + +# SonarDesk commercial/licensing +SONARDESK_LICENSE_PRIVATE_KEY_PATH= +SONARDESK_LICENSE_PUBLIC_KEY= +SONARDESK_DEFAULT_EDITION=Professional +SONARDESK_DEFAULT_MAX_MAJOR_VERSION=1 +SONARDESK_PURCHASE_URL= +SONARDESK_PORTAL_URL= +SONARDESK_SUPPORT_URL= +PADDLE_API_KEY= +PADDLE_API_URL=https://sandbox-api.paddle.com +PADDLE_CLIENT_SIDE_TOKEN= +PADDLE_ENVIRONMENT=sandbox +PADDLE_WEBHOOK_SECRET= +PADDLE_WEBHOOK_TOLERANCE=300 +PADDLE_PERSONAL_PRODUCT_ID= +PADDLE_PERSONAL_MONTHLY_PRICE_ID= +PADDLE_PERSONAL_ANNUAL_PRICE_ID= +PADDLE_PROFESSIONAL_PRODUCT_ID= +PADDLE_PROFESSIONAL_MONTHLY_PRICE_ID= +PADDLE_PROFESSIONAL_ANNUAL_PRICE_ID= +LEMON_SQUEEZY_WEBHOOK_SECRET= diff --git a/.gitattributes b/.gitattributes new file mode 100755 index 0000000..fcb21d3 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,11 @@ +* text=auto eol=lf + +*.blade.php diff=html +*.css diff=css +*.html diff=html +*.md diff=markdown +*.php diff=php + +/.github export-ignore +CHANGELOG.md export-ignore +.styleci.yml export-ignore diff --git a/.gitignore b/.gitignore new file mode 100755 index 0000000..7be55e2 --- /dev/null +++ b/.gitignore @@ -0,0 +1,27 @@ +*.log +.DS_Store +.env +.env.backup +.env.production +.phpactor.json +.phpunit.result.cache +/.codex +/.cursor/ +/.idea +/.nova +/.phpunit.cache +/.vscode +/.zed +/auth.json +/node_modules +/public/build +/public/fonts-manifest.dev.json +/public/hot +/public/storage +/storage/*.key +/storage/pail +/vendor +_ide_helper.php +Homestead.json +Homestead.yaml +Thumbs.db diff --git a/.npmrc b/.npmrc new file mode 100755 index 0000000..495a6af --- /dev/null +++ b/.npmrc @@ -0,0 +1,2 @@ +ignore-scripts=true +audit=true diff --git a/AGENTS.md b/AGENTS.md new file mode 100755 index 0000000..b80472f --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,47 @@ + +# Laravel Application + +This repository contains a Laravel application. Complete the following setup before working on the user's request. + +## Prerequisites + +Verify that PHP and Composer are available: + +```sh +php -v +composer -V +``` + +If either command is unavailable, detect the user's operating system and install the prerequisites with the appropriate command: + +macOS: + +```sh +/bin/bash -c "$(curl -fsSL https://php.new/install/mac/8.5)" +``` + +Windows PowerShell: + +```powershell +Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://php.new/install/windows/8.5')) +``` + +Linux: + +```sh +/bin/bash -c "$(curl -fsSL https://php.new/install/linux/8.5)" +``` + +After installation, ask the user to restart their terminal. If the agent needs the restarted shell to continue, ask the user to reopen their terminal and rerun their original prompt. + +## Agent Setup + +Install Laravel Boost from the application root before making application changes: + +```sh +composer require laravel/boost --dev +php artisan boost:install +``` + +Boost replaces these bootstrap instructions with guidelines tailored to the application. After installation, read `AGENTS.md` again and continue with the user's original request using the generated guidelines. + diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100755 index 0000000..b80472f --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,47 @@ + +# Laravel Application + +This repository contains a Laravel application. Complete the following setup before working on the user's request. + +## Prerequisites + +Verify that PHP and Composer are available: + +```sh +php -v +composer -V +``` + +If either command is unavailable, detect the user's operating system and install the prerequisites with the appropriate command: + +macOS: + +```sh +/bin/bash -c "$(curl -fsSL https://php.new/install/mac/8.5)" +``` + +Windows PowerShell: + +```powershell +Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://php.new/install/windows/8.5')) +``` + +Linux: + +```sh +/bin/bash -c "$(curl -fsSL https://php.new/install/linux/8.5)" +``` + +After installation, ask the user to restart their terminal. If the agent needs the restarted shell to continue, ask the user to reopen their terminal and rerun their original prompt. + +## Agent Setup + +Install Laravel Boost from the application root before making application changes: + +```sh +composer require laravel/boost --dev +php artisan boost:install +``` + +Boost replaces these bootstrap instructions with guidelines tailored to the application. After installation, read `AGENTS.md` again and continue with the user's original request using the generated guidelines. + diff --git a/README.md b/README.md new file mode 100755 index 0000000..cfcf390 --- /dev/null +++ b/README.md @@ -0,0 +1,17 @@ +# SonarDesk Licensing & CMS Server + +Production Laravel backend for SonarDesk. + +## Included + +- SonarDesk licence products, signed licence issuance, activation and revocation +- Customer portal with licence and activation management +- Paddle checkout/webhook provisioning and Lemon Squeezy webhook support +- Support ticket system and admin inbox +- Admin dashboard +- Lightweight CMS for published website pages (`/admin/cms`) +- SonarDesk-branded public website, legal pages, icons and metadata + +## Setup + +Copy `.env.example` to `.env`, configure the database, mail, payment provider and SonarDesk signing keys, then run migrations. Keep the private signing key outside the public web root and out of source control. diff --git a/app/Console/Commands/SonarDeskAdminCreate.php b/app/Console/Commands/SonarDeskAdminCreate.php new file mode 100755 index 0000000..2ffb683 --- /dev/null +++ b/app/Console/Commands/SonarDeskAdminCreate.php @@ -0,0 +1,36 @@ +argument('email'))); + $password = Str::password(24, true, true, false, false); + $u = User::firstOrNew(['email' => $email]); + $u->name = $this->option('name'); + $u->is_admin = true; + $u->email_verified_at = now(); + if (! $u->exists) { + $u->password = Hash::make($password); + } $u->save(); + $this->info("Administrator ready: {$email}"); + if (! $u->wasRecentlyCreated) { + $this->line('Existing password retained.'); + } else { + $this->warn("Temporary password (shown once): {$password}"); + } + +return self::SUCCESS; + } +} diff --git a/app/Console/Commands/SonarDeskLicenseIssue.php b/app/Console/Commands/SonarDeskLicenseIssue.php new file mode 100755 index 0000000..962b540 --- /dev/null +++ b/app/Console/Commands/SonarDeskLicenseIssue.php @@ -0,0 +1,29 @@ +argument('product'))->firstOrFail(); + [$l,$key] = $issuer->issue($p, $this->option('name') ?: null, $this->option('email') ?: null); + if (! $key) { + $this->warn('Licence already existed; plaintext key is intentionally not recoverable.'); + + return self::FAILURE; + } $this->line('Licence ID: '.$l->id); + $this->line('Licence key: '.$key); + $this->warn('This is the only time the plaintext key is shown.'); + + return self::SUCCESS; + } +} diff --git a/app/Console/Commands/SonarDeskLicenseRevoke.php b/app/Console/Commands/SonarDeskLicenseRevoke.php new file mode 100755 index 0000000..e6fdecd --- /dev/null +++ b/app/Console/Commands/SonarDeskLicenseRevoke.php @@ -0,0 +1,22 @@ +argument('id')); + $l->update(['revoked_at' => now(), 'revoke_reason' => $this->option('reason')]); + $this->info('Licence revoked.'); + + return self::SUCCESS; + } +} diff --git a/app/Console/Commands/SonarDeskProductCreate.php b/app/Console/Commands/SonarDeskProductCreate.php new file mode 100755 index 0000000..9edce35 --- /dev/null +++ b/app/Console/Commands/SonarDeskProductCreate.php @@ -0,0 +1,21 @@ + $this->argument('code')], ['name' => $this->option('name'), 'edition' => $this->option('edition'), 'activation_limit' => (int) $this->option('activations'), 'max_major_version' => $this->option('max-major') !== '' ? (int) $this->option('max-major') : null, 'payment_provider' => $this->option('provider') ?: null, 'external_product_id' => $this->option('product-id') ?: null, 'external_price_id' => $this->option('price-id') ?: null, 'active' => true]); + $this->info("Product {$p->code} ready."); + + return self::SUCCESS; + } +} diff --git a/app/Http/Controllers/Admin/AdminController.php b/app/Http/Controllers/Admin/AdminController.php new file mode 100755 index 0000000..6c2bb25 --- /dev/null +++ b/app/Http/Controllers/Admin/AdminController.php @@ -0,0 +1,49 @@ + License::count(), 'activeCount' => License::whereNull('revoked_at')->count(), 'activationCount' => LicenseActivation::whereNull('deactivated_at')->count(), 'userCount' => User::count()]); + } + + public function licenses(Request $r) + { + $q = License::with('product')->latest(); + if ($s = trim((string) $r->query('q'))) { + $q->where(fn ($x) => $x->where('customer_email', 'like', "%{$s}%")->orWhere('customer_name', 'like', "%{$s}%")->orWhere('license_key_last4', 'like', "%{$s}%")); + } + +return view('admin.licenses', ['licenses' => $q->paginate(50)->withQueryString()]); + } + + public function show(License $license) + { + $license->load(['product', 'activations']); + + return view('admin.license', compact('license')); + } + + public function revoke(Request $request, License $license) + { + $data = $request->validate(['reason' => ['nullable', 'string', 'max:255']]); + $license->update(['revoked_at' => now(), 'revoke_reason' => $data['reason'] ?: 'Revoked by administrator']); + + return back()->with('status', 'Licence revoked.'); + } + + public function restore(License $license) + { + $license->update(['revoked_at' => null, 'revoke_reason' => null]); + + return back()->with('status','Licence restored.'); + } +} diff --git a/app/Http/Controllers/Admin/CmsPageController.php b/app/Http/Controllers/Admin/CmsPageController.php new file mode 100644 index 0000000..b0d53ab --- /dev/null +++ b/app/Http/Controllers/Admin/CmsPageController.php @@ -0,0 +1,35 @@ + CmsPage::latest()->paginate(25)]); } + public function create() { return view('admin.cms.form', ['page' => new CmsPage()]); } + public function store(Request $request) { $page = CmsPage::create($this->validated($request)); return redirect()->route('admin.cms.edit', $page)->with('status', 'Page created.'); } + public function edit(CmsPage $page) { return view('admin.cms.form', compact('page')); } + public function update(Request $request, CmsPage $page) { $page->update($this->validated($request, $page)); return back()->with('status', 'Page updated.'); } + public function destroy(CmsPage $page) { $page->delete(); return redirect()->route('admin.cms.index')->with('status', 'Page deleted.'); } + + private function validated(Request $request, ?CmsPage $page = null): array + { + $request->merge(['slug' => Str::slug($request->input('slug') ?: $request->input('title', ''))]); + $data = $request->validate([ + 'title' => ['required','string','max:160'], + 'slug' => ['required','string','max:180', Rule::unique('cms_pages','slug')->ignore($page?->id)], + 'excerpt' => ['nullable','string','max:1000'], + 'body' => ['required','string'], + 'meta_title' => ['nullable','string','max:160'], + 'meta_description' => ['nullable','string','max:320'], + ]); + $data['is_published'] = $request->boolean('is_published'); + $data['published_at'] = $data['is_published'] ? ($page?->published_at ?? now()) : null; + return $data; + } +} diff --git a/app/Http/Controllers/Admin/SupportTicketController.php b/app/Http/Controllers/Admin/SupportTicketController.php new file mode 100755 index 0000000..99484af --- /dev/null +++ b/app/Http/Controllers/Admin/SupportTicketController.php @@ -0,0 +1,59 @@ +with('assignee') + ->when($request->filled('status'), fn ($q) => $q->where('status', $request->string('status'))) + ->latest() + ->paginate(50) + ->withQueryString(); + + return view('admin.support.index', compact('tickets')); + } + + public function show(SupportTicket $ticket) + { + $ticket->load(['user', 'assignee']); + if (auth()->user()) { + auth()->user()->unreadNotifications()->get() + ->filter(fn ($notification) => (int) ($notification->data['support_ticket_id'] ?? 0) === $ticket->id) + ->each->markAsRead(); + } + + return view('admin.support.show', [ + 'ticket' => $ticket, + 'admins' => User::query()->where('is_admin', true)->orderBy('name')->get(['id', 'name', 'email']), + ]); + } + + public function update(Request $request, SupportTicket $ticket): RedirectResponse + { + $data = $request->validate([ + 'status' => ['required', 'in:new,open,waiting,resolved,closed'], + 'priority' => ['required', 'in:low,normal,high,urgent'], + 'assigned_to' => ['nullable', 'integer', 'exists:users,id'], + ]); + + if ($data['assigned_to'] ?? null) { + abort_unless(User::whereKey($data['assigned_to'])->where('is_admin', true)->exists(), 422); + } + + $data['resolved_at'] = in_array($data['status'], ['resolved', 'closed'], true) + ? ($ticket->resolved_at ?? now()) + : null; + $ticket->update($data); + + return back()->with('status', 'Support ticket updated.'); + } +} diff --git a/app/Http/Controllers/Api/LicenseActivationController.php b/app/Http/Controllers/Api/LicenseActivationController.php new file mode 100755 index 0000000..d4e1aba --- /dev/null +++ b/app/Http/Controllers/Api/LicenseActivationController.php @@ -0,0 +1,164 @@ +validate([ + 'licenseKey' => ['required', 'string', 'max:128'], + 'installationID' => ['required', 'uuid'], + 'appVersion' => ['required', 'string', 'max:32'], + 'platform' => ['required', 'string', 'max:32'], + ]); + + return DB::transaction(function () use ($data, $signer) { + $license = License::where('license_key_hash', LicenseKey::hash($data['licenseKey'])) + ->lockForUpdate() + ->first(); + + if (! $license) { + throw ValidationException::withMessages(['licenseKey' => 'The licence key is not valid.']); + } + + if (! $license->is_usable) { + return response()->json(['message' => 'This licence is expired or has been revoked.'], 403); + } + + $installationID = strtolower($data['installationID']); + $activation = LicenseActivation::where('license_id', $license->id) + ->where('installation_id', $installationID) + ->first(); + + if ($activation && $activation->deactivated_at === null) { + $activation->update([ + 'last_seen_at' => now(), + 'platform' => $data['platform'], + 'app_version' => $data['appVersion'], + ]); + } else { + $activeCount = LicenseActivation::where('license_id', $license->id) + ->whereNull('deactivated_at') + ->count(); + + if ($activeCount >= $license->activation_limit) { + return response()->json(['message' => 'This licence has reached its activation limit. Deactivate another Mac first.'], 409); + } + + if ($activation) { + $activation->update([ + 'deactivated_at' => null, + 'activated_at' => now(), + 'last_seen_at' => now(), + 'platform' => $data['platform'], + 'app_version' => $data['appVersion'], + ]); + } else { + LicenseActivation::create([ + 'license_id' => $license->id, + 'installation_id' => $installationID, + 'platform' => $data['platform'], + 'app_version' => $data['appVersion'], + 'activated_at' => now(), + 'last_seen_at' => now(), + ]); + } + } + + return response()->json([ + 'licenseToken' => $signer->sign($license, $data['installationID']), + ]); + }); + } + + public function validateInstallation( + Request $request, + LicenseTokenVerifier $verifier, + LicenseSigner $signer, + ): JsonResponse { + $data = $request->validate([ + 'licenseToken' => ['required', 'string', 'max:8192'], + 'installationID' => ['required', 'uuid'], + 'appVersion' => ['required', 'string', 'max:32'], + 'platform' => ['required', 'string', 'max:32'], + ]); + + try { + $payload = $verifier->verify($data['licenseToken']); + } catch (\Throwable) { + return response()->json(['message' => 'The licence token is invalid.'], 400); + } + + if (strcasecmp((string) ($payload['installationID'] ?? ''), $data['installationID']) !== 0) { + return response()->json(['message' => 'The installation does not match this licence token.'], 400); + } + + return DB::transaction(function () use ($data, $payload, $signer) { + $license = License::whereKey((string) ($payload['licenseID'] ?? '')) + ->lockForUpdate() + ->first(); + + if (! $license || ! $license->is_usable) { + return response()->json(['message' => 'This licence is expired or has been revoked.'], 403); + } + + $activation = LicenseActivation::where('license_id', $license->id) + ->where('installation_id', strtolower($data['installationID'])) + ->first(); + + if (! $activation || $activation->deactivated_at !== null) { + return response()->json(['message' => 'This Mac has been deactivated from the licence portal.'], 403); + } + + $activation->update([ + 'last_seen_at' => now(), + 'platform' => $data['platform'], + 'app_version' => $data['appVersion'], + ]); + + return response()->json([ + 'active' => true, + // Refreshing the signed token also applies subscription edition/expiry changes + // without requiring the user to reactivate manually. + 'licenseToken' => $signer->sign($license, $data['installationID']), + ]); + }); + } + + public function deactivate(Request $request, LicenseTokenVerifier $verifier): JsonResponse + { + $data = $request->validate([ + 'licenseToken' => ['required', 'string', 'max:8192'], + 'installationID' => ['required', 'uuid'], + ]); + + try { + $payload = $verifier->verify($data['licenseToken']); + } catch (\Throwable) { + return response()->json(['message' => 'The licence token is invalid.'], 400); + } + + if (strcasecmp((string) ($payload['installationID'] ?? ''), $data['installationID']) !== 0) { + return response()->json(['message' => 'The installation does not match this licence token.'], 400); + } + + LicenseActivation::where('license_id', (string) ($payload['licenseID'] ?? '')) + ->where('installation_id', strtolower($data['installationID'])) + ->whereNull('deactivated_at') + ->update(['deactivated_at' => now(), 'last_seen_at' => now()]); + + return response()->json((object) []); + } +} diff --git a/app/Http/Controllers/Api/PaymentWebhookController.php b/app/Http/Controllers/Api/PaymentWebhookController.php new file mode 100755 index 0000000..e4c8036 --- /dev/null +++ b/app/Http/Controllers/Api/PaymentWebhookController.php @@ -0,0 +1,78 @@ +getContent(); + $verifier = match ($provider) { + 'paddle' => app(PaddleWebhookVerifier::class),'lemon-squeezy' => app(LemonSqueezyWebhookVerifier::class),default => null + }; + if (! $verifier) { + return response()->json(['message' => 'Unknown webhook provider.'], 404); + } + try { + $verifier->verify($request, $raw); + } catch (\Throwable $e) { + report($e); + + return response()->json(['message' => 'Invalid webhook signature.'], 400); + } + try { + $payload = json_decode($raw, true, flags: JSON_THROW_ON_ERROR); + } catch (\Throwable) { + return response()->json(['message' => 'Invalid JSON.'], 400); + } + $externalID = (string) ($provider === 'paddle' ? ($payload['event_id'] ?? '') : ($payload['meta']['event_name'] ?? '').':'.($payload['data']['id'] ?? '')); + $eventType = (string) ($provider === 'paddle' ? ($payload['event_type'] ?? 'unknown') : ($payload['meta']['event_name'] ?? 'unknown')); + if ($externalID === '') { + return response()->json(['message' => 'Webhook event has no stable identifier.'], 400); + } + + try { + DB::transaction(function () use ($provider, $externalID, $eventType, $payload, $raw, $provisioner) { + $event = LicenseWebhookEvent::firstOrCreate(['provider' => $provider, 'external_event_id' => $externalID], ['event_type' => $eventType, 'payload_sha256' => hash('sha256', $raw), 'payload' => $payload]); + if ($event->processed_at) { + return; + } + if (! hash_equals($event->payload_sha256, hash('sha256', $raw))) { + throw new \RuntimeException('Webhook ID was reused with a different payload.'); + } + try { + $provisioner->provision($provider, $payload); + $event->update(['processed_at' => now(), 'processing_error' => null]); + } catch (\Throwable $e) { + $event->update(['processing_error' => mb_substr($e->getMessage(), 0, 4000)]); + throw $e; + } + }); + } catch (\Throwable $e) { + report($e); + + return response()->json(['message' => 'Webhook could not be processed.'], 500); + } + + // Delivery is intentionally outside the webhook transaction. A temporary mail + // outage must not roll back an otherwise valid Paddle event. Pending outbox + // rows remain available for portal resend or a later webhook delivery attempt. + try { + $delivery->deliverPending(10); + } catch (\Throwable $e) { + report($e); + } + + return response()->json(['ok' => true]); + } +} diff --git a/app/Http/Controllers/Auth/AuthenticatedSessionController.php b/app/Http/Controllers/Auth/AuthenticatedSessionController.php new file mode 100755 index 0000000..d63878e --- /dev/null +++ b/app/Http/Controllers/Auth/AuthenticatedSessionController.php @@ -0,0 +1,35 @@ +validate(['email' => ['required', 'email'], 'password' => ['required', 'string']]); + if (! Auth::attempt(['email' => strtolower($credentials['email']), 'password' => $credentials['password']], $request->boolean('remember'))) { + return back()->withErrors(['email' => 'The supplied credentials are invalid.'])->onlyInput('email'); + } + $request->session()->regenerate(); + + return redirect()->intended(route('portal.index')); + } + + public function destroy(Request $request) + { + Auth::logout(); + $request->session()->invalidate(); + $request->session()->regenerateToken(); + + return redirect()->route('login'); + } +} diff --git a/app/Http/Controllers/Auth/EmailVerificationController.php b/app/Http/Controllers/Auth/EmailVerificationController.php new file mode 100755 index 0000000..2f38de1 --- /dev/null +++ b/app/Http/Controllers/Auth/EmailVerificationController.php @@ -0,0 +1,31 @@ +fulfill(); + + return redirect()->route('portal.index')->with('status', 'Email verified.'); + } + + public function resend(Request $request) + { + if (! $request->user()->hasVerifiedEmail()) { + $request->user()->sendEmailVerificationNotification(); + } + +return back()->with('status', 'Verification link sent.'); + } +} diff --git a/app/Http/Controllers/Auth/PasswordController.php b/app/Http/Controllers/Auth/PasswordController.php new file mode 100755 index 0000000..4eb6694 --- /dev/null +++ b/app/Http/Controllers/Auth/PasswordController.php @@ -0,0 +1,43 @@ +validate(['email' => ['required', 'email']]); + $status = Password::sendResetLink(['email' => strtolower($request->email)]); + + return $status === Password::RESET_LINK_SENT ? back()->with('status', __($status)) : back()->withErrors(['email' => __($status)]); + } + + public function resetForm(Request $request, string $token) + { + return view('auth.reset-password', ['token' => $token, 'email' => $request->query('email')]); + } + + public function reset(Request $request) + { + $data = $request->validate(['token' => ['required'], 'email' => ['required', 'email'], 'password' => ['required', 'confirmed', PasswordRule::min(12)->letters()->mixedCase()->numbers()]]); + $status = Password::reset($data, function (User $user, string $password) { + $user->forceFill(['password' => $password, 'remember_token' => Str::random(60)])->save(); + event(new PasswordReset($user)); + }); + + return $status === Password::PASSWORD_RESET ? redirect()->route('login')->with('status', __($status)) : back()->withErrors(['email' => __($status)]); + } +} diff --git a/app/Http/Controllers/Auth/RegisteredUserController.php b/app/Http/Controllers/Auth/RegisteredUserController.php new file mode 100755 index 0000000..3b5c073 --- /dev/null +++ b/app/Http/Controllers/Auth/RegisteredUserController.php @@ -0,0 +1,29 @@ +validate(['name' => ['required', 'string', 'max:120'], 'email' => ['required', 'email', 'max:255', 'unique:users,email'], 'password' => ['required', 'confirmed', Password::min(12)->letters()->mixedCase()->numbers()]]); + $user = User::create(['name' => $data['name'], 'email' => strtolower($data['email']), 'password' => $data['password']]); + event(new Registered($user)); + Auth::login($user); + $request->session()->regenerate(); + + return redirect()->route('verification.notice'); + } +} diff --git a/app/Http/Controllers/CheckoutController.php b/app/Http/Controllers/CheckoutController.php new file mode 100755 index 0000000..2aeb9d6 --- /dev/null +++ b/app/Http/Controllers/CheckoutController.php @@ -0,0 +1,38 @@ + ['name' => 'Personal', 'billing' => 'Monthly', 'display_price' => '£1.99 / month', 'price_id' => $paddle['personal_monthly_price_id'], 'activation_limit' => 1], + 'personal-annual' => ['name' => 'Personal', 'billing' => 'Annual', 'display_price' => '£14.99 / year', 'price_id' => $paddle['personal_annual_price_id'], 'activation_limit' => 1], + 'professional-monthly' => ['name' => 'Professional', 'billing' => 'Monthly', 'display_price' => '£3.99 / month', 'price_id' => $paddle['professional_monthly_price_id'], 'activation_limit' => 3], + 'professional-annual' => ['name' => 'Professional', 'billing' => 'Annual', 'display_price' => '£29.99 / year', 'price_id' => $paddle['professional_annual_price_id'], 'activation_limit' => 3], + ]; + + foreach ($plans as $plan) { + if (trim((string) $plan['price_id']) === '') { + throw new RuntimeException('One or more Paddle price IDs are not configured.'); + } + } + + return view('checkout.buy', [ + 'plans' => $plans, + 'paddleToken' => $token, + 'paddleEnvironment' => (string) ($paddle['environment'] ?? 'sandbox'), + ]); + } +} diff --git a/app/Http/Controllers/CmsPageController.php b/app/Http/Controllers/CmsPageController.php new file mode 100644 index 0000000..cb86e52 --- /dev/null +++ b/app/Http/Controllers/CmsPageController.php @@ -0,0 +1,14 @@ +where('is_published', true)->where(fn ($q) => $q->whereNull('published_at')->orWhere('published_at', '<=', now()))->firstOrFail(); + return view('cms.show', compact('page')); + } +} diff --git a/app/Http/Controllers/Controller.php b/app/Http/Controllers/Controller.php new file mode 100755 index 0000000..ae7ff85 --- /dev/null +++ b/app/Http/Controllers/Controller.php @@ -0,0 +1,8 @@ +whereRaw('lower(customer_email) = ?', [strtolower($request->user()->email)]); + } + + public function index(Request $request) + { + $licenses = $this->owned($request)->latest()->get(); + $hasProfessional = $licenses->contains(fn (License $license) => $license->is_usable && $license->edition === 'Professional'); + + return view('portal.index', compact('licenses', 'hasProfessional')); + } + + public function show(Request $request, License $license) + { + $this->authorise($request, $license); + $license->load(['product', 'activations']); + + return view('portal.show', compact('license')); + } + + public function upgrade(Request $request, License $license): RedirectResponse + { + $this->authorise($request, $license); + abort_unless($license->payment_provider === 'paddle' && $license->external_subscription_id, 422); + abort_unless($license->edition === 'Personal' && $license->is_usable, 422); + + $targetPriceID = $this->professionalPriceFor($license); + $targetProduct = LicenseProduct::query() + ->where('payment_provider', 'paddle') + ->where('external_price_id', $targetPriceID) + ->where('active', true) + ->firstOrFail(); + + try { + $subscription = $this->paddle->updateSubscriptionPrice($license->external_subscription_id, $targetPriceID); + } catch (RuntimeException $exception) { + return back()->withErrors(['licence' => $exception->getMessage()]); + } + + // Apply the entitlement immediately. Paddle webhooks remain authoritative and + // will reconcile subscription status/current-period details afterwards. + $license->update([ + 'license_product_id' => $targetProduct->id, + 'edition' => $targetProduct->edition, + 'activation_limit' => $targetProduct->activation_limit, + 'max_major_version' => $targetProduct->max_major_version, + 'external_price_id' => $targetPriceID, + 'subscription_status' => (string) ($subscription['status'] ?? $license->subscription_status), + 'revoked_at' => null, + 'revoke_reason' => null, + ]); + + return redirect()->route('portal.show', $license)->with('status', 'Upgraded to Professional. Your existing Paddle subscription was changed; no second subscription was created.'); + } + + public function cancel(Request $request, License $license): RedirectResponse + { + $this->authorise($request, $license); + abort_unless($license->payment_provider === 'paddle' && $license->external_subscription_id, 422); + abort_unless(! in_array($license->subscription_status, ['canceled'], true), 422); + + try { + $this->paddle->cancelSubscriptionImmediately($license->external_subscription_id); + } catch (RuntimeException $exception) { + return back()->withErrors(['licence' => $exception->getMessage()]); + } + + $license->update([ + 'subscription_status' => 'canceled', + 'expires_at' => now(), + 'revoked_at' => now(), + 'revoke_reason' => 'Subscription canceled from licence portal', + 'cancel_scheduled_at' => null, + ]); + + return redirect()->route('portal.index')->with('status', 'Subscription canceled in Paddle and the licence is no longer active.'); + } + + public function deactivate(Request $request, License $license, int $activation) + { + $this->authorise($request, $license); + $item = $license->activations()->whereKey($activation)->firstOrFail(); + if (! $item->deactivated_at) { + $item->update(['deactivated_at' => now()]); + } + + return back()->with('status', 'Mac deactivated. SonarDesk will detect this through the licensing API.'); + } + + public function resend(Request $request, License $license) + { + $this->authorise($request, $license); + $out = LicenseDeliveryOutbox::where('license_id', $license->id)->first(); + if (! $out) { + return back()->withErrors(['licence' => 'This licence was issued manually and its full key is not recoverable. Contact support.']); + } + + $plain = Crypt::decryptString($out->encrypted_license_key); + Mail::raw("Your SonarDesk licence key is:\n\n{$plain}\n\nKeep this key private.", fn ($m) => $m->to($request->user()->email)->subject('Your SonarDesk licence key')); + $out->update(['delivered_at' => now()]); + + return back()->with('status', 'Licence key sent to your verified email address.'); + } + + private function authorise(Request $request, License $license): void + { + abort_unless(strtolower((string) $license->customer_email) === strtolower($request->user()->email), 404); + } + + private function professionalPriceFor(License $license): string + { + $paddle = config('sonardesk.paddle'); + $current = (string) $license->external_price_id; + + if ($current === (string) ($paddle['personal_annual_price_id'] ?? '')) { + return (string) ($paddle['professional_annual_price_id'] ?? ''); + } + + return (string) ($paddle['professional_monthly_price_id'] ?? ''); + } +} diff --git a/app/Http/Controllers/Support/SupportController.php b/app/Http/Controllers/Support/SupportController.php new file mode 100755 index 0000000..55d6a68 --- /dev/null +++ b/app/Http/Controllers/Support/SupportController.php @@ -0,0 +1,92 @@ + [ + 'technical' => 'Technical support', + 'licensing' => 'Licence & activation', + 'billing' => 'Billing & subscription', + 'feature' => 'Feature request', + 'privacy' => 'Privacy / data request', + 'general' => 'General enquiry', + ], + ]); + } + + public function store(Request $request): RedirectResponse + { + // Honeypot: bots tend to fill hidden fields. Return success without retaining spam. + if (filled($request->input('company_website'))) { + return back()->with('status', 'Your support request has been received.'); + } + + $data = $request->validate([ + 'name' => ['required', 'string', 'max:120'], + 'email' => ['required', 'email:rfc', 'max:254'], + 'category' => ['required', 'in:technical,licensing,billing,feature,privacy,general'], + 'subject' => ['required', 'string', 'max:180'], + 'message' => ['required', 'string', 'min:10', 'max:10000'], + 'privacy_notice' => ['accepted'], + ]); + + $ticket = SupportTicket::create([ + 'user_id' => $request->user()?->id, + 'reference' => $this->reference(), + 'name' => $data['name'], + 'email' => strtolower($data['email']), + 'category' => $data['category'], + 'subject' => $data['subject'], + 'message' => $data['message'], + 'privacy_notice_accepted_at' => now(), + ]); + + $this->notifyTeam($ticket); + + Mail::raw( + "We received your SonarDesk support request.\n\nReference: {$ticket->reference}\nSubject: {$ticket->subject}\n\nWe will reply to this email address. Please keep the reference in any follow-up.", + fn ($mail) => $mail->to($ticket->email)->subject("SonarDesk support request {$ticket->reference}") + ); + + return redirect()->route('support')->with('status', "Support request {$ticket->reference} received. A confirmation has been emailed to you."); + } + + private function notifyTeam(SupportTicket $ticket): void + { + if (config('sonardesk.support.notify_admin_users', true)) { + User::query()->where('is_admin', true)->get()->each->notify(new NewSupportTicket($ticket)); + } + + $emails = collect(config('sonardesk.support.alert_emails', [])) + ->filter(fn ($email) => filter_var($email, FILTER_VALIDATE_EMAIL)) + ->unique() + ->values(); + + if ($emails->isNotEmpty()) { + Notification::route('mail', $emails->all())->notify(new NewSupportTicket($ticket)); + } + } + + private function reference(): string + { + do { + $reference = 'RS-'.now()->format('ymd').'-'.Str::upper(Str::random(6)); + } while (SupportTicket::where('reference', $reference)->exists()); + + return $reference; + } +} diff --git a/app/Http/Middleware/AdminOnly.php b/app/Http/Middleware/AdminOnly.php new file mode 100755 index 0000000..e7cd3a6 --- /dev/null +++ b/app/Http/Middleware/AdminOnly.php @@ -0,0 +1,17 @@ +user()?->is_admin === true, 403); + + return $next($request); + } +} diff --git a/app/Models/CmsPage.php b/app/Models/CmsPage.php new file mode 100644 index 0000000..180a18e --- /dev/null +++ b/app/Models/CmsPage.php @@ -0,0 +1,15 @@ + 'boolean', 'published_at' => 'datetime']; + } +} diff --git a/app/Models/License.php b/app/Models/License.php new file mode 100755 index 0000000..c3dcc56 --- /dev/null +++ b/app/Models/License.php @@ -0,0 +1,36 @@ + 'datetime', 'revoked_at' => 'datetime', 'activation_limit' => 'integer', 'max_major_version' => 'integer', 'current_period_ends_at' => 'datetime', 'cancel_scheduled_at' => 'datetime']; + + public function product(): BelongsTo + { + return $this->belongsTo(LicenseProduct::class, 'license_product_id'); + } + + public function activations(): HasMany + { + return $this->hasMany(LicenseActivation::class); + } + + public function getIsUsableAttribute(): bool + { + return $this->revoked_at === null && ($this->expires_at === null || $this->expires_at->isFuture()); + } +} diff --git a/app/Models/LicenseActivation.php b/app/Models/LicenseActivation.php new file mode 100755 index 0000000..8562d4b --- /dev/null +++ b/app/Models/LicenseActivation.php @@ -0,0 +1,14 @@ + 'datetime', 'last_seen_at' => 'datetime', 'deactivated_at' => 'datetime']; +} diff --git a/app/Models/LicenseDeliveryOutbox.php b/app/Models/LicenseDeliveryOutbox.php new file mode 100755 index 0000000..e0af182 --- /dev/null +++ b/app/Models/LicenseDeliveryOutbox.php @@ -0,0 +1,14 @@ + 'datetime']; +} diff --git a/app/Models/LicenseProduct.php b/app/Models/LicenseProduct.php new file mode 100755 index 0000000..85ac9f5 --- /dev/null +++ b/app/Models/LicenseProduct.php @@ -0,0 +1,12 @@ + 'boolean', 'activation_limit' => 'integer', 'max_major_version' => 'integer']; +} diff --git a/app/Models/LicenseWebhookEvent.php b/app/Models/LicenseWebhookEvent.php new file mode 100755 index 0000000..38fea30 --- /dev/null +++ b/app/Models/LicenseWebhookEvent.php @@ -0,0 +1,12 @@ + 'array', 'processed_at' => 'datetime']; +} diff --git a/app/Models/SupportTicket.php b/app/Models/SupportTicket.php new file mode 100755 index 0000000..ccbd655 --- /dev/null +++ b/app/Models/SupportTicket.php @@ -0,0 +1,46 @@ + 'datetime', + 'resolved_at' => 'datetime', + ]; + } + + public function user(): BelongsTo + { + return $this->belongsTo(User::class); + } + + public function assignee(): BelongsTo + { + return $this->belongsTo(User::class, 'assigned_to'); + } + + public function prunable(): Builder + { + $days = max(30, (int) config('sonardesk.privacy.support_retention_days', 730)); + + return static::query() + ->whereNotNull('resolved_at') + ->where('resolved_at', '<=', now()->subDays($days)); + } +} diff --git a/app/Models/User.php b/app/Models/User.php new file mode 100755 index 0000000..ff6872c --- /dev/null +++ b/app/Models/User.php @@ -0,0 +1,22 @@ + 'datetime', 'password' => 'hashed', 'is_admin' => 'boolean']; + } +} diff --git a/app/Notifications/NewSupportTicket.php b/app/Notifications/NewSupportTicket.php new file mode 100755 index 0000000..704c05a --- /dev/null +++ b/app/Notifications/NewSupportTicket.php @@ -0,0 +1,43 @@ +subject("New SonarDesk support request {$this->ticket->reference}") + ->greeting('New support request') + ->line("{$this->ticket->name} <{$this->ticket->email}>") + ->line("Category: {$this->ticket->category}") + ->line("Subject: {$this->ticket->subject}") + ->line($this->ticket->message) + ->action('Open support ticket', route('admin.support.show', $this->ticket)); + } + + public function toArray(object $notifiable): array + { + return [ + 'support_ticket_id' => $this->ticket->id, + 'reference' => $this->ticket->reference, + 'subject' => $this->ticket->subject, + 'email' => $this->ticket->email, + ]; + } +} diff --git a/app/Providers/SonarDeskLicensingServiceProvider.php b/app/Providers/SonarDeskLicensingServiceProvider.php new file mode 100755 index 0000000..3674573 --- /dev/null +++ b/app/Providers/SonarDeskLicensingServiceProvider.php @@ -0,0 +1,26 @@ +by($request->ip()), + Limit::perMinute(6)->by(hash('sha256', (string) $request->input('installationID'))), + ]; + }); + + RateLimiter::for('login', fn (Request $request) => Limit::perMinute(5) + ->by(strtolower((string) $request->input('email')).'|'.$request->ip())); + + RateLimiter::for('registration', fn (Request $request) => Limit::perHour(5)->by($request->ip())); + } +} diff --git a/app/Services/Licensing/LicenseDeliveryService.php b/app/Services/Licensing/LicenseDeliveryService.php new file mode 100755 index 0000000..ecfd43a --- /dev/null +++ b/app/Services/Licensing/LicenseDeliveryService.php @@ -0,0 +1,40 @@ +whereNull('delivered_at') + ->whereNotNull('recipient_email') + ->where('recipient_email', '!=', '') + ->oldest() + ->limit(max(1, min($limit, 100))) + ->get(); + + foreach ($pending as $outbox) { + $plain = Crypt::decryptString($outbox->encrypted_license_key); + $recipient = strtolower(trim((string) $outbox->recipient_email)); + if ($recipient === '') { + continue; + } + + Mail::raw( + "Thank you for choosing SonarDesk.\n\nYour licence key is:\n\n{$plain}\n\nOpen SonarDesk → Settings → Licence and enter this key to activate your Mac.\n\nKeep this key private. You can manage activations from the SonarDesk licence portal.", + fn ($message) => $message->to($recipient)->subject('Your SonarDesk licence key') + ); + + $outbox->update(['delivered_at' => now()]); + $delivered++; + } + + return $delivered; + } +} diff --git a/app/Services/Licensing/LicenseIssuer.php b/app/Services/Licensing/LicenseIssuer.php new file mode 100755 index 0000000..ec51713 --- /dev/null +++ b/app/Services/Licensing/LicenseIssuer.php @@ -0,0 +1,46 @@ +where('external_order_id', $orderID)->first(); + if ($existing) { + return [$existing, null]; + } + } + $plain = LicenseKey::generate(); + $license = License::create([ + 'license_product_id' => $product->id, + 'license_key_hash' => LicenseKey::hash($plain), + 'license_key_last4' => substr(LicenseKey::normalize($plain), -4), + 'customer_name' => $name, + 'customer_email' => $email ? strtolower(trim($email)) : null, + 'edition' => $product->edition, + 'activation_limit' => $product->activation_limit, + 'max_major_version' => $product->max_major_version, + 'payment_provider' => $provider, + 'external_order_id' => $orderID, + 'external_customer_id' => $customerID, + ]); + if ($queueDelivery) { + LicenseDeliveryOutbox::updateOrCreate( + ['license_id' => $license->id], + ['encrypted_license_key' => Crypt::encryptString($plain), 'recipient_email' => $license->customer_email, 'delivered_at' => null] + ); + } + + return [$license, $plain]; + }); + } +} diff --git a/app/Services/Licensing/LicenseKey.php b/app/Services/Licensing/LicenseKey.php new file mode 100755 index 0000000..3e42361 --- /dev/null +++ b/app/Services/Licensing/LicenseKey.php @@ -0,0 +1,27 @@ +privateSeed(); + $pair = sodium_crypto_sign_seed_keypair($seed); + $secret = sodium_crypto_sign_secretkey($pair); + + $payload = [ + 'customerEmail' => $license->customer_email, + 'customerName' => $license->customer_name, + 'edition' => $license->edition, + 'expiresAt' => $license->expires_at?->utc()->format('Y-m-d\\TH:i:s\\Z'), + 'installationID' => strtolower($installationID), + 'issuedAt' => ($issuedAt ?? now())->utc()->format('Y-m-d\\TH:i:s\\Z'), + 'licenseID' => strtolower((string) $license->id), + 'maxMajorVersion' => $license->max_major_version, + ]; + ksort($payload, SORT_STRING); + $json = json_encode($payload, JSON_UNESCAPED_SLASHES | JSON_THROW_ON_ERROR); + $sig = sodium_crypto_sign_detached($json, $secret); + + return 'RS3.'.self::b64url($json).'.'.self::b64url($sig); + } + + public function publicKeyBase64(): string + { + $pair = sodium_crypto_sign_seed_keypair($this->privateSeed()); + + return base64_encode(sodium_crypto_sign_publickey($pair)); + } + + private function privateSeed(): string + { + $path = config('sonardesk.private_key_path'); + if (! $path || ! is_file($path)) { + throw new RuntimeException('SONARDESK_LICENSE_PRIVATE_KEY_PATH is not configured or does not exist.'); + } + $decoded = base64_decode(trim((string) file_get_contents($path)), true); + if ($decoded === false || strlen($decoded) !== SODIUM_CRYPTO_SIGN_SEEDBYTES) { + throw new RuntimeException('The SonarDesk private key must be a Base64-encoded 32-byte Ed25519 seed.'); + } + + return $decoded; + } + + private static function b64url(string $value): string + { + return rtrim(strtr(base64_encode($value), '+/', '-_'), '='); + } +} diff --git a/app/Services/Licensing/LicenseTokenVerifier.php b/app/Services/Licensing/LicenseTokenVerifier.php new file mode 100755 index 0000000..fa497fc --- /dev/null +++ b/app/Services/Licensing/LicenseTokenVerifier.php @@ -0,0 +1,40 @@ +decode($parts[1]); + $signature = $this->decode($parts[2]); + $public = base64_decode((string) config('sonardesk.public_key'), true); + if ($public === false || strlen($public) !== SODIUM_CRYPTO_SIGN_PUBLICKEYBYTES) { + throw new RuntimeException('Server licence public key is invalid.'); + } + if (! sodium_crypto_sign_verify_detached($signature, $payload, $public)) { + throw new RuntimeException('Licence token signature is invalid.'); + } + $decoded = json_decode($payload, true, flags: JSON_THROW_ON_ERROR); + + return is_array($decoded) ? $decoded : throw new RuntimeException('Licence token payload is invalid.'); + } + + private function decode(string $value): string + { + $value = strtr($value, '-_', '+/'); + $value .= str_repeat('=', (4 - strlen($value) % 4) % 4); + $out = base64_decode($value, true); + if ($out === false) { + throw new RuntimeException('Invalid Base64URL value.'); + } + + return $out; + } +} diff --git a/app/Services/Payments/LemonSqueezyWebhookVerifier.php b/app/Services/Payments/LemonSqueezyWebhookVerifier.php new file mode 100755 index 0000000..356a3e5 --- /dev/null +++ b/app/Services/Payments/LemonSqueezyWebhookVerifier.php @@ -0,0 +1,22 @@ +header('X-Signature'); + if ($secret === '' || $signature === '') { + throw new RuntimeException('Lemon Squeezy webhook verification is not configured.'); + } + $expected = hash_hmac('sha256', $rawBody, $secret); + if (! hash_equals($expected, $signature)) { + throw new RuntimeException('Lemon Squeezy webhook signature is invalid.'); + } + } +} diff --git a/app/Services/Payments/PaddleClient.php b/app/Services/Payments/PaddleClient.php new file mode 100755 index 0000000..4dc7eb8 --- /dev/null +++ b/app/Services/Payments/PaddleClient.php @@ -0,0 +1,82 @@ +request()->get('/customers/'.$customerID); + + if (! $response->successful()) { + return null; + } + $data = $response->json('data'); + + return is_array($data) ? $data : null; + } + + public function updateSubscriptionPrice(string $subscriptionID, string $priceID): array + { + $this->requireWritableConfiguration(); + + $response = $this->request()->patch('/subscriptions/'.$subscriptionID, [ + 'proration_billing_mode' => 'prorated_immediately', + 'items' => [[ + 'price_id' => $priceID, + 'quantity' => 1, + ]], + ]); + + return $this->subscriptionData($response, 'Paddle could not update the subscription.'); + } + + public function cancelSubscriptionImmediately(string $subscriptionID): array + { + $this->requireWritableConfiguration(); + + $response = $this->request()->post('/subscriptions/'.$subscriptionID.'/cancel', [ + 'effective_from' => 'immediately', + ]); + + return $this->subscriptionData($response, 'Paddle could not cancel the subscription.'); + } + + private function request() + { + return Http::baseUrl((string) config('sonardesk.paddle.api_url')) + ->withToken((string) config('sonardesk.paddle.api_key')) + ->acceptJson() + ->timeout(15); + } + + private function requireWritableConfiguration(): void + { + if (trim((string) config('sonardesk.paddle.api_key')) === '') { + throw new RuntimeException('Paddle subscription management is not configured.'); + } + } + + private function subscriptionData(Response $response, string $fallback): array + { + if (! $response->successful()) { + $detail = trim((string) ($response->json('error.detail') ?? '')); + throw new RuntimeException($detail !== '' ? $detail : $fallback); + } + + $data = $response->json('data'); + if (! is_array($data)) { + throw new RuntimeException($fallback); + } + + return $data; + } +} diff --git a/app/Services/Payments/PaddleWebhookVerifier.php b/app/Services/Payments/PaddleWebhookVerifier.php new file mode 100755 index 0000000..6b862a2 --- /dev/null +++ b/app/Services/Payments/PaddleWebhookVerifier.php @@ -0,0 +1,38 @@ +header('Paddle-Signature'); + if ($secret === '' || $header === '') { + throw new RuntimeException('Paddle webhook verification is not configured.'); + } + $parts = []; + foreach (explode(';', $header) as $part) { + [$k,$v] = array_pad(explode('=', trim($part), 2), 2, null); + if ($k && $v) { + $parts[$k][] = $v; + } + } + $ts = isset($parts['ts'][0]) ? (int) $parts['ts'][0] : 0; + $signatures = $parts['h1'] ?? []; + $tolerance = max(1, (int) config('sonardesk.paddle.timestamp_tolerance', 300)); + if (! $ts || abs(time() - $ts) > $tolerance) { + throw new RuntimeException('Paddle webhook timestamp is outside the allowed tolerance.'); + } + $expected = hash_hmac('sha256', $ts.':'.$rawBody, $secret); + foreach ($signatures as $signature) { + if (hash_equals($expected, $signature)) { + return; + } + } + throw new RuntimeException('Paddle webhook signature is invalid.'); + } +} diff --git a/app/Services/Payments/PurchaseProvisioner.php b/app/Services/Payments/PurchaseProvisioner.php new file mode 100755 index 0000000..2cc9680 --- /dev/null +++ b/app/Services/Payments/PurchaseProvisioner.php @@ -0,0 +1,246 @@ +provisionPaddle($event); + + return; + } + + if ($provider === 'lemon-squeezy') { + $this->provisionLemonSqueezy($event); + + return; + } + + throw new RuntimeException('Unsupported payment provider.'); + } + + private function provisionPaddle(array $event): void + { + $type = (string) ($event['event_type'] ?? ''); + $data = $event['data'] ?? []; + + if (str_starts_with($type, 'subscription.')) { + $this->syncPaddleSubscription($type, $data); + + return; + } + + if ($type === 'transaction.completed') { + $this->syncPaddleTransaction($data); + + return; + } + + if ($type === 'transaction.refunded') { + $transactionID = (string) ($data['id'] ?? ''); + if ($transactionID !== '') { + License::where('payment_provider', 'paddle') + ->where('external_order_id', $transactionID) + ->whereNull('external_subscription_id') + ->whereNull('revoked_at') + ->update(['revoked_at' => now(), 'revoke_reason' => 'Payment refunded']); + } + } + } + + private function syncPaddleSubscription(string $type, array $data): void + { + $subscriptionID = (string) ($data['id'] ?? ''); + if ($subscriptionID === '') { + throw new RuntimeException('Paddle subscription webhook has no subscription ID.'); + } + + $status = (string) ($data['status'] ?? ''); + $item = $this->firstRecurringItem($data['items'] ?? []); + $price = $item['price'] ?? []; + $priceID = (string) ($price['id'] ?? $item['price_id'] ?? ''); + $productID = (string) ($price['product_id'] ?? $item['product_id'] ?? ''); + + $license = License::where('payment_provider', 'paddle') + ->where('external_subscription_id', $subscriptionID) + ->first(); + + if (! $license) { + $product = $this->mappedProduct('paddle', $priceID, $productID); + $custom = is_array($data['custom_data'] ?? null) ? $data['custom_data'] : []; + $customer = $this->paddle->customer($this->nullableString($data['customer_id'] ?? null)); + [$license] = $this->issuer->issue( + $product, + $this->nullableString($custom['customer_name'] ?? $custom['name'] ?? $customer['name'] ?? null), + $this->nullableString($custom['customer_email'] ?? $custom['email'] ?? $customer['email'] ?? null), + 'paddle', + $this->nullableString($data['transaction_id'] ?? null), + $this->nullableString($data['customer_id'] ?? null), + true, + ); + $license->external_subscription_id = $subscriptionID; + } elseif ($priceID !== '' && $priceID !== $license->external_price_id) { + // Upgrades/downgrades change the entitlement attached to the existing key. + $product = $this->mappedProduct('paddle', $priceID, $productID); + $license->license_product_id = $product->id; + $license->edition = $product->edition; + $license->activation_limit = $product->activation_limit; + $license->max_major_version = $product->max_major_version; + } + + $periodEnd = $data['current_billing_period']['ends_at'] ?? null; + $scheduled = $data['scheduled_change'] ?? null; + $cancelAt = is_array($scheduled) && ($scheduled['action'] ?? null) === 'cancel' + ? ($scheduled['effective_at'] ?? null) + : null; + + $license->external_customer_id = $this->nullableString($data['customer_id'] ?? null) ?? $license->external_customer_id; + $license->external_price_id = $priceID !== '' ? $priceID : $license->external_price_id; + $license->subscription_status = $status !== '' ? $status : $license->subscription_status; + $license->current_period_ends_at = $periodEnd ? Carbon::parse($periodEnd) : $license->current_period_ends_at; + $license->cancel_scheduled_at = $cancelAt ? Carbon::parse($cancelAt) : null; + + if (in_array($status, ['active', 'trialing'], true)) { + $license->revoked_at = null; + $license->revoke_reason = null; + // Trialing/active subscriptions remain valid through the current period. + $license->expires_at = $periodEnd ? Carbon::parse($periodEnd) : null; + } elseif ($status === 'past_due') { + // Do not instantly kill a licence on the first failed renewal. Preserve the + // period Paddle says is current; a later canceled event ends entitlement. + $license->expires_at = $periodEnd ? Carbon::parse($periodEnd) : ($license->expires_at ?? now()->addDays(7)); + } elseif (in_array($status, ['canceled', 'paused'], true)) { + $license->expires_at = now(); + $license->revoked_at = now(); + $license->revoke_reason = $status === 'paused' ? 'Subscription paused' : 'Subscription canceled'; + } + + $license->save(); + } + + private function syncPaddleTransaction(array $data): void + { + $subscriptionID = $this->nullableString($data['subscription_id'] ?? null); + $transactionID = (string) ($data['id'] ?? ''); + + // Recurring purchases are provisioned from subscription events because those + // events contain the authoritative trial/status/current-period state. + if ($subscriptionID) { + License::where('payment_provider', 'paddle') + ->where('external_subscription_id', $subscriptionID) + ->whereNull('external_order_id') + ->update(['external_order_id' => $transactionID ?: null]); + + return; + } + + // Keep support for any future one-time Paddle licence product. + $item = $data['items'][0] ?? []; + $price = $item['price'] ?? []; + $priceID = (string) ($price['id'] ?? $item['price_id'] ?? ''); + $productID = (string) ($price['product_id'] ?? $item['product_id'] ?? ''); + $product = $this->mappedProduct('paddle', $priceID, $productID); + $custom = is_array($data['custom_data'] ?? null) ? $data['custom_data'] : []; + $customer = $this->paddle->customer($this->nullableString($data['customer_id'] ?? null)); + + $this->issuer->issue( + $product, + $this->nullableString($custom['customer_name'] ?? $custom['name'] ?? $customer['name'] ?? null), + $this->nullableString($custom['customer_email'] ?? $custom['email'] ?? $customer['email'] ?? null), + 'paddle', + $transactionID, + $this->nullableString($data['customer_id'] ?? null), + true, + ); + } + + private function provisionLemonSqueezy(array $event): void + { + $type = (string) ($event['meta']['event_name'] ?? ''); + $attributes = $event['data']['attributes'] ?? []; + $order = (string) ($event['data']['id'] ?? $attributes['order_id'] ?? ''); + + if (in_array($type, ['order_refunded', 'subscription_expired'], true)) { + License::where('payment_provider', 'lemon-squeezy') + ->where('external_order_id', $order) + ->whereNull('revoked_at') + ->update(['revoked_at' => now(), 'revoke_reason' => 'Payment refunded or subscription expired']); + + return; + } + + if (! in_array($type, ['order_created', 'subscription_created'], true)) { + return; + } + + $product = $this->mappedProduct( + 'lemon-squeezy', + (string) ($attributes['variant_id'] ?? ''), + (string) ($attributes['product_id'] ?? ''), + ); + + $this->issuer->issue( + $product, + $this->nullableString($attributes['user_name'] ?? null), + $this->nullableString($attributes['user_email'] ?? null), + 'lemon-squeezy', + $order, + $this->nullableString($attributes['customer_id'] ?? null), + true, + ); + } + + private function mappedProduct(string $provider, string $priceID, string $productID): LicenseProduct + { + // Price IDs are the authoritative mapping because monthly and annual prices + // intentionally share the same Paddle product ID. + if ($priceID !== '') { + $product = LicenseProduct::where('payment_provider', $provider) + ->where('external_price_id', $priceID) + ->where('active', true) + ->first(); + } else { + $product = LicenseProduct::where('payment_provider', $provider) + ->where('external_product_id', $productID) + ->where('active', true) + ->first(); + } + + if (! $product) { + throw new RuntimeException("No active licence product maps to {$provider} price {$priceID} / product {$productID}."); + } + + return $product; + } + + private function firstRecurringItem(array $items): array + { + foreach ($items as $item) { + if (($item['recurring'] ?? true) === true) { + return $item; + } + } + + return $items[0] ?? []; + } + + private function nullableString(mixed $value): ?string + { + if (! is_scalar($value)) { + return null; + } + $value = trim((string) $value); + + return $value === '' ? null : $value; + } +} diff --git a/app/Services/Payments/WebhookVerifier.php b/app/Services/Payments/WebhookVerifier.php new file mode 100755 index 0000000..984c28e --- /dev/null +++ b/app/Services/Payments/WebhookVerifier.php @@ -0,0 +1,10 @@ +handleCommand(new ArgvInput); + +exit($status); diff --git a/bootstrap/app.php b/bootstrap/app.php new file mode 100755 index 0000000..5304386 --- /dev/null +++ b/bootstrap/app.php @@ -0,0 +1,22 @@ +withRouting( + web: __DIR__.'/../routes/web.php', + api: __DIR__.'/../routes/api.php', + commands: __DIR__.'/../routes/console.php', + health: '/up', + ) + ->withMiddleware(function (Middleware $middleware): void { + // + }) + ->withExceptions(function (Exceptions $exceptions): void { + $exceptions->shouldRenderJsonWhen( + fn (Request $request) => $request->is('api/*') || $request->expectsJson(), + ); + })->create(); diff --git a/bootstrap/cache/.gitignore b/bootstrap/cache/.gitignore new file mode 100755 index 0000000..d6b7ef3 --- /dev/null +++ b/bootstrap/cache/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/bootstrap/providers.php b/bootstrap/providers.php new file mode 100755 index 0000000..cfe2c04 --- /dev/null +++ b/bootstrap/providers.php @@ -0,0 +1,7 @@ +=5.0.0" + }, + "require-dev": { + "doctrine/dbal": "^4.0.0", + "nesbot/carbon": "^2.71.0 || ^3.0.0", + "phpunit/phpunit": "^10.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Carbon\\Doctrine\\": "src/Carbon/Doctrine/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "KyleKatarn", + "email": "kylekatarnls@gmail.com" + } + ], + "description": "Types to use Carbon in Doctrine", + "keywords": [ + "carbon", + "date", + "datetime", + "doctrine", + "time" + ], + "support": { + "issues": "https://github.com/CarbonPHP/carbon-doctrine-types/issues", + "source": "https://github.com/CarbonPHP/carbon-doctrine-types/tree/3.2.1" + }, + "funding": [ + { + "url": "https://github.com/kylekatarnls", + "type": "github" + }, + { + "url": "https://opencollective.com/Carbon", + "type": "open_collective" + }, + { + "url": "https://tidelift.com/funding/github/packagist/nesbot/carbon", + "type": "tidelift" + } + ], + "time": "2026-09-06T14:11:38+00:00" + }, + { + "name": "deployer/deployer", + "version": "v8.0.5", + "source": { + "type": "git", + "url": "https://github.com/deployphp/deployer.git", + "reference": "199273500b4f14ff5eafd76bea524e5d44bcaff3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/deployphp/deployer/zipball/199273500b4f14ff5eafd76bea524e5d44bcaff3", + "reference": "199273500b4f14ff5eafd76bea524e5d44bcaff3", + "shasum": "" + }, + "require": { + "maml/maml": "^3.2", + "php": "^8.3", + "symfony/console": "^7.4.0 || ^8.0.0", + "symfony/process": "^7.4.0 || ^8.0.0", + "symfony/yaml": "^7.4.0 || ^8.0.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^3.68", + "phpstan/phpstan": "^2.1", + "phpunit/php-code-coverage": "^12.0", + "phpunit/phpunit": "^12.5" + }, + "bin": [ + "bin/dep" + ], + "type": "library", + "autoload": { + "files": [ + "src/functions.php", + "src/Support/helpers.php" + ], + "psr-4": { + "Deployer\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Anton Medvedev", + "email": "anton@medv.io" + } + ], + "description": "Deployment Tool", + "homepage": "https://deployer.org", + "support": { + "docs": "https://deployer.org/docs", + "issues": "https://github.com/deployphp/deployer/issues", + "source": "https://github.com/deployphp/deployer" + }, + "funding": [ + { + "url": "https://github.com/sponsors/antonmedv", + "type": "github" + } + ], + "time": "2026-05-18T16:59:34+00:00" + }, + { + "name": "dflydev/dot-access-data", + "version": "v3.0.3", + "source": { + "type": "git", + "url": "https://github.com/dflydev/dflydev-dot-access-data.git", + "reference": "a23a2bf4f31d3518f3ecb38660c95715dfead60f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dflydev/dflydev-dot-access-data/zipball/a23a2bf4f31d3518f3ecb38660c95715dfead60f", + "reference": "a23a2bf4f31d3518f3ecb38660c95715dfead60f", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^0.12.42", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.3", + "scrutinizer/ocular": "1.6.0", + "squizlabs/php_codesniffer": "^3.5", + "vimeo/psalm": "^4.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Dflydev\\DotAccessData\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Dragonfly Development Inc.", + "email": "info@dflydev.com", + "homepage": "http://dflydev.com" + }, + { + "name": "Beau Simensen", + "email": "beau@dflydev.com", + "homepage": "http://beausimensen.com" + }, + { + "name": "Carlos Frutos", + "email": "carlos@kiwing.it", + "homepage": "https://github.com/cfrutos" + }, + { + "name": "Colin O'Dell", + "email": "colinodell@gmail.com", + "homepage": "https://www.colinodell.com" + } + ], + "description": "Given a deep data structure, access data by dot notation.", + "homepage": "https://github.com/dflydev/dflydev-dot-access-data", + "keywords": [ + "access", + "data", + "dot", + "notation" + ], + "support": { + "issues": "https://github.com/dflydev/dflydev-dot-access-data/issues", + "source": "https://github.com/dflydev/dflydev-dot-access-data/tree/v3.0.3" + }, + "time": "2024-07-08T12:26:09+00:00" + }, + { + "name": "doctrine/inflector", + "version": "2.1.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/inflector.git", + "reference": "6d6c96277ea252fc1304627204c3d5e6e15faa3b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/inflector/zipball/6d6c96277ea252fc1304627204c3d5e6e15faa3b", + "reference": "6d6c96277ea252fc1304627204c3d5e6e15faa3b", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^12.0 || ^13.0", + "phpstan/phpstan": "^1.12 || ^2.0", + "phpstan/phpstan-phpunit": "^1.4 || ^2.0", + "phpstan/phpstan-strict-rules": "^1.6 || ^2.0", + "phpunit/phpunit": "^8.5 || ^12.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Inflector\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "PHP Doctrine Inflector is a small library that can perform string manipulations with regard to upper/lowercase and singular/plural forms of words.", + "homepage": "https://www.doctrine-project.org/projects/inflector.html", + "keywords": [ + "inflection", + "inflector", + "lowercase", + "manipulation", + "php", + "plural", + "singular", + "strings", + "uppercase", + "words" + ], + "support": { + "issues": "https://github.com/doctrine/inflector/issues", + "source": "https://github.com/doctrine/inflector/tree/2.1.0" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finflector", + "type": "tidelift" + } + ], + "time": "2025-08-10T19:31:58+00:00" + }, + { + "name": "doctrine/lexer", + "version": "3.0.1", + "source": { + "type": "git", + "url": "https://github.com/doctrine/lexer.git", + "reference": "31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd", + "reference": "31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd", + "shasum": "" + }, + "require": { + "php": "^8.1" + }, + "require-dev": { + "doctrine/coding-standard": "^12", + "phpstan/phpstan": "^1.10", + "phpunit/phpunit": "^10.5", + "psalm/plugin-phpunit": "^0.18.3", + "vimeo/psalm": "^5.21" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Common\\Lexer\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.", + "homepage": "https://www.doctrine-project.org/projects/lexer.html", + "keywords": [ + "annotations", + "docblock", + "lexer", + "parser", + "php" + ], + "support": { + "issues": "https://github.com/doctrine/lexer/issues", + "source": "https://github.com/doctrine/lexer/tree/3.0.1" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Flexer", + "type": "tidelift" + } + ], + "time": "2024-02-05T11:56:58+00:00" + }, + { + "name": "dragonmantank/cron-expression", + "version": "v3.6.0", + "source": { + "type": "git", + "url": "https://github.com/dragonmantank/cron-expression.git", + "reference": "d61a8a9604ec1f8c3d150d09db6ce98b32675013" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/d61a8a9604ec1f8c3d150d09db6ce98b32675013", + "reference": "d61a8a9604ec1f8c3d150d09db6ce98b32675013", + "shasum": "" + }, + "require": { + "php": "^8.2|^8.3|^8.4|^8.5" + }, + "replace": { + "mtdowling/cron-expression": "^1.0" + }, + "require-dev": { + "phpstan/extension-installer": "^1.4.3", + "phpstan/phpstan": "^1.12.32|^2.1.31", + "phpunit/phpunit": "^8.5.48|^9.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Cron\\": "src/Cron/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Chris Tankersley", + "email": "chris@ctankersley.com", + "homepage": "https://github.com/dragonmantank" + } + ], + "description": "CRON for PHP: Calculate the next or previous run date and determine if a CRON expression is due", + "keywords": [ + "cron", + "schedule" + ], + "support": { + "issues": "https://github.com/dragonmantank/cron-expression/issues", + "source": "https://github.com/dragonmantank/cron-expression/tree/v3.6.0" + }, + "funding": [ + { + "url": "https://github.com/dragonmantank", + "type": "github" + } + ], + "time": "2025-10-31T18:51:33+00:00" + }, + { + "name": "egulias/email-validator", + "version": "4.0.4", + "source": { + "type": "git", + "url": "https://github.com/egulias/EmailValidator.git", + "reference": "d42c8731f0624ad6bdc8d3e5e9a4524f68801cfa" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/d42c8731f0624ad6bdc8d3e5e9a4524f68801cfa", + "reference": "d42c8731f0624ad6bdc8d3e5e9a4524f68801cfa", + "shasum": "" + }, + "require": { + "doctrine/lexer": "^2.0 || ^3.0", + "php": ">=8.1", + "symfony/polyfill-intl-idn": "^1.26" + }, + "require-dev": { + "phpunit/phpunit": "^10.2", + "vimeo/psalm": "^5.12" + }, + "suggest": { + "ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Egulias\\EmailValidator\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Eduardo Gulias Davis" + } + ], + "description": "A library for validating emails against several RFCs", + "homepage": "https://github.com/egulias/EmailValidator", + "keywords": [ + "email", + "emailvalidation", + "emailvalidator", + "validation", + "validator" + ], + "support": { + "issues": "https://github.com/egulias/EmailValidator/issues", + "source": "https://github.com/egulias/EmailValidator/tree/4.0.4" + }, + "funding": [ + { + "url": "https://github.com/egulias", + "type": "github" + } + ], + "time": "2025-03-06T22:45:56+00:00" + }, + { + "name": "fruitcake/php-cors", + "version": "v1.4.0", + "source": { + "type": "git", + "url": "https://github.com/fruitcake/php-cors.git", + "reference": "38aaa6c3fd4c157ffe2a4d10aa8b9b16ba8de379" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/fruitcake/php-cors/zipball/38aaa6c3fd4c157ffe2a4d10aa8b9b16ba8de379", + "reference": "38aaa6c3fd4c157ffe2a4d10aa8b9b16ba8de379", + "shasum": "" + }, + "require": { + "php": "^8.1", + "symfony/http-foundation": "^5.4|^6.4|^7.3|^8" + }, + "require-dev": { + "phpstan/phpstan": "^2", + "phpunit/phpunit": "^9", + "squizlabs/php_codesniffer": "^4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3-dev" + } + }, + "autoload": { + "psr-4": { + "Fruitcake\\Cors\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fruitcake", + "homepage": "https://fruitcake.nl" + }, + { + "name": "Barryvdh", + "email": "barryvdh@gmail.com" + } + ], + "description": "Cross-origin resource sharing library for the Symfony HttpFoundation", + "homepage": "https://github.com/fruitcake/php-cors", + "keywords": [ + "cors", + "laravel", + "symfony" + ], + "support": { + "issues": "https://github.com/fruitcake/php-cors/issues", + "source": "https://github.com/fruitcake/php-cors/tree/v1.4.0" + }, + "funding": [ + { + "url": "https://fruitcake.nl", + "type": "custom" + }, + { + "url": "https://github.com/barryvdh", + "type": "github" + } + ], + "time": "2025-12-03T09:33:47+00:00" + }, + { + "name": "graham-campbell/result-type", + "version": "v1.2.0", + "source": { + "type": "git", + "url": "https://github.com/GrahamCampbell/Result-Type.git", + "reference": "adccca3324eece92ca35463648c12b9e6293c05b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/adccca3324eece92ca35463648c12b9e6293c05b", + "reference": "adccca3324eece92ca35463648c12b9e6293c05b", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0", + "phpoption/phpoption": "^1.10" + }, + "require-dev": { + "phpunit/phpunit": "^8.5.52 || ^9.6.34 || ^10.5.63 || ^11.5.55 || ^12.5.14" + }, + "type": "library", + "autoload": { + "psr-4": { + "GrahamCampbell\\ResultType\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + } + ], + "description": "An Implementation Of The Result Type", + "keywords": [ + "Graham Campbell", + "GrahamCampbell", + "Result Type", + "Result-Type", + "result" + ], + "support": { + "issues": "https://github.com/GrahamCampbell/Result-Type/issues", + "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.2.0" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/graham-campbell/result-type", + "type": "tidelift" + } + ], + "time": "2026-08-24T09:06:52+00:00" + }, + { + "name": "guzzlehttp/guzzle", + "version": "8.2.0", + "source": { + "type": "git", + "url": "https://github.com/guzzle/guzzle.git", + "reference": "93939470950a9b11e2e84204166ef5e048c55fe4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/93939470950a9b11e2e84204166ef5e048c55fe4", + "reference": "93939470950a9b11e2e84204166ef5e048c55fe4", + "shasum": "" + }, + "require": { + "ext-json": "*", + "guzzlehttp/promises": "^3.0.2", + "guzzlehttp/psr7": "^3.1", + "php": "^7.4 || ^8.0", + "psr/http-client": "^1.0", + "psr/http-factory": "^1.0", + "symfony/polyfill-php80": "^1.25", + "symfony/polyfill-php82": "^1.27" + }, + "provide": { + "psr/http-client-implementation": "1.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.2", + "ext-curl": "*", + "guzzle/client-integration-tests": "4.0.1", + "guzzlehttp/test-server": "^1.0.1", + "php-http/message-factory": "^1.1", + "phpunit/phpunit": "^9.6.34", + "psr/log": "^1.1 || ^2.0 || ^3.0" + }, + "suggest": { + "ext-curl": "Required for CURL handler support", + "ext-intl": "Required for Internationalized Domain Name (IDN) support", + "psr/log": "Required for using the Log middleware" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Jeremy Lindblom", + "email": "jeremeamia@gmail.com", + "homepage": "https://github.com/jeremeamia" + }, + { + "name": "George Mponos", + "email": "gmponos@gmail.com", + "homepage": "https://github.com/gmponos" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://github.com/sagikazarmark" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" + } + ], + "description": "Guzzle is a PHP HTTP client library", + "keywords": [ + "client", + "curl", + "framework", + "http", + "http client", + "psr-18", + "psr-7", + "rest", + "web service" + ], + "support": { + "issues": "https://github.com/guzzle/guzzle/issues", + "source": "https://github.com/guzzle/guzzle/tree/8.2.0" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/guzzle", + "type": "tidelift" + } + ], + "time": "2026-09-06T13:55:09+00:00" + }, + { + "name": "guzzlehttp/promises", + "version": "3.0.2", + "source": { + "type": "git", + "url": "https://github.com/guzzle/promises.git", + "reference": "42118e66a53c492effaf92bc357e931985d5c6f9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/promises/zipball/42118e66a53c492effaf92bc357e931985d5c6f9", + "reference": "42118e66a53c492effaf92bc357e931985d5c6f9", + "shasum": "" + }, + "require": { + "php": "^7.4 || ^8.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.2", + "phpunit/phpunit": "^9.6.34" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Promise\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" + } + ], + "description": "Guzzle promises library", + "keywords": [ + "promise" + ], + "support": { + "issues": "https://github.com/guzzle/promises/issues", + "source": "https://github.com/guzzle/promises/tree/3.0.2" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/promises", + "type": "tidelift" + } + ], + "time": "2026-08-24T10:00:26+00:00" + }, + { + "name": "guzzlehttp/psr7", + "version": "3.1.0", + "source": { + "type": "git", + "url": "https://github.com/guzzle/psr7.git", + "reference": "a3059ba1a84c9139c4ae03cf0f45bea276c97c74" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/a3059ba1a84c9139c4ae03cf0f45bea276c97c74", + "reference": "a3059ba1a84c9139c4ae03cf0f45bea276c97c74", + "shasum": "" + }, + "require": { + "php": "^7.4 || ^8.0", + "psr/http-factory": "^1.1", + "psr/http-message": "^2.0", + "symfony/polyfill-php80": "^1.25", + "symfony/polyfill-php82": "^1.27" + }, + "provide": { + "psr/http-factory-implementation": "1.1", + "psr/http-message-implementation": "2.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.2", + "http-interop/http-factory-tests": "1.1.0", + "jshttp/mime-db": "1.54.0.1", + "php-http/psr7-integration-tests": "^1.5.1", + "phpunit/phpunit": "^9.6.34" + }, + "suggest": { + "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Psr7\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "George Mponos", + "email": "gmponos@gmail.com", + "homepage": "https://github.com/gmponos" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://github.com/sagikazarmark" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://sagikazarmark.hu" + } + ], + "description": "PSR-7 message implementation that also provides common utility methods", + "keywords": [ + "http", + "message", + "psr-7", + "request", + "response", + "stream", + "uri", + "url" + ], + "support": { + "issues": "https://github.com/guzzle/psr7/issues", + "source": "https://github.com/guzzle/psr7/tree/3.1.0" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/psr7", + "type": "tidelift" + } + ], + "time": "2026-08-24T11:02:13+00:00" + }, + { + "name": "guzzlehttp/uri-template", + "version": "v2.0.1", + "source": { + "type": "git", + "url": "https://github.com/guzzle/uri-template.git", + "reference": "7a466ad606491eb6528c717482f7cca77f1851f3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/uri-template/zipball/7a466ad606491eb6528c717482f7cca77f1851f3", + "reference": "7a466ad606491eb6528c717482f7cca77f1851f3", + "shasum": "" + }, + "require": { + "php": "^7.4 || ^8.0", + "symfony/polyfill-php80": "^1.25" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.2", + "phpunit/phpunit": "^9.6.34", + "uri-template/tests": "1.0.2" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\UriTemplate\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "George Mponos", + "email": "gmponos@gmail.com", + "homepage": "https://github.com/gmponos" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + } + ], + "description": "A polyfill class for uri_template of PHP", + "keywords": [ + "guzzlehttp", + "uri-template" + ], + "support": { + "issues": "https://github.com/guzzle/uri-template/issues", + "source": "https://github.com/guzzle/uri-template/tree/v2.0.1" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/uri-template", + "type": "tidelift" + } + ], + "time": "2026-08-24T17:13:02+00:00" + }, + { + "name": "laravel/framework", + "version": "v13.31.0", + "source": { + "type": "git", + "url": "https://github.com/laravel/framework.git", + "reference": "7c75fbf93f91fa077d3df1c820cc14f4e59a9774" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/framework/zipball/7c75fbf93f91fa077d3df1c820cc14f4e59a9774", + "reference": "7c75fbf93f91fa077d3df1c820cc14f4e59a9774", + "shasum": "" + }, + "require": { + "brick/math": "^0.14.2 || ^0.15 || ^0.16 || ^0.17 || ^0.18 || ^0.19", + "composer-runtime-api": "^2.2", + "doctrine/inflector": "^2.0.5", + "dragonmantank/cron-expression": "^3.4", + "egulias/email-validator": "^4.0", + "ext-ctype": "*", + "ext-filter": "*", + "ext-hash": "*", + "ext-mbstring": "*", + "ext-openssl": "*", + "ext-session": "*", + "ext-tokenizer": "*", + "fruitcake/php-cors": "^1.3", + "guzzlehttp/guzzle": "^7.8.2 || ^8.0", + "guzzlehttp/promises": "^2.0.3 || ^3.0", + "guzzlehttp/psr7": "^2.9 || ^3.0", + "guzzlehttp/uri-template": "^1.0 || ^2.0", + "laravel/prompts": "^0.3.11", + "laravel/serializable-closure": "^2.0.10", + "league/commonmark": "^2.8.1", + "league/flysystem": "^3.25.1", + "league/flysystem-local": "^3.25.1", + "league/uri": "^7.5.1", + "monolog/monolog": "^3.10", + "nesbot/carbon": "^3.8.4", + "nunomaduro/termwind": "^2.0", + "php": "^8.3", + "psr/container": "^1.1.1 || ^2.0.1", + "psr/http-message": "^1.0 || ^2.0", + "psr/log": "^1.0 || ^2.0 || ^3.0", + "psr/simple-cache": "^1.0 || ^2.0 || ^3.0", + "ramsey/uuid": "^4.7", + "symfony/console": "^7.4.0 || ^8.0.0", + "symfony/error-handler": "^7.4.0 || ^8.0.0", + "symfony/finder": "^7.4.0 || ^8.0.0", + "symfony/http-foundation": "^7.4.0 || ^8.0.0", + "symfony/http-kernel": "^7.4.0 || ^8.0.0", + "symfony/mailer": "^7.4.0 || ^8.0.0", + "symfony/mime": "^7.4.0 || ^8.0.0", + "symfony/polyfill-php84": "^1.36", + "symfony/polyfill-php85": "^1.36", + "symfony/polyfill-php86": "^1.36", + "symfony/process": "^7.4.5 || ^8.0.5", + "symfony/routing": "^7.4.0 || ^8.0.0", + "symfony/uid": "^7.4.0 || ^8.0.0", + "symfony/var-dumper": "^7.4.0 || ^8.0.0", + "tijsverkoyen/css-to-inline-styles": "^2.2.5", + "vlucas/phpdotenv": "^5.6.1", + "voku/portable-ascii": "^2.0.2" + }, + "conflict": { + "tightenco/collect": "<5.5.33" + }, + "provide": { + "psr/container-implementation": "1.1 || 2.0", + "psr/log-implementation": "1.0 || 2.0 || 3.0", + "psr/simple-cache-implementation": "1.0 || 2.0 || 3.0" + }, + "replace": { + "illuminate/auth": "self.version", + "illuminate/broadcasting": "self.version", + "illuminate/bus": "self.version", + "illuminate/cache": "self.version", + "illuminate/collections": "self.version", + "illuminate/concurrency": "self.version", + "illuminate/conditionable": "self.version", + "illuminate/config": "self.version", + "illuminate/console": "self.version", + "illuminate/container": "self.version", + "illuminate/contracts": "self.version", + "illuminate/cookie": "self.version", + "illuminate/database": "self.version", + "illuminate/encryption": "self.version", + "illuminate/events": "self.version", + "illuminate/filesystem": "self.version", + "illuminate/hashing": "self.version", + "illuminate/http": "self.version", + "illuminate/image": "self.version", + "illuminate/json-schema": "self.version", + "illuminate/log": "self.version", + "illuminate/macroable": "self.version", + "illuminate/mail": "self.version", + "illuminate/notifications": "self.version", + "illuminate/pagination": "self.version", + "illuminate/pipeline": "self.version", + "illuminate/process": "self.version", + "illuminate/queue": "self.version", + "illuminate/redis": "self.version", + "illuminate/reflection": "self.version", + "illuminate/routing": "self.version", + "illuminate/session": "self.version", + "illuminate/support": "self.version", + "illuminate/testing": "self.version", + "illuminate/translation": "self.version", + "illuminate/validation": "self.version", + "illuminate/view": "self.version", + "spatie/once": "*" + }, + "require-dev": { + "ably/ably-php": "^1.0", + "aws/aws-sdk-php": "^3.322.9", + "ext-gmp": "*", + "fakerphp/faker": "^1.24", + "intervention/image": "^4.0", + "laravel/pint": "^1.18", + "league/flysystem-aws-s3-v3": "^3.25.1", + "league/flysystem-ftp": "^3.25.1", + "league/flysystem-path-prefixing": "^3.25.1", + "league/flysystem-read-only": "^3.25.1", + "league/flysystem-sftp-v3": "^3.25.1", + "mockery/mockery": "^1.6.10", + "opis/json-schema": "^2.4.1", + "orchestra/testbench-core": "^11.0.0", + "pda/pheanstalk": "^7.0.0 || ^8.0.0", + "php-http/discovery": "^1.15", + "phpstan/phpstan": "^2.0", + "phpunit/phpunit": "^11.5.50 || ^12.5.8 || ^13.0.3", + "predis/predis": "^2.3 || ^3.0", + "rector/rector": "2.6.3", + "resend/resend-php": "^1.0", + "symfony/cache": "^7.4.0 || ^8.0.0", + "symfony/http-client": "^7.4.0 || ^8.0.0", + "symfony/psr-http-message-bridge": "^7.4.0 || ^8.0.0", + "symfony/translation": "^7.4.0 || ^8.0.0" + }, + "suggest": { + "ably/ably-php": "Required to use the Ably broadcast driver (^1.0).", + "aws/aws-sdk-php": "Required to use the SQS queue driver, DynamoDb failed job storage, and SES mail driver (^3.322.9).", + "brianium/paratest": "Required to run tests in parallel (^7.0 || ^8.0).", + "ext-apcu": "Required to use the APC cache driver.", + "ext-fileinfo": "Required to use the Filesystem class.", + "ext-ftp": "Required to use the Flysystem FTP driver.", + "ext-gd": "Required to use Illuminate\\Http\\Testing\\FileFactory::image().", + "ext-memcached": "Required to use the memcache cache driver.", + "ext-pcntl": "Required to use all features of the queue worker and console signal trapping.", + "ext-pdo": "Required to use all database features.", + "ext-posix": "Required to use all features of the queue worker.", + "ext-redis": "Required to use the Redis cache and queue drivers (^4.0 || ^5.0 || ^6.0).", + "fakerphp/faker": "Required to generate fake data using the fake() helper (^1.23).", + "filp/whoops": "Required for friendly error pages in development (^2.14.3).", + "intervention/image": "Required to use the image processing features (^4.0).", + "laravel/tinker": "Required to use the tinker console command (^2.0).", + "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (^3.25.1).", + "league/flysystem-ftp": "Required to use the Flysystem FTP driver (^3.25.1).", + "league/flysystem-path-prefixing": "Required to use the scoped driver (^3.25.1).", + "league/flysystem-read-only": "Required to use read-only disks (^3.25.1)", + "league/flysystem-sftp-v3": "Required to use the Flysystem SFTP driver (^3.25.1).", + "mockery/mockery": "Required to use mocking (^1.6).", + "pda/pheanstalk": "Required to use the beanstalk queue driver (^7.0 || ^8.0).", + "php-http/discovery": "Required to use PSR-7 bridging features (^1.15).", + "phpunit/phpunit": "Required to use assertions and run tests (^11.5.50 || ^12.5.8 || ^13.0.3).", + "predis/predis": "Required to use the predis connector (^2.3 || ^3.0).", + "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^6.0 || ^7.0).", + "resend/resend-php": "Required to enable support for the Resend mail transport (^0.10.0 || ^1.0).", + "spatie/fork": "Required to use the 'fork' concurrency driver (^1.2).", + "symfony/cache": "Required to PSR-6 cache bridge (^7.4 || ^8.0).", + "symfony/filesystem": "Required to enable support for relative symbolic links (^7.4 || ^8.0).", + "symfony/http-client": "Required to enable support for the Symfony API mail transports (^7.4 || ^8.0).", + "symfony/mailgun-mailer": "Required to enable support for the Mailgun mail transport (^7.4 || ^8.0).", + "symfony/postmark-mailer": "Required to enable support for the Postmark mail transport (^7.4 || ^8.0).", + "symfony/psr-http-message-bridge": "Required to use PSR-7 bridging features (^7.4 || ^8.0)." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "13.0.x-dev" + } + }, + "autoload": { + "files": [ + "src/Illuminate/Collections/functions.php", + "src/Illuminate/Collections/helpers.php", + "src/Illuminate/Events/functions.php", + "src/Illuminate/Filesystem/functions.php", + "src/Illuminate/Foundation/helpers.php", + "src/Illuminate/Log/functions.php", + "src/Illuminate/Reflection/helpers.php", + "src/Illuminate/Support/functions.php", + "src/Illuminate/Support/helpers.php" + ], + "psr-4": { + "Illuminate\\": "src/Illuminate/", + "Illuminate\\Support\\": [ + "src/Illuminate/Macroable/", + "src/Illuminate/Collections/", + "src/Illuminate/Conditionable/", + "src/Illuminate/Reflection/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "The Laravel Framework.", + "homepage": "https://laravel.com", + "keywords": [ + "framework", + "laravel" + ], + "support": { + "issues": "https://github.com/laravel/framework/issues", + "source": "https://github.com/laravel/framework" + }, + "time": "2026-09-08T14:22:55+00:00" + }, + { + "name": "laravel/prompts", + "version": "v0.3.24", + "source": { + "type": "git", + "url": "https://github.com/laravel/prompts.git", + "reference": "5d3cdef29e93ca3b62b1871359db3078cd99908b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/prompts/zipball/5d3cdef29e93ca3b62b1871359db3078cd99908b", + "reference": "5d3cdef29e93ca3b62b1871359db3078cd99908b", + "shasum": "" + }, + "require": { + "composer-runtime-api": "^2.2", + "ext-mbstring": "*", + "php": "^8.1", + "symfony/console": "^6.2|^7.0|^8.0" + }, + "conflict": { + "illuminate/console": ">=10.17.0 <10.25.0", + "laravel/framework": ">=10.17.0 <10.25.0" + }, + "require-dev": { + "illuminate/collections": "^10.0|^11.0|^12.0|^13.0", + "mockery/mockery": "^1.5", + "pestphp/pest": "^2.3|^3.4|^4.0", + "phpstan/phpstan": "^1.12.28", + "phpstan/phpstan-mockery": "^1.1.3" + }, + "suggest": { + "ext-pcntl": "Required for the spinner to be animated." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "0.3.x-dev" + } + }, + "autoload": { + "files": [ + "src/helpers.php" + ], + "psr-4": { + "Laravel\\Prompts\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Add beautiful and user-friendly forms to your command-line applications.", + "support": { + "issues": "https://github.com/laravel/prompts/issues", + "source": "https://github.com/laravel/prompts/tree/v0.3.24" + }, + "time": "2026-08-20T12:55:36+00:00" + }, + { + "name": "laravel/serializable-closure", + "version": "v2.0.16", + "source": { + "type": "git", + "url": "https://github.com/laravel/serializable-closure.git", + "reference": "7cfc24e4fa2cca045fb8dd2a797a2b2b13b655ed" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/7cfc24e4fa2cca045fb8dd2a797a2b2b13b655ed", + "reference": "7cfc24e4fa2cca045fb8dd2a797a2b2b13b655ed", + "shasum": "" + }, + "require": { + "php": "^8.1" + }, + "require-dev": { + "illuminate/support": "^10.0|^11.0|^12.0|^13.0", + "nesbot/carbon": "^2.67|^3.0", + "pestphp/pest": "^2.36|^3.0|^4.0", + "phpstan/phpstan": "^2.0", + "symfony/var-dumper": "^6.2.0|^7.0.0|^8.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "Laravel\\SerializableClosure\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + }, + { + "name": "Nuno Maduro", + "email": "nuno@laravel.com" + } + ], + "description": "Laravel Serializable Closure provides an easy and secure way to serialize closures in PHP.", + "keywords": [ + "closure", + "laravel", + "serializable" + ], + "support": { + "issues": "https://github.com/laravel/serializable-closure/issues", + "source": "https://github.com/laravel/serializable-closure" + }, + "time": "2026-08-18T20:28:54+00:00" + }, + { + "name": "laravel/tinker", + "version": "v3.0.2", + "source": { + "type": "git", + "url": "https://github.com/laravel/tinker.git", + "reference": "4faba77764bd33411735936acdf30446d058c78b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/tinker/zipball/4faba77764bd33411735936acdf30446d058c78b", + "reference": "4faba77764bd33411735936acdf30446d058c78b", + "shasum": "" + }, + "require": { + "illuminate/console": "^8.0|^9.0|^10.0|^11.0|^12.0|^13.0", + "illuminate/contracts": "^8.0|^9.0|^10.0|^11.0|^12.0|^13.0", + "illuminate/support": "^8.0|^9.0|^10.0|^11.0|^12.0|^13.0", + "php": "^8.1", + "psy/psysh": "^0.12.0", + "symfony/var-dumper": "^5.4|^6.0|^7.0|^8.0" + }, + "require-dev": { + "mockery/mockery": "~1.3.3|^1.4.2", + "phpstan/phpstan": "^1.10", + "phpunit/phpunit": "^10.5|^11.5" + }, + "suggest": { + "illuminate/database": "The Illuminate Database package (^8.0|^9.0|^10.0|^11.0|^12.0|^13.0)." + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Laravel\\Tinker\\TinkerServiceProvider" + ] + }, + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Laravel\\Tinker\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "Powerful REPL for the Laravel framework.", + "keywords": [ + "REPL", + "Tinker", + "laravel", + "psysh" + ], + "support": { + "issues": "https://github.com/laravel/tinker/issues", + "source": "https://github.com/laravel/tinker/tree/v3.0.2" + }, + "time": "2026-03-17T14:54:13+00:00" + }, + { + "name": "league/commonmark", + "version": "2.10.1", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/commonmark.git", + "reference": "9d489ab67a02960fd8ffe624d93f751daf95439e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/9d489ab67a02960fd8ffe624d93f751daf95439e", + "reference": "9d489ab67a02960fd8ffe624d93f751daf95439e", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "league/config": "^1.1.1", + "php": "^7.4 || ^8.0", + "psr/event-dispatcher": "^1.0", + "symfony/deprecation-contracts": "^2.1 || ^3.0", + "symfony/polyfill-php80": "^1.16" + }, + "require-dev": { + "cebe/markdown": "^1.0", + "commonmark/cmark": "0.31.1", + "commonmark/commonmark.js": "0.31.1", + "composer/package-versions-deprecated": "^1.8", + "embed/embed": "^4.4", + "erusev/parsedown": "^1.0", + "ext-json": "*", + "github/gfm": "0.29.0", + "michelf/php-markdown": "^1.4 || ^2.0", + "nyholm/psr7": "^1.5", + "phpstan/phpstan": "^2.0.0", + "phpunit/phpunit": "^9.5.21 || ^10.5.9 || ^11.0.0 || ^12.0.0 || ^13.0.0", + "scrutinizer/ocular": "^1.8.1", + "symfony/finder": "^5.3 | ^6.0 | ^7.0 || ^8.0", + "symfony/process": "^5.4 | ^6.0 | ^7.0 || ^8.0", + "symfony/yaml": "^2.3 | ^3.0 | ^4.0 | ^5.0 | ^6.0 | ^7.0 || ^8.0", + "unleashedtech/php-coding-standard": "^3.1.1", + "vimeo/psalm": "^4.24.0 || ^5.0.0 || ^6.0.0" + }, + "suggest": { + "symfony/yaml": "v2.3+ required if using the Front Matter extension" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.11-dev" + } + }, + "autoload": { + "psr-4": { + "League\\CommonMark\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Colin O'Dell", + "email": "colinodell@gmail.com", + "homepage": "https://www.colinodell.com", + "role": "Lead Developer" + } + ], + "description": "Highly-extensible PHP Markdown parser which fully supports the CommonMark spec and GitHub-Flavored Markdown (GFM)", + "homepage": "https://commonmark.thephpleague.com", + "keywords": [ + "commonmark", + "flavored", + "gfm", + "github", + "github-flavored", + "markdown", + "md", + "parser" + ], + "support": { + "docs": "https://commonmark.thephpleague.com/", + "forum": "https://github.com/thephpleague/commonmark/discussions", + "issues": "https://github.com/thephpleague/commonmark/issues", + "rss": "https://github.com/thephpleague/commonmark/releases.atom", + "source": "https://github.com/thephpleague/commonmark" + }, + "funding": [ + { + "url": "https://www.colinodell.com/sponsor", + "type": "custom" + }, + { + "url": "https://www.paypal.me/colinpodell/10.00", + "type": "custom" + }, + { + "url": "https://github.com/colinodell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/league/commonmark", + "type": "tidelift" + } + ], + "time": "2026-09-07T13:44:26+00:00" + }, + { + "name": "league/config", + "version": "v1.2.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/config.git", + "reference": "754b3604fb2984c71f4af4a9cbe7b57f346ec1f3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/config/zipball/754b3604fb2984c71f4af4a9cbe7b57f346ec1f3", + "reference": "754b3604fb2984c71f4af4a9cbe7b57f346ec1f3", + "shasum": "" + }, + "require": { + "dflydev/dot-access-data": "^3.0.1", + "nette/schema": "^1.2", + "php": "^7.4 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^1.8.2", + "phpunit/phpunit": "^9.5.5", + "scrutinizer/ocular": "^1.8.1", + "unleashedtech/php-coding-standard": "^3.1", + "vimeo/psalm": "^4.7.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.2-dev" + } + }, + "autoload": { + "psr-4": { + "League\\Config\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Colin O'Dell", + "email": "colinodell@gmail.com", + "homepage": "https://www.colinodell.com", + "role": "Lead Developer" + } + ], + "description": "Define configuration arrays with strict schemas and access values with dot notation", + "homepage": "https://config.thephpleague.com", + "keywords": [ + "array", + "config", + "configuration", + "dot", + "dot-access", + "nested", + "schema" + ], + "support": { + "docs": "https://config.thephpleague.com/", + "issues": "https://github.com/thephpleague/config/issues", + "rss": "https://github.com/thephpleague/config/releases.atom", + "source": "https://github.com/thephpleague/config" + }, + "funding": [ + { + "url": "https://www.colinodell.com/sponsor", + "type": "custom" + }, + { + "url": "https://www.paypal.me/colinpodell/10.00", + "type": "custom" + }, + { + "url": "https://github.com/colinodell", + "type": "github" + } + ], + "time": "2022-12-11T20:36:23+00:00" + }, + { + "name": "league/flysystem", + "version": "3.36.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/flysystem.git", + "reference": "f7fb152932f30072d573510cbd4dd657d6475b25" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/f7fb152932f30072d573510cbd4dd657d6475b25", + "reference": "f7fb152932f30072d573510cbd4dd657d6475b25", + "shasum": "" + }, + "require": { + "league/flysystem-local": "^3.0.0", + "league/mime-type-detection": "^1.0.0", + "php": "^8.0.2" + }, + "conflict": { + "async-aws/core": "<1.19.0", + "async-aws/s3": "<1.14.0", + "aws/aws-sdk-php": "3.209.31 || 3.210.0", + "guzzlehttp/guzzle": "<7.0", + "guzzlehttp/ringphp": "<1.1.1", + "phpseclib/phpseclib": "3.0.15", + "symfony/http-client": "<5.2" + }, + "require-dev": { + "async-aws/s3": "^1.5 || ^2.0", + "async-aws/simple-s3": "^1.1 || ^2.0", + "aws/aws-sdk-php": "^3.295.10", + "composer/semver": "^3.0", + "ext-fileinfo": "*", + "ext-ftp": "*", + "ext-mongodb": "^1.3|^2", + "ext-zip": "*", + "friendsofphp/php-cs-fixer": "^3.5", + "google/cloud-storage": "^1.23", + "guzzlehttp/psr7": "^2.6", + "microsoft/azure-storage-blob": "^1.1", + "mongodb/mongodb": "^1.2|^2", + "phpseclib/phpseclib": "^3.0.36", + "phpstan/phpstan": "^1.10", + "phpunit/phpunit": "^9.5.11|^10.0", + "sabre/dav": "^4.6.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "League\\Flysystem\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Frank de Jonge", + "email": "info@frankdejonge.nl" + } + ], + "description": "File storage abstraction for PHP", + "keywords": [ + "WebDAV", + "aws", + "cloud", + "file", + "files", + "filesystem", + "filesystems", + "ftp", + "s3", + "sftp", + "storage" + ], + "support": { + "issues": "https://github.com/thephpleague/flysystem/issues", + "source": "https://github.com/thephpleague/flysystem/tree/3.36.0" + }, + "time": "2026-09-02T08:00:27+00:00" + }, + { + "name": "league/flysystem-local", + "version": "3.35.3", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/flysystem-local.git", + "reference": "a099b24dce160f3b2239043d13d47c4a1a214ea4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/flysystem-local/zipball/a099b24dce160f3b2239043d13d47c4a1a214ea4", + "reference": "a099b24dce160f3b2239043d13d47c4a1a214ea4", + "shasum": "" + }, + "require": { + "ext-fileinfo": "*", + "league/flysystem": "^3.0.0", + "league/mime-type-detection": "^1.0.0", + "php": "^8.0.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "League\\Flysystem\\Local\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Frank de Jonge", + "email": "info@frankdejonge.nl" + } + ], + "description": "Local filesystem adapter for Flysystem.", + "keywords": [ + "Flysystem", + "file", + "files", + "filesystem", + "local" + ], + "support": { + "source": "https://github.com/thephpleague/flysystem-local/tree/3.35.3" + }, + "time": "2026-08-12T13:29:21+00:00" + }, + { + "name": "league/mime-type-detection", + "version": "1.17.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/mime-type-detection.git", + "reference": "f5f47eff7c48ed1003069a2ca67f316fb4021c76" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/f5f47eff7c48ed1003069a2ca67f316fb4021c76", + "reference": "f5f47eff7c48ed1003069a2ca67f316fb4021c76", + "shasum": "" + }, + "require": { + "ext-fileinfo": "*", + "php": "^7.4 || ^8.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^3.2", + "phpstan/phpstan": "^0.12.68", + "phpunit/phpunit": "^8.5.8 || ^9.3 || ^10.0 || ^11.0 || ^12.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "League\\MimeTypeDetection\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Frank de Jonge", + "email": "info@frankdejonge.nl" + } + ], + "description": "Mime-type detection for Flysystem", + "support": { + "issues": "https://github.com/thephpleague/mime-type-detection/issues", + "source": "https://github.com/thephpleague/mime-type-detection/tree/1.17.0" + }, + "funding": [ + { + "url": "https://github.com/frankdejonge", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/league/flysystem", + "type": "tidelift" + } + ], + "time": "2026-07-09T11:49:27+00:00" + }, + { + "name": "league/uri", + "version": "7.8.1", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/uri.git", + "reference": "08cf38e3924d4f56238125547b5720496fac8fd4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/uri/zipball/08cf38e3924d4f56238125547b5720496fac8fd4", + "reference": "08cf38e3924d4f56238125547b5720496fac8fd4", + "shasum": "" + }, + "require": { + "league/uri-interfaces": "^7.8.1", + "php": "^8.1", + "psr/http-factory": "^1" + }, + "conflict": { + "league/uri-schemes": "^1.0" + }, + "suggest": { + "ext-bcmath": "to improve IPV4 host parsing", + "ext-dom": "to convert the URI into an HTML anchor tag", + "ext-fileinfo": "to create Data URI from file contennts", + "ext-gmp": "to improve IPV4 host parsing", + "ext-intl": "to handle IDN host with the best performance", + "ext-uri": "to use the PHP native URI class", + "jeremykendall/php-domain-parser": "to further parse the URI host and resolve its Public Suffix and Top Level Domain", + "league/uri-components": "to provide additional tools to manipulate URI objects components", + "league/uri-polyfill": "to backport the PHP URI extension for older versions of PHP", + "php-64bit": "to improve IPV4 host parsing", + "rowbot/url": "to handle URLs using the WHATWG URL Living Standard specification", + "symfony/polyfill-intl-idn": "to handle IDN host via the Symfony polyfill if ext-intl is not present" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "7.x-dev" + } + }, + "autoload": { + "psr-4": { + "League\\Uri\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ignace Nyamagana Butera", + "email": "nyamsprod@gmail.com", + "homepage": "https://nyamsprod.com" + } + ], + "description": "URI manipulation library", + "homepage": "https://uri.thephpleague.com", + "keywords": [ + "URN", + "data-uri", + "file-uri", + "ftp", + "hostname", + "http", + "https", + "middleware", + "parse_str", + "parse_url", + "psr-7", + "query-string", + "querystring", + "rfc2141", + "rfc3986", + "rfc3987", + "rfc6570", + "rfc8141", + "uri", + "uri-template", + "url", + "ws" + ], + "support": { + "docs": "https://uri.thephpleague.com", + "forum": "https://thephpleague.slack.com", + "issues": "https://github.com/thephpleague/uri-src/issues", + "source": "https://github.com/thephpleague/uri/tree/7.8.1" + }, + "funding": [ + { + "url": "https://github.com/sponsors/nyamsprod", + "type": "github" + } + ], + "time": "2026-03-15T20:22:25+00:00" + }, + { + "name": "league/uri-interfaces", + "version": "7.8.1", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/uri-interfaces.git", + "reference": "85d5c77c5d6d3af6c54db4a78246364908f3c928" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/uri-interfaces/zipball/85d5c77c5d6d3af6c54db4a78246364908f3c928", + "reference": "85d5c77c5d6d3af6c54db4a78246364908f3c928", + "shasum": "" + }, + "require": { + "ext-filter": "*", + "php": "^8.1", + "psr/http-message": "^1.1 || ^2.0" + }, + "suggest": { + "ext-bcmath": "to improve IPV4 host parsing", + "ext-gmp": "to improve IPV4 host parsing", + "ext-intl": "to handle IDN host with the best performance", + "php-64bit": "to improve IPV4 host parsing", + "rowbot/url": "to handle URLs using the WHATWG URL Living Standard specification", + "symfony/polyfill-intl-idn": "to handle IDN host via the Symfony polyfill if ext-intl is not present" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "7.x-dev" + } + }, + "autoload": { + "psr-4": { + "League\\Uri\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ignace Nyamagana Butera", + "email": "nyamsprod@gmail.com", + "homepage": "https://nyamsprod.com" + } + ], + "description": "Common tools for parsing and resolving RFC3987/RFC3986 URI", + "homepage": "https://uri.thephpleague.com", + "keywords": [ + "data-uri", + "file-uri", + "ftp", + "hostname", + "http", + "https", + "parse_str", + "parse_url", + "psr-7", + "query-string", + "querystring", + "rfc3986", + "rfc3987", + "rfc6570", + "uri", + "url", + "ws" + ], + "support": { + "docs": "https://uri.thephpleague.com", + "forum": "https://thephpleague.slack.com", + "issues": "https://github.com/thephpleague/uri-src/issues", + "source": "https://github.com/thephpleague/uri-interfaces/tree/7.8.1" + }, + "funding": [ + { + "url": "https://github.com/sponsors/nyamsprod", + "type": "github" + } + ], + "time": "2026-03-08T20:05:35+00:00" + }, + { + "name": "maml/maml", + "version": "v3.2.0", + "source": { + "type": "git", + "url": "https://github.com/maml-dev/maml-php.git", + "reference": "f11cdff4325bf399f23c33fc1995450e40ac0854" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/maml-dev/maml-php/zipball/f11cdff4325bf399f23c33fc1995450e40ac0854", + "reference": "f11cdff4325bf399f23c33fc1995450e40ac0854", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "php": ">=8.2" + }, + "require-dev": { + "php-cs-fixer/shim": "^3.94", + "phpstan/phpstan": "^2.1", + "phpunit/phpunit": "^10.0 || ^11.0 || ^12.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Maml\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Anton Medvedev", + "email": "anton@medv.io" + } + ], + "description": "MAML Parser", + "homepage": "https://maml.dev", + "keywords": [ + "config", + "configuration", + "maml", + "parser", + "serializer" + ], + "support": { + "issues": "https://github.com/maml-dev/maml-php/issues", + "source": "https://github.com/maml-dev/maml-php/tree/v3.2.0" + }, + "time": "2026-04-12T16:50:36+00:00" + }, + { + "name": "monolog/monolog", + "version": "3.11.0", + "source": { + "type": "git", + "url": "https://github.com/Seldaek/monolog.git", + "reference": "147f303310f06334f03f409e49d7ad1e275ff05a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/147f303310f06334f03f409e49d7ad1e275ff05a", + "reference": "147f303310f06334f03f409e49d7ad1e275ff05a", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/log": "^2.0 || ^3.0" + }, + "provide": { + "psr/log-implementation": "3.0.0" + }, + "require-dev": { + "aws/aws-sdk-php": "^3.0", + "doctrine/couchdb": "~1.0@dev", + "elasticsearch/elasticsearch": "^7 || ^8", + "ext-json": "*", + "graylog2/gelf-php": "^1.4.2 || ^2.0", + "guzzlehttp/guzzle": "^7.4.5", + "guzzlehttp/psr7": "^2.2", + "mongodb/mongodb": "^1.8 || ^2.0", + "php-amqplib/php-amqplib": "~2.4 || ^3", + "php-console/php-console": "^3.1.8", + "phpstan/phpstan": "^2", + "phpstan/phpstan-deprecation-rules": "^2", + "phpstan/phpstan-strict-rules": "^2", + "phpunit/phpunit": "^10.5.17 || ^11.0.7", + "predis/predis": "^1.1 || ^2", + "rollbar/rollbar": "^4.0", + "ruflin/elastica": "^7 || ^8", + "symfony/mailer": "^5.4 || ^6", + "symfony/mime": "^5.4 || ^6" + }, + "suggest": { + "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", + "doctrine/couchdb": "Allow sending log messages to a CouchDB server", + "elasticsearch/elasticsearch": "Allow sending log messages to an Elasticsearch server via official client", + "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", + "ext-curl": "Required to send log messages using the IFTTTHandler, the LogglyHandler, the SendGridHandler, the SlackWebhookHandler or the TelegramBotHandler", + "ext-mbstring": "Allow to work properly with unicode symbols", + "ext-mongodb": "Allow sending log messages to a MongoDB server (via driver)", + "ext-openssl": "Required to send log messages using SSL", + "ext-sockets": "Allow sending log messages to a Syslog server (via UDP driver)", + "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", + "rollbar/rollbar": "Allow sending log messages to Rollbar", + "ruflin/elastica": "Allow sending log messages to an Elastic Search server" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Monolog\\": "src/Monolog" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "https://seld.be" + } + ], + "description": "Sends your logs to files, sockets, inboxes, databases and various web services", + "homepage": "https://github.com/Seldaek/monolog", + "keywords": [ + "log", + "logging", + "psr-3" + ], + "support": { + "issues": "https://github.com/Seldaek/monolog/issues", + "source": "https://github.com/Seldaek/monolog/tree/3.11.0" + }, + "funding": [ + { + "url": "https://github.com/Seldaek", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/monolog/monolog", + "type": "tidelift" + } + ], + "time": "2026-09-02T12:39:56+00:00" + }, + { + "name": "nesbot/carbon", + "version": "3.13.2", + "source": { + "type": "git", + "url": "https://github.com/CarbonPHP/carbon.git", + "reference": "a1c54919f5fff9800cd03c32bd01defd5a4061cb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/CarbonPHP/carbon/zipball/a1c54919f5fff9800cd03c32bd01defd5a4061cb", + "reference": "a1c54919f5fff9800cd03c32bd01defd5a4061cb", + "shasum": "" + }, + "require": { + "carbonphp/carbon-doctrine-types": "<100.0", + "ext-json": "*", + "php": "^8.1", + "psr/clock": "^1.0", + "symfony/clock": "^6.3.12 || ^7.0 || ^8.0", + "symfony/polyfill-mbstring": "^1.0", + "symfony/translation": "^4.4.18 || ^5.2.1 || ^6.0 || ^7.0 || ^8.0" + }, + "provide": { + "psr/clock-implementation": "1.0" + }, + "require-dev": { + "doctrine/dbal": "^3.6.3 || ^4.0", + "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", + "phpstan/extension-installer": "^1.4.3", + "phpstan/phpstan": "^2.1.22", + "phpunit/phpunit": "^10.5.53", + "squizlabs/php_codesniffer": "^3.13.4 || ^4.0.0" + }, + "bin": [ + "bin/carbon" + ], + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Carbon\\Laravel\\ServiceProvider" + ] + }, + "phpstan": { + "includes": [ + "extension.neon" + ] + }, + "branch-alias": { + "dev-2.x": "2.x-dev", + "dev-master": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Carbon\\": "src/Carbon/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Brian Nesbitt", + "email": "brian@nesbot.com", + "homepage": "https://markido.com" + }, + { + "name": "kylekatarnls", + "homepage": "https://github.com/kylekatarnls" + } + ], + "description": "An API extension for DateTime that supports 281 different languages.", + "homepage": "https://carbonphp.github.io/carbon/", + "keywords": [ + "date", + "datetime", + "time" + ], + "support": { + "docs": "https://carbonphp.github.io/carbon/guide/getting-started/introduction.html", + "issues": "https://github.com/CarbonPHP/carbon/issues", + "source": "https://github.com/CarbonPHP/carbon" + }, + "funding": [ + { + "url": "https://github.com/sponsors/kylekatarnls", + "type": "github" + }, + { + "url": "https://opencollective.com/Carbon#sponsor", + "type": "opencollective" + }, + { + "url": "https://tidelift.com/subscription/pkg/packagist-nesbot-carbon?utm_source=packagist-nesbot-carbon&utm_medium=referral&utm_campaign=readme", + "type": "tidelift" + } + ], + "time": "2026-08-08T11:40:35+00:00" + }, + { + "name": "nette/schema", + "version": "v1.3.6", + "source": { + "type": "git", + "url": "https://github.com/nette/schema.git", + "reference": "c54350438cd6914616f790a49cb424605f421562" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nette/schema/zipball/c54350438cd6914616f790a49cb424605f421562", + "reference": "c54350438cd6914616f790a49cb424605f421562", + "shasum": "" + }, + "require": { + "nette/utils": "^4.0", + "php": "8.1 - 8.5" + }, + "require-dev": { + "nette/phpstan-rules": "^1.0", + "nette/tester": "^2.6", + "phpstan/extension-installer": "^1.4@stable", + "phpstan/phpstan": "^2.1.39@stable", + "tracy/tracy": "^2.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3-dev" + } + }, + "autoload": { + "psr-4": { + "Nette\\": "src" + }, + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause", + "GPL-2.0-only", + "GPL-3.0-only" + ], + "authors": [ + { + "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", + "keywords": [ + "config", + "nette" + ], + "support": { + "issues": "https://github.com/nette/schema/issues", + "source": "https://github.com/nette/schema/tree/v1.3.6" + }, + "time": "2026-08-16T21:58:41+00:00" + }, + { + "name": "nette/utils", + "version": "v4.1.5", + "source": { + "type": "git", + "url": "https://github.com/nette/utils.git", + "reference": "b043439dbdf954e6c28b5ea7e34b0100f83165e0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nette/utils/zipball/b043439dbdf954e6c28b5ea7e34b0100f83165e0", + "reference": "b043439dbdf954e6c28b5ea7e34b0100f83165e0", + "shasum": "" + }, + "require": { + "php": "8.2 - 8.5" + }, + "conflict": { + "nette/finder": "<3", + "nette/schema": "<1.2.2" + }, + "require-dev": { + "jetbrains/phpstorm-attributes": "^1.2", + "nette/phpstan-rules": "^1.0", + "nette/tester": "^2.5", + "phpstan/extension-installer": "^1.4@stable", + "phpstan/phpstan": "^2.1@stable", + "tracy/tracy": "^2.9" + }, + "suggest": { + "ext-gd": "to use Image", + "ext-iconv": "to use Strings::chr(), ord() and reverse()", + "ext-intl": "to use Strings::webalize(), toAscii(), normalize() and compare()", + "ext-json": "to use Nette\\Utils\\Json", + "ext-mbstring": "to use Strings::lower() etc...", + "ext-tokenizer": "to use Nette\\Utils\\Reflection::getUseStatements()" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.1-dev" + } + }, + "autoload": { + "psr-4": { + "Nette\\": "src" + }, + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause", + "GPL-2.0-only", + "GPL-3.0-only" + ], + "authors": [ + { + "name": "David Grudl", + "homepage": "https://davidgrudl.com" + }, + { + "name": "Nette Community", + "homepage": "https://nette.org/contributors" + } + ], + "description": "🛠 Nette Utils: lightweight utilities for string & array manipulation, image handling, safe JSON encoding/decoding, validation, slug or strong password generating etc.", + "homepage": "https://nette.org", + "keywords": [ + "array", + "core", + "datetime", + "images", + "json", + "nette", + "paginator", + "password", + "slugify", + "string", + "unicode", + "utf-8", + "utility", + "validation" + ], + "support": { + "issues": "https://github.com/nette/utils/issues", + "source": "https://github.com/nette/utils/tree/v4.1.5" + }, + "time": "2026-07-17T23:02:45+00:00" + }, + { + "name": "nikic/php-parser", + "version": "v5.8.0", + "source": { + "type": "git", + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "044a6a392ff8ad0d61f14370a5fbbd0a0107152f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/044a6a392ff8ad0d61f14370a5fbbd0a0107152f", + "reference": "044a6a392ff8ad0d61f14370a5fbbd0a0107152f", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-tokenizer": "*", + "php": ">=7.4" + }, + "require-dev": { + "ircmaxell/php-yacc": "^0.0.7", + "phpunit/phpunit": "^9.0" + }, + "bin": [ + "bin/php-parse" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.x-dev" + } + }, + "autoload": { + "psr-4": { + "PhpParser\\": "lib/PhpParser" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Nikita Popov" + } + ], + "description": "A PHP parser written in PHP", + "keywords": [ + "parser", + "php" + ], + "support": { + "issues": "https://github.com/nikic/PHP-Parser/issues", + "source": "https://github.com/nikic/PHP-Parser/tree/v5.8.0" + }, + "time": "2026-07-04T14:30:18+00:00" + }, + { + "name": "nunomaduro/termwind", + "version": "v2.4.0", + "source": { + "type": "git", + "url": "https://github.com/nunomaduro/termwind.git", + "reference": "712a31b768f5daea284c2169a7d227031001b9a8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nunomaduro/termwind/zipball/712a31b768f5daea284c2169a7d227031001b9a8", + "reference": "712a31b768f5daea284c2169a7d227031001b9a8", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "php": "^8.2", + "symfony/console": "^7.4.4 || ^8.0.4" + }, + "require-dev": { + "illuminate/console": "^11.47.0", + "laravel/pint": "^1.27.1", + "mockery/mockery": "^1.6.12", + "pestphp/pest": "^2.36.0 || ^3.8.4 || ^4.3.2", + "phpstan/phpstan": "^1.12.32", + "phpstan/phpstan-strict-rules": "^1.6.2", + "symfony/var-dumper": "^7.3.5 || ^8.0.4", + "thecodingmachine/phpstan-strict-rules": "^1.0.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Termwind\\Laravel\\TermwindServiceProvider" + ] + }, + "branch-alias": { + "dev-2.x": "2.x-dev" + } + }, + "autoload": { + "files": [ + "src/Functions.php" + ], + "psr-4": { + "Termwind\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nuno Maduro", + "email": "enunomaduro@gmail.com" + } + ], + "description": "It's like Tailwind CSS, but for the console.", + "keywords": [ + "cli", + "console", + "css", + "package", + "php", + "style" + ], + "support": { + "issues": "https://github.com/nunomaduro/termwind/issues", + "source": "https://github.com/nunomaduro/termwind/tree/v2.4.0" + }, + "funding": [ + { + "url": "https://www.paypal.com/paypalme/enunomaduro", + "type": "custom" + }, + { + "url": "https://github.com/nunomaduro", + "type": "github" + }, + { + "url": "https://github.com/xiCO2k", + "type": "github" + } + ], + "time": "2026-02-16T23:10:27+00:00" + }, + { + "name": "phpoption/phpoption", + "version": "1.10.0", + "source": { + "type": "git", + "url": "https://github.com/schmittjoh/php-option.git", + "reference": "67b192b6a42ec03944b972d6e633ddec78ad2c6d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/67b192b6a42ec03944b972d6e633ddec78ad2c6d", + "reference": "67b192b6a42ec03944b972d6e633ddec78ad2c6d", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.2", + "phpunit/phpunit": "^8.5.54 || ^9.6.36 || ^10.5.64 || ^11.5.56 || ^12.5.33" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + }, + "branch-alias": { + "dev-master": "1.9-dev" + } + }, + "autoload": { + "psr-4": { + "PhpOption\\": "src/PhpOption/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Johannes M. Schmitt", + "email": "schmittjoh@gmail.com", + "homepage": "https://github.com/schmittjoh" + }, + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + } + ], + "description": "Option Type for PHP", + "keywords": [ + "language", + "option", + "php", + "type" + ], + "support": { + "issues": "https://github.com/schmittjoh/php-option/issues", + "source": "https://github.com/schmittjoh/php-option/tree/1.10.0" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpoption/phpoption", + "type": "tidelift" + } + ], + "time": "2026-08-24T00:54:40+00:00" + }, + { + "name": "predis/predis", + "version": "v3.6.0", + "source": { + "type": "git", + "url": "https://github.com/predis/predis.git", + "reference": "2ff20c08bb63697245ffee3f198d1673086c302d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/predis/predis/zipball/2ff20c08bb63697245ffee3f198d1673086c302d", + "reference": "2ff20c08bb63697245ffee3f198d1673086c302d", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0", + "psr/http-message": "^1.0|^2.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^3.3", + "phpstan/phpstan": "^1.9", + "phpunit/phpcov": "^6.0 || ^8.0", + "phpunit/phpunit": "^8.0 || ~9.4.4" + }, + "suggest": { + "ext-relay": "Faster connection with in-memory caching (>=0.6.2)" + }, + "type": "library", + "autoload": { + "psr-4": { + "Predis\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Till Krüss", + "homepage": "https://till.im", + "role": "Maintainer" + } + ], + "description": "A flexible and feature-complete Redis/Valkey client for PHP.", + "homepage": "http://github.com/predis/predis", + "keywords": [ + "nosql", + "predis", + "redis" + ], + "support": { + "issues": "https://github.com/predis/predis/issues", + "source": "https://github.com/predis/predis/tree/v3.6.0" + }, + "funding": [ + { + "url": "https://github.com/sponsors/tillkruss", + "type": "github" + } + ], + "time": "2026-08-14T23:07:56+00:00" + }, + { + "name": "psr/clock", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/clock.git", + "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/clock/zipball/e41a24703d4560fd0acb709162f73b8adfc3aa0d", + "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d", + "shasum": "" + }, + "require": { + "php": "^7.0 || ^8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Psr\\Clock\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for reading the clock.", + "homepage": "https://github.com/php-fig/clock", + "keywords": [ + "clock", + "now", + "psr", + "psr-20", + "time" + ], + "support": { + "issues": "https://github.com/php-fig/clock/issues", + "source": "https://github.com/php-fig/clock/tree/1.0.0" + }, + "time": "2022-11-25T14:36:26+00:00" + }, + { + "name": "psr/container", + "version": "2.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/container.git", + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963", + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963", + "shasum": "" + }, + "require": { + "php": ">=7.4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Container\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common Container Interface (PHP FIG PSR-11)", + "homepage": "https://github.com/php-fig/container", + "keywords": [ + "PSR-11", + "container", + "container-interface", + "container-interop", + "psr" + ], + "support": { + "issues": "https://github.com/php-fig/container/issues", + "source": "https://github.com/php-fig/container/tree/2.0.2" + }, + "time": "2021-11-05T16:47:00+00:00" + }, + { + "name": "psr/event-dispatcher", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/event-dispatcher.git", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0", + "shasum": "" + }, + "require": { + "php": ">=7.2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\EventDispatcher\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Standard interfaces for event handling.", + "keywords": [ + "events", + "psr", + "psr-14" + ], + "support": { + "issues": "https://github.com/php-fig/event-dispatcher/issues", + "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0" + }, + "time": "2019-01-08T18:20:26+00:00" + }, + { + "name": "psr/http-client", + "version": "1.0.3", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-client.git", + "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-client/zipball/bb5906edc1c324c9a05aa0873d40117941e5fa90", + "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90", + "shasum": "" + }, + "require": { + "php": "^7.0 || ^8.0", + "psr/http-message": "^1.0 || ^2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Client\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP clients", + "homepage": "https://github.com/php-fig/http-client", + "keywords": [ + "http", + "http-client", + "psr", + "psr-18" + ], + "support": { + "source": "https://github.com/php-fig/http-client" + }, + "time": "2023-09-23T14:17:50+00:00" + }, + { + "name": "psr/http-factory", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-factory.git", + "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-factory/zipball/2b4765fddfe3b508ac62f829e852b1501d3f6e8a", + "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a", + "shasum": "" + }, + "require": { + "php": ">=7.1", + "psr/http-message": "^1.0 || ^2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "PSR-17: Common interfaces for PSR-7 HTTP message factories", + "keywords": [ + "factory", + "http", + "message", + "psr", + "psr-17", + "psr-7", + "request", + "response" + ], + "support": { + "source": "https://github.com/php-fig/http-factory" + }, + "time": "2024-04-15T12:06:14+00:00" + }, + { + "name": "psr/http-message", + "version": "2.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-message.git", + "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/402d35bcb92c70c026d1a6a9883f06b2ead23d71", + "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP messages", + "homepage": "https://github.com/php-fig/http-message", + "keywords": [ + "http", + "http-message", + "psr", + "psr-7", + "request", + "response" + ], + "support": { + "source": "https://github.com/php-fig/http-message/tree/2.0" + }, + "time": "2023-04-04T09:54:51+00:00" + }, + { + "name": "psr/log", + "version": "3.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", + "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", + "shasum": "" + }, + "require": { + "php": ">=8.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "support": { + "source": "https://github.com/php-fig/log/tree/3.0.2" + }, + "time": "2024-09-11T13:17:53+00:00" + }, + { + "name": "psr/simple-cache", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/simple-cache.git", + "reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/764e0b3939f5ca87cb904f570ef9be2d78a07865", + "reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865", + "shasum": "" + }, + "require": { + "php": ">=8.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\SimpleCache\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interfaces for simple caching", + "keywords": [ + "cache", + "caching", + "psr", + "psr-16", + "simple-cache" + ], + "support": { + "source": "https://github.com/php-fig/simple-cache/tree/3.0.0" + }, + "time": "2021-10-29T13:26:27+00:00" + }, + { + "name": "psy/psysh", + "version": "v0.12.24", + "source": { + "type": "git", + "url": "https://github.com/bobthecow/psysh.git", + "reference": "ca0fdcf8a7617afa3adfdf1b5fef573dffb69ca1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/bobthecow/psysh/zipball/ca0fdcf8a7617afa3adfdf1b5fef573dffb69ca1", + "reference": "ca0fdcf8a7617afa3adfdf1b5fef573dffb69ca1", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-tokenizer": "*", + "nikic/php-parser": "^5.0 || ^4.0", + "php": "^8.0 || ^7.4", + "symfony/console": "^8.0 || ^7.0 || ^6.0 || ^5.0 || ^4.0 || ^3.4", + "symfony/var-dumper": "^8.0 || ^7.0 || ^6.0 || ^5.0 || ^4.0 || ^3.4" + }, + "conflict": { + "symfony/console": "4.4.37 || 5.3.14 || 5.3.15 || 5.4.3 || 5.4.4 || 6.0.3 || 6.0.4" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.2", + "composer/class-map-generator": "^1.6" + }, + "suggest": { + "composer/class-map-generator": "Improved tab completion performance with better class discovery.", + "ext-pcntl": "Enabling the PCNTL extension makes PsySH a lot happier :)", + "ext-posix": "If you have PCNTL, you'll want the POSIX extension as well." + }, + "bin": [ + "bin/psysh" + ], + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": false, + "forward-command": false + }, + "branch-alias": { + "dev-main": "0.12.x-dev" + } + }, + "autoload": { + "files": [ + "src/functions.php" + ], + "psr-4": { + "Psy\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Justin Hileman", + "email": "justin@justinhileman.info" + } + ], + "description": "An interactive shell for modern PHP.", + "homepage": "https://psysh.org", + "keywords": [ + "REPL", + "console", + "interactive", + "shell" + ], + "support": { + "issues": "https://github.com/bobthecow/psysh/issues", + "source": "https://github.com/bobthecow/psysh/tree/v0.12.24" + }, + "time": "2026-06-29T15:41:09+00:00" + }, + { + "name": "ramsey/collection", + "version": "2.1.1", + "source": { + "type": "git", + "url": "https://github.com/ramsey/collection.git", + "reference": "344572933ad0181accbf4ba763e85a0306a8c5e2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ramsey/collection/zipball/344572933ad0181accbf4ba763e85a0306a8c5e2", + "reference": "344572933ad0181accbf4ba763e85a0306a8c5e2", + "shasum": "" + }, + "require": { + "php": "^8.1" + }, + "require-dev": { + "captainhook/plugin-composer": "^5.3", + "ergebnis/composer-normalize": "^2.45", + "fakerphp/faker": "^1.24", + "hamcrest/hamcrest-php": "^2.0", + "jangregor/phpstan-prophecy": "^2.1", + "mockery/mockery": "^1.6", + "php-parallel-lint/php-console-highlighter": "^1.0", + "php-parallel-lint/php-parallel-lint": "^1.4", + "phpspec/prophecy-phpunit": "^2.3", + "phpstan/extension-installer": "^1.4", + "phpstan/phpstan": "^2.1", + "phpstan/phpstan-mockery": "^2.0", + "phpstan/phpstan-phpunit": "^2.0", + "phpunit/phpunit": "^10.5", + "ramsey/coding-standard": "^2.3", + "ramsey/conventional-commits": "^1.6", + "roave/security-advisories": "dev-latest" + }, + "type": "library", + "extra": { + "captainhook": { + "force-install": true + }, + "ramsey/conventional-commits": { + "configFile": "conventional-commits.json" + } + }, + "autoload": { + "psr-4": { + "Ramsey\\Collection\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ben Ramsey", + "email": "ben@benramsey.com", + "homepage": "https://benramsey.com" + } + ], + "description": "A PHP library for representing and manipulating collections.", + "keywords": [ + "array", + "collection", + "hash", + "map", + "queue", + "set" + ], + "support": { + "issues": "https://github.com/ramsey/collection/issues", + "source": "https://github.com/ramsey/collection/tree/2.1.1" + }, + "time": "2025-03-22T05:38:12+00:00" + }, + { + "name": "ramsey/uuid", + "version": "4.9.3", + "source": { + "type": "git", + "url": "https://github.com/ramsey/uuid.git", + "reference": "1df15849d00943a67d677dc9cfd80795f038c9f8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ramsey/uuid/zipball/1df15849d00943a67d677dc9cfd80795f038c9f8", + "reference": "1df15849d00943a67d677dc9cfd80795f038c9f8", + "shasum": "" + }, + "require": { + "brick/math": ">=0.8.16 <=0.18", + "php": "^8.0", + "ramsey/collection": "^1.2 || ^2.0" + }, + "replace": { + "rhumsaa/uuid": "self.version" + }, + "require-dev": { + "captainhook/captainhook": "^5.25", + "captainhook/plugin-composer": "^5.3", + "dealerdirect/phpcodesniffer-composer-installer": "^1.0", + "ergebnis/composer-normalize": "^2.47", + "mockery/mockery": "^1.6", + "paragonie/random-lib": "^2", + "php-mock/php-mock": "^2.6", + "php-mock/php-mock-mockery": "^1.5", + "php-parallel-lint/php-parallel-lint": "^1.4.0", + "phpbench/phpbench": "^1.2.14", + "phpstan/extension-installer": "^1.4", + "phpstan/phpstan": "^2.1", + "phpstan/phpstan-mockery": "^2.0", + "phpstan/phpstan-phpunit": "^2.0", + "phpunit/phpunit": "^9.6", + "slevomat/coding-standard": "^8.18", + "squizlabs/php_codesniffer": "^3.13" + }, + "suggest": { + "ext-bcmath": "Enables faster math with arbitrary-precision integers using BCMath.", + "ext-gmp": "Enables faster math with arbitrary-precision integers using GMP.", + "ext-uuid": "Enables the use of PeclUuidTimeGenerator and PeclUuidRandomGenerator.", + "paragonie/random-lib": "Provides RandomLib for use with the RandomLibAdapter", + "ramsey/uuid-doctrine": "Allows the use of Ramsey\\Uuid\\Uuid as Doctrine field type." + }, + "type": "library", + "extra": { + "captainhook": { + "force-install": true + } + }, + "autoload": { + "files": [ + "src/functions.php" + ], + "psr-4": { + "Ramsey\\Uuid\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A PHP library for generating and working with universally unique identifiers (UUIDs).", + "keywords": [ + "guid", + "identifier", + "uuid" + ], + "support": { + "issues": "https://github.com/ramsey/uuid/issues", + "source": "https://github.com/ramsey/uuid/tree/4.9.3" + }, + "time": "2026-06-18T03:57:49+00:00" + }, + { + "name": "symfony/clock", + "version": "v7.4.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/clock.git", + "reference": "674fa3b98e21531dd040e613479f5f6fa8f32111" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/clock/zipball/674fa3b98e21531dd040e613479f5f6fa8f32111", + "reference": "674fa3b98e21531dd040e613479f5f6fa8f32111", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "psr/clock": "^1.0", + "symfony/polyfill-php83": "^1.28" + }, + "provide": { + "psr/clock-implementation": "1.0" + }, + "type": "library", + "autoload": { + "files": [ + "Resources/now.php" + ], + "psr-4": { + "Symfony\\Component\\Clock\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Decouples applications from the system clock", + "homepage": "https://symfony.com", + "keywords": [ + "clock", + "psr20", + "time" + ], + "support": { + "source": "https://github.com/symfony/clock/tree/v7.4.8" + }, + "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-03-24T13:12:05+00:00" + }, + { + "name": "symfony/console", + "version": "v7.4.18", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "23d6f88a29f6d0eac45bd77d70307adf83ba7ab0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/23d6f88a29f6d0eac45bd77d70307adf83ba7ab0", + "reference": "23d6f88a29f6d0eac45bd77d70307adf83ba7ab0", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-mbstring": "~1.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/string": "^7.2|^8.0" + }, + "conflict": { + "symfony/dependency-injection": "<6.4", + "symfony/dotenv": "<6.4", + "symfony/event-dispatcher": "<6.4", + "symfony/lock": "<6.4", + "symfony/process": "<6.4" + }, + "provide": { + "psr/log-implementation": "1.0|2.0|3.0" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/config": "^6.4|^7.0|^8.0", + "symfony/dependency-injection": "^6.4|^7.0|^8.0", + "symfony/event-dispatcher": "^6.4|^7.0|^8.0", + "symfony/http-foundation": "^6.4|^7.0|^8.0", + "symfony/http-kernel": "^6.4|^7.0|^8.0", + "symfony/lock": "^6.4|^7.0|^8.0", + "symfony/messenger": "^6.4|^7.0|^8.0", + "symfony/process": "^6.4|^7.0|^8.0", + "symfony/stopwatch": "^6.4|^7.0|^8.0", + "symfony/var-dumper": "^6.4|^7.0|^8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Console\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Eases the creation of beautiful and testable command line interfaces", + "homepage": "https://symfony.com", + "keywords": [ + "cli", + "command-line", + "console", + "terminal" + ], + "support": { + "source": "https://github.com/symfony/console/tree/v7.4.18" + }, + "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-08-25T14:18:37+00:00" + }, + { + "name": "symfony/css-selector", + "version": "v7.4.18", + "source": { + "type": "git", + "url": "https://github.com/symfony/css-selector.git", + "reference": "fecf40067fc8d8880ea87b8ac227600b9aadd1d0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/fecf40067fc8d8880ea87b8ac227600b9aadd1d0", + "reference": "fecf40067fc8d8880ea87b8ac227600b9aadd1d0", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\CssSelector\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Jean-François Simon", + "email": "jeanfrancois.simon@sensiolabs.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Converts CSS selectors to XPath expressions", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/css-selector/tree/v7.4.18" + }, + "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-08-23T10:03:40+00:00" + }, + { + "name": "symfony/deprecation-contracts", + "version": "v3.7.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/deprecation-contracts.git", + "reference": "f3202fa1b5097b0af062dc978b32ecf63404e31d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/f3202fa1b5097b0af062dc978b32ecf63404e31d", + "reference": "f3202fa1b5097b0af062dc978b32ecf63404e31d", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "3.7-dev" + } + }, + "autoload": { + "files": [ + "function.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "A generic function and convention to trigger deprecation notices", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.7.1" + }, + "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-06-05T06:23:12+00:00" + }, + { + "name": "symfony/error-handler", + "version": "v7.4.17", + "source": { + "type": "git", + "url": "https://github.com/symfony/error-handler.git", + "reference": "8373921e231e190a88e2ad526951bbaa791576fa" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/8373921e231e190a88e2ad526951bbaa791576fa", + "reference": "8373921e231e190a88e2ad526951bbaa791576fa", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "psr/log": "^1|^2|^3", + "symfony/polyfill-php85": "^1.32", + "symfony/var-dumper": "^6.4|^7.0|^8.0" + }, + "conflict": { + "symfony/deprecation-contracts": "<2.5", + "symfony/http-kernel": "<6.4" + }, + "require-dev": { + "symfony/console": "^6.4|^7.0|^8.0", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/http-kernel": "^6.4|^7.0|^8.0", + "symfony/serializer": "^6.4|^7.0|^8.0", + "symfony/webpack-encore-bundle": "^1.0|^2.0" + }, + "bin": [ + "Resources/bin/patch-type-declarations" + ], + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\ErrorHandler\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides tools to manage errors and ease debugging PHP code", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/error-handler/tree/v7.4.17" + }, + "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-08-21T17:40:08+00:00" + }, + { + "name": "symfony/event-dispatcher", + "version": "v7.4.17", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher.git", + "reference": "d269974ee93c61d03620ffee358355bfdb471d66" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/d269974ee93c61d03620ffee358355bfdb471d66", + "reference": "d269974ee93c61d03620ffee358355bfdb471d66", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/event-dispatcher-contracts": "^2.5|^3" + }, + "conflict": { + "symfony/dependency-injection": "<6.4", + "symfony/service-contracts": "<2.5" + }, + "provide": { + "psr/event-dispatcher-implementation": "1.0", + "symfony/event-dispatcher-implementation": "2.0|3.0" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/config": "^6.4|^7.0|^8.0", + "symfony/dependency-injection": "^6.4|^7.0|^8.0", + "symfony/error-handler": "^6.4|^7.0|^8.0", + "symfony/expression-language": "^6.4|^7.0|^8.0", + "symfony/framework-bundle": "^6.4|^7.0|^8.0", + "symfony/http-foundation": "^6.4|^7.0|^8.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/stopwatch": "^6.4|^7.0|^8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\EventDispatcher\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/event-dispatcher/tree/v7.4.17" + }, + "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-08-21T17:40:08+00:00" + }, + { + "name": "symfony/event-dispatcher-contracts", + "version": "v3.7.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher-contracts.git", + "reference": "c7de7a00ffb67842132da02ea92988a39ccd9f4e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/c7de7a00ffb67842132da02ea92988a39ccd9f4e", + "reference": "c7de7a00ffb67842132da02ea92988a39ccd9f4e", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/event-dispatcher": "^1" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "3.7-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\EventDispatcher\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to dispatching event", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.7.1" + }, + "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-06-05T06:23:12+00:00" + }, + { + "name": "symfony/finder", + "version": "v7.4.17", + "source": { + "type": "git", + "url": "https://github.com/symfony/finder.git", + "reference": "5ce28827081f6d1f0c32eaf3882750f19cb5bbe6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/finder/zipball/5ce28827081f6d1f0c32eaf3882750f19cb5bbe6", + "reference": "5ce28827081f6d1f0c32eaf3882750f19cb5bbe6", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "symfony/filesystem": "^6.4|^7.0|^8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Finder\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Finds files and directories via an intuitive fluent interface", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/finder/tree/v7.4.17" + }, + "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-08-21T12:09:28+00:00" + }, + { + "name": "symfony/http-foundation", + "version": "v7.4.18", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-foundation.git", + "reference": "d070b716a32fbe3bf04204db0f58ace73b86d133" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/d070b716a32fbe3bf04204db0f58ace73b86d133", + "reference": "d070b716a32fbe3bf04204db0f58ace73b86d133", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-mbstring": "^1.1" + }, + "conflict": { + "doctrine/dbal": "<3.6", + "symfony/cache": "<6.4.12|>=7.0,<7.1.5" + }, + "require-dev": { + "doctrine/dbal": "^3.6|^4", + "predis/predis": "^1.1|^2.0", + "symfony/cache": "^6.4.12|^7.1.5|^8.0", + "symfony/clock": "^6.4|^7.0|^8.0", + "symfony/dependency-injection": "^6.4|^7.0|^8.0", + "symfony/expression-language": "^6.4|^7.0|^8.0", + "symfony/http-kernel": "^6.4|^7.0|^8.0", + "symfony/mime": "^6.4|^7.0|^8.0", + "symfony/rate-limiter": "^6.4|^7.0|^8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\HttpFoundation\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Defines an object-oriented layer for the HTTP specification", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/http-foundation/tree/v7.4.18" + }, + "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-08-30T20:10:52+00:00" + }, + { + "name": "symfony/http-kernel", + "version": "v7.4.18", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-kernel.git", + "reference": "275d2d2d24530f2a0eaf17704a3a93860a036351" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/275d2d2d24530f2a0eaf17704a3a93860a036351", + "reference": "275d2d2d24530f2a0eaf17704a3a93860a036351", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "psr/log": "^1|^2|^3", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/error-handler": "^6.4|^7.0|^8.0", + "symfony/event-dispatcher": "^7.3|^8.0", + "symfony/http-foundation": "^7.4|^8.0", + "symfony/polyfill-ctype": "^1.8" + }, + "conflict": { + "symfony/browser-kit": "<6.4", + "symfony/cache": "<6.4", + "symfony/config": "<6.4", + "symfony/console": "<6.4", + "symfony/dependency-injection": "<6.4", + "symfony/doctrine-bridge": "<6.4", + "symfony/flex": "<2.10", + "symfony/form": "<6.4", + "symfony/http-client": "<6.4", + "symfony/http-client-contracts": "<2.5", + "symfony/mailer": "<6.4", + "symfony/messenger": "<6.4", + "symfony/translation": "<6.4", + "symfony/translation-contracts": "<2.5", + "symfony/twig-bridge": "<6.4", + "symfony/validator": "<6.4", + "symfony/var-dumper": "<6.4", + "twig/twig": "<3.12" + }, + "provide": { + "psr/log-implementation": "1.0|2.0|3.0" + }, + "require-dev": { + "psr/cache": "^1.0|^2.0|^3.0", + "symfony/browser-kit": "^6.4|^7.0|^8.0", + "symfony/clock": "^6.4|^7.0|^8.0", + "symfony/config": "^6.4|^7.0|^8.0", + "symfony/console": "^6.4|^7.0|^8.0", + "symfony/css-selector": "^6.4|^7.0|^8.0", + "symfony/dependency-injection": "^6.4.1|^7.0.1|^8.0", + "symfony/dom-crawler": "^6.4|^7.0|^8.0", + "symfony/expression-language": "^6.4|^7.0|^8.0", + "symfony/finder": "^6.4|^7.0|^8.0", + "symfony/http-client-contracts": "^2.5|^3", + "symfony/process": "^6.4|^7.0|^8.0", + "symfony/property-access": "^7.1|^8.0", + "symfony/routing": "^6.4|^7.0|^8.0", + "symfony/serializer": "^7.1|^8.0", + "symfony/stopwatch": "^6.4|^7.0|^8.0", + "symfony/translation": "^6.4|^7.0|^8.0", + "symfony/translation-contracts": "^2.5|^3", + "symfony/uid": "^6.4|^7.0|^8.0", + "symfony/validator": "^6.4|^7.0|^8.0", + "symfony/var-dumper": "^6.4|^7.0|^8.0", + "symfony/var-exporter": "^6.4|^7.0|^8.0", + "twig/twig": "^3.12|^4.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\HttpKernel\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides a structured process for converting a Request into a Response", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/http-kernel/tree/v7.4.18" + }, + "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-08-30T21:24:29+00:00" + }, + { + "name": "symfony/mailer", + "version": "v7.4.17", + "source": { + "type": "git", + "url": "https://github.com/symfony/mailer.git", + "reference": "b17c9bf3a551d5f635638a3b6c05f06c4dc87584" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/mailer/zipball/b17c9bf3a551d5f635638a3b6c05f06c4dc87584", + "reference": "b17c9bf3a551d5f635638a3b6c05f06c4dc87584", + "shasum": "" + }, + "require": { + "egulias/email-validator": "^2.1.10|^3|^4", + "php": ">=8.2", + "psr/event-dispatcher": "^1", + "psr/log": "^1|^2|^3", + "symfony/event-dispatcher": "^6.4|^7.0|^8.0", + "symfony/mime": "^7.2|^8.0", + "symfony/service-contracts": "^2.5|^3" + }, + "conflict": { + "symfony/http-client-contracts": "<2.5", + "symfony/http-kernel": "<6.4", + "symfony/messenger": "<6.4", + "symfony/mime": "<6.4", + "symfony/twig-bridge": "<6.4" + }, + "require-dev": { + "symfony/console": "^6.4|^7.0|^8.0", + "symfony/http-client": "^6.4|^7.0|^8.0", + "symfony/messenger": "^6.4|^7.0|^8.0", + "symfony/twig-bridge": "^6.4|^7.0|^8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Mailer\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Helps sending emails", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/mailer/tree/v7.4.17" + }, + "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-08-21T17:40:08+00:00" + }, + { + "name": "symfony/mime", + "version": "v7.4.18", + "source": { + "type": "git", + "url": "https://github.com/symfony/mime.git", + "reference": "bf328d82105831db3e409195db0540ff57f27c80" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/mime/zipball/bf328d82105831db3e409195db0540ff57f27c80", + "reference": "bf328d82105831db3e409195db0540ff57f27c80", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-intl-idn": "^1.10", + "symfony/polyfill-mbstring": "^1.0" + }, + "conflict": { + "egulias/email-validator": "~3.0.0", + "phpdocumentor/reflection-docblock": "<5.2|>=7", + "phpdocumentor/type-resolver": "<1.5.1", + "symfony/mailer": "<6.4", + "symfony/serializer": "<6.4.3|>7.0,<7.0.3" + }, + "require-dev": { + "egulias/email-validator": "^2.1.10|^3.1|^4", + "league/html-to-markdown": "^5.0", + "phpdocumentor/reflection-docblock": "^5.2|^6.0", + "symfony/dependency-injection": "^6.4|^7.0|^8.0", + "symfony/process": "^6.4|^7.0|^8.0", + "symfony/property-access": "^6.4|^7.0|^8.0", + "symfony/property-info": "^6.4|^7.0|^8.0", + "symfony/serializer": "^6.4.44|^7.4.17|^8.1.5" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Mime\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Allows manipulating MIME messages", + "homepage": "https://symfony.com", + "keywords": [ + "mime", + "mime-type" + ], + "support": { + "source": "https://github.com/symfony/mime/tree/v7.4.18" + }, + "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-08-22T09:04:42+00:00" + }, + { + "name": "symfony/polyfill-ctype", + "version": "v1.37.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "141046a8f9477948ff284fa65be2095baafb94f2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/141046a8f9477948ff284fa65be2095baafb94f2", + "reference": "141046a8f9477948ff284fa65be2095baafb94f2", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "provide": { + "ext-ctype": "*" + }, + "suggest": { + "ext-ctype": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Ctype\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Gert de Pagter", + "email": "BackEndTea@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for ctype functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "ctype", + "polyfill", + "portable" + ], + "support": { + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.37.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-04-10T16:19:22+00:00" + }, + { + "name": "symfony/polyfill-intl-grapheme", + "version": "v1.41.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-grapheme.git", + "reference": "bb899c1db0aa8127dc3afe8cda4a67eb24915f8d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/bb899c1db0aa8127dc3afe8cda4a67eb24915f8d", + "reference": "bb899c1db0aa8127dc3afe8cda4a67eb24915f8d", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Grapheme\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's grapheme_* functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "grapheme", + "intl", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.41.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-07-28T08:25:59+00:00" + }, + { + "name": "symfony/polyfill-intl-idn", + "version": "v1.42.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-idn.git", + "reference": "51b5ff5ba85452b31ec6f55490b08148612339d9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/51b5ff5ba85452b31ec6f55490b08148612339d9", + "reference": "51b5ff5ba85452b31ec6f55490b08148612339d9", + "shasum": "" + }, + "require": { + "php": ">=7.2", + "symfony/polyfill-intl-normalizer": "^1.10" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Idn\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Laurent Bassin", + "email": "laurent@bassin.info" + }, + { + "name": "Trevor Rowbotham", + "email": "trevor.rowbotham@pm.me" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "idn", + "intl", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.42.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-08-24T10:51:20+00:00" + }, + { + "name": "symfony/polyfill-intl-normalizer", + "version": "v1.42.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-normalizer.git", + "reference": "aa20edea75bd9c48cfecc8360922e5a6e5c44502" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/aa20edea75bd9c48cfecc8360922e5a6e5c44502", + "reference": "aa20edea75bd9c48cfecc8360922e5a6e5c44502", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Normalizer\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's Normalizer class and related functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "intl", + "normalizer", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.42.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-08-07T06:33:24+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.38.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "d3d318bad5e7a1bfbd026009c8bfb8d8f99ae6b6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/d3d318bad5e7a1bfbd026009c8bfb8d8f99ae6b6", + "reference": "d3d318bad5e7a1bfbd026009c8bfb8d8f99ae6b6", + "shasum": "" + }, + "require": { + "ext-iconv": "*", + "php": ">=7.2" + }, + "provide": { + "ext-mbstring": "*" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.38.2" + }, + "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-05-27T06:59:30+00:00" + }, + { + "name": "symfony/polyfill-php80", + "version": "v1.37.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php80.git", + "reference": "dfb55726c3a76ea3b6459fcfda1ec2d80a682411" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/dfb55726c3a76ea3b6459fcfda1ec2d80a682411", + "reference": "dfb55726c3a76ea3b6459fcfda1ec2d80a682411", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php80\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ion Bazan", + "email": "ion.bazan@gmail.com" + }, + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php80/tree/v1.37.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-04-10T16:19:22+00:00" + }, + { + "name": "symfony/polyfill-php82", + "version": "v1.38.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php82.git", + "reference": "002dc0cfe5fd4ed6033d48f27d4f19a486c4b04b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php82/zipball/002dc0cfe5fd4ed6033d48f27d4f19a486c4b04b", + "reference": "002dc0cfe5fd4ed6033d48f27d4f19a486c4b04b", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php82\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.2+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php82/tree/v1.38.1" + }, + "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-05-26T12:45:58+00:00" + }, + { + "name": "symfony/polyfill-php83", + "version": "v1.41.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php83.git", + "reference": "5ea99087fb99c273a9b9236ed4c31e78b16103c6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/5ea99087fb99c273a9b9236ed4c31e78b16103c6", + "reference": "5ea99087fb99c273a9b9236ed4c31e78b16103c6", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php83\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.3+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php83/tree/v1.41.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-07-01T12:47:55+00:00" + }, + { + "name": "symfony/polyfill-php84", + "version": "v1.38.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php84.git", + "reference": "f4e1dfaee5b74aba5964fe1fd4dfc7ba5e3085fa" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php84/zipball/f4e1dfaee5b74aba5964fe1fd4dfc7ba5e3085fa", + "reference": "f4e1dfaee5b74aba5964fe1fd4dfc7ba5e3085fa", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php84\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.4+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php84/tree/v1.38.1" + }, + "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-05-26T12:51:13+00:00" + }, + { + "name": "symfony/polyfill-php85", + "version": "v1.41.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php85.git", + "reference": "255fab485aaa1006ed411040c42aecd7b5302d7a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php85/zipball/255fab485aaa1006ed411040c42aecd7b5302d7a", + "reference": "255fab485aaa1006ed411040c42aecd7b5302d7a", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php85\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.5+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php85/tree/v1.41.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-07-01T12:47:55+00:00" + }, + { + "name": "symfony/polyfill-php86", + "version": "v1.41.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php86.git", + "reference": "6bc356ed3d8dbfeea8f0de235e34d670704e880e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php86/zipball/6bc356ed3d8dbfeea8f0de235e34d670704e880e", + "reference": "6bc356ed3d8dbfeea8f0de235e34d670704e880e", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php86\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.6+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php86/tree/v1.41.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-07-02T13:42:24+00:00" + }, + { + "name": "symfony/polyfill-uuid", + "version": "v1.37.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-uuid.git", + "reference": "26dfec253c4cf3e51b541b52ddf7e42cb0908e94" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-uuid/zipball/26dfec253c4cf3e51b541b52ddf7e42cb0908e94", + "reference": "26dfec253c4cf3e51b541b52ddf7e42cb0908e94", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "provide": { + "ext-uuid": "*" + }, + "suggest": { + "ext-uuid": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Uuid\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Grégoire Pineau", + "email": "lyrixx@lyrixx.info" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for uuid functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "uuid" + ], + "support": { + "source": "https://github.com/symfony/polyfill-uuid/tree/v1.37.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-04-10T16:19:22+00:00" + }, + { + "name": "symfony/process", + "version": "v7.4.18", + "source": { + "type": "git", + "url": "https://github.com/symfony/process.git", + "reference": "058d17fc284cce14efb2385783b55014a461b176" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/process/zipball/058d17fc284cce14efb2385783b55014a461b176", + "reference": "058d17fc284cce14efb2385783b55014a461b176", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Process\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Executes commands in sub-processes", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/process/tree/v7.4.18" + }, + "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-08-21T17:40:08+00:00" + }, + { + "name": "symfony/routing", + "version": "v7.4.18", + "source": { + "type": "git", + "url": "https://github.com/symfony/routing.git", + "reference": "ddd558991e98f693ae6bf5063cc1b0362c6bbec3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/routing/zipball/ddd558991e98f693ae6bf5063cc1b0362c6bbec3", + "reference": "ddd558991e98f693ae6bf5063cc1b0362c6bbec3", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3" + }, + "conflict": { + "symfony/config": "<6.4", + "symfony/dependency-injection": "<6.4", + "symfony/yaml": "<6.4" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/config": "^6.4|^7.0|^8.0", + "symfony/dependency-injection": "^6.4|^7.0|^8.0", + "symfony/expression-language": "^6.4|^7.0|^8.0", + "symfony/http-foundation": "^6.4|^7.0|^8.0", + "symfony/yaml": "^6.4|^7.0|^8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Routing\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Maps an HTTP request to a set of configuration variables", + "homepage": "https://symfony.com", + "keywords": [ + "router", + "routing", + "uri", + "url" + ], + "support": { + "source": "https://github.com/symfony/routing/tree/v7.4.18" + }, + "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-08-17T13:12:36+00:00" + }, + { + "name": "symfony/service-contracts", + "version": "v3.7.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/service-contracts.git", + "reference": "15e6a07ec2a2c75ceb1b21dd98105ee8456d2257" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/15e6a07ec2a2c75ceb1b21dd98105ee8456d2257", + "reference": "15e6a07ec2a2c75ceb1b21dd98105ee8456d2257", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/container": "^1.1|^2.0", + "symfony/deprecation-contracts": "^2.5|^3" + }, + "conflict": { + "ext-psr": "<1.1|>=2" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "3.7-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Service\\": "" + }, + "exclude-from-classmap": [ + "/Test/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to writing services", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/service-contracts/tree/v3.7.3" + }, + "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-07-27T15:39:01+00:00" + }, + { + "name": "symfony/string", + "version": "v7.4.15", + "source": { + "type": "git", + "url": "https://github.com/symfony/string.git", + "reference": "e394af32256bf9e7bf80849d95e589167c10097b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/string/zipball/e394af32256bf9e7bf80849d95e589167c10097b", + "reference": "e394af32256bf9e7bf80849d95e589167c10097b", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3.0", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-intl-grapheme": "~1.33", + "symfony/polyfill-intl-normalizer": "~1.0", + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "symfony/translation-contracts": "<2.5" + }, + "require-dev": { + "symfony/emoji": "^7.1|^8.0", + "symfony/http-client": "^6.4|^7.0|^8.0", + "symfony/intl": "^6.4|^7.0|^8.0", + "symfony/translation-contracts": "^2.5|^3.0", + "symfony/var-exporter": "^6.4|^7.0|^8.0" + }, + "type": "library", + "autoload": { + "files": [ + "Resources/functions.php" + ], + "psr-4": { + "Symfony\\Component\\String\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way", + "homepage": "https://symfony.com", + "keywords": [ + "grapheme", + "i18n", + "string", + "unicode", + "utf-8", + "utf8" + ], + "support": { + "source": "https://github.com/symfony/string/tree/v7.4.15" + }, + "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-07-28T07:33:02+00:00" + }, + { + "name": "symfony/translation", + "version": "v7.4.17", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation.git", + "reference": "2ee1e4a3b32a528a642babe041ff7c440b213b4b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation/zipball/2ee1e4a3b32a528a642babe041ff7c440b213b4b", + "reference": "2ee1e4a3b32a528a642babe041ff7c440b213b4b", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-mbstring": "~1.0", + "symfony/translation-contracts": "^2.5.3|^3.3" + }, + "conflict": { + "nikic/php-parser": "<5.0", + "symfony/config": "<6.4", + "symfony/console": "<6.4", + "symfony/dependency-injection": "<6.4", + "symfony/http-client-contracts": "<2.5", + "symfony/http-kernel": "<6.4", + "symfony/service-contracts": "<2.5", + "symfony/twig-bundle": "<6.4", + "symfony/yaml": "<6.4" + }, + "provide": { + "symfony/translation-implementation": "2.3|3.0" + }, + "require-dev": { + "nikic/php-parser": "^5.0", + "psr/log": "^1|^2|^3", + "symfony/config": "^6.4|^7.0|^8.0", + "symfony/console": "^6.4|^7.0|^8.0", + "symfony/dependency-injection": "^6.4|^7.0|^8.0", + "symfony/finder": "^6.4|^7.0|^8.0", + "symfony/http-client-contracts": "^2.5|^3.0", + "symfony/http-kernel": "^6.4|^7.0|^8.0", + "symfony/intl": "^6.4|^7.0|^8.0", + "symfony/polyfill-intl-icu": "^1.21", + "symfony/routing": "^6.4|^7.0|^8.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/yaml": "^6.4|^7.0|^8.0" + }, + "type": "library", + "autoload": { + "files": [ + "Resources/functions.php" + ], + "psr-4": { + "Symfony\\Component\\Translation\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides tools to internationalize your application", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/translation/tree/v7.4.17" + }, + "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-08-21T17:40:08+00:00" + }, + { + "name": "symfony/translation-contracts", + "version": "v3.7.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation-contracts.git", + "reference": "ccb206b98faccc511ebae8e5fad50f2dc0b30621" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/ccb206b98faccc511ebae8e5fad50f2dc0b30621", + "reference": "ccb206b98faccc511ebae8e5fad50f2dc0b30621", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "3.7-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Translation\\": "" + }, + "exclude-from-classmap": [ + "/Test/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to translation", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/translation-contracts/tree/v3.7.1" + }, + "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-06-05T06:23:12+00:00" + }, + { + "name": "symfony/uid", + "version": "v7.4.17", + "source": { + "type": "git", + "url": "https://github.com/symfony/uid.git", + "reference": "69d732355a139c6f8881337d28515aa01f12b8be" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/uid/zipball/69d732355a139c6f8881337d28515aa01f12b8be", + "reference": "69d732355a139c6f8881337d28515aa01f12b8be", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/polyfill-uuid": "^1.15" + }, + "require-dev": { + "symfony/console": "^6.4|^7.0|^8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Uid\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Grégoire Pineau", + "email": "lyrixx@lyrixx.info" + }, + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides an object-oriented API to generate and represent UIDs", + "homepage": "https://symfony.com", + "keywords": [ + "UID", + "ulid", + "uuid" + ], + "support": { + "source": "https://github.com/symfony/uid/tree/v7.4.17" + }, + "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-08-11T07:38:58+00:00" + }, + { + "name": "symfony/var-dumper", + "version": "v7.4.18", + "source": { + "type": "git", + "url": "https://github.com/symfony/var-dumper.git", + "reference": "e088da50b813f32473a76871616cbb8fa54653a8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/e088da50b813f32473a76871616cbb8fa54653a8", + "reference": "e088da50b813f32473a76871616cbb8fa54653a8", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "symfony/console": "<6.4" + }, + "require-dev": { + "symfony/console": "^6.4|^7.0|^8.0", + "symfony/http-kernel": "^6.4|^7.0|^8.0", + "symfony/process": "^6.4|^7.0|^8.0", + "symfony/uid": "^6.4|^7.0|^8.0", + "twig/twig": "^3.12|^4.0" + }, + "bin": [ + "Resources/bin/var-dump-server" + ], + "type": "library", + "autoload": { + "files": [ + "Resources/functions/dump.php" + ], + "psr-4": { + "Symfony\\Component\\VarDumper\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides mechanisms for walking through any arbitrary PHP variable", + "homepage": "https://symfony.com", + "keywords": [ + "debug", + "dump" + ], + "support": { + "source": "https://github.com/symfony/var-dumper/tree/v7.4.18" + }, + "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-08-30T20:10:52+00:00" + }, + { + "name": "symfony/yaml", + "version": "v7.4.18", + "source": { + "type": "git", + "url": "https://github.com/symfony/yaml.git", + "reference": "4cef939e55b8a21c5780418de0d98ab00d0736e1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/yaml/zipball/4cef939e55b8a21c5780418de0d98ab00d0736e1", + "reference": "4cef939e55b8a21c5780418de0d98ab00d0736e1", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-ctype": "^1.8" + }, + "conflict": { + "symfony/console": "<6.4" + }, + "require-dev": { + "symfony/console": "^6.4|^7.0|^8.0" + }, + "bin": [ + "Resources/bin/yaml-lint" + ], + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Yaml\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Loads and dumps YAML files", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/yaml/tree/v7.4.18" + }, + "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-08-30T00:47:26+00:00" + }, + { + "name": "tijsverkoyen/css-to-inline-styles", + "version": "v2.4.0", + "source": { + "type": "git", + "url": "https://github.com/tijsverkoyen/CssToInlineStyles.git", + "reference": "f0292ccf0ec75843d65027214426b6b163b48b41" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/f0292ccf0ec75843d65027214426b6b163b48b41", + "reference": "f0292ccf0ec75843d65027214426b6b163b48b41", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "php": "^7.4 || ^8.0", + "symfony/css-selector": "^5.4 || ^6.0 || ^7.0 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^2.0", + "phpstan/phpstan-phpunit": "^2.0", + "phpunit/phpunit": "^8.5.21 || ^9.5.10" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "TijsVerkoyen\\CssToInlineStyles\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Tijs Verkoyen", + "email": "css_to_inline_styles@verkoyen.eu", + "role": "Developer" + } + ], + "description": "CssToInlineStyles is a class that enables you to convert HTML-pages/files into HTML-pages/files with inline styles. This is very useful when you're sending emails.", + "homepage": "https://github.com/tijsverkoyen/CssToInlineStyles", + "support": { + "issues": "https://github.com/tijsverkoyen/CssToInlineStyles/issues", + "source": "https://github.com/tijsverkoyen/CssToInlineStyles/tree/v2.4.0" + }, + "time": "2025-12-02T11:56:42+00:00" + }, + { + "name": "vlucas/phpdotenv", + "version": "v5.7.0", + "source": { + "type": "git", + "url": "https://github.com/vlucas/phpdotenv.git", + "reference": "301c07936b16d88628b126b01d082ba153cf4c40" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/301c07936b16d88628b126b01d082ba153cf4c40", + "reference": "301c07936b16d88628b126b01d082ba153cf4c40", + "shasum": "" + }, + "require": { + "ext-pcre": "*", + "graham-campbell/result-type": "^1.2", + "php": "^7.2.5 || ^8.0", + "phpoption/phpoption": "^1.10", + "symfony/polyfill-ctype": "^1.26", + "symfony/polyfill-mbstring": "^1.26", + "symfony/polyfill-php80": "^1.26" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.2", + "ext-filter": "*", + "phpunit/phpunit": "^8.5.34 || ^9.6.13 || ^10.4.2" + }, + "suggest": { + "ext-filter": "Required to use the boolean validator." + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + }, + "branch-alias": { + "dev-master": "5.6-dev" + } + }, + "autoload": { + "psr-4": { + "Dotenv\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Vance Lucas", + "email": "vance@vancelucas.com", + "homepage": "https://github.com/vlucas" + } + ], + "description": "Loads environment variables from `.env` to `$_ENV` and `$_SERVER` automagically, and optionally to `getenv()`.", + "keywords": [ + "dotenv", + "env", + "environment" + ], + "support": { + "issues": "https://github.com/vlucas/phpdotenv/issues", + "source": "https://github.com/vlucas/phpdotenv/tree/v5.7.0" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/vlucas/phpdotenv", + "type": "tidelift" + } + ], + "time": "2026-08-24T18:07:49+00:00" + }, + { + "name": "voku/portable-ascii", + "version": "2.1.1", + "source": { + "type": "git", + "url": "https://github.com/voku/portable-ascii.git", + "reference": "8e1051fe39379367aecf014f41744ce7539a856f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/voku/portable-ascii/zipball/8e1051fe39379367aecf014f41744ce7539a856f", + "reference": "8e1051fe39379367aecf014f41744ce7539a856f", + "shasum": "" + }, + "require": { + "php": ">=7.1.0" + }, + "require-dev": { + "phpunit/phpunit": "~8.5 || ~9.6 || ~10.5 || ~11.5" + }, + "suggest": { + "ext-intl": "Use Intl for transliterator_transliterate() support" + }, + "type": "library", + "autoload": { + "psr-4": { + "voku\\": "src/voku/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Lars Moelleken", + "homepage": "https://www.moelleken.org/" + } + ], + "description": "Portable ASCII library - performance optimized (ascii) string functions for php.", + "homepage": "https://github.com/voku/portable-ascii", + "keywords": [ + "ascii", + "clean", + "php" + ], + "support": { + "issues": "https://github.com/voku/portable-ascii/issues", + "source": "https://github.com/voku/portable-ascii/tree/2.1.1" + }, + "funding": [ + { + "url": "https://www.paypal.me/moelleken", + "type": "custom" + }, + { + "url": "https://github.com/voku", + "type": "github" + }, + { + "url": "https://opencollective.com/portable-ascii", + "type": "open_collective" + }, + { + "url": "https://www.patreon.com/voku", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/voku/portable-ascii", + "type": "tidelift" + } + ], + "time": "2026-04-26T05:33:54+00:00" + } + ], + "packages-dev": [ + { + "name": "fakerphp/faker", + "version": "v1.24.1", + "source": { + "type": "git", + "url": "https://github.com/FakerPHP/Faker.git", + "reference": "e0ee18eb1e6dc3cda3ce9fd97e5a0689a88a64b5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/e0ee18eb1e6dc3cda3ce9fd97e5a0689a88a64b5", + "reference": "e0ee18eb1e6dc3cda3ce9fd97e5a0689a88a64b5", + "shasum": "" + }, + "require": { + "php": "^7.4 || ^8.0", + "psr/container": "^1.0 || ^2.0", + "symfony/deprecation-contracts": "^2.2 || ^3.0" + }, + "conflict": { + "fzaninotto/faker": "*" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.4.1", + "doctrine/persistence": "^1.3 || ^2.0", + "ext-intl": "*", + "phpunit/phpunit": "^9.5.26", + "symfony/phpunit-bridge": "^5.4.16" + }, + "suggest": { + "doctrine/orm": "Required to use Faker\\ORM\\Doctrine", + "ext-curl": "Required by Faker\\Provider\\Image to download images.", + "ext-dom": "Required by Faker\\Provider\\HtmlLorem for generating random HTML.", + "ext-iconv": "Required by Faker\\Provider\\ru_RU\\Text::realText() for generating real Russian text.", + "ext-mbstring": "Required for multibyte Unicode string functionality." + }, + "type": "library", + "autoload": { + "psr-4": { + "Faker\\": "src/Faker/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "François Zaninotto" + } + ], + "description": "Faker is a PHP library that generates fake data for you.", + "keywords": [ + "data", + "faker", + "fixtures" + ], + "support": { + "issues": "https://github.com/FakerPHP/Faker/issues", + "source": "https://github.com/FakerPHP/Faker/tree/v1.24.1" + }, + "time": "2024-11-21T13:46:39+00:00" + }, + { + "name": "filp/whoops", + "version": "2.18.4", + "source": { + "type": "git", + "url": "https://github.com/filp/whoops.git", + "reference": "d2102955e48b9fd9ab24280a7ad12ed552752c4d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/filp/whoops/zipball/d2102955e48b9fd9ab24280a7ad12ed552752c4d", + "reference": "d2102955e48b9fd9ab24280a7ad12ed552752c4d", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0", + "psr/log": "^1.0.1 || ^2.0 || ^3.0" + }, + "require-dev": { + "mockery/mockery": "^1.0", + "phpunit/phpunit": "^7.5.20 || ^8.5.8 || ^9.3.3", + "symfony/var-dumper": "^4.0 || ^5.0" + }, + "suggest": { + "symfony/var-dumper": "Pretty print complex values better with var-dumper available", + "whoops/soap": "Formats errors as SOAP responses" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.7-dev" + } + }, + "autoload": { + "psr-4": { + "Whoops\\": "src/Whoops/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Filipe Dobreira", + "homepage": "https://github.com/filp", + "role": "Developer" + } + ], + "description": "php error handling for cool kids", + "homepage": "https://filp.github.io/whoops/", + "keywords": [ + "error", + "exception", + "handling", + "library", + "throwable", + "whoops" + ], + "support": { + "issues": "https://github.com/filp/whoops/issues", + "source": "https://github.com/filp/whoops/tree/2.18.4" + }, + "funding": [ + { + "url": "https://github.com/denis-sokolov", + "type": "github" + } + ], + "time": "2025-08-08T12:00:00+00:00" + }, + { + "name": "hamcrest/hamcrest-php", + "version": "v3.0.0", + "source": { + "type": "git", + "url": "https://github.com/hamcrest/hamcrest-php.git", + "reference": "b61cd040da1a4925bc90a51c074f5297e7c0fa52" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/b61cd040da1a4925bc90a51c074f5297e7c0fa52", + "reference": "b61cd040da1a4925bc90a51c074f5297e7c0fa52", + "shasum": "" + }, + "require": { + "ext-ctype": "*", + "ext-dom": "*", + "php": "^7.4|^8.0" + }, + "replace": { + "cordoval/hamcrest-php": "*", + "davedevelopment/hamcrest-php": "*", + "kodova/hamcrest-php": "*" + }, + "require-dev": { + "phpstan/phpstan": "^2.1", + "phpstan/phpstan-phpunit": "^2.0", + "phpunit/php-file-iterator": "^1.4 || ^2.0 || ^3.0", + "phpunit/phpunit": "^4.8.36 || ^5.7 || ^6.5 || ^7.0 || ^8.0 || ^9.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "hamcrest" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "This is the PHP port of Hamcrest Matchers", + "keywords": [ + "test" + ], + "support": { + "issues": "https://github.com/hamcrest/hamcrest-php/issues", + "source": "https://github.com/hamcrest/hamcrest-php/tree/v3.0.0" + }, + "time": "2026-03-17T11:56:53+00:00" + }, + { + "name": "laravel/agent-detector", + "version": "v2.0.2", + "source": { + "type": "git", + "url": "https://github.com/laravel/agent-detector.git", + "reference": "90694b9256099591cf9e55d08c18ba7a00bf099f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/agent-detector/zipball/90694b9256099591cf9e55d08c18ba7a00bf099f", + "reference": "90694b9256099591cf9e55d08c18ba7a00bf099f", + "shasum": "" + }, + "require": { + "php": "^8.2.0" + }, + "require-dev": { + "laravel/pint": "^1.24.0", + "pestphp/pest": "^3.8.5|^4.1.0", + "pestphp/pest-plugin-type-coverage": "^3.0|^4.0.2", + "phpstan/phpstan": "^2.1.26", + "rector/rector": "^2.1.7", + "symfony/var-dumper": "^7.3.3" + }, + "type": "library", + "autoload": { + "files": [ + "src/functions.php" + ], + "psr-4": { + "Laravel\\AgentDetector\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "Detect if code is running in an AI agent or automated development environment", + "homepage": "https://github.com/laravel/agent-detector", + "keywords": [ + "Agent", + "ai", + "automation", + "claude", + "cursor", + "detection", + "devin", + "php" + ], + "support": { + "issues": "https://github.com/laravel/agent-detector/issues", + "source": "https://github.com/laravel/agent-detector" + }, + "time": "2026-04-29T18:32:34+00:00" + }, + { + "name": "laravel/pail", + "version": "v1.2.7", + "source": { + "type": "git", + "url": "https://github.com/laravel/pail.git", + "reference": "2f7d27dada8effc48b8c424445a69cca7007daaa" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/pail/zipball/2f7d27dada8effc48b8c424445a69cca7007daaa", + "reference": "2f7d27dada8effc48b8c424445a69cca7007daaa", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "illuminate/console": "^10.24|^11.0|^12.0|^13.0", + "illuminate/contracts": "^10.24|^11.0|^12.0|^13.0", + "illuminate/log": "^10.24|^11.0|^12.0|^13.0", + "illuminate/process": "^10.24|^11.0|^12.0|^13.0", + "illuminate/support": "^10.24|^11.0|^12.0|^13.0", + "nunomaduro/termwind": "^1.15|^2.0", + "php": "^8.2", + "symfony/console": "^6.0|^7.0|^8.0" + }, + "require-dev": { + "laravel/framework": "^10.24|^11.0|^12.0|^13.0", + "laravel/pint": "^1.13", + "orchestra/testbench-core": "^8.13|^9.17|^10.8|^11.0", + "pestphp/pest": "^2.20|^3.0|^4.0", + "pestphp/pest-plugin-type-coverage": "^2.3|^3.0|^4.0", + "phpstan/phpstan": "^1.12.27", + "symfony/var-dumper": "^6.3|^7.0|^8.0", + "symfony/yaml": "^6.3|^7.0|^8.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Laravel\\Pail\\PailServiceProvider" + ] + }, + "branch-alias": { + "dev-main": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Laravel\\Pail\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + }, + { + "name": "Nuno Maduro", + "email": "enunomaduro@gmail.com" + } + ], + "description": "Easily delve into your Laravel application's log files directly from the command line.", + "homepage": "https://github.com/laravel/pail", + "keywords": [ + "dev", + "laravel", + "logs", + "php", + "tail" + ], + "support": { + "issues": "https://github.com/laravel/pail/issues", + "source": "https://github.com/laravel/pail" + }, + "time": "2026-05-20T22:24:57+00:00" + }, + { + "name": "laravel/pao", + "version": "v1.1.5", + "source": { + "type": "git", + "url": "https://github.com/laravel/pao.git", + "reference": "620424f1ce744d96937fb6be60a94793e79b67ad" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/pao/zipball/620424f1ce744d96937fb6be60a94793e79b67ad", + "reference": "620424f1ce744d96937fb6be60a94793e79b67ad", + "shasum": "" + }, + "require": { + "laravel/agent-detector": "^2.0.2", + "php": "^8.3" + }, + "conflict": { + "laravel/framework": "<12.0.0", + "nunomaduro/collision": "<8.9.3", + "pestphp/pest": "<4.6.3 || >=6.0.0", + "phpunit/phpunit": "<12.5.23 || >=13.0.0 <13.1.7 || >=14.0.0" + }, + "require-dev": { + "brianium/paratest": "^7.20.0", + "laravel/pint": "^1.30.5", + "orchestra/testbench": "^10.11.0 || ^11.2.0", + "pestphp/pest": "^4.7.8 || ^5.1.4", + "pestphp/pest-plugin-type-coverage": "^4.0.4 || ^5.0.2", + "phpstan/phpstan": "^2.2.13", + "rector/rector": "^2.6.6", + "symfony/process": "^7.4.13 || ^8.1.6", + "symfony/var-dumper": "^7.4.15 || ^8.1.6" + }, + "type": "library", + "extra": { + "pest": { + "plugins": [ + "Laravel\\Pao\\Drivers\\Pest\\Plugin" + ] + }, + "laravel": { + "providers": [ + "Laravel\\Pao\\Laravel\\ServiceProvider" + ] + } + }, + "autoload": { + "files": [ + "src/Autoload.php" + ], + "psr-4": { + "Laravel\\Pao\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "Agent-optimized output for PHP testing tools", + "keywords": [ + "Agent", + "PHPStan", + "ai", + "dev", + "paratest", + "pest", + "php", + "phpunit", + "rector", + "testing" + ], + "support": { + "issues": "https://github.com/laravel/pao/issues", + "source": "https://github.com/laravel/pao" + }, + "time": "2026-09-07T14:48:06+00:00" + }, + { + "name": "laravel/pint", + "version": "v1.31.1", + "source": { + "type": "git", + "url": "https://github.com/laravel/pint.git", + "reference": "b136cebaf0b3f7d288bdafad5088858d082580aa" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/pint/zipball/b136cebaf0b3f7d288bdafad5088858d082580aa", + "reference": "b136cebaf0b3f7d288bdafad5088858d082580aa", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-mbstring": "*", + "ext-tokenizer": "*", + "ext-xml": "*", + "php": "^8.3.0" + }, + "require-dev": { + "composer/semver": "^3.4.4", + "friendsofphp/php-cs-fixer": "^3.95.25", + "illuminate/view": "^13.31.0", + "larastan/larastan": "^3.11.0", + "laravel-zero/framework": "^13.0.0", + "laravel/agent-detector": "^2.0.2", + "laravel/prompts": "^0.3.24", + "mockery/mockery": "^1.6.15", + "nunomaduro/termwind": "^2.4.0", + "pestphp/pest": "^4.7.8" + }, + "bin": [ + "builds/pint" + ], + "type": "project", + "autoload": { + "psr-4": { + "App\\": "app/", + "Database\\Seeders\\": "database/seeders/", + "Database\\Factories\\": "database/factories/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nuno Maduro", + "email": "enunomaduro@gmail.com" + } + ], + "description": "An opinionated code formatter for PHP.", + "homepage": "https://laravel.com", + "keywords": [ + "dev", + "format", + "formatter", + "lint", + "linter", + "php" + ], + "support": { + "issues": "https://github.com/laravel/pint/issues", + "source": "https://github.com/laravel/pint" + }, + "time": "2026-09-08T17:10:00+00:00" + }, + { + "name": "mockery/mockery", + "version": "1.6.15", + "source": { + "type": "git", + "url": "https://github.com/mockery/mockery.git", + "reference": "967a801bd188989a5669bd280f252d51c0fdc9ee" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/mockery/mockery/zipball/967a801bd188989a5669bd280f252d51c0fdc9ee", + "reference": "967a801bd188989a5669bd280f252d51c0fdc9ee", + "shasum": "" + }, + "require": { + "hamcrest/hamcrest-php": "^2.0 || ^3.0", + "php": ">=7.3" + }, + "conflict": { + "phpunit/phpunit": "<8.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.6.36", + "symplify/easy-coding-standard": "^13.2.17" + }, + "type": "library", + "autoload": { + "files": [ + "library/helpers.php", + "library/Mockery.php" + ], + "psr-4": { + "Mockery\\": "library/Mockery" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Pádraic Brady", + "email": "padraic.brady@gmail.com", + "homepage": "https://github.com/padraic", + "role": "Author" + }, + { + "name": "Dave Marshall", + "email": "dave.marshall@atstsolutions.co.uk", + "homepage": "https://davedevelopment.co.uk", + "role": "Developer" + }, + { + "name": "Nathanael Esayeas", + "email": "nathanael.esayeas@protonmail.com", + "homepage": "https://github.com/ghostwriter", + "role": "Lead Developer" + } + ], + "description": "Mockery is a simple yet flexible PHP mock object framework", + "homepage": "https://github.com/mockery/mockery", + "keywords": [ + "BDD", + "TDD", + "library", + "mock", + "mock objects", + "mockery", + "stub", + "test", + "test double", + "testing" + ], + "support": { + "docs": "https://docs.mockery.io/", + "issues": "https://github.com/mockery/mockery/issues", + "rss": "https://github.com/mockery/mockery/releases.atom", + "security": "https://github.com/mockery/mockery/security/advisories", + "source": "https://github.com/mockery/mockery" + }, + "time": "2026-08-19T19:37:52+00:00" + }, + { + "name": "myclabs/deep-copy", + "version": "1.14.0", + "source": { + "type": "git", + "url": "https://github.com/myclabs/DeepCopy.git", + "reference": "8680aa248f8e07bc8fb43f56f0f5fc77a0c96aae" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/8680aa248f8e07bc8fb43f56f0f5fc77a0c96aae", + "reference": "8680aa248f8e07bc8fb43f56f0f5fc77a0c96aae", + "shasum": "" + }, + "require": { + "php": "^8.0" + }, + "conflict": { + "doctrine/collections": "<1.6.8", + "doctrine/common": "<2.13.3 || >=3 <3.2.2" + }, + "require-dev": { + "doctrine/collections": "^1.6.8", + "doctrine/common": "^2.13.3 || ^3.2.2", + "phpspec/prophecy": "^1.10", + "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" + }, + "type": "library", + "autoload": { + "files": [ + "src/DeepCopy/deep_copy.php" + ], + "psr-4": { + "DeepCopy\\": "src/DeepCopy/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Create deep copies (clones) of your objects", + "keywords": [ + "clone", + "copy", + "duplicate", + "object", + "object graph" + ], + "support": { + "issues": "https://github.com/myclabs/DeepCopy/issues", + "source": "https://github.com/myclabs/DeepCopy/tree/1.14.0" + }, + "funding": [ + { + "url": "https://github.com/mnapoli", + "type": "github" + } + ], + "time": "2026-08-11T10:17:44+00:00" + }, + { + "name": "nunomaduro/collision", + "version": "v8.9.5", + "source": { + "type": "git", + "url": "https://github.com/nunomaduro/collision.git", + "reference": "fb53eacd509a1d303858e2d20cfebf2d630254ec" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nunomaduro/collision/zipball/fb53eacd509a1d303858e2d20cfebf2d630254ec", + "reference": "fb53eacd509a1d303858e2d20cfebf2d630254ec", + "shasum": "" + }, + "require": { + "filp/whoops": "^2.18.4", + "nunomaduro/termwind": "^2.4.0", + "php": "^8.2.0", + "symfony/console": "^7.4.14 || ^8.1.1" + }, + "conflict": { + "laravel/framework": "<11.48.0 || >=14.0.0", + "phpunit/phpunit": "<11.5.50 || >=14.0.0" + }, + "require-dev": { + "brianium/paratest": "^7.8.5", + "larastan/larastan": "^3.10.0", + "laravel/framework": "^11.48.0 || ^12.56.0 || ^13.20.0", + "laravel/pint": "^1.29.3", + "orchestra/testbench-core": "^9.12.0 || ^10.12.1 || ^11.3.5", + "pestphp/pest": "^3.8.5 || ^4.7.5 || ^5.0.0", + "sebastian/environment": "^7.2.1 || ^8.1.2 || ^9.3.2" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider" + ] + }, + "branch-alias": { + "dev-8.x": "8.x-dev" + } + }, + "autoload": { + "files": [ + "./src/Adapters/Phpunit/Autoload.php" + ], + "psr-4": { + "NunoMaduro\\Collision\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nuno Maduro", + "email": "enunomaduro@gmail.com" + } + ], + "description": "Cli error handling for console/command-line PHP applications.", + "keywords": [ + "artisan", + "cli", + "command-line", + "console", + "dev", + "error", + "handling", + "laravel", + "laravel-zero", + "php", + "symfony" + ], + "support": { + "issues": "https://github.com/nunomaduro/collision/issues", + "source": "https://github.com/nunomaduro/collision" + }, + "funding": [ + { + "url": "https://www.paypal.com/paypalme/enunomaduro", + "type": "custom" + }, + { + "url": "https://github.com/nunomaduro", + "type": "github" + }, + { + "url": "https://www.patreon.com/nunomaduro", + "type": "patreon" + } + ], + "time": "2026-07-15T19:09:14+00:00" + }, + { + "name": "phar-io/manifest", + "version": "2.0.4", + "source": { + "type": "git", + "url": "https://github.com/phar-io/manifest.git", + "reference": "54750ef60c58e43759730615a392c31c80e23176" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/54750ef60c58e43759730615a392c31c80e23176", + "reference": "54750ef60c58e43759730615a392c31c80e23176", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "ext-phar": "*", + "ext-xmlwriter": "*", + "phar-io/version": "^3.0.1", + "php": "^7.2 || ^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", + "support": { + "issues": "https://github.com/phar-io/manifest/issues", + "source": "https://github.com/phar-io/manifest/tree/2.0.4" + }, + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } + ], + "time": "2024-03-03T12:33:53+00:00" + }, + { + "name": "phar-io/version", + "version": "3.2.1", + "source": { + "type": "git", + "url": "https://github.com/phar-io/version.git", + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74", + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Library for handling version information and constraints", + "support": { + "issues": "https://github.com/phar-io/version/issues", + "source": "https://github.com/phar-io/version/tree/3.2.1" + }, + "time": "2022-02-21T01:04:05+00:00" + }, + { + "name": "phpunit/php-code-coverage", + "version": "12.5.7", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "186dab580576598076de6818596d12b61801880e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/186dab580576598076de6818596d12b61801880e", + "reference": "186dab580576598076de6818596d12b61801880e", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "ext-xmlwriter": "*", + "nikic/php-parser": "^5.7.0", + "php": ">=8.3", + "phpunit/php-text-template": "^5.0", + "sebastian/complexity": "^5.0", + "sebastian/environment": "^8.1.2", + "sebastian/lines-of-code": "^4.0.1", + "sebastian/version": "^6.0", + "theseer/tokenizer": "^2.0.1" + }, + "require-dev": { + "phpunit/phpunit": "^12.5.28" + }, + "suggest": { + "ext-pcov": "PHP extension that provides line coverage", + "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "12.5.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", + "homepage": "https://github.com/sebastianbergmann/php-code-coverage", + "keywords": [ + "coverage", + "testing", + "xunit" + ], + "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/12.5.7" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpunit/php-code-coverage", + "type": "tidelift" + } + ], + "time": "2026-06-01T13:24:19+00:00" + }, + { + "name": "phpunit/php-file-iterator", + "version": "6.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-file-iterator.git", + "reference": "a248d1640ab059b075f53a2ef0f9856e864e06b5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/a248d1640ab059b075f53a2ef0f9856e864e06b5", + "reference": "a248d1640ab059b075f53a2ef0f9856e864e06b5", + "shasum": "" + }, + "require": { + "php": ">=8.3" + }, + "require-dev": { + "phpunit/phpunit": "^12.5.33" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "6.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "FilterIterator implementation that filters files based on a list of suffixes.", + "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", + "keywords": [ + "filesystem", + "iterator" + ], + "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/6.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpunit/php-file-iterator", + "type": "tidelift" + } + ], + "time": "2026-08-25T14:40:53+00:00" + }, + { + "name": "phpunit/php-invoker", + "version": "6.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-invoker.git", + "reference": "12b54e689b07a25a9b41e57736dfab6ec9ae5406" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/12b54e689b07a25a9b41e57736dfab6ec9ae5406", + "reference": "12b54e689b07a25a9b41e57736dfab6ec9ae5406", + "shasum": "" + }, + "require": { + "php": ">=8.3" + }, + "require-dev": { + "ext-pcntl": "*", + "phpunit/phpunit": "^12.0" + }, + "suggest": { + "ext-pcntl": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "6.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Invoke callables with a timeout", + "homepage": "https://github.com/sebastianbergmann/php-invoker/", + "keywords": [ + "process" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-invoker/issues", + "security": "https://github.com/sebastianbergmann/php-invoker/security/policy", + "source": "https://github.com/sebastianbergmann/php-invoker/tree/6.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2025-02-07T04:58:58+00:00" + }, + { + "name": "phpunit/php-text-template", + "version": "5.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "e1367a453f0eda562eedb4f659e13aa900d66c53" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/e1367a453f0eda562eedb4f659e13aa900d66c53", + "reference": "e1367a453f0eda562eedb4f659e13aa900d66c53", + "shasum": "" + }, + "require": { + "php": ">=8.3" + }, + "require-dev": { + "phpunit/phpunit": "^12.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "5.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Simple template engine.", + "homepage": "https://github.com/sebastianbergmann/php-text-template/", + "keywords": [ + "template" + ], + "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/5.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2025-02-07T04:59:16+00:00" + }, + { + "name": "phpunit/php-timer", + "version": "8.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "f258ce36aa457f3aa3339f9ed4c81fc66dc8c2cc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/f258ce36aa457f3aa3339f9ed4c81fc66dc8c2cc", + "reference": "f258ce36aa457f3aa3339f9ed4c81fc66dc8c2cc", + "shasum": "" + }, + "require": { + "php": ">=8.3" + }, + "require-dev": { + "phpunit/phpunit": "^12.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "8.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", + "keywords": [ + "timer" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-timer/issues", + "security": "https://github.com/sebastianbergmann/php-timer/security/policy", + "source": "https://github.com/sebastianbergmann/php-timer/tree/8.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2025-02-07T04:59:38+00:00" + }, + { + "name": "phpunit/phpunit", + "version": "12.5.34", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "6cbff63d670de92cb1cb3d2ff9f40327e9da9c7f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/6cbff63d670de92cb1cb3d2ff9f40327e9da9c7f", + "reference": "6cbff63d670de92cb1cb3d2ff9f40327e9da9c7f", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-filter": "*", + "ext-json": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-xmlwriter": "*", + "myclabs/deep-copy": "^1.14.0", + "phar-io/manifest": "^2.0.4", + "phar-io/version": "^3.2.1", + "php": ">=8.3", + "phpunit/php-code-coverage": "^12.5.7", + "phpunit/php-file-iterator": "^6.0.2", + "phpunit/php-invoker": "^6.0.0", + "phpunit/php-text-template": "^5.0.0", + "phpunit/php-timer": "^8.0.0", + "sebastian/cli-parser": "^4.2.1", + "sebastian/comparator": "^7.1.8", + "sebastian/diff": "^7.0.1", + "sebastian/environment": "^8.1.2", + "sebastian/exporter": "^7.0.3", + "sebastian/global-state": "^8.0.3", + "sebastian/object-enumerator": "^7.0.0", + "sebastian/recursion-context": "^7.0.1", + "sebastian/type": "^6.0.4", + "sebastian/version": "^6.0.0", + "staabm/side-effects-detector": "^1.0.5" + }, + "bin": [ + "phpunit" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "12.5-dev" + } + }, + "autoload": { + "files": [ + "src/Framework/Assert/Functions.php" + ], + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "The PHP Unit Testing framework.", + "homepage": "https://phpunit.de/", + "keywords": [ + "phpunit", + "testing", + "xunit" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/phpunit/issues", + "security": "https://github.com/sebastianbergmann/phpunit/security/policy", + "source": "https://github.com/sebastianbergmann/phpunit/tree/12.5.34" + }, + "funding": [ + { + "url": "https://phpunit.de/sponsoring.html", + "type": "other" + } + ], + "time": "2026-08-27T08:38:28+00:00" + }, + { + "name": "sebastian/cli-parser", + "version": "4.2.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/cli-parser.git", + "reference": "7d05781b13f7dec9043a629a21d086ed74582a15" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/7d05781b13f7dec9043a629a21d086ed74582a15", + "reference": "7d05781b13f7dec9043a629a21d086ed74582a15", + "shasum": "" + }, + "require": { + "php": ">=8.3" + }, + "require-dev": { + "phpunit/phpunit": "^12.5.25" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "4.2-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for parsing CLI options", + "homepage": "https://github.com/sebastianbergmann/cli-parser", + "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/4.2.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/cli-parser", + "type": "tidelift" + } + ], + "time": "2026-05-17T05:29:34+00:00" + }, + { + "name": "sebastian/comparator", + "version": "7.1.8", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "7c65c1e79836812819705b473a90c12399542485" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/7c65c1e79836812819705b473a90c12399542485", + "reference": "7c65c1e79836812819705b473a90c12399542485", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-mbstring": "*", + "php": ">=8.3", + "sebastian/diff": "^7.0", + "sebastian/exporter": "^7.0.3" + }, + "require-dev": { + "phpunit/phpunit": "^12.5.25" + }, + "suggest": { + "ext-bcmath": "For comparing BcMath\\Number objects" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "7.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + } + ], + "description": "Provides the functionality to compare PHP values for equality", + "homepage": "https://github.com/sebastianbergmann/comparator", + "keywords": [ + "comparator", + "compare", + "equality" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/comparator/issues", + "security": "https://github.com/sebastianbergmann/comparator/security/policy", + "source": "https://github.com/sebastianbergmann/comparator/tree/7.1.8" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/comparator", + "type": "tidelift" + } + ], + "time": "2026-05-21T04:45:25+00:00" + }, + { + "name": "sebastian/complexity", + "version": "5.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/complexity.git", + "reference": "bad4316aba5303d0221f43f8cee37eb58d384bbb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/bad4316aba5303d0221f43f8cee37eb58d384bbb", + "reference": "bad4316aba5303d0221f43f8cee37eb58d384bbb", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^5.0", + "php": ">=8.3" + }, + "require-dev": { + "phpunit/phpunit": "^12.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "5.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for calculating the complexity of PHP code units", + "homepage": "https://github.com/sebastianbergmann/complexity", + "support": { + "issues": "https://github.com/sebastianbergmann/complexity/issues", + "security": "https://github.com/sebastianbergmann/complexity/security/policy", + "source": "https://github.com/sebastianbergmann/complexity/tree/5.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2025-02-07T04:55:25+00:00" + }, + { + "name": "sebastian/diff", + "version": "7.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "cd4cabe39f8a4e8ee6818ba99f10a05561ea4ad6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/cd4cabe39f8a4e8ee6818ba99f10a05561ea4ad6", + "reference": "cd4cabe39f8a4e8ee6818ba99f10a05561ea4ad6", + "shasum": "" + }, + "require": { + "php": ">=8.3" + }, + "require-dev": { + "phpunit/phpunit": "^12.5.33", + "symfony/process": "^7.4.17" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "7.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" + } + ], + "description": "Diff implementation", + "homepage": "https://github.com/sebastianbergmann/diff", + "keywords": [ + "diff", + "udiff", + "unidiff", + "unified diff" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/diff/issues", + "security": "https://github.com/sebastianbergmann/diff/security/policy", + "source": "https://github.com/sebastianbergmann/diff/tree/7.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/diff", + "type": "tidelift" + } + ], + "time": "2026-08-25T15:35:54+00:00" + }, + { + "name": "sebastian/environment", + "version": "8.1.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "9d32c685773823b1983e256ae4ecd48a10d6e439" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/9d32c685773823b1983e256ae4ecd48a10d6e439", + "reference": "9d32c685773823b1983e256ae4ecd48a10d6e439", + "shasum": "" + }, + "require": { + "php": ">=8.3" + }, + "require-dev": { + "phpunit/phpunit": "^12.5.26" + }, + "suggest": { + "ext-posix": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "8.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides functionality to handle HHVM/PHP environments", + "homepage": "https://github.com/sebastianbergmann/environment", + "keywords": [ + "Xdebug", + "environment", + "hhvm" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/environment/issues", + "security": "https://github.com/sebastianbergmann/environment/security/policy", + "source": "https://github.com/sebastianbergmann/environment/tree/8.1.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/environment", + "type": "tidelift" + } + ], + "time": "2026-05-25T13:40:20+00:00" + }, + { + "name": "sebastian/exporter", + "version": "7.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "c5e21b5de653ce0a769fb36f5cdfcb5e7a32cf23" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/c5e21b5de653ce0a769fb36f5cdfcb5e7a32cf23", + "reference": "c5e21b5de653ce0a769fb36f5cdfcb5e7a32cf23", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "php": ">=8.3", + "sebastian/recursion-context": "^7.0.1" + }, + "require-dev": { + "phpunit/phpunit": "^12.5.25" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "7.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Provides the functionality to export PHP variables for visualization", + "homepage": "https://www.github.com/sebastianbergmann/exporter", + "keywords": [ + "export", + "exporter" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/exporter/issues", + "security": "https://github.com/sebastianbergmann/exporter/security/policy", + "source": "https://github.com/sebastianbergmann/exporter/tree/7.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/exporter", + "type": "tidelift" + } + ], + "time": "2026-05-20T04:37:17+00:00" + }, + { + "name": "sebastian/global-state", + "version": "8.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "b164d3274d6537ab462591c5755f76a8f5b1aae9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/b164d3274d6537ab462591c5755f76a8f5b1aae9", + "reference": "b164d3274d6537ab462591c5755f76a8f5b1aae9", + "shasum": "" + }, + "require": { + "php": ">=8.3", + "sebastian/object-reflector": "^5.0", + "sebastian/recursion-context": "^7.0.1" + }, + "require-dev": { + "ext-dom": "*", + "phpunit/phpunit": "^12.5.28" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "8.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Snapshotting of global state", + "homepage": "https://www.github.com/sebastianbergmann/global-state", + "keywords": [ + "global state" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/global-state/issues", + "security": "https://github.com/sebastianbergmann/global-state/security/policy", + "source": "https://github.com/sebastianbergmann/global-state/tree/8.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/global-state", + "type": "tidelift" + } + ], + "time": "2026-06-01T15:10:33+00:00" + }, + { + "name": "sebastian/lines-of-code", + "version": "4.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/lines-of-code.git", + "reference": "d543b8ef219dcd8da262cbb958639a96bedba10e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/d543b8ef219dcd8da262cbb958639a96bedba10e", + "reference": "d543b8ef219dcd8da262cbb958639a96bedba10e", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^5.7.0", + "php": ">=8.3" + }, + "require-dev": { + "phpunit/phpunit": "^12.5.25" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for counting the lines of code in PHP source code", + "homepage": "https://github.com/sebastianbergmann/lines-of-code", + "support": { + "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", + "security": "https://github.com/sebastianbergmann/lines-of-code/security/policy", + "source": "https://github.com/sebastianbergmann/lines-of-code/tree/4.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/lines-of-code", + "type": "tidelift" + } + ], + "time": "2026-05-19T16:22:07+00:00" + }, + { + "name": "sebastian/object-enumerator", + "version": "7.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-enumerator.git", + "reference": "1effe8e9b8e068e9ae228e542d5d11b5d16db894" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/1effe8e9b8e068e9ae228e542d5d11b5d16db894", + "reference": "1effe8e9b8e068e9ae228e542d5d11b5d16db894", + "shasum": "" + }, + "require": { + "php": ">=8.3", + "sebastian/object-reflector": "^5.0", + "sebastian/recursion-context": "^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^12.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "7.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Traverses array structures and object graphs to enumerate all referenced objects", + "homepage": "https://github.com/sebastianbergmann/object-enumerator/", + "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/7.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2025-02-07T04:57:48+00:00" + }, + { + "name": "sebastian/object-reflector", + "version": "5.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-reflector.git", + "reference": "4bfa827c969c98be1e527abd576533293c634f6a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/4bfa827c969c98be1e527abd576533293c634f6a", + "reference": "4bfa827c969c98be1e527abd576533293c634f6a", + "shasum": "" + }, + "require": { + "php": ">=8.3" + }, + "require-dev": { + "phpunit/phpunit": "^12.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "5.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Allows reflection of object attributes, including inherited and non-public ones", + "homepage": "https://github.com/sebastianbergmann/object-reflector/", + "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/5.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2025-02-07T04:58:17+00:00" + }, + { + "name": "sebastian/recursion-context", + "version": "7.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "0b01998a7d5b1f122911a66bebcb8d46f0c82d8c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/0b01998a7d5b1f122911a66bebcb8d46f0c82d8c", + "reference": "0b01998a7d5b1f122911a66bebcb8d46f0c82d8c", + "shasum": "" + }, + "require": { + "php": ">=8.3" + }, + "require-dev": { + "phpunit/phpunit": "^12.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "7.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides functionality to recursively process PHP variables", + "homepage": "https://github.com/sebastianbergmann/recursion-context", + "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/7.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/recursion-context", + "type": "tidelift" + } + ], + "time": "2025-08-13T04:44:59+00:00" + }, + { + "name": "sebastian/type", + "version": "6.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/type.git", + "reference": "82ff822c2edc46724be9f7411d3163021f602773" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/82ff822c2edc46724be9f7411d3163021f602773", + "reference": "82ff822c2edc46724be9f7411d3163021f602773", + "shasum": "" + }, + "require": { + "php": ">=8.3" + }, + "require-dev": { + "phpunit/phpunit": "^12.5.25" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "6.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Collection of value objects that represent the types of the PHP type system", + "homepage": "https://github.com/sebastianbergmann/type", + "support": { + "issues": "https://github.com/sebastianbergmann/type/issues", + "security": "https://github.com/sebastianbergmann/type/security/policy", + "source": "https://github.com/sebastianbergmann/type/tree/6.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/type", + "type": "tidelift" + } + ], + "time": "2026-05-20T06:45:45+00:00" + }, + { + "name": "sebastian/version", + "version": "6.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "3e6ccf7657d4f0a59200564b08cead899313b53c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/3e6ccf7657d4f0a59200564b08cead899313b53c", + "reference": "3e6ccf7657d4f0a59200564b08cead899313b53c", + "shasum": "" + }, + "require": { + "php": ">=8.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "6.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that helps with managing the version number of Git-hosted PHP projects", + "homepage": "https://github.com/sebastianbergmann/version", + "support": { + "issues": "https://github.com/sebastianbergmann/version/issues", + "security": "https://github.com/sebastianbergmann/version/security/policy", + "source": "https://github.com/sebastianbergmann/version/tree/6.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2025-02-07T05:00:38+00:00" + }, + { + "name": "staabm/side-effects-detector", + "version": "1.0.5", + "source": { + "type": "git", + "url": "https://github.com/staabm/side-effects-detector.git", + "reference": "d8334211a140ce329c13726d4a715adbddd0a163" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/staabm/side-effects-detector/zipball/d8334211a140ce329c13726d4a715adbddd0a163", + "reference": "d8334211a140ce329c13726d4a715adbddd0a163", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": "^7.4 || ^8.0" + }, + "require-dev": { + "phpstan/extension-installer": "^1.4.3", + "phpstan/phpstan": "^1.12.6", + "phpunit/phpunit": "^9.6.21", + "symfony/var-dumper": "^5.4.43", + "tomasvotruba/type-coverage": "1.0.0", + "tomasvotruba/unused-public": "1.0.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "lib/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A static analysis tool to detect side effects in PHP code", + "keywords": [ + "static analysis" + ], + "support": { + "issues": "https://github.com/staabm/side-effects-detector/issues", + "source": "https://github.com/staabm/side-effects-detector/tree/1.0.5" + }, + "funding": [ + { + "url": "https://github.com/staabm", + "type": "github" + } + ], + "time": "2024-10-20T05:08:20+00:00" + }, + { + "name": "theseer/tokenizer", + "version": "2.0.1", + "source": { + "type": "git", + "url": "https://github.com/theseer/tokenizer.git", + "reference": "7989e43bf381af0eac72e4f0ca5bcbfa81658be4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/7989e43bf381af0eac72e4f0ca5bcbfa81658be4", + "reference": "7989e43bf381af0eac72e4f0ca5bcbfa81658be4", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": "^8.1" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + } + ], + "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", + "support": { + "issues": "https://github.com/theseer/tokenizer/issues", + "source": "https://github.com/theseer/tokenizer/tree/2.0.1" + }, + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } + ], + "time": "2025-12-08T11:19:18+00:00" + } + ], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": [], + "prefer-stable": true, + "prefer-lowest": false, + "platform": { + "php": "^8.3" + }, + "platform-dev": [], + "plugin-api-version": "2.6.0" +} diff --git a/config/sonardesk.php b/config/sonardesk.php new file mode 100755 index 0000000..55987ab --- /dev/null +++ b/config/sonardesk.php @@ -0,0 +1,46 @@ + env('SONARDESK_PRODUCT_CODE', 'sonardesk'), + 'private_key_path' => env('SONARDESK_LICENSE_PRIVATE_KEY_PATH'), + 'public_key' => env('SONARDESK_LICENSE_PUBLIC_KEY'), + 'default_edition' => env('SONARDESK_DEFAULT_EDITION', 'Professional'), + 'default_max_major_version' => (int) env('SONARDESK_DEFAULT_MAX_MAJOR_VERSION', 1), + 'activation_rate_limit' => env('SONARDESK_ACTIVATION_RATE_LIMIT', '12,1'), + 'purchase_url' => env('SONARDESK_PURCHASE_URL'), + 'portal_url' => env('SONARDESK_PORTAL_URL'), + 'support_url' => env('SONARDESK_SUPPORT_URL'), + + 'legal' => [ + 'controller_name' => env('SONARDESK_LEGAL_NAME', 'SonarDesk'), + 'privacy_email' => env('SONARDESK_PRIVACY_EMAIL', env('MAIL_FROM_ADDRESS')), + 'support_email' => env('SONARDESK_SUPPORT_EMAIL', env('MAIL_FROM_ADDRESS')), + 'country' => env('SONARDESK_LEGAL_COUNTRY', 'United Kingdom'), + ], + 'privacy' => [ + 'policy_version' => env('SONARDESK_PRIVACY_VERSION', '2026-09-09'), + 'cookie_version' => env('SONARDESK_COOKIE_VERSION', '1'), + 'support_retention_days' => (int) env('SONARDESK_SUPPORT_RETENTION_DAYS', 730), + ], + 'support' => [ + 'alert_emails' => array_values(array_filter(array_map('trim', explode(',', (string) env('SONARDESK_SUPPORT_ALERT_EMAILS', ''))))), + 'notify_admin_users' => filter_var(env('SONARDESK_SUPPORT_NOTIFY_ADMINS', true), FILTER_VALIDATE_BOOL), + ], + 'paddle' => [ + 'api_key' => env('PADDLE_API_KEY'), + 'client_side_token' => env('PADDLE_CLIENT_SIDE_TOKEN'), + 'environment' => env('PADDLE_ENVIRONMENT', env('APP_ENV') === 'production' ? 'production' : 'sandbox'), + 'api_url' => env('PADDLE_API_URL', env('APP_ENV') === 'production' ? 'https://api.paddle.com' : 'https://sandbox-api.paddle.com'), + 'webhook_secret' => env('PADDLE_WEBHOOK_SECRET'), + 'timestamp_tolerance' => (int) env('PADDLE_WEBHOOK_TOLERANCE', 300), + 'personal_product_id' => env('PADDLE_PERSONAL_PRODUCT_ID'), + 'personal_monthly_price_id' => env('PADDLE_PERSONAL_MONTHLY_PRICE_ID'), + 'personal_annual_price_id' => env('PADDLE_PERSONAL_ANNUAL_PRICE_ID'), + 'professional_product_id' => env('PADDLE_PROFESSIONAL_PRODUCT_ID'), + 'professional_monthly_price_id' => env('PADDLE_PROFESSIONAL_MONTHLY_PRICE_ID'), + 'professional_annual_price_id' => env('PADDLE_PROFESSIONAL_ANNUAL_PRICE_ID'), + ], + 'lemon_squeezy' => [ + 'webhook_secret' => env('LEMON_SQUEEZY_WEBHOOK_SECRET'), + ], +]; diff --git a/database/database.sqlite b/database/database.sqlite new file mode 100755 index 0000000000000000000000000000000000000000..379c23df544e74dcd7fe058bb3c1440bb3fded99 GIT binary patch literal 184320 zcmeI5TWlOxn%}$FO}0phEZMT$_INaIwPaI05~aRhsLXnFp(M&8sS7EJ+I1?`Rj0`! ztGn7&)fCC>z-Y-fW(ON!gWbXI<{?>39wtw_L4pN#lWY(K2$D&F0LdCifJGh#*_qcJ z4E7RW98A8d>guklE?y*ivX=aBTV(aQe&_dHPSrW5+4t_;QcRYtYkEU8lljQe2**Xf znM_6^k>8x{Iy}q9peAmDszti8UNSg-yR=3{Px(z z(cg~`jecvSGW`AFx1;}L=+C*i-I{q$(x1HYQaq8*b0003VohbLBC)2y1W_`TP0>`e zrV*0#@|C+YmlkJ|iKqCpXx3Qf!-=(v)=8 zU`;dG)aYMZRnPU?u_|tgy0j+h-fX35n4+rMQVF}1X;HRi7`+ClS+Ug;HkoeFV0_8W z5Sc89W-2L*CNq@=^LD6;hA9|~HGL(hMVWQ^1S+4ijFKs3NIdR$1>bW&$^rn9ER zjNU+vlnp7J)S5||sf>(T5)Da|S-Mj>8czrpxsIeXWwzxKrcw$GWn0kNW=-1?+;l}2 z+D+yCc29qSf-iLywlqI`XK5xmJAZZNK~D@JPWkDZI#1q#~aGgo70U3hSHcYL-bVq!_m&teG`^_V~ zj?W|vOCkQ2Q|Zpccswyj61?N<#EVy06OA>$=Dp@x;s&*SX;Jx?W#`q{+-5 z0(yC4d-++fl(z++NA*hB(TTdD5U_UWP@=<4agV3Mr3tF99}DOXMq&f8px4Lf!DKyf z`@4@M*n}@exKh$IEXL!BsVVN`wl_xf%Fc0-OQh2swDZQb)QW6YPX>L=@ zIg?HIh8+;^Df~SBt0UxEG{c^9ywSlzbEI|OYI9M{ZD)!%x_R-gn!8iHn;cffu|T(k zWdOc*Q|a~Lc%n+ZANKd&Hk>)rmpZabzrMnQJ$AFnahId^jQ51It=W~z{T=gLubb>z zZOFrf+p;@PkdBm=Aj&e$0W?!~Yf!3PP+X-O1m|XulE_F@O{9mE;LV{QklS=m)8PR% zwpT!PM9O-ae zE|V(>nX2`Fwv?fl;4I(>M!VJ0bW<=DX@i-xuH2LbT1r>yisU?0$BHAdNW<5FRX<}b zLI^GTp)zWuW=OiyvevzYy24c1h^B{Qk)?jMijd1>%EgM?uOv!qOt2r|hYB(3VYDYA z70vc~(2eb;Bp7B}Ry4tql=eHE9*WUeMDx|k6fL>B1M^j+rQbEDGh=!v7TNY!vpWl` z=Bz#{&DCz*vs^6l%ig-#YCd1cyIs0#A5Q6U{=Y?H{P!aKPxv46-{b%27oc1;2?8Jh z0w4eaAOHd&00JNY0w4eaAh0iiSEA7=E_lLdC=rY1d#U|nJ4Te+J3bmLerPC~7_|;x z7!zFdB-cACV8pHc|LEA6$oRiI{Fn3#FAx9$5C8!X009sH0T8eWJeiG-z887(@v#q2 z#1<}JyF8;Rmo^`4-_PGJwcEuj+3lLKWn8|w^RQ6V=4NlsuWcrC3v(#b1pI(_=;LbjNx%nBk_;7Y<=Kg)@ zx_s@9dU;1&zW=V6U)fr|v8L2=H?J;SvFjHXl$&+w#!XdjsGIVGIb|U?Q<__ES#9r7 zURG*6QWo-arMX4wyRnv$Z(OGI%BIwuFV-4!ZMl)L^XC^eMQT*D^7SR>J;^0rubL0< z&6evA=1TMHn(`p`&{%meug$KTYYXeMC1$m|qmevY8&29KO3TtX=cuouDsRu0Y3z?^ z?A7{%%s1Bm+0RQ)W`}yZESlQ#N^VB3XVNDqdl9sx_+ZtX6vkWy;`o^Y0f=b zQ~$r|GPj2=yLtQRa&CG4-MNj{jb(N25mPT;moqcDyXyVo@&ol2Q|~UiW$uCaA@ap&$v*A|{HU4E~T{_q>z=zF8&mmd$ume+3It}R@@e@neuSku-o8C89G zHnWqv+iqMbwYTOT=;eFb%+}HuOqZFx{POO`+JlGJRQ=(`ovrzXl)Jxt^P0FbzkOd_ zo4=FE-oCr2UXwSrt}f=X>q|?;w$zx*+;RN+;JVzI+08FESC;RZ;&NfLc3oY6xLjO+ zX!$q!T+mnN7Vl6S*EVX)YWr4WtF@B5-zI5y$S1252Xa=7c-YullX9!U_&{ynani1~ zY(KaCxp6=5@n@@ztQDuoC7a@Mu`cKCD-U*-iYtwooq6i_;q|%gmGzsAg~dCM<`$O< zbJths_ucjR+)9>AVr~BV($3t~jl#mR)z=2aBD1>wd)t39M$tXW??m|T^E><}nCw6R z1V8`;KmY_l00ck)1V8`;KmY_jUjpZ%?{NoRNsU^C54u!0bT<0l=t0+loag_aM)<$s zf69OQ`Hm2+fdB}A00@8p2!H?xfB*=900@8p2>fjkh(#k@)cP?LjgF2w&;LJ;@c)PZ z3;xG{TQZ?v5C8!X009sH0T2KI5C8!X009sHfzM9hP&CF_pZtm17xb}_p?EYlYMuYL zKL0<&pO5grOF!@e0T2KI5C8!X009sH0T2KI5C8!XAOgzJcx39Gx42Qd9?j?NzurIP z{Mr90`XbA_*4F?e@7Z4iko11HruRB(eTBeOraG0WBy-v6OlG=}4@qL&c;u~qSJZm% zn>wGqo6K~kI-M(eyXhub`~O4yUq$$z(GR>p00ck)1V8`;KmY_l00ck)1V8`;UK|4S zrH6F z6AD9o^sQ0vSpxg~|HNv9FVGLXKmY_l00ck)1V8`;KmY_l00cnbvk~ar96Gkdb;ge$ zzv!Hvr{?ncOjgWPa&msEnx`Z2XA7AjiIpq0e7#hvmTH-@ zlqm&p{wjGWKc#B8~q$z>>4sus(otW?ius#hy_Z_J7MMuYyH zU)9;Frf+{!tQj)fJl|yIUPtq@)A@?`%sidew~{)u+_9z6@WF`rDV8rW8Vt)$SprVg z>iJx?SSX0uY^f%)Qngwu(bx(FiAm+WT+LKjMJ{GD^?WTW=keYrg$O6BF`)00@8p2!H?xfB*=900@8p2!OzIO<*S08RtIh=Ng8t zQY)jM^%Dio{{Igm{Ezq_Jl9MiJP3dQ2!H?xfB*=900@8p2!H?xd>IJ55xvOm@+S_4 zz7oASx=Wt*_x~bCzYKsdMi2l25C8!X009sH0T2KI5C8!X`0^64_W$wx|K-&`Mh*fX z00JNY0w4eaAOHd&00JQJSDPdWy|!ffc0`i zlosw~&u7llSN+k~24<>LnMyKee>Yz-7n0ODKI96K?+UT^-^71*Au`j2{B*A96(TcT zEKL{7AxWJf&XvoBv$tII-GFr_=CV^2R>@5jin2`KFqq3v6|?!Wl&xjzOv;7B$xLTU z)7h+F2s_Ez|Bv#C2>&m6M!)a^0T2KI5C8!X009sH0T2KI5CDNM6M?zd(!suH?;vXh zQBP}oKj9ywwV_)i+kw8@?;z_1;}buR@I#+Q_!T}r{+AQ~b^P1oV~5`!yEyv$Bfl{s z41aex7JD-E>CmOfKZt0bg8_7Y`Q>=xQJ#DJy3&-{ma0gsX)r;QOl4CvpJZQ((^3)l z@u(@*R2Ilpw5Ab~^zxOvGnW=;l8cuv-bOQFdL^8@&do zS+Ug;HkocvHD9s=fXRYrrjoK~GE-?VZ-=UAn1aDr(^rC8lv$TvpfY9oglvip=IN3I zW6EmNf^en>jRulV>a5Om)|8mhqhO?Lg6X8zOv+4UCQC}9A&D|ecPdBY3E?8wk$f7Z zQVNZ8ThQ8OP1_P&wJ5UCZYuA$d&&(Ie5tF=rTN)AOEbyY`KvPzdSVEH!h@}*ED3wV z2^6>Npf5)%{UpZ66BjRXAHC@_w?HkoMj-iUxY-3t{US_{RHJXVOj5Ti8tE{VG})HV zfORG*ErqOFU=2}GJ*p>@v6VAuFysehdVV7$J8HKqiwq`zUKaGhL_Bf*1lO7L8jvAK zZNt-bEpmB*8nrPP}-9HPKk}Tdpy&m#G@N z)gBbbqeZ(L66pGoc;fvN+~aY-KrM0G3R6N$*ESW|LbGKuy(y}Krdw}=&Si}6E#iUO z8x%TNHAQAJAWbTL;qXY}$_XxFkHdIhRZI%@cF3jZ?;0=xkHl81U+p zlPpjqFgy}bGXpC34j^cVy`gyRqDRJ~E6RVWsMEJHqg^v3U1CV__JTWuHbuM@VL$9hJX)^Oisb1dLUZJ2@%G-j^>3b#Y07~6Zlv+D< zDAD1jxW`lB(gY2rAFf=r>>}&v!DKyf`@4@M*n}^Pxl+=df*6k{rlz=$+rB#mS7mNo zaNi#ajZ!{@mIt_ge4zVLOSL^S^@bZ?l<{Wl8dT^Ot}eD!GdX!%*Xqo$Zbn6Ql5Btf zSkteYwJPixcLv~kysS4@beRQw)RR5vz_yeG!&I8v#PCcu-5Yj5yr+mP>0cco*P@$% zQ_fuFV4-Q;y6?7oRLpJXF2v~O#k*?m-i5fyVO1OpbW7MbqTY5>>Gk1wqDs9V_V?a4 zoN3*cI%d);ohBN4Lh)i6EM9(C$f5f*whbMeA0RkWZ0w4eaAOHd& z00JNY0w4eaAP`B%mLl9iJ_!;1JF%sFx8&Z32K=Y`?N1vFouO_HbVgu&^#4Z2hqwqo zGyV@p-#j!o@^6O!d+ax2Q&BZ~a_HXEfFsiP=-T zZ7q2!3R%yaROj^9;)zqIxW~M`F5}7aT%Po=%y@DvDeUdmkYzCKQIqMRt1lk8-8Hh_ zl4WqA-)cRbUOhqUfeCj#&=H{Din9)BrzXRY21|Ni1~I0;I+FNCVsDHNz&AVm8}USf zg!)z=oh`%HLU8Q`YEx9(*7_~2@_I0MwR=EH;#cB{A_)|=*GH|@MMF?%yGCv(bSlF# zK0ED%pHWyjhmf6PN$xh1O3%JNl6bGY8=sbF7>{W4mA14s5NOjGc@_DonLw_ zo+y{O$8XsDLJNf^zTxK^TE^C^Z=>If))p+(G{cw3{cEev0fKZ|OvDpe!X59U?e5My zXF6Ivo-a!8!5Z*m+VT< z5u1*)D0O9Ew~tn^9UBP6YaJ|V)MydkuK`;44hO%>S&P0w?!D`gnM`+9kH-_=s&bFt zvbE&yO+8|@HBH+P*e0#M8`fS_;0S@8F>r)H@Yj1SRJqUEhhqZawJqJcLi%>)Tsdi1 zZsHXRl2z`bvTZBj?S!W${MHm+=$Xu`C$qcR<#of}wpMQtp`|Pp3FdYye8aE1Vsl>uJtgj!cf&_kNw1-;O61&T^fyt!Ja% zYH2!ItRihNiY+u3YU-wKV~$n>1=4$mw|E3Q6&1C>m!b3Co(?TL@3ZU1jJ_p`GKW=r|jR@J?7i zgtvRVvpWw5xV{}~nt?(CjqEB@ueVhCqkJlEZL)sngdMH}O$Oe+)fJL^rpf7Y-cz%W(2#JnQu4+1+(hNQ}^bai1t~k?06=$IR z=S;oRC(c0AS^2;TWA6;%+=V;7=+0|_;(;kIjqm@%q7(>#00@8p2!H?xfB*=900@8p z2)y_N@cn-;zK$_M5C8!X009sH0T2KI5C8!X009uN_WwEls}cGiFAx9$5C8!X009sH z0T2KI5C8!X_)-$+h}@CL~x`WI=6i~n>%e5W-na1zjpKTUG>8JT9YkrURs`Ga|>CuKDS%r;h}Qls%8lV8cSSLd(p7+XfQzOj*A-dK2G zTw~(KP5nlrQphdb-VqBkGljOkUI-Dzn?&E2Sf0)nto?tE|51eg#|s2N00ck)1V8`; zKmY_l00ck)1VG?#py!U{ro@n|DQWMfxsXD0w4eaAOHd&00JNY0w4eaAmAsk z$Ns-_{{Pbm|Ea$U-hluJfB*=900@8p2!H?xfB*=900_Jo1ftQ=QS1Ew#F1Z$@aHFf zI`RF94gL@L?TO_0pO63U_QD1V8`;KmY_l00ck)1V8`;BGa$Ol;bf~ z)WuDvPD!G)#-`+YzL2k#S*=_ymgGt$&#IDG&eRJsE7z-1O_|PKT>ri8%d@Y=+LKRN zciL1MOs5vgl}a^}EmbRaQanS7~GDv2@^^QBBSn-#@erC7?>>T??zK_N(g`qnIg{NsN!h>0^Up~Kl*ffWKfK1wI=5>Wl7EzC04D7qFl^oYSj#@ zvqFxQD~@&=6SKpEV(eGfD@LVSDV7T)Mq^?+HYkQvFO!%|mc(qfke8%tf%H?!mutmB zu2?Hq9UAHnXQP8+>{mA^My^U?s6U*3X;6$>fjZAo_nAtrTFcZ~k%=rXIbSbi zdrCPvD8_zuy<(8-xJnu0ze~^mKZs0xZQ{;&alAGDFUEf~@h1~MnfMO>ANe%@D@T5C z1SbO!=|KPlKmY_l00ck)1V8`;zE}iuQH6WDg^1TH(e_hTaUP;xn~rV=Djsy9AaN|3zei--+-)=KmM}3IAXC zf6xC7|Hu44=fBJUI{$><;lI!S<1dz@LmChO0T2KI5C8!X009sH0T2KI5O|&l9E!#` z>m1DM?!{})#nvYY_u^IO;$!i+d+~~M@#xcI?#0XQ#Zl*?F)`v^3_BO<4`c3ywX$%? zI(^_IJo@w{_wWBdPvjsg2!H?xfB*=900@8p2!H?xfB*=9z|#?M|Nj5e)k0|y009sH z0T2KI5C8!X009sH0T2Lz=ZOHG|DPvqK~@j|0T2KI5C8!X009sH0T2KI5O_8M*7N@m z|5p+IXY>Ov5C8!X009sH0T2KI5C8!X009sHfft9sa4ZtxhGO*7{{Fwn(HCcE7zqe~ z00@8p2!H?xfB*=900@8p2!OyK0i6FIWP%hB009sH0T2KI5C8!X009sH0T6i62;lku zMbjw80|Fob0w4eaAOHd&00JNY0w4eag9PyWKga|rAOHd&00JNY0w4eaAOHd&00JQJ zq7lIJ|BI$kj0Xfj00ck)1V8`;KmY_l00ck)1O^F=TS@r)e}iC<0s+zf+xwvLKqNBxN&GX)qE* zqC}GoB)3~unP75DR~n+eo!nsC&d}27>Y0(m+$0yVb!WV}PgSVL6Q zP$4Gw7Q$0;R~hUwB*O7i@x&a7@J^@*I;%6CH6 zs7_MN)?jhpoD%Gg6Edw$7wny`_^qy%string('id')->primary(); + $table->foreignId('user_id')->nullable()->index(); + $table->string('ip_address', 45)->nullable(); + $table->text('user_agent')->nullable(); + $table->longText('payload'); + $table->integer('last_activity')->index(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('sessions'); + } +}; diff --git a/database/migrations/2026_09_08_200000_create_sonardesk_licensing_tables.php b/database/migrations/2026_09_08_200000_create_sonardesk_licensing_tables.php new file mode 100755 index 0000000..babc7a3 --- /dev/null +++ b/database/migrations/2026_09_08_200000_create_sonardesk_licensing_tables.php @@ -0,0 +1,92 @@ +id(); + $table->string('code')->unique(); + $table->string('name'); + $table->string('edition')->default('Professional'); + $table->unsignedInteger('activation_limit')->default(1); + $table->unsignedInteger('max_major_version')->nullable(); + $table->string('payment_provider')->nullable(); + $table->string('external_product_id')->nullable(); + $table->string('external_price_id')->nullable(); + $table->boolean('active')->default(true); + $table->timestamps(); + $table->unique(['payment_provider', 'external_price_id']); + }); + + Schema::create('licenses', function (Blueprint $table) { + $table->uuid('id')->primary(); + $table->foreignId('license_product_id')->constrained('license_products'); + $table->string('license_key_hash', 64)->unique(); + $table->string('license_key_last4', 4); + $table->string('customer_name')->nullable(); + $table->string('customer_email')->nullable()->index(); + $table->string('edition'); + $table->unsignedInteger('activation_limit'); + $table->unsignedInteger('max_major_version')->nullable(); + $table->timestamp('expires_at')->nullable(); + $table->timestamp('revoked_at')->nullable(); + $table->string('revoke_reason')->nullable(); + $table->string('payment_provider')->nullable(); + $table->string('external_order_id')->nullable(); + $table->string('external_customer_id')->nullable(); + $table->timestamps(); + $table->unique(['payment_provider', 'external_order_id']); + }); + + Schema::create('license_delivery_outbox', function (Blueprint $table) { + $table->id(); + $table->uuid('license_id')->unique(); + $table->text('encrypted_license_key'); + $table->string('recipient_email')->nullable(); + $table->timestamp('delivered_at')->nullable(); + $table->timestamps(); + $table->foreign('license_id')->references('id')->on('licenses')->cascadeOnDelete(); + }); + + Schema::create('license_activations', function (Blueprint $table) { + $table->id(); + $table->uuid('license_id'); + $table->uuid('installation_id'); + $table->string('platform', 32)->nullable(); + $table->string('app_version', 32)->nullable(); + $table->timestamp('activated_at'); + $table->timestamp('last_seen_at')->nullable(); + $table->timestamp('deactivated_at')->nullable(); + $table->foreign('license_id')->references('id')->on('licenses')->cascadeOnDelete(); + $table->unique(['license_id', 'installation_id']); + $table->index(['license_id', 'deactivated_at']); + }); + + Schema::create('license_webhook_events', function (Blueprint $table) { + $table->id(); + $table->string('provider'); + $table->string('external_event_id'); + $table->string('event_type'); + $table->string('payload_sha256', 64); + $table->json('payload'); + $table->timestamp('processed_at')->nullable(); + $table->text('processing_error')->nullable(); + $table->timestamps(); + $table->unique(['provider', 'external_event_id']); + }); + } + + public function down(): void + { + Schema::dropIfExists('license_webhook_events'); + Schema::dropIfExists('license_activations'); + Schema::dropIfExists('license_delivery_outbox'); + Schema::dropIfExists('licenses'); + Schema::dropIfExists('license_products'); + } +}; diff --git a/database/migrations/2026_09_08_200758_create_cache_table.php b/database/migrations/2026_09_08_200758_create_cache_table.php new file mode 100755 index 0000000..06dc7a5 --- /dev/null +++ b/database/migrations/2026_09_08_200758_create_cache_table.php @@ -0,0 +1,35 @@ +string('key')->primary(); + $table->mediumText('value'); + $table->bigInteger('expiration')->index(); + }); + + Schema::create('cache_locks', function (Blueprint $table) { + $table->string('key')->primary(); + $table->string('owner'); + $table->bigInteger('expiration')->index(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('cache'); + Schema::dropIfExists('cache_locks'); + } +}; diff --git a/database/migrations/2026_09_08_205000_create_sonardesk_auth_tables.php b/database/migrations/2026_09_08_205000_create_sonardesk_auth_tables.php new file mode 100755 index 0000000..b058933 --- /dev/null +++ b/database/migrations/2026_09_08_205000_create_sonardesk_auth_tables.php @@ -0,0 +1,37 @@ +id(); + $table->string('name'); + $table->string('email')->unique(); + $table->timestamp('email_verified_at')->nullable(); + $table->string('password'); + $table->rememberToken(); + $table->timestamps(); + }); + } + + if (! Schema::hasTable('password_reset_tokens')) { + Schema::create('password_reset_tokens', function (Blueprint $table): void { + $table->string('email')->primary(); + $table->string('token'); + $table->timestamp('created_at')->nullable(); + }); + } + } + + public function down(): void + { + Schema::dropIfExists('password_reset_tokens'); + Schema::dropIfExists('users'); + } +}; diff --git a/database/migrations/2026_09_08_210000_add_sonardesk_portal_fields.php b/database/migrations/2026_09_08_210000_add_sonardesk_portal_fields.php new file mode 100755 index 0000000..b302e12 --- /dev/null +++ b/database/migrations/2026_09_08_210000_add_sonardesk_portal_fields.php @@ -0,0 +1,30 @@ + $table->boolean('is_admin')->default(false)->index()); + } + + if (Schema::hasTable('license_activations') && ! Schema::hasColumn('license_activations', 'installation_name')) { + Schema::table('license_activations', fn (Blueprint $table) => $table->string('installation_name')->nullable()->after('installation_id')); + } + } + + public function down(): void + { + if (Schema::hasTable('license_activations') && Schema::hasColumn('license_activations', 'installation_name')) { + Schema::table('license_activations', fn (Blueprint $table) => $table->dropColumn('installation_name')); + } + + if (Schema::hasTable('users') && Schema::hasColumn('users', 'is_admin')) { + Schema::table('users', fn (Blueprint $table) => $table->dropColumn('is_admin')); + } + } +}; diff --git a/database/migrations/2026_09_09_100000_add_paddle_subscription_fields.php b/database/migrations/2026_09_09_100000_add_paddle_subscription_fields.php new file mode 100755 index 0000000..ef60b76 --- /dev/null +++ b/database/migrations/2026_09_09_100000_add_paddle_subscription_fields.php @@ -0,0 +1,34 @@ +string('external_subscription_id')->nullable()->after('external_customer_id'); + $table->string('external_price_id')->nullable()->after('external_subscription_id'); + $table->string('subscription_status')->nullable()->after('external_price_id'); + $table->timestamp('current_period_ends_at')->nullable()->after('subscription_status'); + $table->timestamp('cancel_scheduled_at')->nullable()->after('current_period_ends_at'); + $table->unique(['payment_provider', 'external_subscription_id']); + }); + } + + public function down(): void + { + Schema::table('licenses', function (Blueprint $table) { + $table->dropUnique(['payment_provider', 'external_subscription_id']); + $table->dropColumn([ + 'external_subscription_id', + 'external_price_id', + 'subscription_status', + 'current_period_ends_at', + 'cancel_scheduled_at', + ]); + }); + } +}; diff --git a/database/migrations/2026_09_09_160000_create_support_tickets_and_notifications.php b/database/migrations/2026_09_09_160000_create_support_tickets_and_notifications.php new file mode 100755 index 0000000..a6223e3 --- /dev/null +++ b/database/migrations/2026_09_09_160000_create_support_tickets_and_notifications.php @@ -0,0 +1,47 @@ +id(); + $table->foreignId('user_id')->nullable()->constrained()->nullOnDelete(); + $table->foreignId('assigned_to')->nullable()->constrained('users')->nullOnDelete(); + $table->string('reference', 24)->unique(); + $table->string('name', 120); + $table->string('email', 254)->index(); + $table->string('category', 40)->default('general'); + $table->string('subject', 180); + $table->text('message'); + $table->string('status', 20)->default('new')->index(); + $table->string('priority', 20)->default('normal'); + $table->timestamp('privacy_notice_accepted_at'); + $table->timestamp('resolved_at')->nullable()->index(); + $table->timestamps(); + }); + } + + if (! Schema::hasTable('notifications')) { + Schema::create('notifications', function (Blueprint $table): void { + $table->uuid('id')->primary(); + $table->string('type'); + $table->morphs('notifiable'); + $table->text('data'); + $table->timestamp('read_at')->nullable(); + $table->timestamps(); + }); + } + } + + public function down(): void + { + Schema::dropIfExists('support_tickets'); + Schema::dropIfExists('notifications'); + } +}; diff --git a/database/migrations/2026_09_29_100000_create_cms_pages_table.php b/database/migrations/2026_09_29_100000_create_cms_pages_table.php new file mode 100644 index 0000000..dee3e79 --- /dev/null +++ b/database/migrations/2026_09_29_100000_create_cms_pages_table.php @@ -0,0 +1,25 @@ +id(); + $table->string('title'); + $table->string('slug')->unique(); + $table->text('excerpt')->nullable(); + $table->longText('body'); + $table->string('meta_title')->nullable(); + $table->string('meta_description', 320)->nullable(); + $table->boolean('is_published')->default(false)->index(); + $table->timestamp('published_at')->nullable()->index(); + $table->timestamps(); + }); + } + + public function down(): void { Schema::dropIfExists('cms_pages'); } +}; diff --git a/database/seeders/PaddleCatalogSeeder.php b/database/seeders/PaddleCatalogSeeder.php new file mode 100755 index 0000000..29a2390 --- /dev/null +++ b/database/seeders/PaddleCatalogSeeder.php @@ -0,0 +1,29 @@ + 'personal-monthly', 'name' => 'SonarDesk Personal Monthly', 'edition' => 'Personal', 'activation_limit' => 1, 'external_product_id' => config('sonardesk.paddle.personal_product_id'), 'external_price_id' => config('sonardesk.paddle.personal_monthly_price_id')], + ['code' => 'personal-annual', 'name' => 'SonarDesk Personal Annual', 'edition' => 'Personal', 'activation_limit' => 1, 'external_product_id' => config('sonardesk.paddle.personal_product_id'), 'external_price_id' => config('sonardesk.paddle.personal_annual_price_id')], + ['code' => 'professional-monthly', 'name' => 'SonarDesk Professional Monthly', 'edition' => 'Professional', 'activation_limit' => 3, 'external_product_id' => config('sonardesk.paddle.professional_product_id'), 'external_price_id' => config('sonardesk.paddle.professional_monthly_price_id')], + ['code' => 'professional-annual', 'name' => 'SonarDesk Professional Annual', 'edition' => 'Professional', 'activation_limit' => 3, 'external_product_id' => config('sonardesk.paddle.professional_product_id'), 'external_price_id' => config('sonardesk.paddle.professional_annual_price_id')], + ]; + + foreach ($products as $data) { + if (! $data['external_product_id'] || ! $data['external_price_id']) { + continue; + } + LicenseProduct::updateOrCreate( + ['code' => $data['code']], + $data + ['payment_provider' => 'paddle', 'max_major_version' => config('sonardesk.default_max_major_version'), 'active' => true] + ); + } + } +} diff --git a/deploy.php b/deploy.php new file mode 100755 index 0000000..13a7a02 --- /dev/null +++ b/deploy.php @@ -0,0 +1,61 @@ +set('hostname', 'sonardesk.absdev.net') + ->set('remote_user', 'mag') + ->set('branch', 'main') + ->set('deploy_path', '/var/www/sonardesk'); + +host('stage') + ->set('hostname', 'sonardesk.absdev.net') + ->set('remote_user', 'mag') + ->set('branch', 'stage') + ->set('deploy_path', '/var/www/sonardesk_dev'); + +task('build', function (): void { + run('export NVM_DIR="$HOME/.nvm" && [ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh" && nvm use {{node_version}} && cd {{release_path}} && npm ci --no-audit --no-fund'); + run('export NVM_DIR="$HOME/.nvm" && [ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh" && nvm use {{node_version}} && cd {{release_path}} && npm run build'); +}); +task('queue:restart', function (): void { + run('cd {{release_path}} && php artisan queue:restart'); +}); +task('deploy:write_revision_file', function (): void { + run('cd {{release_path}} && echo "{{branch}}" > BRANCH'); + run('cd {{release_path}} && date -u +"%Y-%m-%dT%H:%M:%SZ" > DEPLOYED_AT'); +}); +task('artisan:clear', function (): void { + run('cd {{release_path}} && php artisan view:clear'); + run('cd {{release_path}} && php artisan optimize:clear'); + run('cd {{release_path}} && php artisan config:clear'); + run('cd {{release_path}} && php artisan route:clear'); +}); +task('services:restart', function (): void { + run('sudo -n nginx -t'); + run('sudo -n systemctl reload nginx'); + run('sudo -n systemctl restart php8.3-fpm'); +}); + +after('deploy:update_code', 'deploy:write_revision_file'); +after('deploy:vendors', 'build'); +after('deploy:symlink', 'artisan:clear'); +after('deploy:symlink', 'queue:restart'); +after('deploy:failed', 'deploy:unlock'); +after('deploy:symlink', 'services:restart'); diff --git a/docs/PADDLE_SUBSCRIPTIONS.md b/docs/PADDLE_SUBSCRIPTIONS.md new file mode 100755 index 0000000..bb6826d --- /dev/null +++ b/docs/PADDLE_SUBSCRIPTIONS.md @@ -0,0 +1,71 @@ +# Paddle subscription integration + +## Sandbox configuration + +Keep the Paddle API key and webhook secret server-side only. Do not put either value in the macOS application or commit them to Git. + +Required environment variables: + +```dotenv +PADDLE_API_KEY=pdl_sdbx_apikey_... +PADDLE_API_URL=https://sandbox-api.paddle.com +PADDLE_WEBHOOK_SECRET=... + +PADDLE_PERSONAL_PRODUCT_ID=pro_01m22q4c3vt7yvtv3h3zw1jbn0 +PADDLE_PERSONAL_MONTHLY_PRICE_ID=pri_01m22q4cjx177krcpvdph7e2vy +PADDLE_PERSONAL_ANNUAL_PRICE_ID=pri_01m22q4cs9sr5gshxp6j56nvmh +PADDLE_PROFESSIONAL_PRODUCT_ID=pro_01m22q4d0s6y1557wsq9s7xw8n +PADDLE_PROFESSIONAL_MONTHLY_PRICE_ID=pri_01m22q4d6h1yvr1frawtx51gy8 +PADDLE_PROFESSIONAL_ANNUAL_PRICE_ID=pri_01m22q4dcndcdbzc20txadaz52 +``` + +Then run: + +```bash +php artisan migrate +php artisan db:seed --class=Database\\Seeders\\PaddleCatalogSeeder +php artisan config:clear +``` + +The seeder maps the four Paddle price IDs to licensing entitlements. Personal permits one active Mac; Professional permits three. + +## Paddle notification destination + +Configure the sandbox notification destination to POST to: + +`https://YOUR-HOST/api/v1/webhooks/paddle` + +Copy the destination endpoint secret into `PADDLE_WEBHOOK_SECRET`. + +Subscribe to at least: + +- `subscription.created` +- `subscription.updated` +- `subscription.activated` +- `subscription.trialing` +- `subscription.canceled` +- `subscription.paused` +- `subscription.resumed` +- `subscription.past_due` +- `transaction.completed` +- `transaction.refunded` + +## Entitlement behavior + +- Trialing and active subscriptions are usable. +- A scheduled end-of-period cancellation stays usable until Paddle changes the subscription to canceled. +- Upgrades/downgrades update the entitlement on the existing licence key. +- Canceled or paused subscriptions revoke the licence. +- Past-due subscriptions retain access through Paddle's current billing period rather than being revoked on the first failed payment. +- Paddle customer details are fetched server-side when the webhook does not carry customer email/name in custom data. + +## Important + +The API key is required only on the licensing server. Use a sandbox key with the sandbox API URL. Live Paddle products/prices have different IDs and should be configured separately when moving to production. + + +## Hosted sandbox checkout + +The licensing site exposes `/buy`, which initializes Paddle.js with `PADDLE_CLIENT_SIDE_TOKEN` and opens an overlay checkout for the four configured price IDs. Set `PADDLE_ENVIRONMENT=sandbox` while testing and use a `test_...` client-side token. The token is intentionally browser-visible; never use `PADDLE_API_KEY` in frontend code. + +After a subscription webhook provisions a licence, the webhook controller makes a best-effort attempt to deliver pending licence keys by email. Delivery failures do not roll back the verified Paddle event; the encrypted outbox remains available for portal resend. diff --git a/docs/PORTAL_LAUNCH_FRONTEND.md b/docs/PORTAL_LAUNCH_FRONTEND.md new file mode 100755 index 0000000..bc2b00a --- /dev/null +++ b/docs/PORTAL_LAUNCH_FRONTEND.md @@ -0,0 +1,24 @@ +# SonarDesk launch frontend + +The public `/` page is now a product-launch landing page using the same shared Laravel layout as checkout, support, authentication and the licence portal. + +## Favicon/device assets + +The website uses the existing SonarDesk app icon as the web brand source and includes: + +- multi-resolution `public/favicon.ico` +- 16x16, 32x32 and 48x48 browser favicons +- 180x180 Apple touch icon +- 192x192 and 512x512 Android/PWA icons +- Windows 150x150 tile icon and `browserconfig.xml` +- Safari pinned-tab mask icon +- `site.webmanifest` +- Open Graph/Twitter image metadata + +The shared `resources/views/layouts/app.blade.php` loads these assets on every website page. + +## Launch page + +`resources/views/portal/welcome.blade.php` contains the public product page: hero, native app preview, features, workflow, security positioning, Personal/Professional plan summary and trial calls-to-action. + +Non-production environments automatically emit `noindex,nofollow`; production emits normal index/follow metadata. diff --git a/docs/rsync-studio-paddle-ids.env b/docs/rsync-studio-paddle-ids.env new file mode 100755 index 0000000..87b3c5f --- /dev/null +++ b/docs/rsync-studio-paddle-ids.env @@ -0,0 +1,7 @@ +PADDLE_PERSONAL_PRODUCT_ID=pro_01m22q4c3vt7yvtv3h3zw1jbn0 +PADDLE_PERSONAL_MONTHLY_PRICE_ID=pri_01m22q4cjx177krcpvdph7e2vy +PADDLE_PERSONAL_ANNUAL_PRICE_ID=pri_01m22q4cs9sr5gshxp6j56nvmh + +PADDLE_PROFESSIONAL_PRODUCT_ID=pro_01m22q4d0s6y1557wsq9s7xw8n +PADDLE_PROFESSIONAL_MONTHLY_PRICE_ID=pri_01m22q4d6h1yvr1frawtx51gy8 +PADDLE_PROFESSIONAL_ANNUAL_PRICE_ID=pri_01m22q4dcndcdbzc20txadaz52 diff --git a/package-lock.json b/package-lock.json new file mode 100755 index 0000000..0c8927f --- /dev/null +++ b/package-lock.json @@ -0,0 +1,2354 @@ +{ + "name": "sonardesk-licensing", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "devDependencies": { + "@tailwindcss/vite": "^4.0.0", + "concurrently": "^10.0.3", + "laravel-vite-plugin": "^3.1", + "tailwindcss": "^4.0.0", + "vite": "^8.0.0" + }, + "optionalDependencies": { + "@laravel/multiplex": "^0.4.1" + } + }, + "node_modules/@alcalzone/ansi-tokenize": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@alcalzone/ansi-tokenize/-/ansi-tokenize-0.3.0.tgz", + "integrity": "sha512-p+CMKJ93HFmLkjXKlXiVGlMQEuRb6H0MokBSwUsX+S6BRX8eV5naFZpQJFfJHjRZY0Hmnqy1/r6UWl3x+19zYA==", + "license": "MIT", + "optional": true, + "dependencies": { + "ansi-styles": "^6.2.1", + "is-fullwidth-code-point": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.6.0.tgz", + "integrity": "sha512-T7jf+5zgsZHwNJ4lvQ7/aezbyk0nNX+zJVWpmHA7VYsEx7a7qr5Rg5IbtJFqkgze5Y2sruq1RUY8Q837Od7iFw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@laravel/multiplex": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@laravel/multiplex/-/multiplex-0.4.3.tgz", + "integrity": "sha512-jJTZGgKl6sK0ETYmqiPqeAwmErvqjxgDRLfzqsmqiWiupc5dfjaoVVrrdXZwb6eGylSg99WwHLibCPJs8F0bGw==", + "license": "MIT", + "optional": true, + "os": [ + "darwin", + "linux" + ], + "dependencies": { + "ansi-styles": "^6.2.3", + "commander": "^15.0.0", + "ink": "^7.1.0", + "react": "^19.2.7", + "string-width": "^8.2.2", + "wrap-ansi": "^10.0.0" + }, + "bin": { + "multiplex": "dist/cli.js" + }, + "engines": { + "node": ">=22.13.0" + } + }, + "node_modules/@oxc-project/types": { + "version": "0.148.0", + "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.148.0.tgz", + "integrity": "sha512-Nm4s/jB+4FpFsPhWGEC4h7rzksesmtnMXomo6rCMcg/b8zLQuOziRgkCS1fxDCXOlJB/6Q8oABOZ/OP6RIPj9A==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/oxc-project" + } + }, + "node_modules/@rolldown/binding-android-arm-eabi": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm-eabi/-/binding-android-arm-eabi-1.2.7.tgz", + "integrity": "sha512-EypzgnYCwyVY4NDHKzGmNJT5b+XaQEBniHxsMdeIQLB/tcCzZnhqrzHpZFbX9iaxx+5RiB8caATBtfvZP7zVxQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-android-arm64": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.2.7.tgz", + "integrity": "sha512-l17HE9EweWaqJZhuUuNBN/FzM62xw+DECVnJyvMsxn8vJFAGLy5QfLDoYAcronkAN8VxKZHezDpulHDPx95vFw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-darwin-arm64": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.2.7.tgz", + "integrity": "sha512-8ED8ELFvHXc6OCETIn4gXObPiaR6bckM/ipXtbzlPVDRMBfEGjCKgO90F9YtfdpDatVx/ZQw7aZ1vUMf/+T3Mw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-darwin-x64": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.2.7.tgz", + "integrity": "sha512-/WPripjtiAIZ2tWY7ddijORT0Ujg87wxWW/qcoFVCKAWVDPhtY0xr7Dj0M3GyNGz60jGwTElhro/mkF9dT7dDQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-freebsd-x64": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.2.7.tgz", + "integrity": "sha512-14DI4NcqpvbICxSnGLx3PmtDaWqRP/KGSGb6C+JLLVPeZRl6dKdHba3pGsqT3vpdTqhEYIPG0MMQ8c0xYqoJxA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm-gnueabihf": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.2.7.tgz", + "integrity": "sha512-bxrWIRvHWQvbJwi+VIie/kDJmQxcNE6xxWwZdqF/ExVAigtHkv54WTLQPb+QsZdnFy18fg7JPfWGL0RH6vwIlQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm64-gnu": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.2.7.tgz", + "integrity": "sha512-toOY2BChBZyuxU7OYX6Tn389di4IzAqPTycVcci0O7FSfBqzRB3RZn+K5Is6ANf4tmgRd/K1yZTsNTXbkXsnLg==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm64-musl": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.2.7.tgz", + "integrity": "sha512-lAIXTH/aiLRLxsTgQvfhjo4K1ydWIp00+V0voOr9beb/9ZmkUFrSIb03dXNFRgMNvkE6oGsF10ioQ6UsI+vS5Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-ppc64-gnu": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.2.7.tgz", + "integrity": "sha512-kdnwS28Pkenp/mZMRwjXXXwxQ7pIsm+bF919LUK93BOyhcLsrVKdP2p9fxpiPNPAbNuch8ypQt0pm2P2LYCAGg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-s390x-gnu": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.2.7.tgz", + "integrity": "sha512-516OdsyLdr5E65paF3yBF55t8mfm9+gmtCsK3xI7XKXIT7EfRlHhxL8K/NR6Hu8BWSgF5+1w74lTL0+nxcc8Qw==", + "cpu": [ + "s390x" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-x64-gnu": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.2.7.tgz", + "integrity": "sha512-r8/z8n7GFaYRln3xmP1Cxy0HH/HLM0uBUPkEuSVEfKGDA89M0FsZRZJRSwe/tJjRx+fpH/gjorfhB8tmEbSFLA==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-x64-musl": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.2.7.tgz", + "integrity": "sha512-pAsE8iiDxUg1xBqdhrTfg45AVDVpirjz00sblEYClGNNcMnDb+e8beQgqIAw6LvauX/APvgxUnwrgun/YYGBhw==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-openharmony-arm64": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.2.7.tgz", + "integrity": "sha512-lTcIYmmnQQA8Or/2DatS6oSqcdLHvendjS+zLu+FwgToynWMRSmQdpM65fTANJgIS4mjbMOo5KT2lnT9SAb96w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-win32-arm64-msvc": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.2.7.tgz", + "integrity": "sha512-e3Gu3WxbNk/UqQhxqU7YIYO+9ZBvWNz3U+h/qRFosscMFzdRPbXYSaSWgSnklv2fz1TgzBTcti2z35c/7irsHw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-win32-x64-msvc": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.2.7.tgz", + "integrity": "sha512-W/jg5qoRSqjsEv0+dZi4e687mcHqmVuU0P4fK6qS/xjetW2Gmc1W8j//z5nAeNcC8Ttm0hV46IjcYeuVwYhuiw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.1.tgz", + "integrity": "sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tailwindcss/node": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.3.3.tgz", + "integrity": "sha512-/T8IKEsf9VTU6tLjgC7+sv2mOPtQxzE2jMw7u4Tt40Tx+QSZxpzh95/H6cMKoja9XuW7iMdLJYBB0o9G1CaAgg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/remapping": "^2.3.5", + "enhanced-resolve": "^5.24.1", + "jiti": "^2.7.0", + "lightningcss": "1.32.0", + "magic-string": "^0.30.21", + "source-map-js": "^1.2.1", + "tailwindcss": "4.3.3" + } + }, + "node_modules/@tailwindcss/oxide": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.3.3.tgz", + "integrity": "sha512-krXjAikiaFSPaK/FkAQT5UTx3VormQaiZ5hBFlJZ9UFQGB/rwg1MZIhHAG9smMQRTdyJxP6Qt5MwMtdyU5FWrA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 20" + }, + "optionalDependencies": { + "@tailwindcss/oxide-android-arm64": "4.3.3", + "@tailwindcss/oxide-darwin-arm64": "4.3.3", + "@tailwindcss/oxide-darwin-x64": "4.3.3", + "@tailwindcss/oxide-freebsd-x64": "4.3.3", + "@tailwindcss/oxide-linux-arm-gnueabihf": "4.3.3", + "@tailwindcss/oxide-linux-arm64-gnu": "4.3.3", + "@tailwindcss/oxide-linux-arm64-musl": "4.3.3", + "@tailwindcss/oxide-linux-x64-gnu": "4.3.3", + "@tailwindcss/oxide-linux-x64-musl": "4.3.3", + "@tailwindcss/oxide-wasm32-wasi": "4.3.3", + "@tailwindcss/oxide-win32-arm64-msvc": "4.3.3", + "@tailwindcss/oxide-win32-x64-msvc": "4.3.3" + } + }, + "node_modules/@tailwindcss/oxide-android-arm64": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.3.3.tgz", + "integrity": "sha512-Y85A2gmPSkl5Ve5qR86GL4HT509cFqQh1aes9p3sSkyTPwt0Pppf3GkwGe4JPACcRYjgJIEhQgM6dBClnr0NYw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-darwin-arm64": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.3.3.tgz", + "integrity": "sha512-BiaWatpBcERQFDlOjRDpIVXuFK5PJez5SA4JMg6VYZdBYU+qKfV/vqjcIs+IYmtitf1xYQZTwXvU/8y4lfZUGw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-darwin-x64": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.3.3.tgz", + "integrity": "sha512-fAeUqfV5ndhxRwai8cXGzdLvul9utWOmeTkv69unv4ZXixjn61Z+p9lCWdwOwA3TYboG3BwdVuN/RDjhBRl0mw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-freebsd-x64": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.3.3.tgz", + "integrity": "sha512-iyf5bV6+wnAlflVeEy7R25dupxTNECZN5QMI0qNT6eT+EgaGdZcKhGkr5SdoaWiLJ3spLqIY9VCeSGrwmtg4kw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.3.3.tgz", + "integrity": "sha512-aAYUprJAJQWWbRrPvtjdroZ56Md+JM8pMiopS6xGEwDfLhqj+2ver2p4nU4Mb3CRqcMmNBjo8KkUgcxhkzVQGQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-gnu": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.3.3.tgz", + "integrity": "sha512-nDxldcEENOxZRzC2uu9jrutZdAAQtb+8WWDCSnWL1zvBk1+FN+x6MtDViPB5AJMfttVCUhehGWus3XBPgatM/w==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-musl": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.3.3.tgz", + "integrity": "sha512-Md44bD6veX/PC5iyF8cDVnw4HBIANZepRZZ7a8DQOvkfo5WUBwcp6iAuCUz23u+4SUkhJlD3eL7hNdW8ezd/kA==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-gnu": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.3.3.tgz", + "integrity": "sha512-tx7us1muwOKAKWao2v/GaafFeQboE6aj88vC6ziN2NCGcRm8gWUhwjzg+YdVB1e4boAtdtma4L43onunI6NS4w==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-musl": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.3.3.tgz", + "integrity": "sha512-SJxX60smvHgasZoBy11dX6YRjXJFovwWBoedhbQPOBzgFWBHGB+TVPWB9BxzR7TTxU8FQZAI2AyiNCMzFm8Img==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.3.3.tgz", + "integrity": "sha512-jx1+rPhY/5Ympkktd656HBWEBLxP7dH06losBLjjf5vgCODXvi9KhtftWcMIwTFIDqBr7cRnQkdLnAG+IOlGvQ==", + "bundleDependencies": [ + "@napi-rs/wasm-runtime", + "@emnapi/core", + "@emnapi/runtime", + "@tybys/wasm-util", + "@emnapi/wasi-threads", + "tslib" + ], + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "^1.11.1", + "@emnapi/runtime": "^1.11.1", + "@emnapi/wasi-threads": "^1.2.2", + "@napi-rs/wasm-runtime": "^1.1.4", + "@tybys/wasm-util": "^0.10.2", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@tailwindcss/oxide-win32-arm64-msvc": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.3.3.tgz", + "integrity": "sha512-3rc292Ca2ceK6Ulcc/bAVnTs/3nDtoPhyEKlgPv+yQJQi/JS/AMJlqzxvlDacL1nekbrcf6bTqp/jV4qgnPxNQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-win32-x64-msvc": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.3.3.tgz", + "integrity": "sha512-yJ0pwIVc/nYeGoV02WtsN8KYyLQv7kyI2wDnkezyJlGGjkd4QLwDGAwl47YpPJeuI0M0ObaXGSPjvWDPeTPggw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/vite": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/vite/-/vite-4.3.3.tgz", + "integrity": "sha512-yYU8cogLeSh/ms2jh8Fj7jaba/EWa7Ja6GoUqYZaraEuCI5YS6ms6ObZgjjedm+jm6XZjdNRWBpPP6Z86oOxcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@tailwindcss/node": "4.3.3", + "@tailwindcss/oxide": "4.3.3", + "tailwindcss": "4.3.3" + }, + "peerDependencies": { + "vite": "^5.2.0 || ^6 || ^7 || ^8" + } + }, + "node_modules/ansi-escapes": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.3.0.tgz", + "integrity": "sha512-BvU8nYgGQBxcmMuEeUEmNTvrMVjJNSH7RgW24vXexN4Ven6qCvy4TntnvlnwnMLTVlcRQQdbRY8NKnaIoeWDNg==", + "license": "MIT", + "optional": true, + "dependencies": { + "environment": "^1.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.3.0.tgz", + "integrity": "sha512-WpDfL7NO6j7tH88IDBNVdUJxDh9nmCteAVW9dsep846XdwF4naCBK+/tGLX3KJgcpgMRXCFlTM2hKGoK9FsdrQ==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/auto-bind": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/auto-bind/-/auto-bind-5.0.1.tgz", + "integrity": "sha512-ooviqdwwgfIfNmDwo94wlshcdzfO64XV0Cg6oDsDYBJfITDz1EngD2z7DkbvCWn+XIMsIqW27sEVF6qcpJrRcg==", + "license": "MIT", + "optional": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/chalk": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", + "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/cli-boxes": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-4.0.1.tgz", + "integrity": "sha512-5IOn+jcCEHEraYolBPs/sT4BxYCe2nHg374OPiItB1O96KZFseS2gthU4twyYzeDcFew4DaUM/xwc5BQf08JJw==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=18.20 <19 || >=20.10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-cursor": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz", + "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==", + "license": "MIT", + "optional": true, + "dependencies": { + "restore-cursor": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-truncate": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-6.1.1.tgz", + "integrity": "sha512-06p9vyLahLa4zkGcgsGxU6iEkSOiuI4fhCH6Emhe2lPAcoUv73n72DnODsnHA+5wwXGnV0n9M9/qOQJSjYhFhw==", + "license": "MIT", + "optional": true, + "dependencies": { + "slice-ansi": "^9.0.0", + "string-width": "^8.2.0" + }, + "engines": { + "node": ">=22" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cliui": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-9.0.1.tgz", + "integrity": "sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^7.2.0", + "strip-ansi": "^7.1.0", + "wrap-ansi": "^9.0.0" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/cliui/node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", + "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/code-excerpt": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/code-excerpt/-/code-excerpt-4.0.0.tgz", + "integrity": "sha512-xxodCmBen3iy2i0WtAK8FlFNrRzjUqjRsMfho58xT/wvZU1YTM3fCnRjcy1gJPMepaRlgm/0e6w8SpWHpn3/cA==", + "license": "MIT", + "optional": true, + "dependencies": { + "convert-to-spaces": "^2.0.1" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/commander": { + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-15.0.0.tgz", + "integrity": "sha512-z67u4ZhzCL/Tydu1lJARtEZYWbWaN7oYLHbsuzocr6y4N6WZAagG3RQ4FW61V1/0+jImpj293XfrcYnd1qxtPg==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=22.12.0" + } + }, + "node_modules/concurrently": { + "version": "10.0.5", + "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-10.0.5.tgz", + "integrity": "sha512-JaP/CoftUrCcAFW/g//RbgEGwlelnEae6cfBLgH6ZdO6s8jPkn6p9SB9u6pdVxYXoiSnFqseOlHfrEfF82TVOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "5.6.2", + "rxjs": "7.8.2", + "shell-quote": "1.9.0", + "supports-color": "10.2.2", + "tree-kill": "1.2.2", + "yargs": "18.0.0" + }, + "bin": { + "conc": "dist/bin/index.js", + "concurrently": "dist/bin/index.js" + }, + "engines": { + "node": ">=22" + }, + "funding": { + "url": "https://github.com/open-cli-tools/concurrently?sponsor=1" + } + }, + "node_modules/convert-to-spaces": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/convert-to-spaces/-/convert-to-spaces-2.0.1.tgz", + "integrity": "sha512-rcQ1bsQO9799wq24uE5AM2tAILy4gXGIK/njFWcVQkGNZ96edlpY+A7bjwvzjYvLDyzmG1MmMLZhpcsb+klNMQ==", + "license": "MIT", + "optional": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/emoji-regex": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", + "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", + "dev": true, + "license": "MIT" + }, + "node_modules/enhanced-resolve": { + "version": "5.24.5", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.24.5.tgz", + "integrity": "sha512-L1l8TNvomm6UVW5B253AGxQagSQr+vGwhMlrrfRS2qmhx46AMpMVJKQYLvWYbysTMY8VoicOvzHzoHMbyzB+4A==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.3.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/environment": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz", + "integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/es-toolkit": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/es-toolkit/-/es-toolkit-1.52.0.tgz", + "integrity": "sha512-XTNEJQh1tY1ZJVcf6ayP/2n4ZPyaHlW2FWs7xvw5ddPuhUVjLD3olQVQS7kf58JbAB48iL0uL/jerTrjtV3lDA==", + "license": "MIT", + "optional": true, + "workspaces": [ + "docs", + "benchmarks", + "tests/types", + "tests/browser-compat" + ] + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-east-asian-width": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.6.0.tgz", + "integrity": "sha512-QRbvDIbx6YklUe6RxeTeleMR0yv3cYH6PsPZHcnVn7xv7zO1BHN8r0XETu8n6Ye3Q+ahtSarc3WgtNWmehIBfA==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/indent-string": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", + "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ink": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/ink/-/ink-7.1.1.tgz", + "integrity": "sha512-Y43xxa1ZSPvpmfLHcN5o+OdP8Rf8ykkNJEuKYOUNZKT8wXVNLFTtEm1nSDMQkfBH+YANF4Xuu0hhZ4ejqAtN2w==", + "license": "MIT", + "optional": true, + "dependencies": { + "@alcalzone/ansi-tokenize": "^0.3.0", + "ansi-escapes": "^7.3.0", + "ansi-styles": "^6.2.3", + "auto-bind": "^5.0.1", + "chalk": "^5.6.2", + "cli-boxes": "^4.0.1", + "cli-cursor": "^4.0.0", + "cli-truncate": "^6.0.0", + "code-excerpt": "^4.0.0", + "es-toolkit": "^1.45.1", + "indent-string": "^5.0.0", + "is-in-ci": "^2.0.0", + "patch-console": "^2.0.0", + "react-reconciler": "^0.33.0", + "scheduler": "^0.27.0", + "signal-exit": "^3.0.7", + "slice-ansi": "^9.0.0", + "stack-utils": "^2.0.6", + "string-width": "^8.2.0", + "terminal-size": "^4.0.1", + "type-fest": "^5.5.0", + "widest-line": "^6.0.0", + "wrap-ansi": "^10.0.0", + "ws": "^8.20.0", + "yoga-layout": "~3.2.1" + }, + "engines": { + "node": ">=22" + }, + "peerDependencies": { + "@types/react": ">=19.2.0", + "react": ">=19.2.0", + "react-devtools-core": ">=6.1.2" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "react-devtools-core": { + "optional": true + } + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.1.0.tgz", + "integrity": "sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "get-east-asian-width": "^1.3.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-in-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-in-ci/-/is-in-ci-2.0.0.tgz", + "integrity": "sha512-cFeerHriAnhrQSbpAxL37W1wcJKUUX07HyLWZCW1URJT/ra3GyUTzBgUnh24TMVfNTV2Hij2HLxkPHFZfOZy5w==", + "license": "MIT", + "optional": true, + "bin": { + "is-in-ci": "cli.js" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jiti": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.7.0.tgz", + "integrity": "sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==", + "dev": true, + "license": "MIT", + "bin": { + "jiti": "lib/jiti-cli.mjs" + } + }, + "node_modules/laravel-vite-plugin": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/laravel-vite-plugin/-/laravel-vite-plugin-3.2.0.tgz", + "integrity": "sha512-xSxY9Gzeb/eancd8WeK09piAFP+a6i5QIBqNCKNv9L0Eq6wziwzSem7F1GvMSrtjMh5F/QVKFxn8t9naGOA66A==", + "dev": true, + "license": "MIT", + "dependencies": { + "picocolors": "^1.0.0", + "tinyglobby": "^0.2.12", + "vite-plugin-full-reload": "^1.1.0" + }, + "bin": { + "clean-orphaned-assets": "bin/clean.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "peerDependencies": { + "fontaine": "^0.8.0", + "vite": "^8.0.0" + }, + "peerDependenciesMeta": { + "fontaine": { + "optional": true + } + } + }, + "node_modules/lightningcss": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.32.0.tgz", + "integrity": "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "detect-libc": "^2.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-android-arm64": "1.32.0", + "lightningcss-darwin-arm64": "1.32.0", + "lightningcss-darwin-x64": "1.32.0", + "lightningcss-freebsd-x64": "1.32.0", + "lightningcss-linux-arm-gnueabihf": "1.32.0", + "lightningcss-linux-arm64-gnu": "1.32.0", + "lightningcss-linux-arm64-musl": "1.32.0", + "lightningcss-linux-x64-gnu": "1.32.0", + "lightningcss-linux-x64-musl": "1.32.0", + "lightningcss-win32-arm64-msvc": "1.32.0", + "lightningcss-win32-x64-msvc": "1.32.0" + } + }, + "node_modules/lightningcss-android-arm64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.32.0.tgz", + "integrity": "sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-arm64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.32.0.tgz", + "integrity": "sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-x64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.32.0.tgz", + "integrity": "sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-freebsd-x64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.32.0.tgz", + "integrity": "sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.32.0.tgz", + "integrity": "sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.32.0.tgz", + "integrity": "sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-musl": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.32.0.tgz", + "integrity": "sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-gnu": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.32.0.tgz", + "integrity": "sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-musl": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.32.0.tgz", + "integrity": "sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-arm64-msvc": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.32.0.tgz", + "integrity": "sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-x64-msvc": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.32.0.tgz", + "integrity": "sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/nanoid": { + "version": "3.3.18", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.18.tgz", + "integrity": "sha512-DTg4MJbGMWkfi6VZFdNt2/caMbQy4Ou+Op/hJQvGEWcnVfoA1QA+xzRKAzw9jD6+GVOOeYr/mIcuDSdug6F6+w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "license": "MIT", + "optional": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/patch-console": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/patch-console/-/patch-console-2.0.0.tgz", + "integrity": "sha512-0YNdUceMdaQwoKce1gatDScmMo5pu/tfABfnzEqeG0gtTmd7mh/WcwgUjtAeOU7N8nFFlbQBnFK2gXW5fGvmMA==", + "license": "MIT", + "optional": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.7.tgz", + "integrity": "sha512-qcJu88Q2IWqJsDD529JKMdwGm/dvInW4HvQnRwiH9JtihJvzGOscDtHE3x1pBKeUOTysQ8kVmLnJ2kJu7yhcGA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "8.5.28", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.28.tgz", + "integrity": "sha512-RRuzqDtt5Y9h3quz5hWhK+TPnsmVs6WwSU6LkJMeY4HstUEDuYTG8UJSdawMRzmzAtV+KEoG8N3Qg2qLy5vM/A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.18", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/react": { + "version": "19.2.8", + "resolved": "https://registry.npmjs.org/react/-/react-19.2.8.tgz", + "integrity": "sha512-PWaYA1L/q9u2u7xYQi+Y3L3Yfnie7XyLeaJICV1MGD6LprsBxcAqGjYyr0eY3p+QdsA+x/Irkt4Qif8D63+Sbw==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-reconciler": { + "version": "0.33.0", + "resolved": "https://registry.npmjs.org/react-reconciler/-/react-reconciler-0.33.0.tgz", + "integrity": "sha512-KetWRytFv1epdpJc3J4G75I4WrplZE5jOL7Yq0p34+OVOKF4Se7WrdIdVC45XsSSmUTlht2FM/fM1FZb1mfQeA==", + "license": "MIT", + "optional": true, + "dependencies": { + "scheduler": "^0.27.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "peerDependencies": { + "react": "^19.2.0" + } + }, + "node_modules/restore-cursor": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz", + "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==", + "license": "MIT", + "optional": true, + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/rolldown": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.2.7.tgz", + "integrity": "sha512-g0EtLvBjTUB7jhyV0S/TCup3v/XSVl45vUIGbOGU4QPiyjTenCe4mKuFvW9fEgYmS2Fo42AUssRmNuMziXdrig==", + "dev": true, + "license": "MIT", + "dependencies": { + "@oxc-project/types": "=0.148.0", + "@rolldown/pluginutils": "^1.0.0" + }, + "bin": { + "rolldown": "bin/cli.mjs" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "optionalDependencies": { + "@rolldown/binding-android-arm-eabi": "1.2.7", + "@rolldown/binding-android-arm64": "1.2.7", + "@rolldown/binding-darwin-arm64": "1.2.7", + "@rolldown/binding-darwin-x64": "1.2.7", + "@rolldown/binding-freebsd-x64": "1.2.7", + "@rolldown/binding-linux-arm-gnueabihf": "1.2.7", + "@rolldown/binding-linux-arm64-gnu": "1.2.7", + "@rolldown/binding-linux-arm64-musl": "1.2.7", + "@rolldown/binding-linux-ppc64-gnu": "1.2.7", + "@rolldown/binding-linux-s390x-gnu": "1.2.7", + "@rolldown/binding-linux-x64-gnu": "1.2.7", + "@rolldown/binding-linux-x64-musl": "1.2.7", + "@rolldown/binding-openharmony-arm64": "1.2.7", + "@rolldown/binding-win32-arm64-msvc": "1.2.7", + "@rolldown/binding-win32-x64-msvc": "1.2.7" + } + }, + "node_modules/rxjs": { + "version": "7.8.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", + "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/scheduler": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz", + "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==", + "license": "MIT", + "optional": true + }, + "node_modules/shell-quote": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.9.0.tgz", + "integrity": "sha512-Iov+JwFv/2HcTpcwNMKd8+IWNb8tboQJNQTkAY/LLVK7gGH9jy+LGkVqPxfekHl+yMmiqXszdGWXgkfml7hjqA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "license": "ISC", + "optional": true + }, + "node_modules/slice-ansi": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-9.0.0.tgz", + "integrity": "sha512-SO/3iYL5S3W57LLEniscOGPZgOqZUPCx6d3dB+52B80yJ0XstzsC/eV8gnA4tM3MHDrKz+OCFSLNjswdSC+/bA==", + "license": "MIT", + "optional": true, + "dependencies": { + "ansi-styles": "^6.2.3", + "is-fullwidth-code-point": "^5.1.0" + }, + "engines": { + "node": ">=22" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/string-width": { + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-8.2.2.tgz", + "integrity": "sha512-GaPUh5gfdrYzqeVNZvUfT23vYYxXzKYidUcnMtJg/3rxRV63EFZy3k6xfKlmfeJD0176lnUV/Usr3XcwSvFzpg==", + "license": "MIT", + "optional": true, + "dependencies": { + "get-east-asian-width": "^1.5.0", + "strip-ansi": "^7.1.2" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strip-ansi": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.2.2" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/supports-color": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-10.2.2.tgz", + "integrity": "sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/tagged-tag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/tagged-tag/-/tagged-tag-1.0.0.tgz", + "integrity": "sha512-yEFYrVhod+hdNyx7g5Bnkkb0G6si8HJurOoOEgC8B/O0uXLHlaey/65KRv6cuWBNhBgHKAROVpc7QyYqE5gFng==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/tailwindcss": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.3.3.tgz", + "integrity": "sha512-gOhV3P7ufE62QDGg1zVaTgCR+EtPv92k2nIhVcVKcLmxT1sUBsQGhnZj175j+MqRt4zLF7ic+sCYjfhxMxj7YQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/tapable": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.3.tgz", + "integrity": "sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/terminal-size": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/terminal-size/-/terminal-size-4.0.1.tgz", + "integrity": "sha512-avMLDQpUI9I5XFrklECw1ZEUPJhqzcwSWsyyI8blhRLT+8N1jLJWLWWYQpB2q2xthq8xDvjZPISVh53T/+CLYQ==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz", + "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true, + "license": "MIT", + "bin": { + "tree-kill": "cli.js" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD" + }, + "node_modules/type-fest": { + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-5.9.0.tgz", + "integrity": "sha512-yANm3Jr3GiJ1qgJlxGAVxTOIcEOk1rhQHamlXtnrCK7EHP4HeM9OGxtMg/W7HFdrVzw/ZWJKGVIJusVH85sLtw==", + "license": "(MIT OR CC0-1.0)", + "optional": true, + "dependencies": { + "tagged-tag": "^1.0.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/vite": { + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/vite/-/vite-8.2.2.tgz", + "integrity": "sha512-cFKLV/PRgAUlIRm5WjMjJ86jrftzpqcgH+Us+DS8mI3CDNiH30Whrz8uHL3+MOLPAgqbMBAqWdAHAphOAM+z/Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "lightningcss": "^1.33.0", + "picomatch": "^4.0.5", + "postcss": "^8.5.26", + "rolldown": "~1.2.4", + "tinyglobby": "^0.2.17" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^20.19.0 || >=22.12.0", + "@vitejs/devtools": "^0.4.0 || ^0.5.0", + "esbuild": "^0.27.0 || ^0.28.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "@vitejs/devtools": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/vite-plugin-full-reload": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/vite-plugin-full-reload/-/vite-plugin-full-reload-1.2.0.tgz", + "integrity": "sha512-kz18NW79x0IHbxRSHm0jttP4zoO9P9gXh+n6UTwlNKnviTTEpOlum6oS9SmecrTtSr+muHEn5TUuC75UovQzcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "picocolors": "^1.0.0", + "picomatch": "^2.3.1" + } + }, + "node_modules/vite-plugin-full-reload/node_modules/picomatch": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/vite/node_modules/lightningcss": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.33.0.tgz", + "integrity": "sha512-WkUDrojuJs0xkgGf2udWxa3yGBRxPtxUkB79i6aCZLRgc7PM8fZe9TosfPDcvEpQZbuFASnHYmRLBLUbmLOIIA==", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "detect-libc": "^2.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-android-arm64": "1.33.0", + "lightningcss-darwin-arm64": "1.33.0", + "lightningcss-darwin-x64": "1.33.0", + "lightningcss-freebsd-x64": "1.33.0", + "lightningcss-linux-arm-gnueabihf": "1.33.0", + "lightningcss-linux-arm64-gnu": "1.33.0", + "lightningcss-linux-arm64-musl": "1.33.0", + "lightningcss-linux-x64-gnu": "1.33.0", + "lightningcss-linux-x64-musl": "1.33.0", + "lightningcss-win32-arm64-msvc": "1.33.0", + "lightningcss-win32-x64-msvc": "1.33.0" + } + }, + "node_modules/vite/node_modules/lightningcss-android-arm64": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.33.0.tgz", + "integrity": "sha512-gEpRTalKdosp4Bb8qWtc2iOgE5SeIHlpS1up9bFq2wAyYhl1UdTObYiHe98zEM9SQvSoqQZ1IQD0JNpg3Ml5pg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/vite/node_modules/lightningcss-darwin-arm64": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.33.0.tgz", + "integrity": "sha512-Sciaz8eenNTKn9b3t7+xr0ipTp9YxKQY4npwQ3mrRuL0BAVHBLyZxofhaKBAVtzmtRZ/zTyo0/to4B1uWG/Djg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/vite/node_modules/lightningcss-darwin-x64": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.33.0.tgz", + "integrity": "sha512-Z5UPAxzrjlWNNyGy6i65cJzzvgJ5D3T6wMvs+gWpY9d7qRhANrxqAp6LhxIgZhWEw18RfJTGcRxjuLIBr+m8XQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/vite/node_modules/lightningcss-freebsd-x64": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.33.0.tgz", + "integrity": "sha512-QQM/Ti/hQajJwCY+RiWuCZ9sdtI/XQk7nDK5vC8kkdwixezOlDgvDx7+RT+QjK6FcFT4MpsuoBnHIo/O3StRRg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/vite/node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.33.0.tgz", + "integrity": "sha512-N7FVBe6iS24MlM6R/4RBTxGhQheZGs7tiQ9U32UtF75NzP5Q7xWPRqLBCKxlRQRk3rY1jCIPLzx7WzOhuUIRLQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/vite/node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.33.0.tgz", + "integrity": "sha512-j2v/itmy4HlNxlc6voKXYgBqNi0Ng2LShg4z7GufpEgs05P+2suBVyi9I6YHq5uoVFx9ETin3eCEhLVyXGQnKg==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/vite/node_modules/lightningcss-linux-arm64-musl": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.33.0.tgz", + "integrity": "sha512-yiO5ROMuYQgXbC60yjZU5CYSFZGKXL0HFATXt9mHJn1+zW55oCtMI9NfcVhYLMFDL7gV7oBPon/EmMMGg2OvtQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/vite/node_modules/lightningcss-linux-x64-gnu": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.33.0.tgz", + "integrity": "sha512-ar+Ju7LmcN0Jo4FpL4hpFybwNG9/3A/Br5KW2n2jyODg3MEZXaDYADdemoNS+BDNfMgKvylJLj4S5tyRActuAg==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/vite/node_modules/lightningcss-linux-x64-musl": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.33.0.tgz", + "integrity": "sha512-RYiYbkokw0trfKqqzfF55lginwEPrD3OJDfTuJzFs1MK6iFnDenaz1fqLLtX4ITG3OktJQXOeTaw1awrBAlZPw==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/vite/node_modules/lightningcss-win32-arm64-msvc": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.33.0.tgz", + "integrity": "sha512-1K+MPfLSFVpphzpdbfkhlWk6wBrTObBzS2T6db10PNOZgR9GoVsAWzwNyuhUYYbTp23j+4RrncfujZ4uAzXvwA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/vite/node_modules/lightningcss-win32-x64-msvc": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.33.0.tgz", + "integrity": "sha512-OlEICDx/Xl0FqSp4bry8zFnCvGpig3Gl4gCquvYwHuqJKEC1+n9NgDniFvqHGmMv1ZkqDJrDqKKSykTDX+ehuA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/widest-line": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-6.0.0.tgz", + "integrity": "sha512-U89AsyEeAsyoF0zVJBkG9zBgekjgjK7yk9sje3F4IQpXBJ10TF6ByLlIfjMhcmHMJgHZI4KHt4rdNfktzxIAMA==", + "license": "MIT", + "optional": true, + "dependencies": { + "string-width": "^8.1.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/wrap-ansi": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-10.0.1.tgz", + "integrity": "sha512-M0N4xzyzosiIok3svYlEo1sdLZts/8FPgYH/GPC3wvlmPoRvnoManGMrE54waYj3tISA8w6lsdesfVv67qSr8Q==", + "license": "MIT", + "optional": true, + "dependencies": { + "ansi-styles": "^6.2.3", + "string-width": "^8.2.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/ws": { + "version": "8.21.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.21.3.tgz", + "integrity": "sha512-201TZ/kPWxoPr/OKWjquZR1SWKXcvxdH+e1xrx89b3YbmzLMFCLfnaG1HFIgWzJOEWZ7MvpK++odZufgYR50Rw==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs": { + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-18.0.0.tgz", + "integrity": "sha512-4UEqdc2RYGHZc7Doyqkrqiln3p9X2DZVxaGbwhn2pi7MrRagKaOcIKe8L3OxYcbhXLgLFUS3zAYuQjKBQgmuNg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^9.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "string-width": "^7.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^22.0.0" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=23" + } + }, + "node_modules/yargs-parser": { + "version": "22.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-22.0.0.tgz", + "integrity": "sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=23" + } + }, + "node_modules/yargs/node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yoga-layout": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/yoga-layout/-/yoga-layout-3.2.1.tgz", + "integrity": "sha512-0LPOt3AxKqMdFBZA3HBAt/t/8vIKq7VaQYbuA8WxCgung+p9TVyKRYdpvCb80HcdTN2NkbIKbhNwKUfm3tQywQ==", + "license": "MIT", + "optional": true + } + } +} diff --git a/package.json b/package.json new file mode 100755 index 0000000..13ec885 --- /dev/null +++ b/package.json @@ -0,0 +1,19 @@ +{ + "$schema": "https://www.schemastore.org/package.json", + "private": true, + "type": "module", + "scripts": { + "build": "vite build", + "dev": "vite" + }, + "devDependencies": { + "@tailwindcss/vite": "^4.0.0", + "concurrently": "^10.0.3", + "laravel-vite-plugin": "^3.1", + "tailwindcss": "^4.0.0", + "vite": "^8.0.0" + }, + "optionalDependencies": { + "@laravel/multiplex": "^0.4.1" + } +} diff --git a/phpunit.xml b/phpunit.xml new file mode 100755 index 0000000..e7f0a48 --- /dev/null +++ b/phpunit.xml @@ -0,0 +1,36 @@ + + + + + tests/Unit + + + tests/Feature + + + + + app + + + + + + + + + + + + + + + + + + + diff --git a/public/.htaccess b/public/.htaccess new file mode 100755 index 0000000..b574a59 --- /dev/null +++ b/public/.htaccess @@ -0,0 +1,25 @@ + + + Options -MultiViews -Indexes + + + RewriteEngine On + + # Handle Authorization Header + RewriteCond %{HTTP:Authorization} . + RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] + + # Handle X-XSRF-Token Header + RewriteCond %{HTTP:x-xsrf-token} . + RewriteRule .* - [E=HTTP_X_XSRF_TOKEN:%{HTTP:X-XSRF-Token}] + + # Redirect Trailing Slashes If Not A Folder... + RewriteCond %{REQUEST_FILENAME} !-d + RewriteCond %{REQUEST_URI} (.+)/$ + RewriteRule ^ %1 [L,R=301] + + # Send Requests To Front Controller... + RewriteCond %{REQUEST_FILENAME} !-d + RewriteCond %{REQUEST_FILENAME} !-f + RewriteRule ^ index.php [L] + diff --git a/public/browserconfig.xml b/public/browserconfig.xml new file mode 100755 index 0000000..6492abb --- /dev/null +++ b/public/browserconfig.xml @@ -0,0 +1,9 @@ + + + + + + #2563eb + + + diff --git a/public/favicon.ico b/public/favicon.ico new file mode 100755 index 0000000000000000000000000000000000000000..439dd30e491b86ccd01e53482a32680c13f350d8 GIT binary patch literal 11471 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 literal 0 HcmV?d00001 diff --git a/public/icons/android-chrome-512x512.png b/public/icons/android-chrome-512x512.png new file mode 100755 index 0000000000000000000000000000000000000000..2f2d498a2543e56b13fd228cf3e7cb3d656d2aac GIT binary patch literal 150404 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 z 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

rn^& z(7U26Sl@B~iQ8stS~#4$eTG>@$0c2?zYR&I)w{a(Y+%dxl73I15HvFIuJ|i zNp6JUFbnQ{EB;)C&0vwi1=%b?Cjs|0C=7~TG!8(t0)144eE-Z2AG_{#spUya)>2h-WB6C4FV@k>vSeyx+61B@EE~GT3 zctupp!&BR!Y@%!@jM^;juE(=;IRCry2}IrPz`s}yJ{Q{DsVH{7U;TOfG&%GByB;A} zM70$Fvjn@$35jW*^#!ij?zsQN`vvc_TEkmdDB`MYT_rQ>lCMNZ$exY%emGfaP;)5L z(Xgn$dK7)F;T@x)gd5FF6VuFjW+DGo`k#P|lr7vbR5`+otpJQ0VV?2xg6k_zFUZ0H zoN=-2;pDsyaTKw!nTtFjmgBI#0{RD#_yj9N2rSPUN{~*Hvg9ss@PNkg1Cdi9biS;~ zGj{b~^xtGjxL}s@`Y5$1o+((lP$ake!oFQn7*z!^i=KIsXgnEQsa9kIc?#%@#uIg4 z0kLYR<~UZXY6WVcYHvC8uR%Ig&0s8qgYGc_x3#X8v@#y-xRg$m)o_2TDge~;{18H% zbpR$CA`1ZnptjGgagD#4gK@0V>t-RilEF#4;k><1X#FiIaUU0hNa^cGr zmlt~ZVeV!xxD=d$(;4$lPhb!Zvl;Ar6ykhn8*$ODnUaDn%rZDx!XXZPD{%dV*$lqPGh$bk8Qra@7T$BN-1E_`-s$~qeJ0exDrPUN

m0$n!%XhpM#Q4 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Ö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 literal 0 HcmV?d00001 diff --git a/public/icons/favicon-16x16.png b/public/icons/favicon-16x16.png new file mode 100755 index 0000000000000000000000000000000000000000..343e10beca575c577f040a15f344d9e67b25923d GIT binary patch literal 1334 zcmZ{j3pCVu6vyxVO^m_3Br{`#it%RhDv!|YsD`Lev^_jW*vMldJ!qwEZB(0*c1!fI zQYk&OS+#A}%E~Sky`+a$Ru82j4gUT2>^XbRo;`cd`Q7ii_x?V=`#blXn>RmjHe1_J z8vxjfIr1P{d4C-(2JJ2FxWTlTM$ZWf09Y#l*q96Oflh7g1z0Tw=!*bwF9r}K@2g$l z2|(V?pBv(4t%kD{oEd?mZ^_n9ZAGro)JbIK!WT){mJ7A4 z(wRAR8h0pCPhpiBPLDwih1F_2t%h?H9HLnAY=PK{Z|uahTB#X(lC)6RG(zg=3!_-} z5;wGCYAZ=?BU!ge;ZssMiusSmo5?r=2S#WGDW^1>M;VPH*r3Kn3fHutM+N$wBXetr zUlk*;k`Z^Av0u&g%V0~qaN7&WeKoHB1Jn;=( z{MS%0tm_oXworhq0<5wyq!e>+VbMD%qG0nIP<2DXJqT;Upo^H(2RY9mcYx)Sp(B=J zcmw#K0fz#x--6zS7*>ht*I|7RBz0l@Jq&NdlrC7?0~`9aot12!m;{tT`Y63uL}!APwz(g3TB3$`j)r^(b4E7HGDyqVS4-%vZQ#lg*>i>F zT%m-bt<$ENUJQ)#pDkA(OmOX_1Exw5;LGe|O=Q{F9^kj9(q*wiJ~Kpk19{j#Mu&tk zPD7Ka#nRT%WplW|>Z?29i5zA zT&GQUbNBF^0bbrdGi9I1eP_*{qww>e8vudx<}a8U6dbZ}QE1rWPnRr(Wy`}OBBP?^ zG0NB#aq$VC!OFy>Rmmx-X{y!f8EZ1vu7mX(GP1Haex9=_ck>rpzRddyw&oXX+rH!L zorSx07wswD`we`%Z-2>w(z1hx4j(E1uHtAV96NrZ>g1{F(`U|}t2zJugMoTkx$PSN0uoon#K&g-KcF9!c!35i|LLHLPgJIRs|N*0mx5r{n4Q~&?~ literal 0 HcmV?d00001 diff --git a/public/icons/favicon-32x32.png b/public/icons/favicon-32x32.png new file mode 100755 index 0000000000000000000000000000000000000000..aea19645b55f16447cbf30c0667e83b787b43928 GIT binary patch literal 2383 zcmZ{mc{CJ`7RTpTNl3dyWJ_qGF(dmD#yZv!KeCK%Ed81WjU{4!mXc(fNrpnQjIHHI zk!8p>OoPx!Mz#>48D>JW7*FS&^Uitaop$r0(O4KQxXxsI}yg%*jorMi^z%qFBBggjQ{`+T(p6jUa{`Acr=k!H0Dai zexNgF4f=J6=uD~Js8#x<*P(b-lyjwZhx|P!F|#YV)jslT($0nzgEz zsN~`-s$@yG{3kMN2L3KdXm-CM;r?aSKxMbfWLXgzVpw#Fm-Qjrj8vbG9;|DhAlmkB zdVfLMwDK0e5fB@Le^)0{Tv+RVpKqOLD1H_9ZWbTQeH*f+YMVFDdArgX-sCkSVrCH2 z@T1Vd?R(`g9nR;nzjI)1ZI4{z_Hw!x(*pLIrW78HmRlk{Cbggk47t%T{Pl7}vDdHG zsn%~xk1Qgt#W|{Fw1)nCPZhM}&G8>Nu36a^1)jC*3wyV~fesx6DzlyEbabeVSa39t z`Ti~Q{F+R2GBP{PfjxbX#em(1!HbE$GvT0} zJHW*|!wrqcI(hmA$tJ7f9ldJ`=Q_Nm8KZ;A5Rv`Fy z&PyfLbgD4^ka_WCXd`Qs;8`+fahCcdp{GjO1#&M@{S@HHayd{5jJvfESs>F^=U&T-z7Qh_E6cq4MS z3dKu^+%i#5H#8n;y2)9Y4yq~1r5vOP&G`D0Y34Aa!@ok7HDe!~IZaP%#LFlt#7t7f z1?Vw!ie(ZbRt>v$oPuC?eZNN1vO!Jf;1p`Kc`wC&!A z0zStd<`4sq!nK%>f7D%{5`W3XsElIUPd0DJ7jfXNe4@UL(&yV{NLW`<*45SSyOi#199xv_p+wP-cxA$XN z>Ijd~jy|d=B>n|H)6k&yLS1v;mklfVC&eR;?yT!u_!CBIpXraRUO2xEt_7$oC-^em)V=zg~ zRNl=iDj0F8g)-#-9Y} zdufTXZoW$`!XLLycikB)ULF|RklT5-!dw~-zE6oY;(AlR%~fv37pP`3krgjIj0URGuNuRG@7SaY$9c8)PW;KvEnc5B zq7dY8e)_pEkC>q{q+hP!dgR>m^Tw+Cs#7uAtm&P~U!}~6FJAP*5y<@{`snuO zM|P?KUb`9rQ^*xUnmWVX9xhONG{l;{2QGl?`#Vw|kG*dFS`XAp+b2SY4*T(ZZt(_& zRxXwaEFo+e3;)}d#ia65^&+1!UpLV}g`=YHanIyWCB3uxm0|`Fy8*fWW9g?yft_tx z?ZdG8?bHonbc(|yI&ZK?ti3!nx-z-CV4`uGE|F0TTB_H*(r)E}2RAK9Dx2SxaH=#R z-f;ZpLwo%khgUqmF`uyAu~M=;uyBqniG4aWJe5h+GUx^};-5uN&2C0EFpnRrXFq&X z5pawAM_;DhB%PX6swD9(GLI0hg1p~0+3q&Y39k%#6yGd4hG1nZUUEO%sdY^Mr{n>n z%|jcrsZksEr+61xM}fr9;|zHkivqL}nCeLRdMlF`ob0wxm3UbSn?Q`SS;zjpd;OWU?sSm?J_+*1X zLm)EOSGl?>Zgb`?iDUl5NCO4$b}T&7oUGu!_9$Y;Q|>cERvp0-NbBKF=VU2JNF6&M z?8rLlBK22#3_6vy+N0J_?UQ}uXKYD?^dtCD#=HTqi^r70 z&ECJ23qGXLe;`r!)3AAgd6dcMC-u0xv|v|~qTItD=L$qc#yaU1!iysV#a76abYN)Et^W_4 rfTNmr0oDIFU_w#In;1V-*#9zGTK_gtLO8hYG5{M32j~kk-=u#59L%M@ literal 0 HcmV?d00001 diff --git a/public/icons/favicon-48x48.png b/public/icons/favicon-48x48.png new file mode 100755 index 0000000000000000000000000000000000000000..e49d8561e7505b8fb17677fe8766fce0808bfb20 GIT binary patch literal 4404 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ⅅ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 z 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

rn^& z(7U26Sl@B~iQ8stS~#4$eTG>@$0c2?zYR&I)w{a(Y+%dxl73I15HvFIuJ|i zNp6JUFbnQ{EB;)C&0vwi1=%b?Cjs|0C=7~TG!8(t0)144eE-Z2AG_{#spUya)>2h-WB6C4FV@k>vSeyx+61B@EE~GT3 zctupp!&BR!Y@%!@jM^;juE(=;IRCry2}IrPz`s}yJ{Q{DsVH{7U;TOfG&%GByB;A} zM70$Fvjn@$35jW*^#!ij?zsQN`vvc_TEkmdDB`MYT_rQ>lCMNZ$exY%emGfaP;)5L z(Xgn$dK7)F;T@x)gd5FF6VuFjW+DGo`k#P|lr7vbR5`+otpJQ0VV?2xg6k_zFUZ0H zoN=-2;pDsyaTKw!nTtFjmgBI#0{RD#_yj9N2rSPUN{~*Hvg9ss@PNkg1Cdi9biS;~ zGj{b~^xtGjxL}s@`Y5$1o+((lP$ake!oFQn7*z!^i=KIsXgnEQsa9kIc?#%@#uIg4 z0kLYR<~UZXY6WVcYHvC8uR%Ig&0s8qgYGc_x3#X8v@#y-xRg$m)o_2TDge~;{18H% zbpR$CA`1ZnptjGgagD#4gK@0V>t-RilEF#4;k><1X#FiIaUU0hNa^cGr zmlt~ZVeV!xxD=d$(;4$lPhb!Zvl;Ar6ykhn8*$ODnUaDn%rZDx!XXZPD{%dV*$lqPGh$bk8Qra@7T$BN-1E_`-s$~qeJ0exDrPUN

m0$n!%XhpM#Q4 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 + + diff --git a/public/icons/sonardesk-icon-128.png b/public/icons/sonardesk-icon-128.png new file mode 100644 index 0000000000000000000000000000000000000000..37e93328af10cafe21eb19baf9dfc70508471839 GIT binary patch literal 20786 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 literal 0 HcmV?d00001 diff --git a/public/icons/sonardesk-icon-64.png b/public/icons/sonardesk-icon-64.png new file mode 100644 index 0000000000000000000000000000000000000000..5c6e5a7d5dabf034b98f25f49c8e3a931cd16126 GIT binary patch literal 6899 zcmZ{pbxa&km&FIC*x)d@O9vTTJHP-1iqqomP$3@S+WUj z#2+*L0jOJe<9fB(Ubc6T1}xt5Zc*^ITnhO1Ixq0bIN-2OVonSCVLO_IC6ohz`FaJH zrLICAfT>#a$O0&9Vlzi>yQx%6N;q?%&;S+=zx$gjI?UJZIk`o*6qAanOfOilrWg3| zIXIo&o~bIZsH!Fv1L;01O=8F5>WPv^tR=sTY1T7W5HeRF7yTqeO5I81P)X!~$s^`d z4_B=6bUBMz$QYYV|2@M8T3lE;kl#PEd-_C$&)j3Xnu%7aTiB>S$v&dgM$A@9S^sIe z)^r<_p~U#H--Pmt^@PHg6gZ0k5BSH6gaK<=f*RgsGU13d>^)jaepDj)$~=-BT=_%+BNU~+VvXa_$WFcpuT}-fTGVC+Wh%&br^U|88j$6 zNTf%hRKD)~md9%=xmXC;PN@KJF6aV3S&`Wy+}U%b#TaH4+W(}E#9}=!=a)ri$~~rz z9a#Axf=)oSc&StlVtbUUxYaRiq=j+#QE`JI001H(fZePu<}QZmX_T^M5Y*epOcxq%M$HGW4Cd*EUKX^UW!;SW zSsp>cCoY7Xx@x^Lz zlMGtPSk>_@30HjS50b)~r=*k$`oj%-X&GgZkRlDMWGaJ}Fj+6>G=Evr<1s8ZM&SN;+0&qSxljs5+zI(O%_1l}B6ua$M; zW0X#rqv!dZyqP$ws8dMiWJ?&wkt$Hg_DUMrSl^rSdH&f+8?8j{#i>G&?^IZ69rPE2 ze@{HM9x=x&zxJ}apN2dLd|Wkr);Qqw{_n>-%UzeB_u(Hm7ZkTyS-4;9=1-wC88sc8 zdWy`6yWn?)xI3ojIN_7g>Q=z^lqX)tQa)H zmVvwuBl4*@F#P`NSGkeF=YrpMwC~HGoXJvW6&EMB@5B~XDc{@r@iw)nIld^8Fy7@c ztd>eTSIW{03#~)O$<~E;dmOe4=5B|N_yw}y*2>WMf1p2nO;i;d&b=4;7D46o!;d8} z_~+l-JgttKh}BQkFB>_($+N$9O5LzX&t0DXbVf|?Q}2funh{Wi>pHy`)Z=ZR=9A|a z*8;n_n|O4Hoyr2Q1tYCq>+veOdt!0Kr?&9VstXpby&^!jcD60vEHK~6-T0%ehGjqS zGN>YmUh!%wgfmJp>CiKCV8759wEd#+2L)OT=Azq?8Rz3-P0Q@IH`z#j*ZUNT__X}A z--ooi_9bZhGizTLGME2LE^p=tKc)Av_tLL^xjP4``2MxRZAwQbtZCWV#FCfY2hA{t zJqO~)QnPpQ!ewQwU6>+@q{M?nWU6X2Y3an*xNlkGUqAz%Z+f;py4GD=3uyC!6$5UT z{onbhFinl^lw5i=nEZP3c%VHp!+ND|Z_QNj1CxO$qV6Ux6_=IZh#WFXo4C=mc zC(VG2OAUWDXhgY7b?|O_-^v*gq~e@ILYm5<6G9lVqz}pqTyPI6l#$yxfWlM|AV62i zi(e2EW&~4pw@VyTdhn*H|B-r-cZstm;U^jY+==Dna48+JHC(+^v%${MlNI9D+xBI~ zF09eaEqvox@}ViUr0nN#0#hcdz@dh@>0|Kh$0=BWUj)S~-V5rJ?u?E5M{W&fN#ZlU zrc}MrC>Wp%UvBAJ$0hgaP{qayn$$)yYXN)my8^kA3A40^QVcc*o>$H8-TG(Wdjc7A z?`8riK90#@+*1w!Q~sxS@u&C!Eq7}K(UH%Z!(T4aku0;DDXDTKiE5}rtIc!JuC3@# zRFr%dQJ+OS+YYi(GA_95Yu*prJ`d-XQ}-16GwY`~{xJ6X!f>Z&Bnr5=teBXX3JWYf zmX?z)8IA2xs3d&JB~}%$Ru$h@aq#E?>{)_PzcsrsdI>)??$y<90cUl1>H}g`9P}IUdDnr^_(6&v@48N!~GyJ}PAKYgcWL;B5O=E{K2Ka^Am~DD} zialJ)o}c&Ii?#->?Qs|PcXoBNF6*nArL^tKV~&&Gtx)m=rza6CS3@LZyEwJgh_Wy; z5+xP>-oaf2**m4U6O*c_x!8%RZH`r?>xJYk6SLE?PQkX~$5R^bQ;FH3U;Fait_59Q zZJxsEBC6?6MT>EMFvJC4YwxKQ3CD&sF{eXA9fwX!Q8MXbF}4AUpm7`-0;QV^DWl&# zE!2Q;+AUoR@N8^as~(CH{I#t7`&P1mG!HUGOh=lsvQhKmw8rq1=5d7S;BKRm+V+cJ zIoROLDPEDkXFUjwXBq35*M0QLcqP>ZNqhZN@C){+)2}h1SU)8ed{t3TgYyTyn*mGZ ziq3M=`9&3DuBSjuuij7ZhMHfQvl$?$Y~yJ`$~0z7<|Kop=C_!J4IbCt=$+M>#bamd zUEHi8mmx);#wU|z@9K2|cPuAxvy}iIc!)MK#mKjW;x2o?i(bp*66?)MkA=nYkuWD$d0^2U_l0&|wM6iA z+ZjE)1;k?X{WMq3KiAZ>)sjs|V33TxIjbX3P_}~{&o5hvmQ^yO{>agPW^zkh4que% zIW={=Cu`6p?7`PEL#{hbrr8hg`grYcCjRb)4m@e=g$6_##W{00M8iUZF@0oAcK6}$ z*<*b?XI4OW$B{=k>-mJmZCY>%H`Ec2laxcAOrMy{=jddNvAvPPkt~ zKRgkIVMCFMDvYer_9iBM>fi1zUP|&cJ(AAJb+^o&o(3K)hh8>TmW(UFo47fnS8Tq| zm4J^0ysrJ{1A)c@ez@dbzn>AO%ZqZR{cw>}fn?8LJzh9Q@pho?m!(2ds9Dte_!1GM z0IsLAsaR0UBvOQGBl~P7{sftZ3%$|m`iH!}U7fk3vkg<~XG6{&Ntim6YA~m}k6Dt#D_Jqvu~frlZY%eg6p1 z9;j6bRf1p9yCga^Fb6st2ccr3hOE(luEUU)l&3d=N0g%fT2)emv5AxG*%Z z`xQB5jl>_*;d*fUprGxdx>Lb#AA#Ib`l3+~p%y_wGL#Kc(qbbi5F|Q%NHMb5p1E$k zPV!T!im)NK?TmvC70->rb_Gy_!tqxd+iJmAVA`}dfrs%y`)aczX9?Cj%GF_msw3$Y858uci-L>M%x+9HdY z2jV}s`VlX$m}z2SiGhm@NBQ8?v)JR{XEz){r;GByI_^mUcB!`j@$?qguMIy`w)rEzHqc^JrA&@{nHoS}G@i4k@gb1qcP;49a5>;T!$x z-*|cj)X|(cv=!g%TfIpPT7SGQ{(EGfP<&u#GzvNRGNow2LR+9S%vG&w%PtLRTE(HU zG5tIIheT?NQgyTTUpTqpWsJM|YcD{g5R#R@r}3SRs+rIwMAj}lVZ$y;Fo=F41|Uu) zG3X68aXPH9L5q&}bYVEW^ls)8W<1(F<9s;azL@~toaddF`y7rv(*P!=gzNJ;#tZed}F-jlaIhv|V_%|tX6o@AH9^o7^pWNXc5G&*6!MP0MnEn}-W|1luui%O2 zRSk^&suf2jg%wjReu7zes0>zBN5-p+gRI2+Zb&`gEe9k#JxAZ6?`hm0$UAPNEYUcE z7QL5XhBPSc>^H(akhQf*b!@3cu?*)hXIIWjt!$DKHi&_z&(WfHdC~hG*PqZJQ98xN z8DqavzOSr?Nunc;-sg7oWxb>wu@F}I1m8I2Ts$?V3SY9Lkwwq8^Y>gk#~8jfjL~G^ zxVeKP$QU^FsljbCXXNil$1GT`|9EA6B_bSZn2}}=E!UlKCH{CI05GqNROCOZ_#cp)w{KRbz}&4nFfmtjgk`{^q-(k%DFfp(#b+)4Jd+92Bn zJAXYW5t|u5PVuPDEG>zhpZ9HD_ps}GEJVJ<5&%or5Pe?d!=y~ZY_30g(~Z0>5pVje zR({lLfJ30!i5XL5;4Ndm){izlX^KY zUZhvG_H1d&zAu@x>v-e z{pY|6$TtGV0TdLVn?ffjiz^c67&3_cCf-UNrU~vO#pF{=XB8wR_>FVMKuwAw#^56J zPrxVbGYc0JC||qNZ@o`2_l31_rd8?QifNM(`$c03VPde(9|t960PW*ZHahzJZKN%Z zYx*xsXhPl1e@8Q)#k@2!-L{L89s`+7^{Hx%5v9*2(Wywm)mvbJHjO&qOA;NsNoJSd8s1KjS#0)gJWKKlC)xp6mQBbKE zj|ZOaf%)PRb70&9wMuY0`e&IOhei~$p>EiHU zAmC^AOo?5Y-crgvJuGdnx7lF=XlU`{xV=wH;v$M(^rfFs&I9Zq8|DYV(&=KS{B>OO z^zzQ-=0wqzZ)5t&Hb$C=v=Zm@H~GrN{TorxQTxr>5Wfc8Kc8_42Zc>Az$}W;${~b| zjGjDd{Zq}*Y5zO9>k(~2N^#Drrb*uM5PG`x-smdeO)J-FoxQy2d2L5lJ*KFz?I2IjWWnXVe0ijD zsy+pTTsFtbefJG&0yJM|NhM*?;3oJsLvO-wM;h7|`B~=Xx3o-AL~pu6g4Mh)<(AQL z>xYKb>J-P5B|`rVXV*MyCdo*yNxtrvTlOJ3G8!6ff$Hz45JfA{A|PHT8Nwo?M|ria zXZhK8SKj_x4TZ%ZR}&ev5u}Xs7keEzcYJFgD1}TwRxqrgf@P#Lp|wEWYk0yO<_@~l zxV}0;GoKB}b&ruS1q}a`O-SLctc`oxqYyt45eo?=gJ;rVyJD{c^5!H-8mmLx5(}@c zrI_epsJ-XYQU#WOh&Z+)5z|f*hmKtM7VMPuK2*SCUem5$G!Ub{I(5A?0>|fuVM1!g z-)C5tq!>46vCPq|C(rnRzIUF_PIU_A_%4QwItF2uhD$b8o%#1gN%N)e^=NV#(CO&pfI9nx~ zcDRT##))Nxl`g^vF-AtDXL)75W5C9a$lW{UZi65B3DZKx|5Ol!Y?TyM)qJn9gz2+A zhvUh5n&e>gi==Y$MN?^B?!S%H)#z4CN6J}MxJ;2%m`#6{+xi{iI2PVCT&-|gr1^YX z>MUC;j!T+WF}e13-2vak47T8PI!}iXMNRH+#&;Yn`$vK>BFDPv)F$kj48M+{$FRtdu9DgnWAk z>2^Yif34kAh#*w{-bFeQT)~(+Xv8?dxN%hXF!QK458eD1v`A(r`-bmnrRP= zK``7WHN2`Q)Z4(%%g{2q6tdyix6evg!3p(}#SGLaxyq3WC)pkm%UP#k)dUCW>@|-t zXSEDI(VUKHYmH!J&FagB@G|IZo+kH`+U(^p!N=%>6FSj)eoq_#gPhzZ#)j0b z-6Hse0{XY1&ZmPj9}sF}`>IPAp7G9`u{dwrmj-FhaOBk*eWr6slmwHnNbD0sx#o+U zsKuzoB!P|SiGF}!rYm(XU)#Z{v!tb-i+t)rk~8Nc;on`?4)YdW9-k3KmwAi)m}F5a zD!MKCvcO55g+7zp>)qUYV=Zdq6iv^QiILzHnfZkly+)xY|jO#=@jFR}jy) zZgsWGLoboZt#B=R_;u_E*wds7M;%0Xh7YW7iUC@zCq9;6dd1`~5UNFE!rUvN?%Fb8 zJA~OQQ-{Et`3!5EJw57#&|j@Wn+U35&@iZs{9UAQL7DEq4^0CxYkWVt*G`#}t*G2p zTWF}F@T}Qx!LE}TE8!1-j` z$qge#b_LSwmmzV1>vDdYJFA;zbwJ{GY`*lK`#?5yy?&VBNRp1=#jaFCWvIf~x4O+9 z`nL{&)9J7MKZ~;bOtz=fToV&kY>3tZ0^LsHkI&-eYWDJ}4JdP9U!rex`xU!B!9W{l zR}=%=01VdZlJXscL4tpgkbgb$_$I|Nk=E&gG?pcqMXrk7&n2ynzZ0o2WNYgn^!3nt zY)TC|G(v~J%l~CiSKITk%-oMS&#XWjB|-VNcUVcs_)<42pnSkY-e{$HTvmkGPaeP) z>x3SJ<%b(tOZQ(DKm4;8JGW5QAlaSCzK}pRbPH854=_~DxTdsf=&(8#17TZ4*lm-$ z(4*D?(~dgyeuU12y;NI~-Ka+O-R9c0mD9b}AEFenDNTX{Jh4QY(fEg(ongMBNUCk0 z2DfD|#p-xWadzaeUX9S+$Fog^p9TR^-UrGR`8?!)iOQk=VJ*jR&j3=VYa~oTaXt5_ z0iu3cZ4t^>nzU-?YKXkd;}iuol#5C{j+gyD%xg+Ee-s!o!q)8etiddww0DRV8cZq=}P>ll%2+ z8>p}xMBf=2UP|8MX%)^P;BM~JKCTs1{7aWHo?qhdC7!tg1Xo0)7qp)|_Z3^{WqZi` zFRh8L7{(dY0G%=au%R~^-uzn5p|_niK}xf6asT+ebwwLWL{zjjG z<}t3Yl2UO~lfqlby>3oWtDbg7L(fd=2-1c>@ofGg@$;?v$57)jRLWkOXz|A{PSC0# zzORfu=eBq9;2(9~wVV4ak8&QKC$Im#4;244KAdo6Be{17RA zVX0RTDQQs=X<;!i1R@QA*aK&9{ul7Z-Oky;@BarV_1-l719<+&0q*?9{w>`4jmQ6G YL`DDGgxyk0{~rTTQ`S=Y4zmjTFIx%Cn*aa+ literal 0 HcmV?d00001 diff --git a/public/index.php b/public/index.php new file mode 100755 index 0000000..ee8f07e --- /dev/null +++ b/public/index.php @@ -0,0 +1,20 @@ +handleRequest(Request::capture()); diff --git a/public/robots.txt b/public/robots.txt new file mode 100755 index 0000000..eb05362 --- /dev/null +++ b/public/robots.txt @@ -0,0 +1,2 @@ +User-agent: * +Disallow: diff --git a/public/site.webmanifest b/public/site.webmanifest new file mode 100755 index 0000000..053f28f --- /dev/null +++ b/public/site.webmanifest @@ -0,0 +1,13 @@ +{ + "name": "SonarDesk", + "short_name": "SonarDesk", + "description": "Native SonarQube monitoring for macOS.", + "start_url": "/", + "display": "standalone", + "background_color": "#f7f9fc", + "theme_color": "#0b1220", + "icons": [ + {"src": "/icons/android-chrome-192x192.png", "sizes": "192x192", "type": "image/png"}, + {"src": "/icons/android-chrome-512x512.png", "sizes": "512x512", "type": "image/png"} + ] +} diff --git a/resources/css/app.css b/resources/css/app.css new file mode 100755 index 0000000..54b247e --- /dev/null +++ b/resources/css/app.css @@ -0,0 +1,9 @@ +@import 'tailwindcss'; + +@source '../../vendor/laravel/framework/src/Illuminate/Pagination/resources/views/*.blade.php'; +@source '../../storage/framework/views/*.php'; + +@theme { + --font-sans: 'Instrument Sans', ui-sans-serif, system-ui, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', + 'Segoe UI Symbol', 'Noto Color Emoji'; +} diff --git a/resources/js/app.js b/resources/js/app.js new file mode 100755 index 0000000..8337712 --- /dev/null +++ b/resources/js/app.js @@ -0,0 +1 @@ +// diff --git a/resources/views/admin/cms/form.blade.php b/resources/views/admin/cms/form.blade.php new file mode 100644 index 0000000..2ba7d36 --- /dev/null +++ b/resources/views/admin/cms/form.blade.php @@ -0,0 +1,14 @@ +@extends('layouts.app') +@section('content') +

Back to pages
+
@csrf @if($page->exists) @method('PUT') @endif + + + + +
+ +
@if($page->exists && $page->is_published)View page@endif
+
+@if($page->exists)
@csrf @method('DELETE')
@endif +@endsection diff --git a/resources/views/admin/cms/index.blade.php b/resources/views/admin/cms/index.blade.php new file mode 100644 index 0000000..52037c8 --- /dev/null +++ b/resources/views/admin/cms/index.blade.php @@ -0,0 +1,9 @@ +@extends('layouts.app') +@section('content') +
CMS

Content pages

Manage SonarDesk website content.

New page
+
{{ $pages->links() }}
+@endsection diff --git a/resources/views/admin/index.blade.php b/resources/views/admin/index.blade.php new file mode 100755 index 0000000..85171f0 --- /dev/null +++ b/resources/views/admin/index.blade.php @@ -0,0 +1,6 @@ +@extends('layouts.app') +@section('content') +
Admin

Licensing administration

Manage licences, activations and customer support.

+
{{ $licenseCount }}

Licences

{{ $activeCount }}

Not revoked

{{ $activationCount }}

Active installations

{{ $userCount }}

Portal users

+ +@endsection diff --git a/resources/views/admin/license.blade.php b/resources/views/admin/license.blade.php new file mode 100755 index 0000000..9a2ac70 --- /dev/null +++ b/resources/views/admin/license.blade.php @@ -0,0 +1 @@ +@extends('layouts.app') @section('content')

Licence •••• {{ $license->license_key_last4 }}

{{ $license->customer_name }} · {{ $license->customer_email }}

{{ $license->edition }} · {{ $license->activation_limit }} seats

@if($license->revoked_at)
@csrf
@else
@csrf
@endif

Activations

@foreach($license->activations as $a)@endforeach
IDPlatformVersionStatus
{{ $a->installation_name ?: $a->installation_id }}{{ $a->platform }}{{ $a->app_version }}{{ $a->deactivated_at ? 'Released':'Active' }}
@endsection diff --git a/resources/views/admin/licenses.blade.php b/resources/views/admin/licenses.blade.php new file mode 100755 index 0000000..8ff6b69 --- /dev/null +++ b/resources/views/admin/licenses.blade.php @@ -0,0 +1 @@ +@extends('layouts.app') @section('content')

Licences

@foreach($licenses as $l)@endforeach
CustomerEditionKeyStatus
{{ $l->customer_email ?: 'Manual' }}{{ $l->edition }}•••• {{ $l->license_key_last4 }}{{ $l->revoked_at ? 'Revoked':'Active' }}
{{ $licenses->links() }}
@endsection diff --git a/resources/views/admin/support/index.blade.php b/resources/views/admin/support/index.blade.php new file mode 100755 index 0000000..ae56c8a --- /dev/null +++ b/resources/views/admin/support/index.blade.php @@ -0,0 +1,24 @@ +@extends('layouts.app', ['title' => 'Support Inbox — SonarDesk']) +@section('content') +
Admin

Support inbox

Customer, licence, billing and privacy requests.

+
+ + +
+ +{{ $tickets->links() }} +@endsection diff --git a/resources/views/admin/support/show.blade.php b/resources/views/admin/support/show.blade.php new file mode 100755 index 0000000..4248c64 --- /dev/null +++ b/resources/views/admin/support/show.blade.php @@ -0,0 +1,14 @@ +@extends('layouts.app', ['title' => $ticket->reference.' — Support']) +@section('content') +← Support inbox +
{{ $ticket->reference }}

{{ $ticket->subject }}

{{ $ticket->name }} · {{ $ticket->email }}

{{ ucfirst($ticket->status) }}
+
+

Request

{{ ucfirst($ticket->category) }}{{ $ticket->created_at->format('j M Y H:i') }}
{!! nl2br(e($ticket->message)) !!}
Reply by email
+ +
+@endsection diff --git a/resources/views/auth/forgot-password.blade.php b/resources/views/auth/forgot-password.blade.php new file mode 100755 index 0000000..21c04c9 --- /dev/null +++ b/resources/views/auth/forgot-password.blade.php @@ -0,0 +1 @@ +@extends('layouts.app') @section('content')

Reset password

@csrf
@endsection diff --git a/resources/views/auth/login.blade.php b/resources/views/auth/login.blade.php new file mode 100755 index 0000000..0701f4d --- /dev/null +++ b/resources/views/auth/login.blade.php @@ -0,0 +1 @@ +@extends('layouts.app') @section('content')

Sign in

@csrf
Forgot password?
@endsection diff --git a/resources/views/auth/register.blade.php b/resources/views/auth/register.blade.php new file mode 100755 index 0000000..64b5aa0 --- /dev/null +++ b/resources/views/auth/register.blade.php @@ -0,0 +1 @@ +@extends('layouts.app') @section('content')

Create account

Use the same email address used to purchase SonarDesk.

@csrf
@endsection diff --git a/resources/views/auth/reset-password.blade.php b/resources/views/auth/reset-password.blade.php new file mode 100755 index 0000000..d11d1a7 --- /dev/null +++ b/resources/views/auth/reset-password.blade.php @@ -0,0 +1 @@ +@extends('layouts.app') @section('content')

Choose a new password

@csrf
@endsection diff --git a/resources/views/auth/verify-email.blade.php b/resources/views/auth/verify-email.blade.php new file mode 100755 index 0000000..bde6474 --- /dev/null +++ b/resources/views/auth/verify-email.blade.php @@ -0,0 +1 @@ +@extends('layouts.app') @section('content')

Verify your email

For security, licence ownership is only shown after the account email has been verified.

@csrf
@endsection diff --git a/resources/views/checkout/buy.blade.php b/resources/views/checkout/buy.blade.php new file mode 100755 index 0000000..294121f --- /dev/null +++ b/resources/views/checkout/buy.blade.php @@ -0,0 +1,91 @@ +@extends('layouts.app') +@section('content') +
+ SonarDesk +

Choose your licence

+

Every subscription starts with a 7-day free trial. Cancel before the trial ends and you won't be charged.

+ @if($paddleEnvironment === 'sandbox')
Sandbox checkout — no real payment is taken
@endif +
+ +
+@foreach($plans as $code => $plan) +
+
+
+
+

{{ $plan['name'] }}

+
{{ $plan['billing'] }} billing
+
+ @if($plan['billing'] === 'Annual')Best value@endif +
+
{{ $plan['display_price'] }}
+
    +
  • 7-day free trial
  • +
  • {{ $plan['activation_limit'] }} active Mac{{ $plan['activation_limit'] === 1 ? '' : 's' }}
  • +
  • Secure online activation
  • +
  • Licence management portal
  • +
+
+ +
+@endforeach +
+ + + + + +@endsection diff --git a/resources/views/cms/show.blade.php b/resources/views/cms/show.blade.php new file mode 100644 index 0000000..909e3cf --- /dev/null +++ b/resources/views/cms/show.blade.php @@ -0,0 +1,4 @@ +@extends('layouts.app', ['title' => $page->meta_title ?: $page->title.' — SonarDesk', 'description' => $page->meta_description ?: $page->excerpt]) +@section('content') + +@endsection diff --git a/resources/views/layouts/app.blade.php b/resources/views/layouts/app.blade.php new file mode 100755 index 0000000..cc59ca6 --- /dev/null +++ b/resources/views/layouts/app.blade.php @@ -0,0 +1,315 @@ + + + + + + + + @php + $pageTitle = $title ?? 'SonarDesk'; + $pageDescription = $description ?? 'Native SonarQube monitoring for macOS. Track projects, quality gates, bugs, vulnerabilities and code smells from one professional desktop app.'; + $canonicalUrl = url()->current(); + $socialImage = url('/icons/og-sonardesk.png'); + @endphp + + {{ $pageTitle }} + + + + + + + + + @if(app()->environment('production')) + + @else + + @endif + + + + + + + + + + + + + + + + + + + + + + + + @stack('head') + + + + +@hasSection('fullbleed') + @yield('fullbleed') +@else +
+ @if(session('status'))
{{ session('status') }}
@endif + @if($errors->any())
{{ $errors->first() }}
@endif + @yield('content') +
+@endif + + + + + + + + + + + + diff --git a/resources/views/legal/cookies.blade.php b/resources/views/legal/cookies.blade.php new file mode 100755 index 0000000..06981ab --- /dev/null +++ b/resources/views/legal/cookies.blade.php @@ -0,0 +1,16 @@ +@extends('layouts.app', ['title' => 'Cookie Policy — SonarDesk']) + +@section('content') + +@endsection diff --git a/resources/views/legal/privacy.blade.php b/resources/views/legal/privacy.blade.php new file mode 100755 index 0000000..a19a562 --- /dev/null +++ b/resources/views/legal/privacy.blade.php @@ -0,0 +1,39 @@ +@extends('layouts.app', ['title' => 'Privacy Policy — SonarDesk']) + +@section('content') +@php + $legal = config('sonardesk.legal'); + $retention = config('sonardesk.privacy.support_retention_days', 730); +@endphp + +@endsection diff --git a/resources/views/legal/terms.blade.php b/resources/views/legal/terms.blade.php new file mode 100755 index 0000000..db09d91 --- /dev/null +++ b/resources/views/legal/terms.blade.php @@ -0,0 +1,19 @@ +@extends('layouts.app', ['title' => 'Terms of Service — SonarDesk']) + +@section('content') +@php($legal = config('sonardesk.legal')) + +@endsection diff --git a/resources/views/portal/index.blade.php b/resources/views/portal/index.blade.php new file mode 100755 index 0000000..0a874fb --- /dev/null +++ b/resources/views/portal/index.blade.php @@ -0,0 +1,113 @@ +@extends('layouts.app') + +@section('content') +
+
+ Account +

My licences

+

Manage subscriptions, licence keys and activated Macs.

+
+ Buy another licence +
+ +@php + $activeLicences = $licenses->filter(fn ($license) => $license->is_usable); + $historyLicences = $licenses->reject(fn ($license) => $license->is_usable); +@endphp + +@if($activeLicences->isEmpty()) +
+

No active licences

+

No active SonarDesk licence is associated with {{ auth()->user()->email }}.

+ Choose a plan +
+@else +
+ @foreach($activeLicences as $license) + @php + $activeCount = $license->activations->whereNull('deactivated_at')->count(); + $isDuplicatePersonal = $hasProfessional && $license->edition === 'Personal'; + $billing = str_contains(strtolower((string) optional($license->product)->code), 'annual') ? 'Annual' : 'Monthly'; + @endphp +
+
+
+
+
+ Active + {{ $license->edition }} + {{ $billing }} +
+

SonarDesk {{ $license->edition }}

+

Licence ending {{ $license->license_key_last4 }}

+
+ Manage licence +
+ +
+
+ Macs activated + {{ $activeCount }} of {{ $license->activation_limit }} +
+
+ Subscription + {{ ucfirst($license->subscription_status ?: 'active') }} +
+
+ {{ $license->subscription_status === 'trialing' ? 'Trial ends' : 'Renews' }} + {{ optional($license->current_period_ends_at)->format('j M Y') ?: '—' }} +
+
+ +
+ +
+ + @if($isDuplicatePersonal) +
+
+ You already have an active Professional subscription. +

This Personal plan is a separate Paddle subscription and could be billed separately. Cancel it if it was only created while upgrading.

+
+
+ @csrf + @method('DELETE') + +
+
+ @elseif($license->edition === 'Personal') +
+
+ Need more Macs? + Upgrade this subscription to Professional for up to 3 Macs. +
+
+ @csrf + +
+
+ @endif +
+
+ @endforeach +
+@endif + +@if($historyLicences->isNotEmpty()) +
+ Licence history {{ $historyLicences->count() }} +
+ @foreach($historyLicences as $license) +
+
+ SonarDesk {{ $license->edition }} + Licence ending {{ $license->license_key_last4 }} +
+
{{ ucfirst($license->subscription_status ?: ($license->revoked_at ? 'revoked' : 'unavailable')) }}
+ Details +
+ @endforeach +
+
+@endif +@endsection diff --git a/resources/views/portal/show.blade.php b/resources/views/portal/show.blade.php new file mode 100755 index 0000000..2b09e8b --- /dev/null +++ b/resources/views/portal/show.blade.php @@ -0,0 +1,80 @@ +@extends('layouts.app') + +@section('content') +@php + $activeActivations = $license->activations->whereNull('deactivated_at'); + $billing = str_contains(strtolower((string) optional($license->product)->code), 'annual') ? 'Annual' : 'Monthly'; +@endphp + +← My licences + +
+
+
+ {{ $license->is_usable ? 'Active' : 'Unavailable' }} + {{ $license->edition }} + {{ $billing }} +
+

SonarDesk {{ $license->edition }}

+

Licence ending {{ $license->license_key_last4 }}

+
+
+ @csrf + +
+
+ +
+
+
+
+

Activated Macs

+

{{ $activeActivations->count() }} of {{ $license->activation_limit }} activation slots in use.

+
+ {{ $activeActivations->count() }}/{{ $license->activation_limit }} +
+ + @forelse($activeActivations as $activation) +
+
⌘
+
+ {{ $activation->installation_name ?: 'Mac' }} + {{ $activation->platform ?: 'macOS' }}@if($activation->app_version) · SonarDesk {{ $activation->app_version }}@endif + Last seen {{ optional($activation->last_seen_at)->diffForHumans() ?: 'not yet recorded' }} +
+
+ @csrf + @method('DELETE') + +
+
+ @empty +
No Macs are currently activated with this licence.
+ @endforelse +
+ + +
+@endsection diff --git a/resources/views/portal/welcome.blade.php b/resources/views/portal/welcome.blade.php new file mode 100755 index 0000000..233a2f6 --- /dev/null +++ b/resources/views/portal/welcome.blade.php @@ -0,0 +1,19 @@ +@extends('layouts.app', [ + 'title' => 'SonarDesk — SonarQube monitoring for macOS', + 'description' => 'A professional native macOS dashboard for SonarQube projects, quality gates, bugs, vulnerabilities and code smells.' +]) +@section('content') +
+ Native SonarQube monitor for macOS +

Your SonarQube projects.
One focused Mac workspace.

+

SonarDesk gives development teams a fast native view of project health, quality gates, bugs, vulnerabilities, code smells and measures without living in a browser.

+ +
+
+
Projects

Everything at a glance

Review quality gates and core measures across every configured SonarQube project.

+
Issues

Find what needs work

Browse bugs, vulnerabilities and code smells with filtering and server-side pagination.

+
Security

Credentials stay protected

SonarQube tokens are stored in the macOS Keychain and API access respects your server permissions.

+
+
Built for engineering teams

A professional desktop companion for SonarQube.

Multiple servers, project dashboards, quality gates, issue views, secure token storage and a native macOS experience.

+
Licensing

Simple licensing for SonarDesk.

Start with a free trial, then manage your licence, activations and subscription from the customer portal.

View pricing
+@endsection diff --git a/resources/views/support.blade.php b/resources/views/support.blade.php new file mode 100755 index 0000000..6bdee43 --- /dev/null +++ b/resources/views/support.blade.php @@ -0,0 +1,100 @@ +@extends('layouts.app', [ + 'title' => 'Support — SonarDesk', + 'description' => 'Contact SonarDesk support for technical, licence, billing and privacy enquiries.' +]) + +@section('content') +
+ Support +

How can we help?

+

Send us the details below. Your request is saved securely, assigned a reference and emailed to the support team.

+
+ +
+
+
+
+

Contact support

+

We will reply to the email address you provide.

+
+ Support ticket +
+ +
+ @csrf + + +
+
+ + + @error('name')
{{ $message }}
@enderror +
+
+ + + @error('email')
{{ $message }}
@enderror +
+
+ +
+
+ + + @error('category')
{{ $message }}
@enderror +
+
+ + + @error('subject')
{{ $message }}
@enderror +
+
+ +
+ + +
Do not include passwords, private SSH keys or your full licence token.
+ @error('message')
{{ $message }}
@enderror +
+ + + @error('privacy_notice')
{{ $message }}
@enderror + +
+ + @auth + @if(auth()->user()->hasVerifiedEmail())Open licence portal@endif + @endauth +
+
+
+ + +
+@endsection diff --git a/resources/views/welcome.blade.php b/resources/views/welcome.blade.php new file mode 100755 index 0000000..26e294a --- /dev/null +++ b/resources/views/welcome.blade.php @@ -0,0 +1,223 @@ + + + + + + + {{ config('app.name', 'Laravel') }} + + @fonts + + + @if (file_exists(public_path('build/manifest.json')) || file_exists(public_path('hot'))) + @vite(['resources/css/app.css', 'resources/js/app.js']) + @else + + @endif + + +
+ @if (Route::has('login')) + + @endif +
+
+
+
+

Let's get started

+

With so many options available to you,
we suggest you start with the following:

+ + + +

+ v{{ app()->version() }} + + View changelog + + + + +

+
+
+ {{-- Laravel Logo --}} + + + + + + + + + + + {{-- 13 --}} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ + @if (Route::has('login')) + + @endif + + diff --git a/routes/api.php b/routes/api.php new file mode 100755 index 0000000..9548279 --- /dev/null +++ b/routes/api.php @@ -0,0 +1,12 @@ +group(function () { + Route::post('/activate', [LicenseActivationController::class, 'activate'])->middleware('throttle:license-activation'); + Route::post('/validate', [LicenseActivationController::class, 'validateInstallation'])->middleware('throttle:license-activation'); + Route::post('/deactivate', [LicenseActivationController::class, 'deactivate'])->middleware('throttle:license-activation'); + Route::post('/webhooks/{provider}', PaymentWebhookController::class)->whereIn('provider', ['paddle', 'lemon-squeezy']); +}); diff --git a/routes/console.php b/routes/console.php new file mode 100755 index 0000000..b98b725 --- /dev/null +++ b/routes/console.php @@ -0,0 +1,6 @@ +dailyAt('03:20')->withoutOverlapping(); diff --git a/routes/web.php b/routes/web.php new file mode 100755 index 0000000..57b2844 --- /dev/null +++ b/routes/web.php @@ -0,0 +1,65 @@ + view('portal.welcome'))->name('home'); +Route::get('/buy', CheckoutController::class)->name('buy'); +Route::get('/support', [SupportController::class, 'create'])->name('support'); +Route::post('/support', [SupportController::class, 'store'])->middleware('throttle:5,10')->name('support.store'); +Route::view('/privacy', 'legal.privacy')->name('privacy'); +Route::view('/terms', 'legal.terms')->name('terms'); +Route::view('/cookies', 'legal.cookies')->name('cookies'); +Route::middleware('guest')->group(function () { + Route::get('/login', [AuthenticatedSessionController::class, 'create'])->name('login'); + Route::post('/login', [AuthenticatedSessionController::class, 'store'])->middleware('throttle:login'); + Route::get('/register', [RegisteredUserController::class, 'create'])->name('register'); + Route::post('/register', [RegisteredUserController::class, 'store'])->middleware('throttle:registration'); + Route::get('/forgot-password', [PasswordController::class, 'requestForm'])->name('password.request'); + Route::post('/forgot-password', [PasswordController::class, 'email'])->name('password.email')->middleware('throttle:5,1'); + Route::get('/reset-password/{token}', [PasswordController::class, 'resetForm'])->name('password.reset'); + Route::post('/reset-password', [PasswordController::class, 'reset'])->name('password.update'); +}); +Route::middleware('auth')->group(function () { + Route::post('/logout', [AuthenticatedSessionController::class, 'destroy'])->name('logout'); + Route::get('/verify-email', [EmailVerificationController::class, 'notice'])->name('verification.notice'); + Route::get('/verify-email/{id}/{hash}', [EmailVerificationController::class, 'verify'])->middleware(['signed', 'throttle:6,1'])->name('verification.verify'); + Route::post('/email/verification-notification', [EmailVerificationController::class, 'resend'])->middleware('throttle:6,1')->name('verification.send'); +}); +Route::middleware(['auth', 'verified'])->prefix('portal')->name('portal.')->group(function () { + Route::get('/', [PortalController::class, 'index'])->name('index'); + Route::get('/licences/{license}', [PortalController::class, 'show'])->name('show'); + Route::post('/licences/{license}/upgrade', [PortalController::class, 'upgrade'])->middleware('throttle:5,1')->name('upgrade'); + Route::delete('/licences/{license}/subscription', [PortalController::class, 'cancel'])->middleware('throttle:5,1')->name('cancel'); + Route::post('/licences/{license}/resend', [PortalController::class, 'resend'])->middleware('throttle:3,10')->name('resend'); + Route::delete('/licences/{license}/activations/{activation}', [PortalController::class, 'deactivate'])->name('deactivate'); +}); +Route::middleware(['auth', 'verified', AdminOnly::class])->prefix('admin')->name('admin.')->group(function () { + Route::get('/', [AdminController::class, 'index'])->name('index'); + Route::get('/licences', [AdminController::class, 'licenses'])->name('licenses'); + Route::get('/licences/{license}', [AdminController::class, 'show'])->name('license'); + Route::post('/licences/{license}/revoke', [AdminController::class, 'revoke'])->name('revoke'); + Route::post('/licences/{license}/restore', [AdminController::class, 'restore'])->name('restore'); + Route::get('/cms', [AdminCmsPageController::class, 'index'])->name('cms.index'); + Route::get('/cms/create', [AdminCmsPageController::class, 'create'])->name('cms.create'); + Route::post('/cms', [AdminCmsPageController::class, 'store'])->name('cms.store'); + Route::get('/cms/{page}/edit', [AdminCmsPageController::class, 'edit'])->name('cms.edit'); + Route::put('/cms/{page}', [AdminCmsPageController::class, 'update'])->name('cms.update'); + Route::delete('/cms/{page}', [AdminCmsPageController::class, 'destroy'])->name('cms.destroy'); + Route::get('/support', [SupportTicketController::class, 'index'])->name('support.index'); + Route::get('/support/{ticket}', [SupportTicketController::class, 'show'])->name('support.show'); + Route::patch('/support/{ticket}',[SupportTicketController::class, 'update'])->name('support.update'); +}); + +Route::get('/pages/{slug}', [CmsPageController::class, 'show'])->name('cms.show'); diff --git a/scripts/create-sonardesk-catalog.sh b/scripts/create-sonardesk-catalog.sh new file mode 100755 index 0000000..c931c5e --- /dev/null +++ b/scripts/create-sonardesk-catalog.sh @@ -0,0 +1,247 @@ +#!/usr/bin/env bash + +set -euo pipefail + +PADDLE_API_KEY="${PADDLE_API_KEY:-}" + +if [[ -z "$PADDLE_API_KEY" ]]; then + echo "ERROR: PADDLE_API_KEY is not set." + echo 'Run: export PADDLE_API_KEY="pdl_sdbx_apikey_..."' + exit 1 +fi + +API="https://sandbox-api.paddle.com" + +api_post() { + local endpoint="$1" + local payload="$2" + + curl --fail-with-body --silent --show-error \ + --request POST \ + --url "${API}${endpoint}" \ + --header "Authorization: Bearer ${PADDLE_API_KEY}" \ + --header "Content-Type: application/json" \ + --data "$payload" +} + +create_product() { + local name="$1" + local description="$2" + + api_post "/products" "$(jq -n \ + --arg name "$name" \ + --arg description "$description" \ + '{ + name: $name, + description: $description, + type: "standard", + tax_category: "standard" + }' + )" +} + +create_price() { + local product_id="$1" + local name="$2" + local description="$3" + local cycle="$4" + local usd="$5" + local gbp="$6" + local eur="$7" + local aud="$8" + + api_post "/prices" "$(jq -n \ + --arg product_id "$product_id" \ + --arg name "$name" \ + --arg description "$description" \ + --arg cycle "$cycle" \ + --arg usd "$usd" \ + --arg gbp "$gbp" \ + --arg eur "$eur" \ + --arg aud "$aud" \ + '{ + product_id: $product_id, + name: $name, + description: $description, + + billing_cycle: { + interval: $cycle, + frequency: 1 + }, + + trial_period: { + interval: "day", + frequency: 7 + }, + + unit_price: { + amount: $usd, + currency_code: "USD" + }, + + unit_price_overrides: [ + { + country_codes: ["GB"], + unit_price: { + amount: $gbp, + currency_code: "GBP" + } + }, + { + country_codes: ["IE"], + unit_price: { + amount: $eur, + currency_code: "EUR" + } + }, + { + country_codes: ["AU"], + unit_price: { + amount: $aud, + currency_code: "AUD" + } + } + ], + + tax_mode: "account_setting", + + quantity: { + minimum: 1, + maximum: 1 + } + }' + )" +} + +echo +echo "Creating SonarDesk Paddle sandbox catalog..." +echo + +# +# Personal +# + +PERSONAL_PRODUCT=$(create_product \ + "SonarDesk Personal" \ + "SonarDesk for personal use.") + +PERSONAL_PRODUCT_ID=$(echo "$PERSONAL_PRODUCT" | jq -r '.data.id') + +echo "Created Personal product: $PERSONAL_PRODUCT_ID" + +PERSONAL_MONTHLY=$(create_price \ + "$PERSONAL_PRODUCT_ID" \ + "Personal Monthly" \ + "SonarDesk Personal — monthly subscription with 7-day free trial." \ + "month" \ + "199" \ + "199" \ + "199" \ + "299") + +PERSONAL_MONTHLY_ID=$(echo "$PERSONAL_MONTHLY" | jq -r '.data.id') + +echo "Created Personal Monthly: $PERSONAL_MONTHLY_ID" + +PERSONAL_ANNUAL=$(create_price \ + "$PERSONAL_PRODUCT_ID" \ + "Personal Annual" \ + "SonarDesk Personal — annual subscription with 7-day free trial." \ + "year" \ + "1499" \ + "1499" \ + "1699" \ + "2499") + +PERSONAL_ANNUAL_ID=$(echo "$PERSONAL_ANNUAL" | jq -r '.data.id') + +echo "Created Personal Annual: $PERSONAL_ANNUAL_ID" + +# +# Professional +# + +PRO_PRODUCT=$(create_product \ + "SonarDesk Professional" \ + "SonarDesk for professional and commercial use.") + +PRO_PRODUCT_ID=$(echo "$PRO_PRODUCT" | jq -r '.data.id') + +echo "Created Professional product: $PRO_PRODUCT_ID" + +PRO_MONTHLY=$(create_price \ + "$PRO_PRODUCT_ID" \ + "Professional Monthly" \ + "SonarDesk Professional — monthly subscription with 7-day free trial." \ + "month" \ + "399" \ + "399" \ + "449" \ + "699") + +PRO_MONTHLY_ID=$(echo "$PRO_MONTHLY" | jq -r '.data.id') + +echo "Created Professional Monthly: $PRO_MONTHLY_ID" + +PRO_ANNUAL=$(create_price \ + "$PRO_PRODUCT_ID" \ + "Professional Annual" \ + "SonarDesk Professional — annual subscription with 7-day free trial." \ + "year" \ + "2999" \ + "2999" \ + "3499" \ + "4999") + +PRO_ANNUAL_ID=$(echo "$PRO_ANNUAL" | jq -r '.data.id') + +echo "Created Professional Annual: $PRO_ANNUAL_ID" + +echo +echo "============================================================" +echo " RSYNC STUDIO — PADDLE SANDBOX CATALOG" +echo "============================================================" +echo +echo "PERSONAL" +echo " Product ID: $PERSONAL_PRODUCT_ID" +echo " Monthly Price ID: $PERSONAL_MONTHLY_ID" +echo " Annual Price ID: $PERSONAL_ANNUAL_ID" +echo +echo "PROFESSIONAL" +echo " Product ID: $PRO_PRODUCT_ID" +echo " Monthly Price ID: $PRO_MONTHLY_ID" +echo " Annual Price ID: $PRO_ANNUAL_ID" +echo +echo "------------------------------------------------------------" +echo "Pricing" +echo "------------------------------------------------------------" +echo +printf "%-24s %-12s %-12s %-12s %-12s\n" \ + "Plan" "USD" "UK" "Ireland" "Australia" +printf "%-24s %-12s %-12s %-12s %-12s\n" \ + "Personal Monthly" '$1.99' '£1.99' '€1.99' 'A$2.99' +printf "%-24s %-12s %-12s %-12s %-12s\n" \ + "Personal Annual" '$14.99' '£14.99' '€16.99' 'A$24.99' +printf "%-24s %-12s %-12s %-12s %-12s\n" \ + "Professional Monthly" '$3.99' '£3.99' '€4.49' 'A$6.99' +printf "%-24s %-12s %-12s %-12s %-12s\n" \ + "Professional Annual" '$29.99' '£29.99' '€34.99' 'A$49.99' +echo +echo "All four prices include a 7-day FREE trial." +echo +echo "============================================================" + +cat > sonardesk-paddle-ids.env <&2; exit 2; fi +SRC="$(cd "$(dirname "$0")" && pwd)"; DST="$(cd "$1" && pwd)" +for dir in app config database routes tests resources; do [[ -d "$SRC/$dir" ]] && cp -R "$SRC/$dir/." "$DST/$dir/"; done +[[ -f "$DST/routes/web.php" ]] || printf '%s\n' ' "$DST/routes/web.php" +grep -q "web.stage5.php" "$DST/routes/web.php" || printf "\nrequire __DIR__.'/web.stage5.php';\n" >> "$DST/routes/web.php" +[[ -f "$DST/routes/api.php" ]] || printf '%s\n' ' "$DST/routes/api.php" +grep -q "api.stage4.php" "$DST/routes/api.php" || printf "\nrequire __DIR__.'/api.stage4.php';\n" >> "$DST/routes/api.php" +if ! grep -q 'SonarDeskLicensingServiceProvider' "$DST/bootstrap/providers.php"; then python3 - "$DST/bootstrap/providers.php" <<'PY' +import sys +p=sys.argv[1]; s=open(p).read(); marker='return ['; s=s.replace(marker, marker+"\n App\\Providers\\SonarDeskLicensingServiceProvider::class,",1); open(p,'w').write(s) +PY +fi +printf '\nStage 5 files copied into %s\n' "$DST" +printf 'Run: php artisan migrate && php artisan optimize:clear\n' +printf 'Then create an administrator with sonardesk:admin.\n' diff --git a/storage/app/.gitignore b/storage/app/.gitignore new file mode 100755 index 0000000..fedb287 --- /dev/null +++ b/storage/app/.gitignore @@ -0,0 +1,4 @@ +* +!private/ +!public/ +!.gitignore diff --git a/storage/app/private/.gitignore b/storage/app/private/.gitignore new file mode 100755 index 0000000..d6b7ef3 --- /dev/null +++ b/storage/app/private/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/storage/app/public/.gitignore b/storage/app/public/.gitignore new file mode 100755 index 0000000..d6b7ef3 --- /dev/null +++ b/storage/app/public/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/storage/framework/.gitignore b/storage/framework/.gitignore new file mode 100755 index 0000000..7a0b408 --- /dev/null +++ b/storage/framework/.gitignore @@ -0,0 +1,10 @@ +compiled.php +config.php +down +events.scanned.php +lsp-*.php +maintenance.php +routes.php +routes.scanned.php +schedule-* +services.json diff --git a/storage/framework/cache/.gitignore b/storage/framework/cache/.gitignore new file mode 100755 index 0000000..01e4a6c --- /dev/null +++ b/storage/framework/cache/.gitignore @@ -0,0 +1,3 @@ +* +!data/ +!.gitignore diff --git a/storage/framework/cache/data/.gitignore b/storage/framework/cache/data/.gitignore new file mode 100755 index 0000000..d6b7ef3 --- /dev/null +++ b/storage/framework/cache/data/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/storage/framework/sessions/.gitignore b/storage/framework/sessions/.gitignore new file mode 100755 index 0000000..d6b7ef3 --- /dev/null +++ b/storage/framework/sessions/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/storage/framework/testing/.gitignore b/storage/framework/testing/.gitignore new file mode 100755 index 0000000..d6b7ef3 --- /dev/null +++ b/storage/framework/testing/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/storage/framework/views/.gitignore b/storage/framework/views/.gitignore new file mode 100755 index 0000000..d6b7ef3 --- /dev/null +++ b/storage/framework/views/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/storage/logs/.gitignore b/storage/logs/.gitignore new file mode 100755 index 0000000..d6b7ef3 --- /dev/null +++ b/storage/logs/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/tests/Feature/CheckoutPageTest.php b/tests/Feature/CheckoutPageTest.php new file mode 100755 index 0000000..1fd31b8 --- /dev/null +++ b/tests/Feature/CheckoutPageTest.php @@ -0,0 +1,27 @@ +set('sonardesk.paddle.client_side_token', 'test_example'); + config()->set('sonardesk.paddle.environment', 'sandbox'); + config()->set('sonardesk.paddle.personal_monthly_price_id', 'pri_personal_monthly'); + config()->set('sonardesk.paddle.personal_annual_price_id', 'pri_personal_annual'); + config()->set('sonardesk.paddle.professional_monthly_price_id', 'pri_professional_monthly'); + config()->set('sonardesk.paddle.professional_annual_price_id', 'pri_professional_annual'); + + $this->get('/buy') + ->assertOk() + ->assertSee('7-day free trial') + ->assertSee('pri_personal_monthly') + ->assertSee('pri_personal_annual') + ->assertSee('pri_professional_monthly') + ->assertSee('pri_professional_annual') + ->assertSee('test_example'); + } +} diff --git a/tests/Feature/LicenseActivationTest.php b/tests/Feature/LicenseActivationTest.php new file mode 100755 index 0000000..7d81a87 --- /dev/null +++ b/tests/Feature/LicenseActivationTest.php @@ -0,0 +1,85 @@ + 'test', 'name' => 'Test', 'edition' => 'Professional', 'activation_limit' => 1, 'max_major_version' => 1, 'active' => true]); + [, $key] = app(LicenseIssuer::class)->issue($product, 'Test', 'test@example.com'); + $one = ['licenseKey' => $key, 'installationID' => '11111111-1111-4111-8111-111111111111', 'appVersion' => '1.0.0', 'platform' => 'macOS']; + $this->postJson('/api/v1/activate', $one)->assertOk()->assertJsonStructure(['licenseToken']); + $this->postJson('/api/v1/activate', $one)->assertOk(); + $this->postJson('/api/v1/activate', array_merge($one, ['installationID' => '22222222-2222-4222-8222-222222222222']))->assertStatus(409); + } + + public function test_validation_refreshes_an_active_installation_without_calling_paddle(): void + { + $product = LicenseProduct::create([ + 'code' => 'validate-active', + 'name' => 'Validate Active', + 'edition' => 'Professional', + 'activation_limit' => 1, + 'max_major_version' => 1, + 'active' => true, + ]); + [, $key] = app(LicenseIssuer::class)->issue($product, 'Test', 'test@example.com'); + $request = [ + 'licenseKey' => $key, + 'installationID' => '11111111-1111-4111-8111-111111111111', + 'appVersion' => '1.0.0', + 'platform' => 'macOS', + ]; + + $token = $this->postJson('/api/v1/activate', $request)->assertOk()->json('licenseToken'); + + $this->postJson('/api/v1/validate', [ + 'licenseToken' => $token, + 'installationID' => $request['installationID'], + 'appVersion' => '1.0.1', + 'platform' => 'macOS', + ])->assertOk()->assertJson([ + 'active' => true, + ])->assertJsonStructure(['licenseToken']); + } + + public function test_validation_rejects_an_installation_deactivated_from_the_portal(): void + { + $product = LicenseProduct::create([ + 'code' => 'validate-deactivated', + 'name' => 'Validate Deactivated', + 'edition' => 'Personal', + 'activation_limit' => 1, + 'max_major_version' => 1, + 'active' => true, + ]); + [, $key] = app(LicenseIssuer::class)->issue($product, 'Test', 'test@example.com'); + $request = [ + 'licenseKey' => $key, + 'installationID' => '22222222-2222-4222-8222-222222222222', + 'appVersion' => '1.0.0', + 'platform' => 'macOS', + ]; + + $token = $this->postJson('/api/v1/activate', $request)->assertOk()->json('licenseToken'); + LicenseActivation::query()->where('installation_id', strtolower($request['installationID']))->update(['deactivated_at' => now()]); + + $this->postJson('/api/v1/validate', [ + 'licenseToken' => $token, + 'installationID' => $request['installationID'], + 'appVersion' => '1.0.0', + 'platform' => 'macOS', + ])->assertStatus(403)->assertJson([ + 'message' => 'This Mac has been deactivated from the licence portal.', + ]); + } +} diff --git a/tests/Feature/PaddleSubscriptionProvisioningTest.php b/tests/Feature/PaddleSubscriptionProvisioningTest.php new file mode 100755 index 0000000..527216e --- /dev/null +++ b/tests/Feature/PaddleSubscriptionProvisioningTest.php @@ -0,0 +1,105 @@ + strtolower($edition).'-'.$price, + 'name' => $edition, + 'edition' => $edition, + 'activation_limit' => $activations, + 'max_major_version' => 1, + 'payment_provider' => 'paddle', + 'external_product_id' => $edition === 'Personal' ? 'pro_personal' : 'pro_professional', + 'external_price_id' => $price, + 'active' => true, + ]); + } + + private function subscription(string $type, string $status, string $price, string $product, array $extra = []): array + { + return [ + 'event_type' => $type, + 'data' => array_replace_recursive([ + 'id' => 'sub_test', + 'status' => $status, + 'customer_id' => 'ctm_test', + 'transaction_id' => 'txn_test', + 'custom_data' => ['customer_name' => 'Mark', 'customer_email' => 'mark@example.com'], + 'current_billing_period' => ['starts_at' => '2026-09-09T00:00:00Z', 'ends_at' => '2026-10-09T00:00:00Z'], + 'scheduled_change' => null, + 'items' => [[ + 'recurring' => true, + 'price' => ['id' => $price, 'product_id' => $product], + ]], + ], $extra), + ]; + } + + public function test_trialing_subscription_issues_a_usable_license(): void + { + $this->product('pri_personal_monthly', 'Personal', 1); + + app(PurchaseProvisioner::class)->provision('paddle', $this->subscription( + 'subscription.created', 'trialing', 'pri_personal_monthly', 'pro_personal' + )); + + $license = License::firstOrFail(); + $this->assertSame('Personal', $license->edition); + $this->assertSame('sub_test', $license->external_subscription_id); + $this->assertSame('trialing', $license->subscription_status); + $this->assertTrue($license->is_usable); + } + + public function test_upgrade_changes_entitlement_without_changing_license(): void + { + $this->product('pri_personal_monthly', 'Personal', 1); + $this->product('pri_professional_monthly', 'Professional', 3); + $service = app(PurchaseProvisioner::class); + + $service->provision('paddle', $this->subscription('subscription.created', 'active', 'pri_personal_monthly', 'pro_personal')); + $id = License::firstOrFail()->id; + $service->provision('paddle', $this->subscription('subscription.updated', 'active', 'pri_professional_monthly', 'pro_professional')); + + $license = License::firstOrFail(); + $this->assertSame($id, $license->id); + $this->assertSame('Professional', $license->edition); + $this->assertSame(3, $license->activation_limit); + } + + public function test_scheduled_cancellation_does_not_revoke_before_effective_date(): void + { + $this->product('pri_personal_monthly', 'Personal', 1); + app(PurchaseProvisioner::class)->provision('paddle', $this->subscription( + 'subscription.updated', 'active', 'pri_personal_monthly', 'pro_personal', + ['data' => ['scheduled_change' => ['action' => 'cancel', 'effective_at' => '2026-10-09T00:00:00Z']]] + )); + + $license = License::firstOrFail(); + $this->assertNull($license->revoked_at); + $this->assertNotNull($license->cancel_scheduled_at); + } + + public function test_canceled_subscription_revokes_license(): void + { + $this->product('pri_personal_monthly', 'Personal', 1); + $service = app(PurchaseProvisioner::class); + $service->provision('paddle', $this->subscription('subscription.created', 'active', 'pri_personal_monthly', 'pro_personal')); + $service->provision('paddle', $this->subscription('subscription.canceled', 'canceled', 'pri_personal_monthly', 'pro_personal', ['data' => ['current_billing_period' => null]])); + + $license = License::firstOrFail(); + $this->assertNotNull($license->revoked_at); + $this->assertFalse($license->is_usable); + } +} diff --git a/tests/Feature/PortalSubscriptionManagementTest.php b/tests/Feature/PortalSubscriptionManagementTest.php new file mode 100755 index 0000000..5fd08de --- /dev/null +++ b/tests/Feature/PortalSubscriptionManagementTest.php @@ -0,0 +1,66 @@ + $code, + 'name' => 'SonarDesk '.$edition.' '.(str_contains($code, 'annual') ? 'Annual' : 'Monthly'), + 'edition' => $edition, + 'activation_limit' => $limit, + 'max_major_version' => 1, + 'payment_provider' => 'paddle', + 'external_product_id' => 'pro_'.strtolower($edition), + 'external_price_id' => $price, + 'active' => true, + ]); + } + + public function test_personal_subscription_is_upgraded_in_place(): void + { + config()->set('sonardesk.paddle.personal_monthly_price_id', 'pri_personal_monthly'); + config()->set('sonardesk.paddle.professional_monthly_price_id', 'pri_professional_monthly'); + + $personal = $this->product('personal-monthly', 'Personal', 'pri_personal_monthly', 1); + $professional = $this->product('professional-monthly', 'Professional', 'pri_professional_monthly', 3); + $user = User::factory()->create(['email' => 'mark@example.com', 'email_verified_at' => now()]); + $license = License::create([ + 'license_product_id' => $personal->id, + 'license_key_hash' => str_repeat('a', 64), + 'license_key_last4' => 'TEST', + 'customer_email' => $user->email, + 'edition' => 'Personal', + 'activation_limit' => 1, + 'max_major_version' => 1, + 'payment_provider' => 'paddle', + 'external_subscription_id' => 'sub_test', + 'external_price_id' => 'pri_personal_monthly', + 'subscription_status' => 'active', + ]); + + $this->mock(PaddleClient::class, function (MockInterface $mock) { + $mock->shouldReceive('updateSubscriptionPrice')->once()->with('sub_test', 'pri_professional_monthly')->andReturn(['status' => 'active']); + }); + + $this->actingAs($user)->post(route('portal.upgrade', $license))->assertRedirect(route('portal.show', $license)); + + $license->refresh(); + $this->assertSame($professional->id, $license->license_product_id); + $this->assertSame('Professional', $license->edition); + $this->assertSame(3, $license->activation_limit); + $this->assertSame('sub_test', $license->external_subscription_id); + } +} diff --git a/vite.config.js b/vite.config.js new file mode 100755 index 0000000..1fd66d5 --- /dev/null +++ b/vite.config.js @@ -0,0 +1,24 @@ +import { defineConfig } from 'vite'; +import laravel from 'laravel-vite-plugin'; +import { bunny } from 'laravel-vite-plugin/fonts'; +import tailwindcss from '@tailwindcss/vite'; + +export default defineConfig({ + plugins: [ + laravel({ + input: ['resources/css/app.css', 'resources/js/app.js'], + refresh: true, + fonts: [ + bunny('Instrument Sans', { + weights: [400, 500, 600], + }), + ], + }), + tailwindcss(), + ], + server: { + watch: { + ignored: ['**/storage/framework/views/**'], + }, + }, +});