From 26b80df54587d01c48a96c80cf42934979e9d63e Mon Sep 17 00:00:00 2001 From: Codex Date: Sun, 25 Oct 2026 21:29:22 +0200 Subject: [PATCH] Preserva base local aceite de identidade e acessos --- .editorconfig | 18 + .env.example | 21 + .gitattributes | 11 + .gitignore | 32 + .npmrc | 2 + AGENTS.md | 18 + CLAUDE.md | 1 + README.md | 63 + .../Commands/ProvisionIdentityUser.php | 123 + app/Console/Commands/RecoverIdentityUser.php | 43 + app/Http/Controllers/Controller.php | 8 + app/Models/User.php | 34 + .../Identity/Http/IdentityController.php | 75 + .../Identity/Http/RequireCompanyContext.php | 33 + .../Identity/Http/RequireValidSession.php | 23 + app/Modules/Identity/Models/Company.php | 11 + app/Modules/Identity/Models/Tenant.php | 10 + app/Modules/Identity/Models/Unit.php | 20 + app/Modules/Identity/Services/Audit.php | 19 + .../Identity/Services/IdentityWorkflow.php | 183 + .../Identity/Services/LocalDatabaseGuard.php | 24 + app/Modules/Identity/Services/Permissions.php | 28 + .../Services/ProtectedProvisioningInput.php | 25 + app/Providers/AppServiceProvider.php | 37 + app/Shared/Context/BelongsToCompany.php | 36 + app/Shared/Context/CompanyContext.php | 57 + app/Shared/Testing/TestingDatabaseGuard.php | 31 + artisan | 18 + bootstrap/app.php | 21 + bootstrap/cache/.gitignore | 2 + bootstrap/providers.php | 7 + composer.json | 65 + composer.lock | 7795 +++++++++++++++++ config/app.php | 126 + config/auth.php | 117 + config/cache.php | 136 + config/database.php | 184 + config/filesystems.php | 80 + config/identity.php | 7 + config/logging.php | 140 + config/mail.php | 118 + config/queue.php | 129 + config/services.php | 38 + config/session.php | 233 + database/.gitignore | 1 + database/factories/UserFactory.php | 45 + .../0001_01_01_000000_create_users_table.php | 49 + .../0001_01_01_000001_create_cache_table.php | 35 + .../0001_01_01_000002_create_jobs_table.php | 59 + ...0_25_000000_create_identity_foundation.php | 47 + ...026_10_25_010000_add_identity_workflow.php | 77 + ..._25_020000_lock_membership_identifiers.php | 27 + database/seeders/DatabaseSeeder.php | 20 + docs/IDENTITY_DELIVERY.md | 105 + docs/IDENTITY_WORKFLOW.md | 70 + docs/LOCAL_ENVIRONMENT.md | 56 + docs/SERVICES_WORKFLOW_SPEC.md | 207 + docs/proofs/01-invalid-login.png | Bin 0 -> 60796 bytes docs/proofs/02-authorized-context.png | Bin 0 -> 82252 bytes docs/proofs/03-access-management.png | Bin 0 -> 79336 bytes docs/proofs/04-read-only-access.png | Bin 0 -> 65989 bytes docs/proofs/05-direct-url-refused.png | Bin 0 -> 17342 bytes docs/proofs/06-logged-out.png | Bin 0 -> 55041 bytes docs/proofs/07-current-workspace.png | Bin 0 -> 68523 bytes docs/proofs/08-duplicate-removed.png | Bin 0 -> 61805 bytes docs/proofs/09-samira-read-only.png | Bin 0 -> 56184 bytes docs/proofs/10-real-session-logout.png | Bin 0 -> 55038 bytes docs/proofs/http-results.json | 11 + package-lock.json | 940 ++ package.json | 18 + phpunit.xml | 34 + public/.htaccess | 25 + public/favicon.ico | 0 public/index.php | 20 + public/robots.txt | 2 + resources/css/app.css | 2 + resources/js/app.js | 1 + resources/js/app.jsx | 75 + resources/views/app.blade.php | 11 + resources/views/welcome.blade.php | 223 + routes/console.php | 8 + routes/web.php | 28 + scripts/browser-proof.ps1 | 43 + scripts/check-provisioning.php | 9 + scripts/http-proof.mjs | 59 + scripts/identity-status.php | 11 + scripts/prepare-browser-fixture.php | 15 + scripts/provision-user.ps1 | 44 + scripts/router.php | 9 + scripts/sgf.ps1 | 130 + scripts/verify-foundation.php | 23 + scripts/verify-protected-transport.php | 9 + storage/app/.gitignore | 4 + storage/app/private/.gitignore | 2 + storage/app/public/.gitignore | 2 + storage/framework/.gitignore | 10 + storage/framework/cache/.gitignore | 4 + storage/framework/cache/data/.gitignore | 2 + storage/framework/cache/locks/.gitignore | 2 + storage/framework/sessions/.gitignore | 2 + storage/framework/testing/.gitignore | 2 + storage/framework/views/.gitignore | 2 + storage/logs/.gitignore | 2 + tests/Feature/CompanyIsolationTest.php | 93 + tests/Feature/DatabaseSafetyTest.php | 50 + tests/Feature/ExampleTest.php | 19 + tests/Feature/IdentityWorkflowTest.php | 182 + tests/Support/IdentityFixture.php | 46 + tests/TestCase.php | 14 + tests/Unit/ExampleTest.php | 16 + tests/Unit/ProtectedProvisioningInputTest.php | 47 + vite.config.js | 8 + 112 files changed, 13259 insertions(+) create mode 100644 .editorconfig create mode 100644 .env.example create mode 100644 .gitattributes create mode 100644 .gitignore create mode 100644 .npmrc create mode 100644 AGENTS.md create mode 100644 CLAUDE.md create mode 100644 README.md create mode 100644 app/Console/Commands/ProvisionIdentityUser.php create mode 100644 app/Console/Commands/RecoverIdentityUser.php create mode 100644 app/Http/Controllers/Controller.php create mode 100644 app/Models/User.php create mode 100644 app/Modules/Identity/Http/IdentityController.php create mode 100644 app/Modules/Identity/Http/RequireCompanyContext.php create mode 100644 app/Modules/Identity/Http/RequireValidSession.php create mode 100644 app/Modules/Identity/Models/Company.php create mode 100644 app/Modules/Identity/Models/Tenant.php create mode 100644 app/Modules/Identity/Models/Unit.php create mode 100644 app/Modules/Identity/Services/Audit.php create mode 100644 app/Modules/Identity/Services/IdentityWorkflow.php create mode 100644 app/Modules/Identity/Services/LocalDatabaseGuard.php create mode 100644 app/Modules/Identity/Services/Permissions.php create mode 100644 app/Modules/Identity/Services/ProtectedProvisioningInput.php create mode 100644 app/Providers/AppServiceProvider.php create mode 100644 app/Shared/Context/BelongsToCompany.php create mode 100644 app/Shared/Context/CompanyContext.php create mode 100644 app/Shared/Testing/TestingDatabaseGuard.php create mode 100644 artisan create mode 100644 bootstrap/app.php create mode 100644 bootstrap/cache/.gitignore create mode 100644 bootstrap/providers.php create mode 100644 composer.json create mode 100644 composer.lock create mode 100644 config/app.php create mode 100644 config/auth.php create mode 100644 config/cache.php create mode 100644 config/database.php create mode 100644 config/filesystems.php create mode 100644 config/identity.php create mode 100644 config/logging.php create mode 100644 config/mail.php create mode 100644 config/queue.php create mode 100644 config/services.php create mode 100644 config/session.php create mode 100644 database/.gitignore create mode 100644 database/factories/UserFactory.php create mode 100644 database/migrations/0001_01_01_000000_create_users_table.php create mode 100644 database/migrations/0001_01_01_000001_create_cache_table.php create mode 100644 database/migrations/0001_01_01_000002_create_jobs_table.php create mode 100644 database/migrations/2026_10_25_000000_create_identity_foundation.php create mode 100644 database/migrations/2026_10_25_010000_add_identity_workflow.php create mode 100644 database/migrations/2026_10_25_020000_lock_membership_identifiers.php create mode 100644 database/seeders/DatabaseSeeder.php create mode 100644 docs/IDENTITY_DELIVERY.md create mode 100644 docs/IDENTITY_WORKFLOW.md create mode 100644 docs/LOCAL_ENVIRONMENT.md create mode 100644 docs/SERVICES_WORKFLOW_SPEC.md create mode 100644 docs/proofs/01-invalid-login.png create mode 100644 docs/proofs/02-authorized-context.png create mode 100644 docs/proofs/03-access-management.png create mode 100644 docs/proofs/04-read-only-access.png create mode 100644 docs/proofs/05-direct-url-refused.png create mode 100644 docs/proofs/06-logged-out.png create mode 100644 docs/proofs/07-current-workspace.png create mode 100644 docs/proofs/08-duplicate-removed.png create mode 100644 docs/proofs/09-samira-read-only.png create mode 100644 docs/proofs/10-real-session-logout.png create mode 100644 docs/proofs/http-results.json create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 phpunit.xml create mode 100644 public/.htaccess create mode 100644 public/favicon.ico create mode 100644 public/index.php create mode 100644 public/robots.txt create mode 100644 resources/css/app.css create mode 100644 resources/js/app.js create mode 100644 resources/js/app.jsx create mode 100644 resources/views/app.blade.php create mode 100644 resources/views/welcome.blade.php create mode 100644 routes/console.php create mode 100644 routes/web.php create mode 100644 scripts/browser-proof.ps1 create mode 100644 scripts/check-provisioning.php create mode 100644 scripts/http-proof.mjs create mode 100644 scripts/identity-status.php create mode 100644 scripts/prepare-browser-fixture.php create mode 100644 scripts/provision-user.ps1 create mode 100644 scripts/router.php create mode 100644 scripts/sgf.ps1 create mode 100644 scripts/verify-foundation.php create mode 100644 scripts/verify-protected-transport.php create mode 100644 storage/app/.gitignore create mode 100644 storage/app/private/.gitignore create mode 100644 storage/app/public/.gitignore create mode 100644 storage/framework/.gitignore create mode 100644 storage/framework/cache/.gitignore create mode 100644 storage/framework/cache/data/.gitignore create mode 100644 storage/framework/cache/locks/.gitignore create mode 100644 storage/framework/sessions/.gitignore create mode 100644 storage/framework/testing/.gitignore create mode 100644 storage/framework/views/.gitignore create mode 100644 storage/logs/.gitignore create mode 100644 tests/Feature/CompanyIsolationTest.php create mode 100644 tests/Feature/DatabaseSafetyTest.php create mode 100644 tests/Feature/ExampleTest.php create mode 100644 tests/Feature/IdentityWorkflowTest.php create mode 100644 tests/Support/IdentityFixture.php create mode 100644 tests/TestCase.php create mode 100644 tests/Unit/ExampleTest.php create mode 100644 tests/Unit/ProtectedProvisioningInputTest.php create mode 100644 vite.config.js diff --git a/.editorconfig b/.editorconfig new file mode 100644 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 100644 index 0000000..d8395d2 --- /dev/null +++ b/.env.example @@ -0,0 +1,21 @@ +APP_NAME="SGF Tempo" +APP_DEBUG=false +APP_URL=http://127.0.0.1:8000 +APP_LOCALE=pt +APP_FALLBACK_LOCALE=pt +LOG_CHANNEL=single +LOG_LEVEL=warning +DB_CONNECTION=pgsql +DB_HOST=127.0.0.1 +DB_PORT=55432 +DB_URL= +SESSION_DRIVER=file +CACHE_STORE=file +QUEUE_CONNECTION=sync +MAIL_MAILER=log +BROADCAST_CONNECTION=log +APP_KEY= +APP_ENV=local +DB_DATABASE=sgf_tempo_dev +DB_USERNAME=sgf_dev_app +DB_PASSWORD= diff --git a/.gitattributes b/.gitattributes new file mode 100644 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 100644 index 0000000..df6d058 --- /dev/null +++ b/.gitignore @@ -0,0 +1,32 @@ +*.log +.DS_Store +.env +.env.backup +.env.production +.env.testing +.env.browser-testing +.env.*.local +/storage/app/private/* +/storage/framework/browser-proof/ +.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 100644 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 100644 index 0000000..4914ae9 --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,18 @@ +# SGF Tempo — instruções locais + +- Projecto exclusivo em `C:\laragon\www\sgf-tempo`; não alterar InvesteMoz, os seus dados, configurações, ferramentas ou serviços. +- Base de requisitos: SGF_TEMPO_Roteiro_v0_9.docx. Distinguir decisões acordadas de propostas técnicas e autorização de execução. +- Usar `scripts/sgf.ps1` para ferramentas e arranque. Não usar o PHP/Composer do PATH por omissão nem alterar o PATH global. +- Versões directas fixadas nos manifests; dependências completas nos lockfiles. Qualquer substituição de versão exige apresentação prévia ao utilizador; não instalar ferramentas adicionais automaticamente. +- Monólito modular em `app/Modules`, contexto comum em `app/Shared/Context`. Separar tenant, empresa fiscal e unidade desde o primeiro modelo empresarial. +- Testes apenas na base `sgf_tempo_test`, cluster próprio 127.0.0.1:55432. Manter TestingDatabaseGuard e usar dados sintéticos. +- Aplicação usa sgf_dev_app; migrações de desenvolvimento usam wrapper e proprietário separado. Nunca usar o administrador PostgreSQL na aplicação. +- Nunca apresentar segredos, ler configurações privadas do portal ou versionar .env/.env.testing. .env.example deve permanecer sem segredos. +- Verificar portas antes de iniciar; não parar processos de outros projectos. Não publicar nem implementar módulos financeiros sem nova autorização de âmbito. +- PostGIS e Python adiados até haver função concreta. Não instalar Laravel Boost, IA, serviços externos ou módulos adicionais como preparação automática. +- Validar mudanças da fundação com `sgf.ps1 test`; mudanças React com `sgf.ps1 npm run build`. Documentar limites e comandos de arranque no README. +- Primeiro percurso: login/logout por sessão, contexto de empresa/unidade, nomes e concessões explícitas. Não criar tenants/empresas pela interface nem conceder todas as unidades implicitamente. +- Não criar contas reais ou primeiros acessos sem pré-visualização concreta e confirmação do utilizador. Palavras-passe apenas em entrada oculta no terminal local, nunca no chat, argumentos, logs ou documentação. +- As alterações usam o token do contexto revisto, validação de permissões no servidor e auditoria na mesma transacção. Não remover os triggers de imutabilidade ou de auditoria append-only. +- Provas de navegador usam browser-testing na porta 8001 e apenas sgf_tempo_test, com sessões/cache isolados e CSRF activo. Parar a prova antes de executar testes que recriam a base de testes. +- Em 25 de Outubro de 2026, o utilizador aceitou e deu por concluído o incremento local de entrada, contexto e permissões no âmbito demonstrado e com os limites de docs/IDENTITY_DELIVERY.md. Preservar essa entrega como base. Serviços permanece apenas em especificação; não há autorização para implementação financeira ou publicação. diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 0000000..cef5452 --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1 @@ +Consultar AGENTS.md para as instruções locais deste projecto. diff --git a/README.md b/README.md new file mode 100644 index 0000000..819c1fc --- /dev/null +++ b/README.md @@ -0,0 +1,63 @@ +# SGF TEMPO + +Primeiro percurso funcional local, sobre a fundação existente e o roteiro v0.9 de 25 de Outubro de 2026. Laravel modular com React, independente do InvesteMoz. Versões e lockfiles preservados; sem módulos financeiros, integrações externas ou publicação. + +**Estado:** incremento local de entrada, contexto e permissões aceite e concluído pelo utilizador em 25 de Outubro de 2026, com os limites de [IDENTITY_DELIVERY.md](docs/IDENTITY_DELIVERY.md). Preservar esta base. Serviços mantém-se apenas em especificação; implementação financeira e publicação não estão autorizadas. + +## Abrir e parar + +Em `C:\laragon\www\sgf-tempo`: + +```powershell +powershell.exe -NoProfile -ExecutionPolicy Bypass -File .\scripts\sgf.ps1 start +``` + +Abrir http://127.0.0.1:8000. Se a porta estiver ocupada, o arranque recusa sem terminar processos. `status` mostra o estado; `stop` pára apenas os processos próprios registados e o cluster exclusivo. Não existe serviço Windows novo nem alteração global da política de execução. + +```powershell +powershell.exe -NoProfile -ExecutionPolicy Bypass -File .\scripts\sgf.ps1 status +powershell.exe -NoProfile -ExecutionPolicy Bypass -File .\scripts\sgf.ps1 stop +``` + +## Primeira conta + +**Estado actual:** a conta inicial de Osmane Nala já foi criada e verificada na Tempo Lda. Não repetir o comando de criação abaixo; conserva-se como registo do procedimento. Entrar com o email indicado e a palavra-passe definida localmente. + + +Sem utilizadores, o ecrã mostra «Falta concluir a primeira conta» e o procedimento local. A existência da aplicação não significa que haja uma conta criada. Não há palavras-passe por omissão nem administrador universal. + +A operação inicial de Osmane Nala / Tempo Lda foi pré-visualizada e confirmada na sessão. Para a concluir, o utilizador deve executar no seu terminal local: + +```powershell +powershell.exe -NoProfile -ExecutionPolicy Bypass -File C:\laragon\data\sgf-tempo\run\complete-first-admin.ps1 +``` + +O procedimento apresenta o âmbito já confirmado nesta sessão e solicita uma nova palavra-passe duas vezes com Read-Host -AsSecureString do PowerShell, mostrando apenas asteriscos. Não é necessário responder yes novamente. Não introduzir palavras-passe no chat, em argumentos ou no motivo. Só depois da confirmação e das duas entradas válidas são criados, atomicamente, o tenant, empresa, utilizador e concessões. Se for interrompido ou falhar, a criação não fica parcialmente aplicada. Não repetir depois de a conta existir. + +Concluído o procedimento, actualizar o estado no navegador e entrar com a credencial definida localmente. A conta inicial tem apenas consulta/edição do nome da empresa, criação de unidades e gestão delimitada de acessos na empresa aprovada. Não se criam unidades iniciais: o utilizador pode criá-las com a permissão específica. Ao criá-las, recebe concessões explícitas de consulta e edição apenas para cada nova unidade, conforme decisão aprovada. + +## Percurso disponível + +1. Entrar por email/palavra-passe; tentativas repetidas são limitadas. +2. Seleccionar uma empresa autorizada e uma unidade com consulta explicitamente concedida. +3. Consultar a área inicial com empresa e unidade visíveis. +4. Consultar/editar nomes segundo as concessões; criar unidades apenas com `unit.create`. +5. Gerir acessos de utilizadores existentes apenas na empresa activa e sem delegar direitos superiores aos próprios. +6. Sair: a sessão anterior é invalidada. + +Não existe criação de tenants ou empresas pela interface, auto-registo, opção «todas as unidades», recuperação por email ou fornecedor externo. Consultar [utilização e recuperação](docs/IDENTITY_WORKFLOW.md) para os procedimentos locais de utilizadores e recuperação. + +## Testes e ferramentas + +```powershell +powershell.exe -NoProfile -ExecutionPolicy Bypass -File .\scripts\sgf.ps1 test +powershell.exe -NoProfile -ExecutionPolicy Bypass -File .\scripts\sgf.ps1 npm run build +powershell.exe -NoProfile -ExecutionPolicy Bypass -File .\scripts\sgf.ps1 php scripts/verify-foundation.php +powershell.exe -NoProfile -ExecutionPolicy Bypass -File .\scripts\sgf.ps1 php scripts/identity-status.php +``` + +Os testes destrutivos usam exclusivamente `sgf_tempo_test`, verificada antes da execução. Não usar fresh, reset ou wipe em desenvolvimento. Migrações futuras aprovadas: `sgf.ps1 migrate`, com proprietário de migrações separado; a aplicação continua a usar `sgf_dev_app` sem administração ou criação de tabelas. + +Para Vite, `sgf.ps1 frontend` (porta 5173, estrita). A aplicação continua a ser aberta na porta 8000. As ferramentas usam caminhos explícitos em `C:\laragon\tools\sgf-tempo`; o cluster fica em `C:\laragon\data\sgf-tempo\postgres-17`, porta 55432. Não alterar as versões ou o ambiente do InvesteMoz. + +[Relatório do incremento e provas](docs/IDENTITY_DELIVERY.md) · [Registo histórico da preparação inicial](docs/LOCAL_ENVIRONMENT.md) diff --git a/app/Console/Commands/ProvisionIdentityUser.php b/app/Console/Commands/ProvisionIdentityUser.php new file mode 100644 index 0000000..cc82a57 --- /dev/null +++ b/app/Console/Commands/ProvisionIdentityUser.php @@ -0,0 +1,123 @@ +safeLocalDatabase()) { return self::FAILURE; } + $email = mb_strtolower(trim((string) $this->option('email'))); + $name = trim((string) $this->option('name')); + if (! filter_var($email, FILTER_VALIDATE_EMAIL) || $name === '' || mb_strlen($name) > 255 || mb_strlen($email) > 255 || ! $this->option('operator') || ! $this->option('reason')) { + $this->error('Indique email, nome, operador local e motivo. Não forneça palavras-passe por argumentos.'); return self::FAILURE; + } + $existing = User::where('email', $email)->first(); + if ($existing && ! $this->option('existing-user')) { $this->error('O utilizador já existe. Use recuperação local ou gestão de acessos.'); return self::FAILURE; } + if ($this->option('existing-user') && (! $existing || $existing->name !== $name || ! $this->option('company'))) { + $this->error('A recuperação de concessões exige utilizador/nome existentes e --company explícito.'); return self::FAILURE; + } + $company = $this->option('company') ? DB::table('companies')->where('id', $this->option('company'))->first() : null; + if ($this->option('company') && ! $company) { $this->error('Empresa inexistente; não será criada automaticamente.'); return self::FAILURE; } + $newScope = $this->option('tenant-name') || $this->option('company-name'); + if ($newScope) { + if ($existing) { $this->error('A recuperação não cria um novo âmbito.'); return self::FAILURE; } + $tenantName = trim((string) $this->option('tenant-name')); + $companyName = trim((string) $this->option('company-name')); + if ($company || $tenantName === '' || $companyName === '' || mb_strlen($tenantName) > 255 || mb_strlen($companyName) > 255 + || DB::table('tenants')->where('name', $tenantName)->exists()) { + $this->error('Para novo âmbito, indique nomes explícitos, distintos de um tenant existente, sem --company. Nada será reutilizado por inferência.'); return self::FAILURE; + } + $company = (object) ['id' => 0, 'tenant_id' => 0, 'name' => $companyName]; + } + $grants = []; + foreach ($this->option('company-permission') as $permission) { + if (! $company || ! in_array($permission, Permissions::COMPANY, true)) { $this->error('Concessão de empresa inválida.'); return self::FAILURE; } + $grants[] = ['permission' => $permission, 'unit_id' => null]; + } + foreach ($this->option('unit-permission') as $raw) { + [$unit, $permission] = array_pad(explode(':', $raw, 2), 2, null); + if (! $company || ! ctype_digit((string) $unit) || ! in_array($permission, Permissions::UNIT, true) + || ! DB::table('units')->where('id', $unit)->where('company_id', $company->id)->where('tenant_id', $company->tenant_id)->exists()) { + $this->error('Concessão de unidade inválida.'); return self::FAILURE; + } + $grants[] = ['permission' => $permission, 'unit_id' => (int) $unit]; + } + if ($grants && ! in_array('company.view', array_column($grants, 'permission'), true)) { $this->error('Os primeiros acessos exigem company.view explícito.'); return self::FAILURE; } + if ($newScope && ! $grants) { $this->error('O novo âmbito exige concessões iniciais explícitas.'); return self::FAILURE; } + foreach ($grants as $grant) { + if ($grant['permission'] === 'unit.edit' && ! in_array(['permission' => 'unit.view', 'unit_id' => $grant['unit_id']], $grants)) { + $this->error('unit.edit exige unit.view explícito para a mesma unidade.'); return self::FAILURE; + } + } + if ($grants && DB::table('permission_grants')->where('company_id', $company->id)->where('permission', 'access.manage')->exists()) { + $this->error('Esta empresa já tem gestor. Crie apenas o utilizador sem concessões e use a gestão de acessos.'); return self::FAILURE; + } + $this->table(['Operação', 'Valor'], [['Base', 'sgf_tempo_dev'], ['Utilizador', "$name <$email>"], + ['Tenant', $newScope ? 'CRIAR: '.$tenantName : ($company?->tenant_id ?? 'sem acesso')], ['Empresa', $newScope ? 'CRIAR: '.$companyName : ($company ? "$company->id — $company->name" : 'sem acesso')], + ['Operador', $this->option('operator')], ['Motivo', $this->option('reason')]]); + $this->table(['Permissão', 'Unidade'], array_map(fn ($g) => [$g['permission'], $g['unit_id'] ?? 'âmbito da empresa'], $grants)); + if (! $this->option('apply')) { $this->info('Pré-visualização apenas. Obtenha confirmação desta operação antes de repetir com --apply.'); return self::SUCCESS; } + if ($existing && ! $grants) { $this->error('Indique as concessões a recuperar.'); return self::FAILURE; } + $protected = null; + if ($this->option('protected-stdin')) { + if ($existing) { $this->error('Esta entrada protegida destina-se apenas à criação de uma nova conta.'); return self::FAILURE; } + try { $protected = \App\Modules\Identity\Services\ProtectedProvisioningInput::read(STDIN, $email); } + catch (\RuntimeException $exception) { $this->error($exception->getMessage()); return self::FAILURE; } + } elseif (! $this->input->isInteractive() || ! $this->confirm($existing ? 'Confirma recuperar apenas as concessões acima, mantendo a palavra-passe?' : 'Confirma a criação exacta acima, sem outros acessos?', false)) { return self::FAILURE; } + $password = null; + if (! $existing) { + $password = $protected ? $protected[0] : $this->secret('Nova palavra-passe (mínimo 12 caracteres; não será apresentada)', false); + $repeat = $protected ? $protected[1] : $this->secret('Repita a palavra-passe', false); + if (! is_string($password) || $password === '') { $this->error('A entrada oculta não recebeu uma palavra-passe. Nada alterado.'); return self::FAILURE; } + if (mb_strlen($password) < 12) { $this->error('A palavra-passe precisa de pelo menos 12 caracteres. Nada alterado.'); return self::FAILURE; } + if (strlen($password) > 72) { $this->error('A palavra-passe excede o limite de 72 bytes do algoritmo actual. Nada alterado.'); return self::FAILURE; } + if ($password !== $repeat) { $this->error('As duas entradas ocultas não coincidem. Nada alterado.'); return self::FAILURE; } + } + try { + DB::transaction(function () use ($email, $name, $password, $company, $grants, $newScope, $existing): void { + if ($newScope) { + // Serialize local bootstrap commands; never silently reuse or duplicate the named scope. + DB::statement('SELECT pg_advisory_xact_lock(72644101)'); + if (DB::table('tenants')->where('name', trim($this->option('tenant-name')))->exists()) { throw new \RuntimeException('Scope changed'); } + $tenantId = DB::table('tenants')->insertGetId(['name' => trim($this->option('tenant-name')), 'created_at' => now(), 'updated_at' => now()]); + $companyId = DB::table('companies')->insertGetId(['tenant_id' => $tenantId, 'name' => trim($this->option('company-name')), 'created_at' => now(), 'updated_at' => now()]); + $company = (object) ['id' => $companyId, 'tenant_id' => $tenantId]; + Audit::record('local.scope_created', null, $tenantId, $companyId, + details: ['operator' => $this->option('operator'), 'reason' => $this->option('reason')]); + } + if ($company && $grants) { + DB::table('companies')->where('id', $company->id)->lockForUpdate()->first(); + if (DB::table('permission_grants')->where('company_id', $company->id)->where('permission', 'access.manage')->exists()) { throw new \RuntimeException('Scope changed'); } + } + $user = $existing ?? User::create(['name' => $name, 'email' => $email, 'password' => $password]); + if ($company && $grants) { + DB::table('company_memberships')->insertOrIgnore(['user_id' => $user->id, 'tenant_id' => $company->tenant_id, 'company_id' => $company->id]); + foreach ($grants as $grant) { + DB::table('permission_grants')->insertOrIgnore($grant + ['user_id' => $user->id, 'tenant_id' => $company->tenant_id, 'company_id' => $company->id, 'created_at' => now(), 'updated_at' => now()]); + } + } + Audit::record($existing ? 'local.access_restored' : 'local.user_provisioned', null, $company?->tenant_id, $company?->id, subject: $user->id, + details: ['operator' => $this->option('operator'), 'reason' => $this->option('reason'), 'grants' => $grants]); + }); + } catch (\Throwable) { $this->error('Operação não concluída. Nenhum detalhe sensível foi registado. Verifique o estado e repita a pré-visualização.'); return self::FAILURE; } + $this->info($existing ? 'Concessões recuperadas no âmbito apresentado; credencial preservada.' : 'Utilizador criado com os acessos apresentados. Nenhuma palavra-passe foi registada.'); return self::SUCCESS; + } + + private function safeLocalDatabase(): bool + { + if (! \App\Modules\Identity\Services\LocalDatabaseGuard::allows()) { + $this->error('Procedimento permitido apenas no desenvolvimento local próprio, com sgf_dev_app.'); return false; + } + return true; + } +} diff --git a/app/Console/Commands/RecoverIdentityUser.php b/app/Console/Commands/RecoverIdentityUser.php new file mode 100644 index 0000000..c289075 --- /dev/null +++ b/app/Console/Commands/RecoverIdentityUser.php @@ -0,0 +1,43 @@ +error('Destino local inválido.'); return self::FAILURE; } + $user = User::where('email', mb_strtolower(trim((string) $this->option('email'))))->first(); + if (! $user || ! $this->option('operator') || ! $this->option('reason')) { $this->error('Indique utilizador existente, operador e motivo.'); return self::FAILURE; } + $this->table(['Operação', 'Valor'], [['Base', 'sgf_tempo_dev'], ['Utilizador', "$user->id — $user->name <$user->email>"], + ['Efeito', 'Alterar palavra-passe e invalidar todas as sessões; manter concessões existentes'], ['Operador', $this->option('operator')], ['Motivo', $this->option('reason')]]); + if (! $this->option('apply')) { $this->info('Pré-visualização apenas. Confirme a identidade e autorização da pessoa antes de --apply.'); return self::SUCCESS; } + if (! $this->input->isInteractive() || ! $this->confirm('Confirma a recuperação exacta apresentada?', false)) { return self::FAILURE; } + $password = $this->secret('Nova palavra-passe (mínimo 12 caracteres)', false); + $repeat = $this->secret('Repita a palavra-passe', false); + if (! is_string($password) || $password === '') { $this->error('A entrada oculta não recebeu uma palavra-passe. Nada alterado.'); return self::FAILURE; } + if (mb_strlen($password) < 12) { $this->error('A palavra-passe precisa de pelo menos 12 caracteres. Nada alterado.'); return self::FAILURE; } + if (strlen($password) > 72) { $this->error('A palavra-passe excede o limite de 72 bytes do algoritmo actual. Nada alterado.'); return self::FAILURE; } + if ($password !== $repeat) { $this->error('As duas entradas ocultas não coincidem. Nada alterado.'); return self::FAILURE; } + try { + DB::transaction(function () use ($user, $password): void { + $current = User::whereKey($user->id)->lockForUpdate()->firstOrFail(); + $current->password = $password; + $current->auth_version++; + $current->remember_token = bin2hex(random_bytes(30)); + $current->save(); + Audit::record('local.password_recovered', null, subject: $current->id, + details: ['operator' => $this->option('operator'), 'reason' => $this->option('reason')]); + }); + } catch (\Throwable) { $this->error('Recuperação não concluída; nenhum detalhe sensível foi apresentado.'); return self::FAILURE; } + $this->info('Recuperação concluída. As sessões anteriores serão recusadas no pedido seguinte.'); return self::SUCCESS; + } +} diff --git a/app/Http/Controllers/Controller.php b/app/Http/Controllers/Controller.php new file mode 100644 index 0000000..8677cd5 --- /dev/null +++ b/app/Http/Controllers/Controller.php @@ -0,0 +1,8 @@ + 1]; + /** @use HasFactory */ + use HasFactory, Notifiable; + + /** + * Get the attributes that should be cast. + * + * @return array + */ + protected function casts(): array + { + return [ + 'auth_version' => 'integer', + 'email_verified_at' => 'datetime', + 'password' => 'hashed', + ]; + } +} diff --git a/app/Modules/Identity/Http/IdentityController.php b/app/Modules/Identity/Http/IdentityController.php new file mode 100644 index 0000000..4c836be --- /dev/null +++ b/app/Modules/Identity/Http/IdentityController.php @@ -0,0 +1,75 @@ +user() && (int) $request->session()->get('auth_version', 0) !== (int) $request->user()->auth_version) { + Auth::logout(); $request->session()->invalidate(); $request->session()->regenerateToken(); + } + return response()->json($this->workflow->snapshot($request))->header('Cache-Control', 'no-store'); + } + + public function login(Request $request) + { + $data = $request->validate(['email' => 'required|email|max:255', 'password' => 'required|string|max:1024']); + $email = mb_strtolower(trim($data['email'])); + if (strlen($data['password']) > 72) { throw ValidationException::withMessages(['email' => 'Email ou palavra-passe inválidos.']); } + $key = 'sgf-login:'.hash('sha256', $email.'|'.$request->ip()); + $ipKey = 'sgf-login-ip:'.hash('sha256', (string) $request->ip()); + abort_if(RateLimiter::tooManyAttempts($key, config('identity.login_attempts')) || RateLimiter::tooManyAttempts($ipKey, config('identity.login_ip_attempts')), 429, 'Demasiadas tentativas. Aguarde antes de tentar novamente.'); + if (! Auth::attempt(['email' => $email, 'password' => $data['password']], false)) { + RateLimiter::hit($key, config('identity.login_decay_seconds')); + RateLimiter::hit($ipKey, config('identity.login_decay_seconds')); + Audit::record('auth.failed', null); + throw ValidationException::withMessages(['email' => 'Email ou palavra-passe inválidos.']); + } + RateLimiter::clear($key); + $request->session()->regenerate(); + $request->session()->forget('company_context'); + $request->session()->put('auth_version', (int) $request->user()->auth_version); + Audit::record('auth.login', $request->user()->id); + return $this->session($request); + } + + public function logout(Request $request) + { + Audit::record('auth.logout', $request->user()->id); + Auth::logout(); $request->session()->invalidate(); $request->session()->regenerateToken(); + return response()->json(['csrf' => csrf_token()])->header('Cache-Control', 'no-store'); + } + + public function select(Request $request) { return response()->json($this->workflow->select($request)); } + public function company(Request $request, int $company) + { + $ids = app(\App\Shared\Context\CompanyContext::class)->identifiers(); + abort_unless($company === $ids['company_id'], 403); + return response()->json(\Illuminate\Support\Facades\DB::table('companies')->where('id', $company)->where('tenant_id', $ids['tenant_id'])->first(['id', 'name'])); + } + public function unit(Request $request, int $unit) + { + $ids = app(\App\Shared\Context\CompanyContext::class)->identifiers(); + app(\App\Modules\Identity\Services\Permissions::class)->require($request->user()->id, $ids['tenant_id'], $ids['company_id'], 'unit.view', $unit); + $record = \Illuminate\Support\Facades\DB::table('units')->where('id', $unit)->where('company_id', $ids['company_id'])->where('tenant_id', $ids['tenant_id'])->first(['id', 'name']); + abort_unless($record, 403); + return response()->json($record); + } + public function renameCompany(Request $request, int $company) { $this->workflow->renameCompany($request, $company); return response()->json(['ok' => true]); } + public function renameUnit(Request $request, int $unit) { $this->workflow->renameUnit($request, $unit); return response()->json(['ok' => true]); } + public function createUnit(Request $request) { return response()->json(['id' => $this->workflow->createUnit($request)], 201); } + public function accesses(Request $request) { return response()->json($this->workflow->accessList($request)); } + public function grant(Request $request) { $this->workflow->changeAccess($request, true); return response()->json(['ok' => true]); } + public function revoke(Request $request) { $this->workflow->changeAccess($request, false); return response()->json(['ok' => true]); } +} diff --git a/app/Modules/Identity/Http/RequireCompanyContext.php b/app/Modules/Identity/Http/RequireCompanyContext.php new file mode 100644 index 0000000..799812c --- /dev/null +++ b/app/Modules/Identity/Http/RequireCompanyContext.php @@ -0,0 +1,33 @@ +context->clear(); + try { + $selection = $request->session()->get('company_context', []); + $tenant = $selection['tenant_id'] ?? null; + $company = $selection['company_id'] ?? null; + abort_unless($request->user() && $tenant && $company, 403, 'Contexto de empresa obrigatório.'); + $this->context->selectFor((int) $request->user()->getKey(), $tenant, $company, $selection['unit_id'] ?? null); + if (! $request->isMethodSafe()) { + $token = $request->header('X-SGF-Context'); + abort_unless(is_string($token) && hash_equals($selection['token'] ?? '', $token), 409, 'O contexto mudou. Reabra o formulário antes de guardar.'); + } + + return $next($request); + } finally { + $this->context->clear(); + } + } +} diff --git a/app/Modules/Identity/Http/RequireValidSession.php b/app/Modules/Identity/Http/RequireValidSession.php new file mode 100644 index 0000000..72a99ce --- /dev/null +++ b/app/Modules/Identity/Http/RequireValidSession.php @@ -0,0 +1,23 @@ +user(), 401); + if ((int) $request->session()->get('auth_version', 0) !== (int) $request->user()->auth_version) { + auth()->logout(); + $request->session()->invalidate(); + $request->session()->regenerateToken(); + abort(401, 'Sessão terminada. Entre novamente.'); + } + $response = $next($request); + $response->headers->set('Cache-Control', 'no-store'); + return $response; + } +} diff --git a/app/Modules/Identity/Models/Company.php b/app/Modules/Identity/Models/Company.php new file mode 100644 index 0000000..767eff3 --- /dev/null +++ b/app/Modules/Identity/Models/Company.php @@ -0,0 +1,11 @@ +whereIn('units.id', app(\App\Shared\Context\CompanyContext::class)->permittedUnitIds()); + }); + } +} diff --git a/app/Modules/Identity/Services/Audit.php b/app/Modules/Identity/Services/Audit.php new file mode 100644 index 0000000..c3cb728 --- /dev/null +++ b/app/Modules/Identity/Services/Audit.php @@ -0,0 +1,19 @@ +insert([ + 'action' => $action, 'actor_id' => $actor, 'tenant_id' => $tenant, + 'company_id' => $company, 'unit_id' => $unit, 'subject_id' => $subject, + 'details' => json_encode($safe, JSON_THROW_ON_ERROR), 'created_at' => now(), + ]); + } +} diff --git a/app/Modules/Identity/Services/IdentityWorkflow.php b/app/Modules/Identity/Services/IdentityWorkflow.php new file mode 100644 index 0000000..c81eed0 --- /dev/null +++ b/app/Modules/Identity/Services/IdentityWorkflow.php @@ -0,0 +1,183 @@ +join('permission_grants as g', 'g.company_id', '=', 'c.id') + ->where('g.user_id', $user)->where('g.permission', 'company.view')->whereNull('g.unit_id') + ->select('c.id', 'c.tenant_id', 'c.name')->orderBy('c.name')->get()->all(); + } + + public function units(int $user, int $tenant, int $company): array + { + return DB::table('units')->where('tenant_id', $tenant)->where('company_id', $company) + ->whereIn('id', $this->permissions->unitIds($user, $tenant, $company)) + ->select('id', 'name')->orderBy('name')->get()->all(); + } + + public function snapshot(Request $request): array + { + $user = $request->user(); + $result = ['user' => $user ? ['id' => $user->id, 'name' => $user->name, 'email' => $user->email] : null, + 'csrf' => csrf_token(), 'companies' => [], 'context' => null, + 'setup_pending' => app()->environment('local') && ! DB::table('users')->exists()]; + if (! $user) { return $result; } + $result['companies'] = $this->companies($user->id); + $selected = $request->session()->get('company_context'); + if (! $selected) { return $result; } + try { + $this->context->selectFor($user->id, $selected['tenant_id'], $selected['company_id'], $selected['unit_id']); + $company = DB::table('companies')->where('id', $selected['company_id'])->first(['id', 'name', 'tenant_id']); + $unit = $selected['unit_id'] ? DB::table('units')->where('id', $selected['unit_id'])->first(['id', 'name']) : null; + $grants = DB::table('permission_grants')->where('user_id', $user->id)->where('company_id', $company->id) + ->get(['permission', 'unit_id'])->map(fn ($grant) => ['permission' => $grant->permission, 'unit_id' => $grant->unit_id ? (int) $grant->unit_id : null])->all(); + $result['context'] = ['company' => $company, 'unit' => $unit, 'units' => $this->units($user->id, $company->tenant_id, $company->id), + 'token' => $selected['token'], 'grants' => $grants]; + } catch (\Symfony\Component\HttpKernel\Exception\HttpException $exception) { + if ($exception->getStatusCode() !== 403) { throw $exception; } + $request->session()->forget('company_context'); + $result['notice'] = 'O acesso ao contexto anterior mudou. Seleccione um contexto autorizado.'; + } finally { $this->context->clear(); } + return $result; + } + + public function select(Request $request): array + { + $data = $request->validate(['tenant_id' => 'required|integer|min:1', 'company_id' => 'required|integer|min:1', 'unit_id' => 'nullable|integer|min:1']); + $unit = isset($data['unit_id']) ? (int) $data['unit_id'] : null; + // Selection is explicit, never silently carries the old unit into another company. + $this->context->selectFor($request->user()->id, (int) $data['tenant_id'], (int) $data['company_id'], $unit); + $request->session()->put('company_context', ['tenant_id' => (int) $data['tenant_id'], 'company_id' => (int) $data['company_id'], + 'unit_id' => $unit, 'token' => bin2hex(random_bytes(24))]); + Audit::record('context.selected', $request->user()->id, (int) $data['tenant_id'], (int) $data['company_id'], $unit); + return $this->snapshot($request); + } + + public function renameCompany(Request $request, int $company): void + { + $data = $request->validate(['name' => 'required|string|max:255', 'tenant_id' => 'prohibited', 'company_id' => 'prohibited', 'unit_id' => 'prohibited', 'id' => 'prohibited']); + $this->mutate($request, function ($ids, $user) use ($company, $data): void { + abort_unless($company === $ids['company_id'], 403); + $this->permissions->require($user, $ids['tenant_id'], $company, 'company.edit'); + $before = DB::table('companies')->where('id', $company)->value('name'); + DB::table('companies')->where('id', $company)->update(['name' => trim($data['name']), 'updated_at' => now()]); + Audit::record('company.renamed', $user, $ids['tenant_id'], $company, details: ['before_name' => $before, 'after_name' => trim($data['name'])]); + }); + } + + public function renameUnit(Request $request, int $unit): void + { + $data = $request->validate(['name' => 'required|string|max:255', 'tenant_id' => 'prohibited', 'company_id' => 'prohibited', 'unit_id' => 'prohibited', 'id' => 'prohibited']); + $this->mutate($request, function ($ids, $user) use ($unit, $data): void { + abort_unless($this->context->unitId() === $unit, 409, 'Seleccione esta unidade antes de editar.'); + $this->permissions->require($user, $ids['tenant_id'], $ids['company_id'], 'unit.edit', $unit); + $before = DB::table('units')->where('id', $unit)->where('company_id', $ids['company_id'])->value('name'); + abort_if($before === null, 403); + DB::table('units')->where('id', $unit)->where('company_id', $ids['company_id'])->update(['name' => trim($data['name']), 'updated_at' => now()]); + Audit::record('unit.renamed', $user, $ids['tenant_id'], $ids['company_id'], $unit, details: ['before_name' => $before, 'after_name' => trim($data['name'])]); + }); + } + + public function createUnit(Request $request): int + { + $data = $request->validate(['name' => 'required|string|max:255', 'tenant_id' => 'prohibited', 'company_id' => 'prohibited', 'unit_id' => 'prohibited', 'id' => 'prohibited']); + return $this->mutate($request, function ($ids, $user) use ($data): int { + $this->permissions->require($user, $ids['tenant_id'], $ids['company_id'], 'unit.create'); + $unit = DB::table('units')->insertGetId($ids + ['name' => trim($data['name']), 'created_at' => now(), 'updated_at' => now()]); + Audit::record('unit.created', $user, $ids['tenant_id'], $ids['company_id'], $unit, details: ['after_name' => trim($data['name'])]); + foreach (Permissions::UNIT as $permission) { + $this->insertGrant($user, $ids, $unit, $permission); + Audit::record('access.granted_on_creation', $user, $ids['tenant_id'], $ids['company_id'], $unit, $user, ['permission' => $permission]); + } + return $unit; + }); + } + + public function accessList(Request $request): array + { + $ids = $this->context->identifiers(); + $this->permissions->require($request->user()->id, $ids['tenant_id'], $ids['company_id'], 'access.manage'); + $allowedUnits = $this->context->permittedUnitIds(); + $members = DB::table('company_memberships as m')->join('users as u', 'u.id', '=', 'm.user_id') + ->where('m.tenant_id', $ids['tenant_id'])->where('m.company_id', $ids['company_id'])->select('u.id', 'u.name', 'u.email')->orderBy('u.name')->get(); + $grants = DB::table('permission_grants')->where('tenant_id', $ids['tenant_id'])->where('company_id', $ids['company_id']) + ->where(fn ($q) => $q->whereNull('unit_id')->orWhereIn('unit_id', $allowedUnits))->get(['id', 'user_id', 'unit_id', 'permission']); + return ['members' => $members, 'grants' => $grants, 'catalogue' => ['company' => Permissions::COMPANY, 'unit' => Permissions::UNIT]]; + } + + public function changeAccess(Request $request, bool $grant): void + { + $data = $request->validate(['email' => 'required|email|max:255', 'permission' => 'required|string', 'unit_id' => 'nullable|integer|min:1', + 'reason' => 'required|string|max:500', 'tenant_id' => 'prohibited', 'company_id' => 'prohibited', 'user_id' => 'prohibited']); + $this->mutate($request, function ($ids, $actor) use ($data, $grant): void { + $company = $ids['company_id']; $tenant = $ids['tenant_id']; + $this->permissions->require($actor, $tenant, $company, 'access.manage'); + $unit = isset($data['unit_id']) ? (int) $data['unit_id'] : null; + $catalogue = $unit === null ? Permissions::COMPANY : Permissions::UNIT; + abort_unless(in_array($data['permission'], $catalogue, true), 422, 'Permissão ou âmbito inválido.'); + $this->permissions->require($actor, $tenant, $company, $data['permission'], $unit); + if ($unit !== null) { + $this->permissions->require($actor, $tenant, $company, 'unit.view', $unit); + abort_unless(DB::table('units')->where('id', $unit)->where('tenant_id', $tenant)->where('company_id', $company)->exists(), 403); + } + $target = User::query()->where('email', mb_strtolower($data['email']))->first(); + if (! $target) { throw ValidationException::withMessages(['email' => 'Não foi possível atribuir este acesso. Confirme o utilizador pelo procedimento local.']); } + $membership = DB::table('company_memberships')->where($ids)->where('user_id', $target->id); + if (! $membership->exists()) { + abort_unless($grant && $data['permission'] === 'company.view' && $unit === null, 403, 'Conceda primeiro consulta da empresa.'); + DB::table('company_memberships')->insert($ids + ['user_id' => $target->id]); + } + if ($grant && $data['permission'] !== 'company.view') { + $this->permissions->require($target->id, $tenant, $company, 'company.view'); + if ($unit && $data['permission'] === 'unit.edit') { $this->permissions->require($target->id, $tenant, $company, 'unit.view', $unit); } + } + $removed = []; + if ($grant) { $this->insertGrant($target->id, $ids, $unit, $data['permission']); } + else { + $query = DB::table('permission_grants')->where($ids)->where('user_id', $target->id); + if ($data['permission'] === 'company.view') { + // Revocation deactivates all derived grants; reject partial authority rather than silently exceeding it. + foreach ($query->get() as $existing) { $this->permissions->require($actor, $tenant, $company, $existing->permission, $existing->unit_id ? (int) $existing->unit_id : null); } + $removed = $query->get(['permission', 'unit_id'])->map(fn ($row) => (array) $row)->all(); + $query->delete(); + } else { + if ($data['permission'] === 'unit.view') { + if ($this->permissions->has($target->id, $tenant, $company, 'unit.edit', $unit)) { $this->permissions->require($actor, $tenant, $company, 'unit.edit', $unit); } + $query->where('unit_id', $unit)->whereIn('permission', Permissions::UNIT); + } else { $query->where('unit_id', $unit)->where('permission', $data['permission']); } + $removed = $query->get(['permission', 'unit_id'])->map(fn ($row) => (array) $row)->all(); + $query->delete(); + } + } + Audit::record($grant ? 'access.granted' : 'access.revoked', $actor, $tenant, $company, $unit, $target->id, + ['permission' => $data['permission'], 'reason' => $data['reason'], 'grants' => $grant ? [['permission' => $data['permission'], 'unit_id' => $unit]] : $removed]); + }); + } + + private function insertGrant(int $user, array $ids, ?int $unit, string $permission): void + { + DB::table('permission_grants')->insertOrIgnore($ids + ['user_id' => $user, 'unit_id' => $unit, 'permission' => $permission, 'created_at' => now(), 'updated_at' => now()]); + } + + private function mutate(Request $request, callable $operation): mixed + { + $selected = $this->context->identifiers(); + return DB::transaction(function () use ($request, $operation, $selected) { + // All access changes and business mutations serialize on the same company row. + DB::table('companies')->where('id', $selected['company_id'])->where('tenant_id', $selected['tenant_id'])->lockForUpdate()->firstOrFail(); + $this->context->selectFor($request->user()->id, $selected['tenant_id'], $selected['company_id'], $this->context->unitId()); + return $operation($selected, $request->user()->id); + }); + } +} diff --git a/app/Modules/Identity/Services/LocalDatabaseGuard.php b/app/Modules/Identity/Services/LocalDatabaseGuard.php new file mode 100644 index 0000000..5d07e7f --- /dev/null +++ b/app/Modules/Identity/Services/LocalDatabaseGuard.php @@ -0,0 +1,24 @@ +environment('local')) { return false; } + $connection = config('database.default'); + $config = config("database.connections.$connection", []); + foreach (['driver' => 'pgsql', 'host' => '127.0.0.1', 'port' => '55432', 'database' => 'sgf_tempo_dev', 'username' => 'sgf_dev_app'] as $key => $expected) { + if ((string) ($config[$key] ?? '') !== $expected) { return false; } + } + if (! empty($config['url']) || ! empty($config['read']) || ! empty($config['write'])) { return false; } + try { + $identity = DB::selectOne('SELECT current_database() AS db, current_user AS role, rolsuper, rolcreatedb, rolcreaterole, rolbypassrls FROM pg_roles WHERE rolname = current_user'); + return $identity->db === 'sgf_tempo_dev' && $identity->role === 'sgf_dev_app' + && ! $identity->rolsuper && ! $identity->rolcreatedb && ! $identity->rolcreaterole && ! $identity->rolbypassrls; + } catch (\Throwable) { return false; } + } +} diff --git a/app/Modules/Identity/Services/Permissions.php b/app/Modules/Identity/Services/Permissions.php new file mode 100644 index 0000000..33baf82 --- /dev/null +++ b/app/Modules/Identity/Services/Permissions.php @@ -0,0 +1,28 @@ +where('user_id', $user)->where('tenant_id', $tenant) + ->where('company_id', $company)->where('permission', $permission)->where('unit_id', $unit)->exists(); + } + + public function require(int $user, int $tenant, int $company, string $permission, ?int $unit = null): void + { + abort_unless($this->has($user, $tenant, $company, $permission, $unit), 403, 'Acção não autorizada.'); + } + + public function unitIds(int $user, int $tenant, int $company): array + { + return DB::table('permission_grants')->where('user_id', $user)->where('tenant_id', $tenant) + ->where('company_id', $company)->where('permission', 'unit.view')->pluck('unit_id')->map(fn ($id) => (int) $id)->all(); + } +} diff --git a/app/Modules/Identity/Services/ProtectedProvisioningInput.php b/app/Modules/Identity/Services/ProtectedProvisioningInput.php new file mode 100644 index 0000000..04b15d4 --- /dev/null +++ b/app/Modules/Identity/Services/ProtectedProvisioningInput.php @@ -0,0 +1,25 @@ + 16384) { throw new RuntimeException(); } + $data = json_decode($raw, true, 16, JSON_THROW_ON_ERROR); + if (! is_array($data) || ($data['confirmed'] ?? null) !== true || ($data['email'] ?? null) !== $email + || ! is_string($data['password'] ?? null) || ! is_string($data['confirmation'] ?? null)) { + throw new RuntimeException(); + } + return [$data['password'], $data['confirmation']]; + } catch (\Throwable) { + // Never include payload, parser errors, credentials or tokens in diagnostics. + throw new RuntimeException('Entrada protegida inválida ou não confirmada. Nada alterado.'); + } + } +} diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php new file mode 100644 index 0000000..7f315a2 --- /dev/null +++ b/app/Providers/AppServiceProvider.php @@ -0,0 +1,37 @@ +app->scoped(CompanyContext::class, fn () => new CompanyContext()); + } + + /** + * Bootstrap any application services. + */ + public function boot(): void + { + if ($this->app->environment(['testing', 'browser-testing']) || defined('PHPUNIT_COMPOSER_INSTALL')) { + TestingDatabaseGuard::assertSafe(); + } + + Event::listen(CommandStarting::class, function (CommandStarting $event): void { + if (in_array($event->command, ['migrate:fresh', 'migrate:refresh', 'migrate:reset', 'migrate:rollback', 'db:wipe'], true)) { + $connection = $event->input->hasOption('database') ? $event->input->getOption('database') : null; + TestingDatabaseGuard::assertSafe($connection); + } + }); + } +} diff --git a/app/Shared/Context/BelongsToCompany.php b/app/Shared/Context/BelongsToCompany.php new file mode 100644 index 0000000..e558edd --- /dev/null +++ b/app/Shared/Context/BelongsToCompany.php @@ -0,0 +1,36 @@ +identifiers() as $column => $value) { + $query->where($query->getModel()->qualifyColumn($column), $value); + } + }); + + static::saving(function (Model $model): void { + foreach (app(CompanyContext::class)->identifiers() as $column => $value) { + if ($model->getAttribute($column) !== null && (int) $model->getAttribute($column) !== $value) { + throw new AccessDeniedHttpException('Contexto de empresa incompatível.'); + } + $model->setAttribute($column, $value); + } + }); + + static::deleting(function (Model $model): void { + foreach (app(CompanyContext::class)->identifiers() as $column => $value) { + if ((int) $model->getAttribute($column) !== $value) { + throw new AccessDeniedHttpException('Contexto de empresa incompatível.'); + } + } + }); + } +} diff --git a/app/Shared/Context/CompanyContext.php b/app/Shared/Context/CompanyContext.php new file mode 100644 index 0000000..5613b2d --- /dev/null +++ b/app/Shared/Context/CompanyContext.php @@ -0,0 +1,57 @@ +clear(); + $allowed = DB::table('company_memberships') + ->where('user_id', $userId)->where('tenant_id', $tenantId) + ->where('company_id', $companyId)->exists(); + + if (! $allowed || ! Company::query()->where('tenant_id', $tenantId)->whereKey($companyId)->exists()) { + throw new AccessDeniedHttpException('Empresa não autorizada.'); + } + + app(Permissions::class)->require($userId, $tenantId, $companyId, 'company.view'); + if ($unitId !== null) { + app(Permissions::class)->require($userId, $tenantId, $companyId, 'unit.view', $unitId); + abort_unless(DB::table('units')->where('tenant_id', $tenantId)->where('company_id', $companyId)->where('id', $unitId)->exists(), 403); + } + + $this->identifiers = ['tenant_id' => $tenantId, 'company_id' => $companyId]; + $this->userId = $userId; + $this->unitId = $unitId; + } + + public function identifiers(): array + { + return $this->identifiers ?? throw new AccessDeniedHttpException('Contexto de empresa obrigatório.'); + } + + public function clear(): void + { + $this->identifiers = null; + $this->userId = null; + $this->unitId = null; + } + + public function userId(): int { $this->identifiers(); return $this->userId; } + public function unitId(): ?int { $this->identifiers(); return $this->unitId; } + public function permittedUnitIds(): array + { + $ids = $this->identifiers(); + return app(Permissions::class)->unitIds($this->userId(), $ids['tenant_id'], $ids['company_id']); + } +} diff --git a/app/Shared/Testing/TestingDatabaseGuard.php b/app/Shared/Testing/TestingDatabaseGuard.php new file mode 100644 index 0000000..3c88e37 --- /dev/null +++ b/app/Shared/Testing/TestingDatabaseGuard.php @@ -0,0 +1,31 @@ + 'pgsql', 'host' => '127.0.0.1', 'port' => '55432', + 'database' => 'sgf_tempo_test', 'username' => 'sgf_test_runner', + ]; + foreach ($expected as $key => $value) { + if ((string) ($config[$key] ?? '') !== $value) { + throw new RuntimeException('SGF_TEST_DATABASE_REFUSED: apenas sgf_tempo_test no cluster próprio é permitido.'); + } + } + if (! empty($config['url']) || ! empty($config['read']) || ! empty($config['write']) || ($config['search_path'] ?? 'public') !== 'public') { + throw new RuntimeException('SGF_TEST_DATABASE_REFUSED: redireccionamento de ligação não permitido.'); + } + $identity = DB::connection($name)->selectOne('SELECT current_database() AS db, current_user AS role'); + if ($identity->db !== 'sgf_tempo_test' || $identity->role !== 'sgf_test_runner') { + throw new RuntimeException('SGF_TEST_DATABASE_REFUSED: destino efectivo inválido.'); + } + } +} diff --git a/artisan b/artisan new file mode 100644 index 0000000..c35e31d --- /dev/null +++ b/artisan @@ -0,0 +1,18 @@ +#!/usr/bin/env php +handleCommand(new ArgvInput); + +exit($status); diff --git a/bootstrap/app.php b/bootstrap/app.php new file mode 100644 index 0000000..1085719 --- /dev/null +++ b/bootstrap/app.php @@ -0,0 +1,21 @@ +withRouting( + web: __DIR__.'/../routes/web.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 100644 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 100644 index 0000000..fc94ae6 --- /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": "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.3", + "source": { + "type": "git", + "url": "https://github.com/doctrine/lexer.git", + "reference": "71d305eaa6480d3d3460c7d053d1da7749fa9cca" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/71d305eaa6480d3d3460c7d053d1da7749fa9cca", + "reference": "71d305eaa6480d3d3460c7d053d1da7749fa9cca", + "shasum": "" + }, + "require": { + "php": "^8.1" + }, + "require-dev": { + "doctrine/coding-standard": "^14", + "phpstan/phpstan": "^2", + "phpunit/phpunit": "^10.5.58 || ^12.5.4" + }, + "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.3" + }, + "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": "2026-10-01T06:59:29+00:00" + }, + { + "name": "dragonmantank/cron-expression", + "version": "v3.6.1", + "source": { + "type": "git", + "url": "https://github.com/dragonmantank/cron-expression.git", + "reference": "4189372ffeff09bf14f731f67a9de90c7b413ebe" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/4189372ffeff09bf14f731f67a9de90c7b413ebe", + "reference": "4189372ffeff09bf14f731f67a9de90c7b413ebe", + "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": "^2.1.31", + "phpunit/phpunit": "^11.5.43 || ^12.4" + }, + "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.1" + }, + "funding": [ + { + "url": "https://github.com/dragonmantank", + "type": "github" + } + ], + "time": "2026-10-19T17:53:57+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.3.0", + "source": { + "type": "git", + "url": "https://github.com/guzzle/guzzle.git", + "reference": "b920e5fcaf81d761b8fabe600ca90999beaefdb7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/b920e5fcaf81d761b8fabe600ca90999beaefdb7", + "reference": "b920e5fcaf81d761b8fabe600ca90999beaefdb7", + "shasum": "" + }, + "require": { + "ext-json": "*", + "guzzlehttp/promises": "^3.1", + "guzzlehttp/psr7": "^3.2", + "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.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.3.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-10-18T13:38:43+00:00" + }, + { + "name": "guzzlehttp/promises", + "version": "3.1.0", + "source": { + "type": "git", + "url": "https://github.com/guzzle/promises.git", + "reference": "094d0ec418eb3b1411ea271a180ec95cae6ae933" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/promises/zipball/094d0ec418eb3b1411ea271a180ec95cae6ae933", + "reference": "094d0ec418eb3b1411ea271a180ec95cae6ae933", + "shasum": "" + }, + "require": { + "php": "^7.4 || ^8.0", + "symfony/deprecation-contracts": "^2.5 || ^3.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.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/promises", + "type": "tidelift" + } + ], + "time": "2026-10-18T12:48:16+00:00" + }, + { + "name": "guzzlehttp/psr7", + "version": "3.2.0", + "source": { + "type": "git", + "url": "https://github.com/guzzle/psr7.git", + "reference": "cdc139396207a5eba10c242d241fb014cb098390" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/cdc139396207a5eba10c242d241fb014cb098390", + "reference": "cdc139396207a5eba10c242d241fb014cb098390", + "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.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/psr7", + "type": "tidelift" + } + ], + "time": "2026-10-17T23:57:19+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.38.0", + "source": { + "type": "git", + "url": "https://github.com/laravel/framework.git", + "reference": "c42f9abd4a3d2f9a3cd6be109255ddce8092ceb8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/framework/zipball/c42f9abd4a3d2f9a3cd6be109255ddce8092ceb8", + "reference": "c42f9abd4a3d2f9a3cd6be109255ddce8092ceb8", + "shasum": "" + }, + "require": { + "brick/math": "^0.14.2 || ^0.15 || ^0.16 || ^0.17 || ^0.18 || ^0.19 || ^0.20 || ^1.0", + "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.25", + "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.2", + "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.6.0", + "pda/pheanstalk": "^7.0.0 || ^8.0.0", + "php-http/discovery": "^1.15", + "phpstan/phpstan": "2.3.1", + "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/mercure": "^0.8.0", + "symfony/psr-http-message-bridge": "^7.4.0 || ^8.0.0", + "symfony/translation": "^7.4.0 || ^8.0.0", + "web-token/jwt-library": "^4.1" + }, + "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.2).", + "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/mercure": "Required to use the Mercure broadcast driver (^0.8).", + "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).", + "web-token/jwt-library": "Required to sign Mercure JWTs and use end-to-end encrypted channels (^4.1)." + }, + "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-10-20T10:45:58+00:00" + }, + { + "name": "laravel/prompts", + "version": "v0.3.26", + "source": { + "type": "git", + "url": "https://github.com/laravel/prompts.git", + "reference": "2d1e9bf6bab8d3f383c254db7f2b4ea8816d55e0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/prompts/zipball/2d1e9bf6bab8d3f383c254db7f2b4ea8816d55e0", + "reference": "2d1e9bf6bab8d3f383c254db7f2b4ea8816d55e0", + "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": { + "source": "https://github.com/laravel/prompts/tree/v0.3.26" + }, + "time": "2026-10-09T14:45:13+00:00" + }, + { + "name": "laravel/serializable-closure", + "version": "v2.1.0", + "source": { + "type": "git", + "url": "https://github.com/laravel/serializable-closure.git", + "reference": "2d5869a838bbcf37e0d8b0568fc41914e81374b5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/2d5869a838bbcf37e0d8b0568fc41914e81374b5", + "reference": "2d5869a838bbcf37e0d8b0568fc41914e81374b5", + "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-09-22T14:32:34+00:00" + }, + { + "name": "league/commonmark", + "version": "2.10.4", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/commonmark.git", + "reference": "40821b7606d8d946bac57dbd2290076c722e3a65" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/40821b7606d8d946bac57dbd2290076c722e3a65", + "reference": "40821b7606d8d946bac57dbd2290076c722e3a65", + "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-10-17T19:59:50+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.9.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/uri.git", + "reference": "fcc872a3d872aa13f935e0cd1887b9abb06da07f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/uri/zipball/fcc872a3d872aa13f935e0cd1887b9abb06da07f", + "reference": "fcc872a3d872aa13f935e0cd1887b9abb06da07f", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "league/uri-interfaces": "^7.9.0", + "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.9.0" + }, + "funding": [ + { + "url": "https://github.com/sponsors/nyamsprod", + "type": "github" + } + ], + "time": "2026-10-16T15:19:33+00:00" + }, + { + "name": "league/uri-interfaces", + "version": "7.9.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/uri-interfaces.git", + "reference": "eb5f6d24e6a4fe0a8e9c78ded4eb1dfff1404f58" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/uri-interfaces/zipball/eb5f6d24e6a4fe0a8e9c78ded4eb1dfff1404f58", + "reference": "eb5f6d24e6a4fe0a8e9c78ded4eb1dfff1404f58", + "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.9.0" + }, + "funding": [ + { + "url": "https://github.com/sponsors/nyamsprod", + "type": "github" + } + ], + "time": "2026-10-16T15:19:33+00:00" + }, + { + "name": "monolog/monolog", + "version": "3.12.1", + "source": { + "type": "git", + "url": "https://github.com/Seldaek/monolog.git", + "reference": "d7059e4c691d05ea1222b5124bed0f961be46e15" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/d7059e4c691d05ea1222b5124bed0f961be46e15", + "reference": "d7059e4c691d05ea1222b5124bed0f961be46e15", + "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", + "psr/clock": "^1.0", + "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", + "psr/clock": "Required to pass a clock to the Logger and control the timestamp of log records", + "rollbar/rollbar": "Allow sending log messages to Rollbar", + "ruflin/elastica": "Allow sending log messages to an Elastic Search server" + }, + "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.12.1" + }, + "funding": [ + { + "url": "https://github.com/Seldaek", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/monolog/monolog", + "type": "tidelift" + } + ], + "time": "2026-09-29T19:21:12+00:00" + }, + { + "name": "nesbot/carbon", + "version": "3.15.1", + "source": { + "type": "git", + "url": "https://github.com/CarbonPHP/carbon.git", + "reference": "ce0e5636fae7d1e99856eb70cae4c719a284aa08" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/CarbonPHP/carbon/zipball/ce0e5636fae7d1e99856eb70cae4c719a284aa08", + "reference": "ce0e5636fae7d1e99856eb70cae4c719a284aa08", + "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/polyfill-time": "^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": "^3.0@dev", + "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-10-25T14:32:48+00:00" + }, + { + "name": "nette/schema", + "version": "v1.4.0", + "source": { + "type": "git", + "url": "https://github.com/nette/schema.git", + "reference": "af9fa8a86bfca9b02b10346220db26e62ef942ec" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nette/schema/zipball/af9fa8a86bfca9b02b10346220db26e62ef942ec", + "reference": "af9fa8a86bfca9b02b10346220db26e62ef942ec", + "shasum": "" + }, + "require": { + "nette/utils": "^4.0", + "php": "8.1 - 8.6" + }, + "require-dev": { + "nette/phpstan-rules": "^1.0.7", + "nette/tester": "^2.6", + "phpstan/extension-installer": "^1.4@stable", + "phpstan/phpstan": "^2.3@stable", + "tracy/tracy": "^2.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-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" + } + ], + "description": "📐 Nette Schema: validates and normalizes data such as configuration or API input against a schema described in a few readable lines of PHP, with precise error messages.", + "homepage": "https://doc.nette.org/schema", + "keywords": [ + "configuration", + "data validation", + "nette", + "normalization", + "schema", + "validation" + ], + "support": { + "issues": "https://github.com/nette/schema/issues", + "source": "https://github.com/nette/schema/tree/v1.4.0" + }, + "time": "2026-10-22T02:12:50+00:00" + }, + { + "name": "nette/utils", + "version": "v4.1.6", + "source": { + "type": "git", + "url": "https://github.com/nette/utils.git", + "reference": "6bf24518accf32cf845bca305e0b92078700fd01" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nette/utils/zipball/6bf24518accf32cf845bca305e0b92078700fd01", + "reference": "6bf24518accf32cf845bca305e0b92078700fd01", + "shasum": "" + }, + "require": { + "php": "8.2 - 8.6" + }, + "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.6" + }, + "time": "2026-10-20T17:07:56+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": "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": "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.4", + "source": { + "type": "git", + "url": "https://github.com/ramsey/uuid.git", + "reference": "75d73f48d02797c2c285a7e9f348fadc0102ffe2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ramsey/uuid/zipball/75d73f48d02797c2c285a7e9f348fadc0102ffe2", + "reference": "75d73f48d02797c2c285a7e9f348fadc0102ffe2", + "shasum": "" + }, + "require": { + "brick/math": "^0.8.16 || ^0.9 || ^0.10 || ^0.11 || ^0.12 || ^0.13 || ^0.14 || ^0.15 || ^0.16 || ^0.17 || ^0.18 || ^0.19 || ^0.20 || ^1.0", + "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.4" + }, + "time": "2026-09-16T11:39:30+00:00" + }, + { + "name": "symfony/clock", + "version": "v8.1.9", + "source": { + "type": "git", + "url": "https://github.com/symfony/clock.git", + "reference": "945ea3b64d6da9c1c2c354fe5c07b27455df6442" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/clock/zipball/945ea3b64d6da9c1c2c354fe5c07b27455df6442", + "reference": "945ea3b64d6da9c1c2c354fe5c07b27455df6442", + "shasum": "" + }, + "require": { + "php": ">=8.4.1", + "psr/clock": "^1.0" + }, + "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/v8.1.9" + }, + "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-10-12T14:32:04+00:00" + }, + { + "name": "symfony/console", + "version": "v8.1.9", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "630e74196a2635ec0f06c12bd3fb47cfedf85157" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/630e74196a2635ec0f06c12bd3fb47cfedf85157", + "reference": "630e74196a2635ec0f06c12bd3fb47cfedf85157", + "shasum": "" + }, + "require": { + "php": ">=8.4.1", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-mbstring": "^1.0", + "symfony/polyfill-php85": "^1.32", + "symfony/service-contracts": "^2.5|^3", + "symfony/string": "^7.4.6|^8.0.6" + }, + "conflict": { + "symfony/dependency-injection": "<8.1", + "symfony/event-dispatcher": "<8.1" + }, + "provide": { + "psr/log-implementation": "1.0|2.0|3.0" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/config": "^7.4|^8.0", + "symfony/dependency-injection": "^8.1", + "symfony/event-dispatcher": "^8.1", + "symfony/filesystem": "^7.4|^8.0", + "symfony/http-foundation": "^7.4|^8.0", + "symfony/http-kernel": "^7.4|^8.0", + "symfony/lock": "^7.4|^8.0", + "symfony/messenger": "^7.4|^8.0", + "symfony/mime": "^7.4|^8.0", + "symfony/process": "^7.4|^8.0", + "symfony/stopwatch": "^7.4|^8.0", + "symfony/uid": "^7.4|^8.0", + "symfony/validator": "^7.4|^8.0", + "symfony/var-dumper": "^7.4|^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/v8.1.9" + }, + "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-10-12T19:11:16+00:00" + }, + { + "name": "symfony/css-selector", + "version": "v8.1.6", + "source": { + "type": "git", + "url": "https://github.com/symfony/css-selector.git", + "reference": "08e2905152a39cf3fd1745d83f8c483e258887d9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/08e2905152a39cf3fd1745d83f8c483e258887d9", + "reference": "08e2905152a39cf3fd1745d83f8c483e258887d9", + "shasum": "" + }, + "require": { + "php": ">=8.4.1" + }, + "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/v8.1.6" + }, + "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:06:25+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": "v8.1.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/error-handler.git", + "reference": "c146daceccd5d4f864c051b233c276641cec527b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/c146daceccd5d4f864c051b233c276641cec527b", + "reference": "c146daceccd5d4f864c051b233c276641cec527b", + "shasum": "" + }, + "require": { + "php": ">=8.4.1", + "psr/log": "^1|^2|^3", + "symfony/polyfill-php85": "^1.32", + "symfony/var-dumper": "^7.4|^8.0" + }, + "conflict": { + "symfony/deprecation-contracts": "<2.5" + }, + "require-dev": { + "symfony/console": "^7.4|^8.0", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/http-kernel": "^7.4|^8.0", + "symfony/serializer": "^7.4|^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/v8.1.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-09-22T18:58:53+00:00" + }, + { + "name": "symfony/event-dispatcher", + "version": "v8.1.5", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher.git", + "reference": "7458da64220376b2e0dc2d8451bf43382c1ad297" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/7458da64220376b2e0dc2d8451bf43382c1ad297", + "reference": "7458da64220376b2e0dc2d8451bf43382c1ad297", + "shasum": "" + }, + "require": { + "php": ">=8.4.1", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/event-dispatcher-contracts": "^2.5|^3" + }, + "conflict": { + "symfony/security-http": "<7.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": "^7.4|^8.0", + "symfony/dependency-injection": "^7.4|^8.0", + "symfony/error-handler": "^7.4|^8.0", + "symfony/expression-language": "^7.4|^8.0", + "symfony/framework-bundle": "^7.4|^8.0", + "symfony/http-foundation": "^7.4|^8.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/stopwatch": "^7.4|^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/v8.1.5" + }, + "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:47:34+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": "v8.1.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/finder.git", + "reference": "bd4fed193a3132c91c5c93595cbfc78988915822" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/finder/zipball/bd4fed193a3132c91c5c93595cbfc78988915822", + "reference": "bd4fed193a3132c91c5c93595cbfc78988915822", + "shasum": "" + }, + "require": { + "php": ">=8.4.1" + }, + "require-dev": { + "symfony/filesystem": "^7.4|^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/v8.1.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-09-26T06:33:49+00:00" + }, + { + "name": "symfony/http-foundation", + "version": "v8.1.9", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-foundation.git", + "reference": "7850897fb8659f98491b03be79ac48600bdaf9ab" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/7850897fb8659f98491b03be79ac48600bdaf9ab", + "reference": "7850897fb8659f98491b03be79ac48600bdaf9ab", + "shasum": "" + }, + "require": { + "php": ">=8.4.1", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-mbstring": "^1.1" + }, + "conflict": { + "doctrine/dbal": "<4.3" + }, + "require-dev": { + "doctrine/dbal": "^4.3", + "predis/predis": "^1.1|^2.0", + "symfony/cache": "^7.4|^8.0", + "symfony/clock": "^7.4|^8.0", + "symfony/dependency-injection": "^7.4|^8.0", + "symfony/expression-language": "^7.4|^8.0", + "symfony/http-kernel": "^7.4|^8.0", + "symfony/mime": "^7.4|^8.0", + "symfony/rate-limiter": "^7.4|^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/v8.1.9" + }, + "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-10-08T16:57:43+00:00" + }, + { + "name": "symfony/http-kernel", + "version": "v8.1.9", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-kernel.git", + "reference": "55c6935bb4c004a72b55f723e79d5404881dcad3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/55c6935bb4c004a72b55f723e79d5404881dcad3", + "reference": "55c6935bb4c004a72b55f723e79d5404881dcad3", + "shasum": "" + }, + "require": { + "php": ">=8.4.1", + "psr/log": "^1|^2|^3", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/error-handler": "^7.4|^8.0", + "symfony/event-dispatcher": "^7.4|^8.0", + "symfony/http-foundation": "^7.4|^8.0", + "symfony/polyfill-ctype": "^1.8" + }, + "conflict": { + "symfony/dependency-injection": "<8.1", + "symfony/flex": "<2.10", + "symfony/http-client-contracts": "<2.5", + "symfony/serializer": "<7.4.15|>=8.0,<8.0.15|>=8.1,<8.1.2", + "symfony/translation-contracts": "<2.5", + "symfony/var-dumper": "<8.1", + "symfony/web-profiler-bundle": "<8.1", + "twig/twig": "<3.21" + }, + "provide": { + "psr/log-implementation": "1.0|2.0|3.0" + }, + "require-dev": { + "psr/cache": "^1.0|^2.0|^3.0", + "symfony/browser-kit": "^7.4|^8.0", + "symfony/clock": "^7.4|^8.0", + "symfony/config": "^7.4|^8.0", + "symfony/console": "^7.4|^8.0", + "symfony/css-selector": "^7.4|^8.0", + "symfony/dependency-injection": "^8.1", + "symfony/dom-crawler": "^7.4|^8.0", + "symfony/expression-language": "^7.4|^8.0", + "symfony/finder": "^7.4|^8.0", + "symfony/http-client-contracts": "^2.5|^3", + "symfony/process": "^7.4|^8.0", + "symfony/property-access": "^7.4|^8.0", + "symfony/rate-limiter": "^7.4|^8.0", + "symfony/routing": "^7.4|^8.0", + "symfony/serializer": "^7.4|^8.0", + "symfony/stopwatch": "^7.4|^8.0", + "symfony/translation": "^7.4|^8.0", + "symfony/translation-contracts": "^2.5|^3", + "symfony/uid": "^7.4|^8.0", + "symfony/validator": "^7.4|^8.0", + "symfony/var-dumper": "^8.1", + "symfony/var-exporter": "^7.4|^8.0", + "twig/twig": "^3.21|^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/v8.1.9" + }, + "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-10-14T06:47:03+00:00" + }, + { + "name": "symfony/mailer", + "version": "v8.1.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/mailer.git", + "reference": "8783380ecdafa23d36fc90c5873fd44b635c6e10" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/mailer/zipball/8783380ecdafa23d36fc90c5873fd44b635c6e10", + "reference": "8783380ecdafa23d36fc90c5873fd44b635c6e10", + "shasum": "" + }, + "require": { + "egulias/email-validator": "^2.1.10|^3|^4", + "php": ">=8.4.1", + "psr/event-dispatcher": "^1", + "psr/log": "^1|^2|^3", + "symfony/event-dispatcher": "^7.4|^8.0", + "symfony/mime": "^7.4|^8.0", + "symfony/service-contracts": "^2.5|^3" + }, + "conflict": { + "symfony/http-client-contracts": "<2.5" + }, + "require-dev": { + "symfony/console": "^7.4|^8.0", + "symfony/http-client": "^7.4|^8.0", + "symfony/messenger": "^7.4|^8.0", + "symfony/twig-bridge": "^7.4|^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/v8.1.7" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-09-15T06:01:24+00:00" + }, + { + "name": "symfony/mime", + "version": "v8.1.7", + "source": { + "type": "git", + "url": "https://github.com/symfony/mime.git", + "reference": "773ac57f20e2795bdadb65b5b1b5f4850d498283" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/mime/zipball/773ac57f20e2795bdadb65b5b1b5f4850d498283", + "reference": "773ac57f20e2795bdadb65b5b1b5f4850d498283", + "shasum": "" + }, + "require": { + "php": ">=8.4.1", + "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" + }, + "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": "^7.4|^8.0", + "symfony/process": "^7.4|^8.0", + "symfony/property-access": "^7.4|^8.0", + "symfony/property-info": "^7.4|^8.0", + "symfony/serializer": "^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/v8.1.7" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-09-04T11:02:17+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.43.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-grapheme.git", + "reference": "5cac8f4db97208823aa353f59a01faad2da52c75" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/5cac8f4db97208823aa353f59a01faad2da52c75", + "reference": "5cac8f4db97208823aa353f59a01faad2da52c75", + "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.43.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-09-25T15:46:47+00:00" + }, + { + "name": "symfony/polyfill-intl-idn", + "version": "v1.43.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-idn.git", + "reference": "533d68cf99c8f8ee2e8893c59ed59192e92cfd74" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/533d68cf99c8f8ee2e8893c59ed59192e92cfd74", + "reference": "533d68cf99c8f8ee2e8893c59ed59192e92cfd74", + "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.43.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-09-23T14:40:04+00:00" + }, + { + "name": "symfony/polyfill-intl-normalizer", + "version": "v1.43.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-normalizer.git", + "reference": "ebd57ccc7edb93d632e184efbe7693d2517bab3b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/ebd57ccc7edb93d632e184efbe7693d2517bab3b", + "reference": "ebd57ccc7edb93d632e184efbe7693d2517bab3b", + "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.43.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-09-23T22:02:09+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.43.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "4d5d331bf731e0aedbc6b2f5e61135b7b7996a72" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/4d5d331bf731e0aedbc6b2f5e61135b7b7996a72", + "reference": "4d5d331bf731e0aedbc6b2f5e61135b7b7996a72", + "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.43.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-09-24T15:19:04+00:00" + }, + { + "name": "symfony/polyfill-php80", + "version": "v1.43.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php80.git", + "reference": "9c6a5d6b01ca51d486c813e9a9c0ed55f208bb74" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/9c6a5d6b01ca51d486c813e9a9c0ed55f208bb74", + "reference": "9c6a5d6b01ca51d486c813e9a9c0ed55f208bb74", + "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.43.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-09-25T15:50:05+00:00" + }, + { + "name": "symfony/polyfill-php82", + "version": "v1.43.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php82.git", + "reference": "843bbe8b2a7934307b749751eede0f111f5d1cfc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php82/zipball/843bbe8b2a7934307b749751eede0f111f5d1cfc", + "reference": "843bbe8b2a7934307b749751eede0f111f5d1cfc", + "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.43.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-09-25T15:50:05+00:00" + }, + { + "name": "symfony/polyfill-php84", + "version": "v1.43.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php84.git", + "reference": "22c6548499cbe5c5bb072fc0c42312dff062a015" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php84/zipball/22c6548499cbe5c5bb072fc0c42312dff062a015", + "reference": "22c6548499cbe5c5bb072fc0c42312dff062a015", + "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.43.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-09-23T22:01:09+00:00" + }, + { + "name": "symfony/polyfill-php85", + "version": "v1.43.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php85.git", + "reference": "86a42cbcc07adc331481a5ab310a4024bfc227f6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php85/zipball/86a42cbcc07adc331481a5ab310a4024bfc227f6", + "reference": "86a42cbcc07adc331481a5ab310a4024bfc227f6", + "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.43.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-09-25T15:46:47+00:00" + }, + { + "name": "symfony/polyfill-php86", + "version": "v1.43.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php86.git", + "reference": "8840df45b24f33a49dc419fa18dc0057231ae1d8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php86/zipball/8840df45b24f33a49dc419fa18dc0057231ae1d8", + "reference": "8840df45b24f33a49dc419fa18dc0057231ae1d8", + "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.43.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-09-25T15:46:47+00:00" + }, + { + "name": "symfony/polyfill-time", + "version": "v1.42.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-time.git", + "reference": "ac9f1ed802dd58f37e720388130c088434aa09fc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-time/zipball/ac9f1ed802dd58f37e720388130c088434aa09fc", + "reference": "ac9f1ed802dd58f37e720388130c088434aa09fc", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Time\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ignace Philippe Nyamagana Butera", + "email": "nyamsprod@gmail.com" + }, + { + "name": "Tim Düsterhus", + "email": "tim@tideways-gmbh.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Time API added to PHP 8.6", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "duration", + "polyfill", + "portable", + "shim", + "time" + ], + "support": { + "source": "https://github.com/symfony/polyfill-time/tree/v1.42.0" + }, + "funding": [ + { + "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-07T13:08:13+00:00" + }, + { + "name": "symfony/polyfill-uuid", + "version": "v1.43.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-uuid.git", + "reference": "b23ff8245cc5c4479ea2be3d0132d2e6dd433993" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-uuid/zipball/b23ff8245cc5c4479ea2be3d0132d2e6dd433993", + "reference": "b23ff8245cc5c4479ea2be3d0132d2e6dd433993", + "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.43.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-09-24T05:20:52+00:00" + }, + { + "name": "symfony/process", + "version": "v8.1.9", + "source": { + "type": "git", + "url": "https://github.com/symfony/process.git", + "reference": "59a682fd049b2d4d37c444f5ac21b7d01b8c7189" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/process/zipball/59a682fd049b2d4d37c444f5ac21b7d01b8c7189", + "reference": "59a682fd049b2d4d37c444f5ac21b7d01b8c7189", + "shasum": "" + }, + "require": { + "php": ">=8.4.1" + }, + "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/v8.1.9" + }, + "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-10-08T16:57:43+00:00" + }, + { + "name": "symfony/routing", + "version": "v8.1.9", + "source": { + "type": "git", + "url": "https://github.com/symfony/routing.git", + "reference": "edb06fb6ced3c1faaaed74c1c6c0f176a614c330" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/routing/zipball/edb06fb6ced3c1faaaed74c1c6c0f176a614c330", + "reference": "edb06fb6ced3c1faaaed74c1c6c0f176a614c330", + "shasum": "" + }, + "require": { + "php": ">=8.4.1", + "symfony/deprecation-contracts": "^2.5|^3" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/config": "^7.4|^8.0", + "symfony/dependency-injection": "^7.4|^8.0", + "symfony/expression-language": "^7.4|^8.0", + "symfony/http-foundation": "^7.4|^8.0", + "symfony/yaml": "^7.4|^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/v8.1.9" + }, + "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-10-12T12:37:13+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": "v8.1.9", + "source": { + "type": "git", + "url": "https://github.com/symfony/string.git", + "reference": "07fb208558f941eab50ec49c89c2a6a93fb11f01" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/string/zipball/07fb208558f941eab50ec49c89c2a6a93fb11f01", + "reference": "07fb208558f941eab50ec49c89c2a6a93fb11f01", + "shasum": "" + }, + "require": { + "php": ">=8.4.1", + "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.4|^8.0", + "symfony/http-client": "^7.4|^8.0", + "symfony/intl": "^7.4|^8.0", + "symfony/translation-contracts": "^2.5|^3.0", + "symfony/var-exporter": "^7.4|^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/v8.1.9" + }, + "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-10-03T15:16:03+00:00" + }, + { + "name": "symfony/translation", + "version": "v8.1.5", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation.git", + "reference": "d9e1caba0d6b6f9a26710af8a2f88d37f001215a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation/zipball/d9e1caba0d6b6f9a26710af8a2f88d37f001215a", + "reference": "d9e1caba0d6b6f9a26710af8a2f88d37f001215a", + "shasum": "" + }, + "require": { + "php": ">=8.4.1", + "symfony/polyfill-mbstring": "^1.0", + "symfony/translation-contracts": "^3.6.1" + }, + "conflict": { + "nikic/php-parser": "<5.0", + "symfony/http-client-contracts": "<2.5", + "symfony/service-contracts": "<2.5" + }, + "provide": { + "symfony/translation-implementation": "2.3|3.0" + }, + "require-dev": { + "nikic/php-parser": "^5.0", + "psr/log": "^1|^2|^3", + "symfony/config": "^7.4|^8.0", + "symfony/console": "^7.4|^8.0", + "symfony/dependency-injection": "^7.4|^8.0", + "symfony/finder": "^7.4|^8.0", + "symfony/http-client-contracts": "^2.5|^3.0", + "symfony/http-kernel": "^7.4|^8.0", + "symfony/intl": "^7.4|^8.0", + "symfony/polyfill-intl-icu": "^1.21", + "symfony/routing": "^7.4|^8.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/yaml": "^7.4|^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/v8.1.5" + }, + "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:47:34+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": "v8.1.9", + "source": { + "type": "git", + "url": "https://github.com/symfony/uid.git", + "reference": "cb487cf30380f0b0b090973bb9c0588193c06685" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/uid/zipball/cb487cf30380f0b0b090973bb9c0588193c06685", + "reference": "cb487cf30380f0b0b090973bb9c0588193c06685", + "shasum": "" + }, + "require": { + "php": ">=8.4.1", + "symfony/polyfill-uuid": "^1.15" + }, + "require-dev": { + "symfony/console": "^7.4|^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/v8.1.9" + }, + "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-10-12T14:32:04+00:00" + }, + { + "name": "symfony/var-dumper", + "version": "v8.1.9", + "source": { + "type": "git", + "url": "https://github.com/symfony/var-dumper.git", + "reference": "b8c168c764c09f5d931f290c9dbdd13f1bf142f3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/b8c168c764c09f5d931f290c9dbdd13f1bf142f3", + "reference": "b8c168c764c09f5d931f290c9dbdd13f1bf142f3", + "shasum": "" + }, + "require": { + "php": ">=8.4.1", + "symfony/polyfill-mbstring": "^1.0" + }, + "conflict": { + "symfony/console": "<7.4", + "symfony/error-handler": "<7.4" + }, + "require-dev": { + "symfony/console": "^7.4|^8.0", + "symfony/http-kernel": "^7.4|^8.0", + "symfony/process": "^7.4|^8.0", + "symfony/uid": "^7.4|^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/v8.1.9" + }, + "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-10-13T05:48:51+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.8.0", + "source": { + "type": "git", + "url": "https://github.com/phpdotenv/phpdotenv.git", + "reference": "96149103e62ac67e915f6d2ef59b72dee2e011e0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpdotenv/phpdotenv/zipball/96149103e62ac67e915f6d2ef59b72dee2e011e0", + "reference": "96149103e62ac67e915f6d2ef59b72dee2e011e0", + "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.8-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/phpdotenv/phpdotenv/issues", + "source": "https://github.com/phpdotenv/phpdotenv/tree/v5.8.0" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/vlucas/phpdotenv", + "type": "tidelift" + } + ], + "time": "2026-10-25T16:26:19+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": "hamcrest/hamcrest-php", + "version": "v2.1.1", + "source": { + "type": "git", + "url": "https://github.com/hamcrest/hamcrest-php.git", + "reference": "f8b1c0173b22fa6ec77a81fe63e5b01eba7e6487" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/f8b1c0173b22fa6ec77a81fe63e5b01eba7e6487", + "reference": "f8b1c0173b22fa6ec77a81fe63e5b01eba7e6487", + "shasum": "" + }, + "require": { + "php": "^7.4|^8.0" + }, + "replace": { + "cordoval/hamcrest-php": "*", + "davedevelopment/hamcrest-php": "*", + "kodova/hamcrest-php": "*" + }, + "require-dev": { + "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": "2.1-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/v2.1.1" + }, + "time": "2025-04-30T06:54:44+00:00" + }, + { + "name": "mockery/mockery", + "version": "1.6.12", + "source": { + "type": "git", + "url": "https://github.com/mockery/mockery.git", + "reference": "1f4efdd7d3beafe9807b08156dfcb176d18f1699" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/mockery/mockery/zipball/1f4efdd7d3beafe9807b08156dfcb176d18f1699", + "reference": "1f4efdd7d3beafe9807b08156dfcb176d18f1699", + "shasum": "" + }, + "require": { + "hamcrest/hamcrest-php": "^2.0.1", + "lib-pcre": ">=7.0", + "php": ">=7.3" + }, + "conflict": { + "phpunit/phpunit": "<8.0" + }, + "require-dev": { + "phpunit/phpunit": "^8.5 || ^9.6.17", + "symplify/easy-coding-standard": "^12.1.14" + }, + "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": "2024-05-16T03:13:13+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": "nikic/php-parser", + "version": "v5.9.0", + "source": { + "type": "git", + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "9e33da9553fe7786f0962b35f4e4ecf01be89def" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/9e33da9553fe7786f0962b35f4e4ecf01be89def", + "reference": "9e33da9553fe7786f0962b35f4e4ecf01be89def", + "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.9.0" + }, + "time": "2026-09-13T18:51:52+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.8", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "7440368d94738d54f2c1de24dbd3871793bbb0dd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/7440368d94738d54f2c1de24dbd3871793bbb0dd", + "reference": "7440368d94738d54f2c1de24dbd3871793bbb0dd", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "ext-xmlwriter": "*", + "nikic/php-parser": "^5.9.0", + "php": ">=8.3", + "phpunit/php-text-template": "^5.0.1", + "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.37" + }, + "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.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/phpunit/php-code-coverage", + "type": "tidelift" + } + ], + "time": "2026-10-03T14:03:50+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.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "babab73b7ef9fae406f2eb3ee11323a61caa63d5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/babab73b7ef9fae406f2eb3ee11323a61caa63d5", + "reference": "babab73b7ef9fae406f2eb3ee11323a61caa63d5", + "shasum": "" + }, + "require": { + "php": ">=8.3" + }, + "require-dev": { + "phpunit/phpunit": "^12.5.37" + }, + "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.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/phpunit/php-text-template", + "type": "tidelift" + } + ], + "time": "2026-10-03T04:51:29+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.40", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "76bd3198f16aeb375a4d5f3626471445aed0966e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/76bd3198f16aeb375a4d5f3626471445aed0966e", + "reference": "76bd3198f16aeb375a4d5f3626471445aed0966e", + "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.8", + "phpunit/php-file-iterator": "^6.0.2", + "phpunit/php-invoker": "^6.0.0", + "phpunit/php-text-template": "^5.0.1", + "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.1", + "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.40" + }, + "funding": [ + { + "url": "https://phpunit.de/sponsoring.html", + "type": "other" + } + ], + "time": "2026-10-16T05:55:07+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.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "9e935a16187e14f39b0e79910dabd614972cdb26" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/9e935a16187e14f39b0e79910dabd614972cdb26", + "reference": "9e935a16187e14f39b0e79910dabd614972cdb26", + "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.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/version", + "type": "tidelift" + } + ], + "time": "2026-10-04T05:50:08+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.4.0", + "ext-pdo_pgsql": "*", + "ext-intl": "*", + "ext-sodium": "*" + }, + "platform-dev": {}, + "platform-overrides": { + "php": "8.4.27" + }, + "plugin-api-version": "2.9.0" +} diff --git a/config/app.php b/config/app.php new file mode 100644 index 0000000..dfa47ba --- /dev/null +++ b/config/app.php @@ -0,0 +1,126 @@ + env('APP_NAME', 'Laravel'), + + /* + |-------------------------------------------------------------------------- + | Application Environment + |-------------------------------------------------------------------------- + | + | This value determines the "environment" your application is currently + | running in. This may determine how you prefer to configure various + | services the application utilizes. Set this in your ".env" file. + | + */ + + 'env' => env('APP_ENV', 'production'), + + /* + |-------------------------------------------------------------------------- + | Application Debug Mode + |-------------------------------------------------------------------------- + | + | When your application is in debug mode, detailed error messages with + | stack traces will be shown on every error that occurs within your + | application. If disabled, a simple generic error page is shown. + | + */ + + 'debug' => (bool) env('APP_DEBUG', false), + + /* + |-------------------------------------------------------------------------- + | Application URL + |-------------------------------------------------------------------------- + | + | This URL is used by the console to properly generate URLs when using + | the Artisan command line tool. You should set this to the root of + | the application so that it's available within Artisan commands. + | + */ + + 'url' => env('APP_URL', 'http://localhost'), + + /* + |-------------------------------------------------------------------------- + | Application Timezone + |-------------------------------------------------------------------------- + | + | Here you may specify the default timezone for your application, which + | will be used by the PHP date and date-time functions. The timezone + | is set to "UTC" by default as it is suitable for most use cases. + | + */ + + 'timezone' => 'UTC', + + /* + |-------------------------------------------------------------------------- + | Application Locale Configuration + |-------------------------------------------------------------------------- + | + | The application locale determines the default locale that will be used + | by Laravel's translation / localization methods. This option can be + | set to any locale for which you plan to have translation strings. + | + */ + + 'locale' => env('APP_LOCALE', 'en'), + + 'fallback_locale' => env('APP_FALLBACK_LOCALE', 'en'), + + 'faker_locale' => env('APP_FAKER_LOCALE', 'en_US'), + + /* + |-------------------------------------------------------------------------- + | Encryption Key + |-------------------------------------------------------------------------- + | + | This key is utilized by Laravel's encryption services and should be set + | to a random, 32 character string to ensure that all encrypted values + | are secure. You should do this prior to deploying the application. + | + */ + + 'cipher' => 'AES-256-CBC', + + 'key' => env('APP_KEY'), + + 'previous_keys' => [ + ...array_filter( + explode(',', (string) env('APP_PREVIOUS_KEYS', '')) + ), + ], + + /* + |-------------------------------------------------------------------------- + | Maintenance Mode Driver + |-------------------------------------------------------------------------- + | + | These configuration options determine the driver used to determine and + | manage Laravel's "maintenance mode" status. The "cache" driver will + | allow maintenance mode to be controlled across multiple machines. + | + | Supported drivers: "file", "cache", "array" + | + */ + + 'maintenance' => [ + 'driver' => env('APP_MAINTENANCE_DRIVER', 'file'), + 'store' => env('APP_MAINTENANCE_STORE', 'database'), + ], + +]; diff --git a/config/auth.php b/config/auth.php new file mode 100644 index 0000000..d7568ff --- /dev/null +++ b/config/auth.php @@ -0,0 +1,117 @@ + [ + 'guard' => env('AUTH_GUARD', 'web'), + 'passwords' => env('AUTH_PASSWORD_BROKER', 'users'), + ], + + /* + |-------------------------------------------------------------------------- + | Authentication Guards + |-------------------------------------------------------------------------- + | + | Next, you may define every authentication guard for your application. + | Of course, a great default configuration has been defined for you + | which utilizes session storage plus the Eloquent user provider. + | + | All authentication guards have a user provider, which defines how the + | users are actually retrieved out of your database or other storage + | system used by the application. Typically, Eloquent is utilized. + | + | Supported: "session" + | + */ + + 'guards' => [ + 'web' => [ + 'driver' => 'session', + 'provider' => 'users', + ], + ], + + /* + |-------------------------------------------------------------------------- + | User Providers + |-------------------------------------------------------------------------- + | + | All authentication guards have a user provider, which defines how the + | users are actually retrieved out of your database or other storage + | system used by the application. Typically, Eloquent is utilized. + | + | If you have multiple user tables or models you may configure multiple + | providers to represent the model / table. These providers may then + | be assigned to any extra authentication guards you have defined. + | + | Supported: "database", "eloquent" + | + */ + + 'providers' => [ + 'users' => [ + 'driver' => 'eloquent', + 'model' => env('AUTH_MODEL', User::class), + ], + + // 'users' => [ + // 'driver' => 'database', + // 'table' => 'users', + // ], + ], + + /* + |-------------------------------------------------------------------------- + | Resetting Passwords + |-------------------------------------------------------------------------- + | + | These configuration options specify the behavior of Laravel's password + | reset functionality, including the table utilized for token storage + | and the user provider that is invoked to actually retrieve users. + | + | The expiry time is the number of minutes that each reset token will be + | considered valid. This security feature keeps tokens short-lived so + | they have less time to be guessed. You may change this as needed. + | + | The throttle setting is the number of seconds a user must wait before + | generating more password reset tokens. This prevents the user from + | quickly generating a very large amount of password reset tokens. + | + */ + + 'passwords' => [ + 'users' => [ + 'provider' => 'users', + 'table' => env('AUTH_PASSWORD_RESET_TOKEN_TABLE', 'password_reset_tokens'), + 'expire' => 60, + 'throttle' => 60, + ], + ], + + /* + |-------------------------------------------------------------------------- + | Password Confirmation Timeout + |-------------------------------------------------------------------------- + | + | Here you may define the number of seconds before a password confirmation + | window expires and users are asked to re-enter their password via the + | confirmation screen. By default, the timeout lasts for three hours. + | + */ + + 'password_timeout' => env('AUTH_PASSWORD_TIMEOUT', 10800), + +]; diff --git a/config/cache.php b/config/cache.php new file mode 100644 index 0000000..a240c87 --- /dev/null +++ b/config/cache.php @@ -0,0 +1,136 @@ + env('CACHE_STORE', 'database'), + + /* + |-------------------------------------------------------------------------- + | Cache Stores + |-------------------------------------------------------------------------- + | + | Here you may define all of the cache "stores" for your application as + | well as their drivers. You may even define multiple stores for the + | same cache driver to group types of items stored in your caches. + | + | Supported drivers: "array", "database", "file", "memcached", + | "redis", "dynamodb", "storage", "octane", + | "session", "failover", "null" + | + */ + + 'stores' => [ + + 'array' => [ + 'driver' => 'array', + 'serialize' => false, + ], + + 'database' => [ + 'driver' => 'database', + 'connection' => env('DB_CACHE_CONNECTION'), + 'table' => env('DB_CACHE_TABLE', 'cache'), + 'lock_connection' => env('DB_CACHE_LOCK_CONNECTION'), + 'lock_table' => env('DB_CACHE_LOCK_TABLE'), + ], + + 'file' => [ + 'driver' => 'file', + 'path' => env('CACHE_FILE_PATH', storage_path('framework/cache/data')), + 'lock_path' => env('CACHE_LOCK_PATH', storage_path('framework/cache/locks')), + ], + + 'storage' => [ + 'driver' => 'storage', + 'disk' => env('CACHE_STORAGE_DISK'), + 'path' => env('CACHE_STORAGE_PATH', 'framework/cache/data'), + ], + + 'memcached' => [ + 'driver' => 'memcached', + 'persistent_id' => env('MEMCACHED_PERSISTENT_ID'), + 'sasl' => [ + env('MEMCACHED_USERNAME'), + env('MEMCACHED_PASSWORD'), + ], + 'options' => [ + // Memcached::OPT_CONNECT_TIMEOUT => 2000, + ], + 'servers' => [ + [ + 'host' => env('MEMCACHED_HOST', '127.0.0.1'), + 'port' => env('MEMCACHED_PORT', 11211), + 'weight' => 100, + ], + ], + ], + + 'redis' => [ + 'driver' => 'redis', + 'connection' => env('REDIS_CACHE_CONNECTION', 'cache'), + 'lock_connection' => env('REDIS_CACHE_LOCK_CONNECTION', 'default'), + ], + + 'dynamodb' => [ + 'driver' => 'dynamodb', + 'key' => env('AWS_ACCESS_KEY_ID'), + 'secret' => env('AWS_SECRET_ACCESS_KEY'), + 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'), + 'table' => env('DYNAMODB_CACHE_TABLE', 'cache'), + 'endpoint' => env('DYNAMODB_ENDPOINT'), + ], + + 'octane' => [ + 'driver' => 'octane', + ], + + 'failover' => [ + 'driver' => 'failover', + 'stores' => [ + 'database', + 'array', + ], + ], + + ], + + /* + |-------------------------------------------------------------------------- + | Cache Key Prefix + |-------------------------------------------------------------------------- + | + | When utilizing the APC, database, memcached, Redis, and DynamoDB cache + | stores, there might be other applications using the same cache. For + | that reason, you may prefix every cache key to avoid collisions. + | + */ + + 'prefix' => env('CACHE_PREFIX', Str::slug((string) env('APP_NAME', 'laravel')).'-cache-'), + + /* + |-------------------------------------------------------------------------- + | Serializable Classes + |-------------------------------------------------------------------------- + | + | This value determines the classes that can be unserialized from cache + | storage. By default, no PHP classes will be unserialized from your + | cache to prevent gadget chain attacks if your APP_KEY is leaked. + | + */ + + 'serializable_classes' => false, + +]; diff --git a/config/database.php b/config/database.php new file mode 100644 index 0000000..abbb88e --- /dev/null +++ b/config/database.php @@ -0,0 +1,184 @@ + env('DB_CONNECTION', 'sqlite'), + + /* + |-------------------------------------------------------------------------- + | Database Connections + |-------------------------------------------------------------------------- + | + | Below are all of the database connections defined for your application. + | An example configuration is provided for each database system which + | is supported by Laravel. You're free to add / remove connections. + | + */ + + 'connections' => [ + + 'sqlite' => [ + 'driver' => 'sqlite', + 'url' => env('DB_URL'), + 'database' => env('DB_DATABASE', database_path('database.sqlite')), + 'prefix' => '', + 'foreign_key_constraints' => env('DB_FOREIGN_KEYS', true), + 'busy_timeout' => null, + 'journal_mode' => null, + 'synchronous' => null, + 'transaction_mode' => 'DEFERRED', + ], + + 'mysql' => [ + 'driver' => 'mysql', + 'url' => env('DB_URL'), + 'host' => env('DB_HOST', '127.0.0.1'), + 'port' => env('DB_PORT', '3306'), + 'database' => env('DB_DATABASE', 'laravel'), + 'username' => env('DB_USERNAME', 'root'), + 'password' => env('DB_PASSWORD', ''), + 'unix_socket' => env('DB_SOCKET', ''), + 'charset' => env('DB_CHARSET', 'utf8mb4'), + 'collation' => env('DB_COLLATION', 'utf8mb4_unicode_ci'), + 'prefix' => '', + 'prefix_indexes' => true, + 'strict' => true, + 'engine' => null, + 'options' => extension_loaded('pdo_mysql') ? array_filter([ + Mysql::ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), + ]) : [], + ], + + 'mariadb' => [ + 'driver' => 'mariadb', + 'url' => env('DB_URL'), + 'host' => env('DB_HOST', '127.0.0.1'), + 'port' => env('DB_PORT', '3306'), + 'database' => env('DB_DATABASE', 'laravel'), + 'username' => env('DB_USERNAME', 'root'), + 'password' => env('DB_PASSWORD', ''), + 'unix_socket' => env('DB_SOCKET', ''), + 'charset' => env('DB_CHARSET', 'utf8mb4'), + 'collation' => env('DB_COLLATION', 'utf8mb4_unicode_ci'), + 'prefix' => '', + 'prefix_indexes' => true, + 'strict' => true, + 'engine' => null, + 'options' => extension_loaded('pdo_mysql') ? array_filter([ + Mysql::ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), + ]) : [], + ], + + 'pgsql' => [ + 'driver' => 'pgsql', + 'url' => env('DB_URL'), + 'host' => env('DB_HOST', '127.0.0.1'), + 'port' => env('DB_PORT', '5432'), + 'database' => env('DB_DATABASE', 'laravel'), + 'username' => env('DB_USERNAME', 'root'), + 'password' => env('DB_PASSWORD', ''), + 'charset' => env('DB_CHARSET', 'utf8'), + 'prefix' => '', + 'prefix_indexes' => true, + 'search_path' => 'public', + 'sslmode' => env('DB_SSLMODE', 'prefer'), + ], + + 'sqlsrv' => [ + 'driver' => 'sqlsrv', + 'url' => env('DB_URL'), + 'host' => env('DB_HOST', 'localhost'), + 'port' => env('DB_PORT', '1433'), + 'database' => env('DB_DATABASE', 'laravel'), + 'username' => env('DB_USERNAME', 'root'), + 'password' => env('DB_PASSWORD', ''), + 'charset' => env('DB_CHARSET', 'utf8'), + 'prefix' => '', + 'prefix_indexes' => true, + // 'encrypt' => env('DB_ENCRYPT', 'yes'), + // 'trust_server_certificate' => env('DB_TRUST_SERVER_CERTIFICATE', 'false'), + ], + + ], + + /* + |-------------------------------------------------------------------------- + | Migration Repository Table + |-------------------------------------------------------------------------- + | + | This table keeps track of all the migrations that have already run for + | your application. Using this information, we can determine which of + | the migrations on disk haven't actually been run on the database. + | + */ + + 'migrations' => [ + 'table' => 'migrations', + 'update_date_on_publish' => true, + ], + + /* + |-------------------------------------------------------------------------- + | Redis Databases + |-------------------------------------------------------------------------- + | + | Redis is an open source, fast, and advanced key-value store that also + | provides a richer body of commands than a typical key-value system + | such as Memcached. You may define your connection settings here. + | + */ + + 'redis' => [ + + 'client' => env('REDIS_CLIENT', 'phpredis'), + + 'options' => [ + 'cluster' => env('REDIS_CLUSTER', 'redis'), + 'prefix' => env('REDIS_PREFIX', Str::slug((string) env('APP_NAME', 'laravel')).'-database-'), + 'persistent' => env('REDIS_PERSISTENT', false), + ], + + 'default' => [ + 'url' => env('REDIS_URL'), + 'host' => env('REDIS_HOST', '127.0.0.1'), + 'username' => env('REDIS_USERNAME'), + 'password' => env('REDIS_PASSWORD'), + 'port' => env('REDIS_PORT', '6379'), + 'database' => env('REDIS_DB', '0'), + 'max_retries' => env('REDIS_MAX_RETRIES', 3), + 'backoff_algorithm' => env('REDIS_BACKOFF_ALGORITHM', 'decorrelated_jitter'), + 'backoff_base' => env('REDIS_BACKOFF_BASE', 100), + 'backoff_cap' => env('REDIS_BACKOFF_CAP', 1000), + ], + + 'cache' => [ + 'url' => env('REDIS_URL'), + 'host' => env('REDIS_HOST', '127.0.0.1'), + 'username' => env('REDIS_USERNAME'), + 'password' => env('REDIS_PASSWORD'), + 'port' => env('REDIS_PORT', '6379'), + 'database' => env('REDIS_CACHE_DB', '1'), + 'max_retries' => env('REDIS_MAX_RETRIES', 3), + 'backoff_algorithm' => env('REDIS_BACKOFF_ALGORITHM', 'decorrelated_jitter'), + 'backoff_base' => env('REDIS_BACKOFF_BASE', 100), + 'backoff_cap' => env('REDIS_BACKOFF_CAP', 1000), + ], + + ], + +]; diff --git a/config/filesystems.php b/config/filesystems.php new file mode 100644 index 0000000..37d8fca --- /dev/null +++ b/config/filesystems.php @@ -0,0 +1,80 @@ + env('FILESYSTEM_DISK', 'local'), + + /* + |-------------------------------------------------------------------------- + | Filesystem Disks + |-------------------------------------------------------------------------- + | + | Below you may configure as many filesystem disks as necessary, and you + | may even configure multiple disks for the same driver. Examples for + | most supported storage drivers are configured here for reference. + | + | Supported drivers: "local", "ftp", "sftp", "s3" + | + */ + + 'disks' => [ + + 'local' => [ + 'driver' => 'local', + 'root' => storage_path('app/private'), + 'serve' => true, + 'throw' => false, + 'report' => false, + ], + + 'public' => [ + 'driver' => 'local', + 'root' => storage_path('app/public'), + 'url' => rtrim(env('APP_URL', 'http://localhost'), '/').'/storage', + 'visibility' => 'public', + 'throw' => false, + 'report' => false, + ], + + 's3' => [ + 'driver' => 's3', + 'key' => env('AWS_ACCESS_KEY_ID'), + 'secret' => env('AWS_SECRET_ACCESS_KEY'), + 'region' => env('AWS_DEFAULT_REGION'), + 'bucket' => env('AWS_BUCKET'), + 'url' => env('AWS_URL'), + 'endpoint' => env('AWS_ENDPOINT'), + 'use_path_style_endpoint' => env('AWS_USE_PATH_STYLE_ENDPOINT', false), + 'throw' => false, + 'report' => false, + ], + + ], + + /* + |-------------------------------------------------------------------------- + | Symbolic Links + |-------------------------------------------------------------------------- + | + | Here you may configure the symbolic links that will be created when the + | `storage:link` Artisan command is executed. The array keys should be + | the locations of the links and the values should be their targets. + | + */ + + 'links' => [ + public_path('storage') => storage_path('app/public'), + ], + +]; diff --git a/config/identity.php b/config/identity.php new file mode 100644 index 0000000..75e61d8 --- /dev/null +++ b/config/identity.php @@ -0,0 +1,7 @@ + 5, + 'login_decay_seconds' => 60, + 'login_ip_attempts' => 30, +]; diff --git a/config/logging.php b/config/logging.php new file mode 100644 index 0000000..97bdc03 --- /dev/null +++ b/config/logging.php @@ -0,0 +1,140 @@ + env('LOG_CHANNEL', 'stack'), + + /* + |-------------------------------------------------------------------------- + | Deprecations Log Channel + |-------------------------------------------------------------------------- + | + | This option controls the log channel that should be used to log warnings + | regarding deprecated PHP and library features. This allows you to get + | your application ready for upcoming major versions of dependencies. + | + */ + + 'deprecations' => [ + 'channel' => env('LOG_DEPRECATIONS_CHANNEL', 'null'), + 'trace' => env('LOG_DEPRECATIONS_TRACE', false), + ], + + /* + |-------------------------------------------------------------------------- + | Log Channels + |-------------------------------------------------------------------------- + | + | Here you may configure the log channels for your application. Laravel + | utilizes the Monolog PHP logging library, which includes a variety + | of powerful log handlers and formatters that you're free to use. + | + | Available drivers: "single", "daily", "monthly", "slack", "syslog", + | "errorlog", "monolog", "custom", "stack" + | + */ + + 'channels' => [ + + 'stack' => [ + 'driver' => 'stack', + 'channels' => explode(',', (string) env('LOG_STACK', 'single')), + 'ignore_exceptions' => false, + ], + + 'single' => [ + 'driver' => 'single', + 'path' => storage_path('logs/laravel.log'), + 'level' => env('LOG_LEVEL', 'debug'), + 'replace_placeholders' => true, + ], + + 'daily' => [ + 'driver' => 'daily', + 'path' => storage_path('logs/laravel.log'), + 'level' => env('LOG_LEVEL', 'debug'), + 'max_files' => env('LOG_DAILY_DAYS', 14), + 'replace_placeholders' => true, + ], + + 'monthly' => [ + 'driver' => 'monthly', + 'path' => storage_path('logs/laravel.log'), + 'level' => env('LOG_LEVEL', 'debug'), + 'max_files' => 3, + 'replace_placeholders' => true, + ], + + 'slack' => [ + 'driver' => 'slack', + 'url' => env('LOG_SLACK_WEBHOOK_URL'), + 'username' => env('LOG_SLACK_USERNAME', env('APP_NAME', 'Laravel')), + 'emoji' => env('LOG_SLACK_EMOJI', ':boom:'), + 'level' => env('LOG_LEVEL', 'critical'), + 'replace_placeholders' => true, + ], + + 'papertrail' => [ + 'driver' => 'monolog', + 'level' => env('LOG_LEVEL', 'debug'), + 'handler' => env('LOG_PAPERTRAIL_HANDLER', SyslogUdpHandler::class), + 'handler_with' => [ + 'host' => env('PAPERTRAIL_URL'), + 'port' => env('PAPERTRAIL_PORT'), + 'connectionString' => 'tls://'.env('PAPERTRAIL_URL').':'.env('PAPERTRAIL_PORT'), + ], + 'processors' => [PsrLogMessageProcessor::class], + ], + + 'stderr' => [ + 'driver' => 'monolog', + 'level' => env('LOG_LEVEL', 'debug'), + 'handler' => StreamHandler::class, + 'handler_with' => [ + 'stream' => 'php://stderr', + ], + 'formatter' => env('LOG_STDERR_FORMATTER'), + 'processors' => [PsrLogMessageProcessor::class], + ], + + 'syslog' => [ + 'driver' => 'syslog', + 'level' => env('LOG_LEVEL', 'debug'), + 'facility' => env('LOG_SYSLOG_FACILITY', LOG_USER), + 'replace_placeholders' => true, + ], + + 'errorlog' => [ + 'driver' => 'errorlog', + 'level' => env('LOG_LEVEL', 'debug'), + 'replace_placeholders' => true, + ], + + 'null' => [ + 'driver' => 'monolog', + 'handler' => NullHandler::class, + ], + + 'emergency' => [ + 'path' => storage_path('logs/laravel.log'), + ], + + ], + +]; diff --git a/config/mail.php b/config/mail.php new file mode 100644 index 0000000..e32e88d --- /dev/null +++ b/config/mail.php @@ -0,0 +1,118 @@ + env('MAIL_MAILER', 'log'), + + /* + |-------------------------------------------------------------------------- + | Mailer Configurations + |-------------------------------------------------------------------------- + | + | Here you may configure all of the mailers used by your application plus + | their respective settings. Several examples have been configured for + | you and you are free to add your own as your application requires. + | + | Laravel supports a variety of mail "transport" drivers that can be used + | when delivering an email. You may specify which one you're using for + | your mailers below. You may also add additional mailers if needed. + | + | Supported: "smtp", "sendmail", "mailgun", "ses", "ses-v2", + | "postmark", "resend", "log", "array", + | "failover", "roundrobin" + | + */ + + 'mailers' => [ + + 'smtp' => [ + 'transport' => 'smtp', + 'scheme' => env('MAIL_SCHEME'), + 'url' => env('MAIL_URL'), + 'host' => env('MAIL_HOST', '127.0.0.1'), + 'port' => env('MAIL_PORT', 2525), + 'username' => env('MAIL_USERNAME'), + 'password' => env('MAIL_PASSWORD'), + 'timeout' => null, + 'local_domain' => env('MAIL_EHLO_DOMAIN', parse_url((string) env('APP_URL', 'http://localhost'), PHP_URL_HOST)), + ], + + 'ses' => [ + 'transport' => 'ses', + ], + + 'postmark' => [ + 'transport' => 'postmark', + // 'message_stream_id' => env('POSTMARK_MESSAGE_STREAM_ID'), + // 'client' => [ + // 'timeout' => 5, + // ], + ], + + 'resend' => [ + 'transport' => 'resend', + ], + + 'sendmail' => [ + 'transport' => 'sendmail', + 'path' => env('MAIL_SENDMAIL_PATH', '/usr/sbin/sendmail -bs -i'), + ], + + 'log' => [ + 'transport' => 'log', + 'channel' => env('MAIL_LOG_CHANNEL'), + ], + + 'array' => [ + 'transport' => 'array', + ], + + 'failover' => [ + 'transport' => 'failover', + 'mailers' => [ + 'smtp', + 'log', + ], + 'retry_after' => 60, + ], + + 'roundrobin' => [ + 'transport' => 'roundrobin', + 'mailers' => [ + 'ses', + 'postmark', + ], + 'retry_after' => 60, + ], + + ], + + /* + |-------------------------------------------------------------------------- + | Global "From" Address + |-------------------------------------------------------------------------- + | + | You may wish for all emails sent by your application to be sent from + | the same address. Here you may specify a name and address that is + | used globally for all emails that are sent by your application. + | + */ + + 'from' => [ + 'address' => env('MAIL_FROM_ADDRESS', 'hello@example.com'), + 'name' => env('MAIL_FROM_NAME', env('APP_NAME', 'Laravel')), + ], + +]; diff --git a/config/queue.php b/config/queue.php new file mode 100644 index 0000000..79c2c0a --- /dev/null +++ b/config/queue.php @@ -0,0 +1,129 @@ + env('QUEUE_CONNECTION', 'database'), + + /* + |-------------------------------------------------------------------------- + | Queue Connections + |-------------------------------------------------------------------------- + | + | Here you may configure the connection options for every queue backend + | used by your application. An example configuration is provided for + | each backend supported by Laravel. You're also free to add more. + | + | Drivers: "sync", "database", "beanstalkd", "sqs", "redis", + | "deferred", "background", "failover", "null" + | + */ + + 'connections' => [ + + 'sync' => [ + 'driver' => 'sync', + ], + + 'database' => [ + 'driver' => 'database', + 'connection' => env('DB_QUEUE_CONNECTION'), + 'table' => env('DB_QUEUE_TABLE', 'jobs'), + 'queue' => env('DB_QUEUE', 'default'), + 'retry_after' => (int) env('DB_QUEUE_RETRY_AFTER', 90), + 'after_commit' => false, + ], + + 'beanstalkd' => [ + 'driver' => 'beanstalkd', + 'host' => env('BEANSTALKD_QUEUE_HOST', 'localhost'), + 'queue' => env('BEANSTALKD_QUEUE', 'default'), + 'retry_after' => (int) env('BEANSTALKD_QUEUE_RETRY_AFTER', 90), + 'block_for' => 0, + 'after_commit' => false, + ], + + 'sqs' => [ + 'driver' => 'sqs', + 'key' => env('AWS_ACCESS_KEY_ID'), + 'secret' => env('AWS_SECRET_ACCESS_KEY'), + 'prefix' => env('SQS_PREFIX', 'https://sqs.us-east-1.amazonaws.com/your-account-id'), + 'queue' => env('SQS_QUEUE', 'default'), + 'suffix' => env('SQS_SUFFIX'), + 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'), + 'after_commit' => false, + ], + + 'redis' => [ + 'driver' => 'redis', + 'connection' => env('REDIS_QUEUE_CONNECTION', 'default'), + 'queue' => env('REDIS_QUEUE', 'default'), + 'retry_after' => (int) env('REDIS_QUEUE_RETRY_AFTER', 90), + 'block_for' => null, + 'after_commit' => false, + ], + + 'deferred' => [ + 'driver' => 'deferred', + ], + + 'background' => [ + 'driver' => 'background', + ], + + 'failover' => [ + 'driver' => 'failover', + 'connections' => [ + 'database', + 'deferred', + ], + ], + + ], + + /* + |-------------------------------------------------------------------------- + | Job Batching + |-------------------------------------------------------------------------- + | + | The following options configure the database and table that store job + | batching information. These options can be updated to any database + | connection and table which has been defined by your application. + | + */ + + 'batching' => [ + 'database' => env('DB_CONNECTION', 'sqlite'), + 'table' => 'job_batches', + ], + + /* + |-------------------------------------------------------------------------- + | Failed Queue Jobs + |-------------------------------------------------------------------------- + | + | These options configure the behavior of failed queue job logging so you + | can control how and where failed jobs are stored. Laravel ships with + | support for storing failed jobs in a simple file or in a database. + | + | Supported drivers: "database-uuids", "dynamodb", "file", "null" + | + */ + + 'failed' => [ + 'driver' => env('QUEUE_FAILED_DRIVER', 'database-uuids'), + 'database' => env('DB_CONNECTION', 'sqlite'), + 'table' => 'failed_jobs', + ], + +]; diff --git a/config/services.php b/config/services.php new file mode 100644 index 0000000..ec226a4 --- /dev/null +++ b/config/services.php @@ -0,0 +1,38 @@ + [ + 'key' => env('POSTMARK_API_KEY'), + ], + + 'resend' => [ + 'key' => env('RESEND_API_KEY'), + ], + + 'ses' => [ + 'key' => env('AWS_ACCESS_KEY_ID'), + 'secret' => env('AWS_SECRET_ACCESS_KEY'), + 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'), + ], + + 'slack' => [ + 'notifications' => [ + 'bot_user_oauth_token' => env('SLACK_BOT_USER_OAUTH_TOKEN'), + 'channel' => env('SLACK_BOT_USER_DEFAULT_CHANNEL'), + ], + ], + +]; diff --git a/config/session.php b/config/session.php new file mode 100644 index 0000000..ede9338 --- /dev/null +++ b/config/session.php @@ -0,0 +1,233 @@ + env('SESSION_DRIVER', 'database'), + + /* + |-------------------------------------------------------------------------- + | Session Lifetime + |-------------------------------------------------------------------------- + | + | Here you may specify the number of minutes that you wish the session + | to be allowed to remain idle before it expires. If you want them + | to expire immediately when the browser is closed then you may + | indicate that via the expire_on_close configuration option. + | + */ + + 'lifetime' => (int) env('SESSION_LIFETIME', 120), + + 'expire_on_close' => env('SESSION_EXPIRE_ON_CLOSE', false), + + /* + |-------------------------------------------------------------------------- + | Session Encryption + |-------------------------------------------------------------------------- + | + | This option allows you to easily specify that all of your session data + | should be encrypted before it's stored. All encryption is performed + | automatically by Laravel and you may use the session like normal. + | + */ + + 'encrypt' => env('SESSION_ENCRYPT', false), + + /* + |-------------------------------------------------------------------------- + | Session File Location + |-------------------------------------------------------------------------- + | + | When utilizing the "file" session driver, the session files are placed + | on disk. The default storage location is defined here; however, you + | are free to provide another location where they should be stored. + | + */ + + 'files' => env('SESSION_FILES', storage_path('framework/sessions')), + + /* + |-------------------------------------------------------------------------- + | Session Database Connection + |-------------------------------------------------------------------------- + | + | When using the "database" or "redis" session drivers, you may specify a + | connection that should be used to manage these sessions. This should + | correspond to a connection in your database configuration options. + | + */ + + 'connection' => env('SESSION_CONNECTION'), + + /* + |-------------------------------------------------------------------------- + | Session Database Table + |-------------------------------------------------------------------------- + | + | When using the "database" session driver, you may specify the table to + | be used to store sessions. Of course, a sensible default is defined + | for you; however, you're welcome to change this to another table. + | + */ + + 'table' => env('SESSION_TABLE', 'sessions'), + + /* + |-------------------------------------------------------------------------- + | Session Cache Store + |-------------------------------------------------------------------------- + | + | When using one of the framework's cache driven session backends, you may + | define the cache store which should be used to store the session data + | between requests. This must match one of your defined cache stores. + | + | Affects: "dynamodb", "memcached", "redis" + | + */ + + 'store' => env('SESSION_STORE'), + + /* + |-------------------------------------------------------------------------- + | Session Sweeping Lottery + |-------------------------------------------------------------------------- + | + | Some session drivers must manually sweep their storage location to get + | rid of old sessions from storage. Here are the chances that it will + | happen on a given request. By default, the odds are 2 out of 100. + | + */ + + 'lottery' => [2, 100], + + /* + |-------------------------------------------------------------------------- + | Session Cookie Name + |-------------------------------------------------------------------------- + | + | Here you may change the name of the session cookie that is created by + | the framework. Typically, you should not need to change this value + | since doing so does not grant a meaningful security improvement. + | + */ + + 'cookie' => env( + 'SESSION_COOKIE', + Str::slug((string) env('APP_NAME', 'laravel')).'-session' + ), + + /* + |-------------------------------------------------------------------------- + | Session Cookie Path + |-------------------------------------------------------------------------- + | + | The session cookie path determines the path for which the cookie will + | be regarded as available. Typically, this will be the root path of + | your application, but you're free to change this when necessary. + | + */ + + 'path' => env('SESSION_PATH', '/'), + + /* + |-------------------------------------------------------------------------- + | Session Cookie Domain + |-------------------------------------------------------------------------- + | + | This value determines the domain and subdomains the session cookie is + | available to. By default, the cookie will be available to the root + | domain without subdomains. Typically, this shouldn't be changed. + | + */ + + 'domain' => env('SESSION_DOMAIN'), + + /* + |-------------------------------------------------------------------------- + | HTTPS Only Cookies + |-------------------------------------------------------------------------- + | + | By setting this option to true, session cookies will only be sent back + | to the server if the browser has a HTTPS connection. This will keep + | the cookie from being sent to you when it can't be done securely. + | + */ + + 'secure' => env('SESSION_SECURE_COOKIE'), + + /* + |-------------------------------------------------------------------------- + | HTTP Access Only + |-------------------------------------------------------------------------- + | + | Setting this value to true will prevent JavaScript from accessing the + | value of the cookie and the cookie will only be accessible through + | the HTTP protocol. It's unlikely you should disable this option. + | + */ + + 'http_only' => env('SESSION_HTTP_ONLY', true), + + /* + |-------------------------------------------------------------------------- + | Same-Site Cookies + |-------------------------------------------------------------------------- + | + | This option determines how your cookies behave when cross-site requests + | take place, and can be used to mitigate CSRF attacks. By default, we + | will set this value to "lax" to permit secure cross-site requests. + | + | See: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie#samesitesamesite-value + | + | Supported: "lax", "strict", "none", null + | + */ + + 'same_site' => env('SESSION_SAME_SITE', 'lax'), + + /* + |-------------------------------------------------------------------------- + | Partitioned Cookies + |-------------------------------------------------------------------------- + | + | Setting this value to true will tie the cookie to the top-level site for + | a cross-site context. Partitioned cookies are accepted by the browser + | when flagged "secure" and the Same-Site attribute is set to "none". + | + */ + + 'partitioned' => env('SESSION_PARTITIONED_COOKIE', false), + + /* + |-------------------------------------------------------------------------- + | Session Serialization + |-------------------------------------------------------------------------- + | + | This value controls the serialization strategy for session data, which + | is JSON by default. Setting this to "php" allows the storage of PHP + | objects in the session but can make an application vulnerable to + | "gadget chain" serialization attacks if the APP_KEY is leaked. + | + | Supported: "json", "php" + | + */ + + 'serialization' => 'json', + +]; diff --git a/database/.gitignore b/database/.gitignore new file mode 100644 index 0000000..9b19b93 --- /dev/null +++ b/database/.gitignore @@ -0,0 +1 @@ +*.sqlite* diff --git a/database/factories/UserFactory.php b/database/factories/UserFactory.php new file mode 100644 index 0000000..c4ceb07 --- /dev/null +++ b/database/factories/UserFactory.php @@ -0,0 +1,45 @@ + + */ +class UserFactory extends Factory +{ + /** + * The current password being used by the factory. + */ + protected static ?string $password; + + /** + * Define the model's default state. + * + * @return array + */ + public function definition(): array + { + return [ + 'name' => fake()->name(), + 'email' => fake()->unique()->safeEmail(), + 'email_verified_at' => now(), + 'password' => static::$password ??= Hash::make('password'), + 'remember_token' => Str::random(10), + ]; + } + + /** + * Indicate that the model's email address should be unverified. + */ + public function unverified(): static + { + return $this->state(fn (array $attributes) => [ + 'email_verified_at' => null, + ]); + } +} diff --git a/database/migrations/0001_01_01_000000_create_users_table.php b/database/migrations/0001_01_01_000000_create_users_table.php new file mode 100644 index 0000000..05fb5d9 --- /dev/null +++ b/database/migrations/0001_01_01_000000_create_users_table.php @@ -0,0 +1,49 @@ +id(); + $table->string('name'); + $table->string('email')->unique(); + $table->timestamp('email_verified_at')->nullable(); + $table->string('password'); + $table->rememberToken(); + $table->timestamps(); + }); + + Schema::create('password_reset_tokens', function (Blueprint $table) { + $table->string('email')->primary(); + $table->string('token'); + $table->timestamp('created_at')->nullable(); + }); + + Schema::create('sessions', function (Blueprint $table) { + $table->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('users'); + Schema::dropIfExists('password_reset_tokens'); + Schema::dropIfExists('sessions'); + } +}; diff --git a/database/migrations/0001_01_01_000001_create_cache_table.php b/database/migrations/0001_01_01_000001_create_cache_table.php new file mode 100644 index 0000000..06dc7a5 --- /dev/null +++ b/database/migrations/0001_01_01_000001_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/0001_01_01_000002_create_jobs_table.php b/database/migrations/0001_01_01_000002_create_jobs_table.php new file mode 100644 index 0000000..edac6fe --- /dev/null +++ b/database/migrations/0001_01_01_000002_create_jobs_table.php @@ -0,0 +1,59 @@ +id(); + $table->string('queue')->index(); + $table->longText('payload'); + $table->unsignedSmallInteger('attempts'); + $table->unsignedInteger('reserved_at')->nullable(); + $table->unsignedInteger('available_at'); + $table->unsignedInteger('created_at'); + }); + + Schema::create('job_batches', function (Blueprint $table) { + $table->string('id')->primary(); + $table->string('name'); + $table->integer('total_jobs'); + $table->integer('pending_jobs'); + $table->integer('failed_jobs'); + $table->longText('failed_job_ids'); + $table->mediumText('options')->nullable(); + $table->integer('cancelled_at')->nullable(); + $table->integer('created_at'); + $table->integer('finished_at')->nullable(); + }); + + Schema::create('failed_jobs', function (Blueprint $table) { + $table->id(); + $table->string('uuid')->unique(); + $table->string('connection'); + $table->string('queue'); + $table->longText('payload'); + $table->longText('exception'); + $table->timestamp('failed_at')->useCurrent(); + + $table->index(['connection', 'queue', 'failed_at']); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('jobs'); + Schema::dropIfExists('job_batches'); + Schema::dropIfExists('failed_jobs'); + } +}; diff --git a/database/migrations/2026_10_25_000000_create_identity_foundation.php b/database/migrations/2026_10_25_000000_create_identity_foundation.php new file mode 100644 index 0000000..6b93e4a --- /dev/null +++ b/database/migrations/2026_10_25_000000_create_identity_foundation.php @@ -0,0 +1,47 @@ +id(); + $table->string('name'); + $table->timestamps(); + }); + Schema::create('companies', function (Blueprint $table): void { + $table->id(); + $table->foreignId('tenant_id')->constrained()->restrictOnDelete(); + $table->string('name'); + $table->timestamps(); + $table->unique(['tenant_id', 'id']); + }); + Schema::create('company_memberships', function (Blueprint $table): void { + $table->foreignId('user_id')->constrained()->cascadeOnDelete(); + $table->unsignedBigInteger('tenant_id'); + $table->unsignedBigInteger('company_id'); + $table->foreign(['tenant_id', 'company_id'])->references(['tenant_id', 'id'])->on('companies')->restrictOnDelete(); + $table->primary(['user_id', 'tenant_id', 'company_id']); + }); + Schema::create('units', function (Blueprint $table): void { + $table->id(); + $table->unsignedBigInteger('tenant_id'); + $table->unsignedBigInteger('company_id'); + $table->foreign(['tenant_id', 'company_id'])->references(['tenant_id', 'id'])->on('companies')->restrictOnDelete(); + $table->string('name'); + $table->timestamps(); + }); + } + + public function down(): void + { + Schema::dropIfExists('units'); + Schema::dropIfExists('company_memberships'); + Schema::dropIfExists('companies'); + Schema::dropIfExists('tenants'); + } +}; diff --git a/database/migrations/2026_10_25_010000_add_identity_workflow.php b/database/migrations/2026_10_25_010000_add_identity_workflow.php new file mode 100644 index 0000000..9350b45 --- /dev/null +++ b/database/migrations/2026_10_25_010000_add_identity_workflow.php @@ -0,0 +1,77 @@ + $table->unsignedInteger('auth_version')->default(1)); + Schema::table('units', fn (Blueprint $table) => $table->unique(['tenant_id', 'company_id', 'id'])); + Schema::create('permission_grants', function (Blueprint $table): void { + $table->id(); + $table->unsignedBigInteger('user_id'); + $table->unsignedBigInteger('tenant_id'); + $table->unsignedBigInteger('company_id'); + $table->unsignedBigInteger('unit_id')->nullable(); + $table->string('permission', 40); + $table->timestamps(); + $table->foreign(['user_id', 'tenant_id', 'company_id'])->references(['user_id', 'tenant_id', 'company_id'])->on('company_memberships')->restrictOnDelete(); + $table->foreign(['tenant_id', 'company_id', 'unit_id'])->references(['tenant_id', 'company_id', 'id'])->on('units')->restrictOnDelete(); + }); + DB::statement("CREATE UNIQUE INDEX permission_grants_company_unique ON permission_grants(user_id, company_id, permission) WHERE unit_id IS NULL"); + DB::statement("CREATE UNIQUE INDEX permission_grants_unit_unique ON permission_grants(user_id, company_id, unit_id, permission) WHERE unit_id IS NOT NULL"); + DB::statement("ALTER TABLE permission_grants ADD CONSTRAINT permission_grants_scope_check CHECK ((permission IN ('company.view','company.edit','unit.create','access.manage') AND unit_id IS NULL) OR (permission IN ('unit.view','unit.edit') AND unit_id IS NOT NULL))"); + Schema::create('identity_audit', function (Blueprint $table): void { + $table->id(); + $table->unsignedBigInteger('actor_id')->nullable(); + $table->unsignedBigInteger('tenant_id')->nullable(); + $table->unsignedBigInteger('company_id')->nullable(); + $table->unsignedBigInteger('unit_id')->nullable(); + $table->unsignedBigInteger('subject_id')->nullable(); + $table->string('action', 80); + $table->jsonb('details'); + $table->timestampTz('created_at')->useCurrent(); + }); + DB::unprepared(<<<'SQL' + CREATE OR REPLACE FUNCTION sgf_immutable_ownership() RETURNS trigger LANGUAGE plpgsql AS $$ + BEGIN + IF NEW.id IS DISTINCT FROM OLD.id OR NEW.tenant_id IS DISTINCT FROM OLD.tenant_id THEN + RAISE EXCEPTION 'SGF_IMMUTABLE_OWNERSHIP'; + END IF; + IF TG_TABLE_NAME IN ('units', 'permission_grants') THEN + IF NEW.company_id IS DISTINCT FROM OLD.company_id THEN + RAISE EXCEPTION 'SGF_IMMUTABLE_OWNERSHIP'; + END IF; + END IF; + IF TG_TABLE_NAME = 'permission_grants' THEN + IF NEW.user_id IS DISTINCT FROM OLD.user_id OR NEW.unit_id IS DISTINCT FROM OLD.unit_id OR NEW.permission IS DISTINCT FROM OLD.permission THEN + RAISE EXCEPTION 'SGF_IMMUTABLE_OWNERSHIP'; + END IF; + END IF; + RETURN NEW; + END; $$; + CREATE TRIGGER companies_immutable BEFORE UPDATE ON companies FOR EACH ROW EXECUTE FUNCTION sgf_immutable_ownership(); + CREATE TRIGGER units_immutable BEFORE UPDATE ON units FOR EACH ROW EXECUTE FUNCTION sgf_immutable_ownership(); + CREATE TRIGGER grants_immutable BEFORE UPDATE ON permission_grants FOR EACH ROW EXECUTE FUNCTION sgf_immutable_ownership(); + CREATE OR REPLACE FUNCTION sgf_append_only_audit() RETURNS trigger LANGUAGE plpgsql AS $$ + BEGIN RAISE EXCEPTION 'SGF_APPEND_ONLY_AUDIT'; END; $$; + CREATE TRIGGER audit_append_only BEFORE UPDATE OR DELETE ON identity_audit FOR EACH ROW EXECUTE FUNCTION sgf_append_only_audit(); + SQL); + } + + public function down(): void + { + Schema::dropIfExists('identity_audit'); + Schema::dropIfExists('permission_grants'); + DB::statement('DROP TRIGGER IF EXISTS units_immutable ON units'); + DB::statement('DROP TRIGGER IF EXISTS companies_immutable ON companies'); + DB::statement('DROP FUNCTION IF EXISTS sgf_immutable_ownership()'); + DB::statement('DROP FUNCTION IF EXISTS sgf_append_only_audit()'); + Schema::table('units', fn (Blueprint $table) => $table->dropUnique(['tenant_id', 'company_id', 'id'])); + Schema::table('users', fn (Blueprint $table) => $table->dropColumn('auth_version')); + } +}; diff --git a/database/migrations/2026_10_25_020000_lock_membership_identifiers.php b/database/migrations/2026_10_25_020000_lock_membership_identifiers.php new file mode 100644 index 0000000..61e5b4c --- /dev/null +++ b/database/migrations/2026_10_25_020000_lock_membership_identifiers.php @@ -0,0 +1,27 @@ + Aceito e dou por concluído o incremento local de entrada, contexto e permissões, no âmbito demonstrado e com os limites documentados em IDENTITY_DELIVERY.md. Preserva esta entrega como base. Serviços mantém-se apenas em especificação; não autorizo ainda implementação financeira nem publicação. + +Estado actual: **aceite e concluído**, exclusivamente no âmbito local demonstrado. Preservar esta entrega e as respectivas provas como base dos incrementos seguintes. Esta aceitação não amplia as funcionalidades, não elimina os limites documentados e não autoriza implementação financeira ou publicação. diff --git a/docs/IDENTITY_WORKFLOW.md b/docs/IDENTITY_WORKFLOW.md new file mode 100644 index 0000000..a8fa36c --- /dev/null +++ b/docs/IDENTITY_WORKFLOW.md @@ -0,0 +1,70 @@ +# Utilização e recuperação local + +## Contexto e permissões + +Tenant é o cliente contratante, empresa é a entidade empresarial e unidade é uma subdivisão dessa empresa. Pertença ao tenant não autoriza as suas empresas. Pertença à empresa, por si só, também não concede operações: as permissões são linhas em `permission_grants`. + +| Concessão | Âmbito | Efeito | +| --- | --- | --- | +| company.view | Empresa | Consultar e seleccionar empresa | +| company.edit | Empresa | Editar apenas o nome da empresa | +| unit.create | Empresa | Criar unidade; receber consulta/edição explícitas apenas da unidade criada | +| access.manage | Empresa | Gerir concessões nesta empresa, limitado pelos próprios direitos | +| unit.view | Unidade concreta | Consultar e seleccionar essa unidade | +| unit.edit | Unidade concreta | Editar o nome dessa unidade, exigindo consulta e selecção dela | + +Não existem papéis universais, privilégios por email ou acesso implícito a todas as unidades. Para conceder a edição de unidade é necessário conceder primeiro a consulta dessa unidade; para outros direitos é necessária consulta da empresa. Um gestor só pode conceder ou revogar direitos que possui no mesmo âmbito. A revogação de consulta de empresa remove os seus direitos dependentes apenas se o gestor tiver autoridade sobre todos eles; caso contrário é recusada. A revogação de consulta de uma unidade remove também a sua edição nas mesmas condições. Estas dependências são registadas na auditoria. + +A mudança de empresa limpa a unidade anterior. Cada selecção gera um token de contexto; um pedido de gravação com o token anterior é recusado com 409. Os formulários visíveis são recarregados quando o contexto muda. Identificadores recebidos são sempre revalidados no servidor. Mudanças de direitos aplicam-se no pedido seguinte; cada alteração revalida direitos dentro da transacção e partilha um bloqueio da empresa com as alterações de acessos. + +## Preparar outro utilizador, sem acessos automáticos + +Substituir os campos pelos dados expressamente autorizados. A execução sem `--apply` é apenas pré-visualização: + +```powershell +powershell.exe -NoProfile -ExecutionPolicy Bypass -File .\scripts\sgf.ps1 php artisan identity:provision --email="EMAIL" --name="NOME" --operator="RESPONSAVEL" --reason="MOTIVO" +``` + +Depois da confirmação da operação concreta, repetir com `--apply` num terminal interactivo. A palavra-passe é introduzida de forma oculta, duas vezes. Requer pelo menos 12 caracteres e até 72 bytes, respeitando o algoritmo bcrypt existente. A conta fica sem empresa e sem permissões até um gestor autorizado conceder os direitos pela interface, começando por `company.view`. + +Para os primeiros acessos de uma empresa sem gestor, o mesmo comando aceita `--company=ID`, `--company-permission=PERMISSAO` repetido e `--unit-permission=ID:PERMISSAO` repetido. Não existe concessão por omissão. Para novo âmbito inicial, `--tenant-name` e `--company-name` são explícitos, exclusivos de `--company`, e não há reutilização por inferência. Se já houver gestor na empresa, a concessão deve ser feita pela interface dentro dos direitos desse gestor. + +Todos os procedimentos locais recusam ambientes ou bases diferentes de `local` / `sgf_tempo_dev`, e exigem o papel de aplicação `sgf_dev_app`, não o administrador PostgreSQL. + +## Recuperar palavra-passe + +Verificar primeiro a identidade da pessoa e a autorização do responsável local. Não solicitar a credencial no chat. Pré-visualizar: + +```powershell +powershell.exe -NoProfile -ExecutionPolicy Bypass -File .\scripts\sgf.ps1 php artisan identity:recover --email="EMAIL" --operator="RESPONSAVEL" --reason="MOTIVO" +``` + +Só depois da confirmação da operação, repetir com `--apply` e definir a nova credencial nos dois pedidos ocultos do terminal. A alteração é transaccional, aumenta a versão de autenticação e invalida as sessões anteriores no pedido seguinte. As concessões são preservadas. O operador e o motivo ficam na auditoria; palavras-passe, hashes, cookies e tokens não são incluídos nela. Não colocar segredos no motivo. + +## Recuperar gestão quando não resta gestor + +Não há excepção automática nem administrador universal. O operador local deve pré-visualizar e obter confirmação de concessões exactas para uma empresa existente e utilizador existente: + +```powershell +powershell.exe -NoProfile -ExecutionPolicy Bypass -File .\scripts\sgf.ps1 php artisan identity:provision --existing-user --email="EMAIL" --name="NOME_EXISTENTE" --company=ID --company-permission=company.view --company-permission=access.manage --operator="RESPONSAVEL" --reason="MOTIVO" +``` + +A recuperação só é permitida se não existir concessão `access.manage` nessa empresa. Não altera a credencial, não cria outro tenant/empresa e não acrescenta direitos além dos explicitamente apresentados. `--apply` exige confirmação no terminal. Não usar SQL directo como procedimento habitual de recuperação. + +## Prova de navegador com dados sintéticos + +Nunca preparar contas de demonstração em desenvolvimento. Depois de parar outras provas e com as tabelas de teste vazias, iniciar: + +```powershell +powershell.exe -NoProfile -ExecutionPolicy Bypass -File .\scripts\browser-proof.ps1 start +``` + +A prova usa `sgf_tempo_test`, endereço 127.0.0.1:8001, cookie, sessões e cache próprios. O ambiente `browser-testing` mantém CSRF activo e aplica o mesmo guard do destino de testes. O script recusa uma base não vazia e não apaga dados. A credencial aleatória sintética fica apenas num ficheiro local com ACL restrita, nunca no relatório. Não executar a suite enquanto esta prova está activa. + +```powershell +C:\laragon\tools\sgf-tempo\node-v24.22.1-win-arm64\node.exe .\scripts\http-proof.mjs +powershell.exe -NoProfile -ExecutionPolicy Bypass -File .\scripts\browser-proof.ps1 stop +powershell.exe -NoProfile -ExecutionPolicy Bypass -File .\scripts\sgf.ps1 test +``` + +Parar elimina o ficheiro temporário da credencial; o último teste recria apenas a base de testes e elimina os dados sintéticos da prova. Não apresentar esse ficheiro, palavras-passe, cookies ou tokens. As capturas guardadas em `docs/proofs` mostram apenas entidades sintéticas. \ No newline at end of file diff --git a/docs/LOCAL_ENVIRONMENT.md b/docs/LOCAL_ENVIRONMENT.md new file mode 100644 index 0000000..07356ab --- /dev/null +++ b/docs/LOCAL_ENVIRONMENT.md @@ -0,0 +1,56 @@ +> Registo histórico da preparação inicial. O estado actual e as instruções de utilização estão no README e em IDENTITY_WORKFLOW.md. + +# Registo da preparação local + +Data: 25 de Outubro de 2026. Destino confirmado: `C:\laragon\www\sgf-tempo`. + +## Versões efectivamente instaladas ou utilizadas + +| Componente | Versão | Localização / origem | +| --- | --- | --- | +| Windows | 11 Pro ARM64, 10.0.26300 | Sistema existente | +| PHP | 8.4.27 NTS VS17 x64 | C:\laragon\tools\sgf-tempo\php-8.4.27 | +| Composer | 2.10.3 | C:\laragon\tools\sgf-tempo\composer-2.10.3\composer.phar | +| Node.js | 24.22.1 ARM64 | C:\laragon\tools\sgf-tempo\node-v24.22.1-win-arm64 | +| npm | 11.19.1 | Incluído nesse Node.js | +| Esqueleto Laravel | 13.11.0 | laravel/laravel, sem scripts de criação automáticos | +| Laravel Framework | 13.38.0 | composer.lock | +| React / React DOM | 19.2.9 / 19.2.9 | package-lock.json | +| Vite | 8.3.5 | package-lock.json | +| Plugin React | 6.1.2 | package-lock.json | +| Laravel Vite Plugin | 3.2.0 | package-lock.json | +| brick/math | 0.14.8 | composer.lock | +| PHPUnit | 12.5.40 | composer.lock | +| Mockery | 1.6.12 | Dependência auxiliar dos testes, composer.lock | +| PostgreSQL | 17.11 x64 | Binários existentes; cluster e configuração exclusivos | +| Git | 2.55.0.windows.5 | Instalação existente; repositório local inicializado | + +Sem substituições das versões propostas. PostGIS não foi activado e Python não foi instalado nem incorporado. A detecção anterior encontrou PostGIS 3.6.2 em ficheiros de extensão e Python 3.10.6 fora do PATH; nenhum é dependência desta entrega. + +## Integridade e compatibilidade + +Downloads de PHP, Node.js e Composer conferidos por SHA-256 contra metadados oficiais; arquivos e comprovativos estão em `C:\laragon\tools\sgf-tempo\downloads`. PHP x64 executou em Windows ARM64, carregou as extensões necessárias e executou Laravel/PHPUnit. Node ARM64 executou npm, a compilação e Vite. Resolução conjunta concluída sem ignorar requisitos de plataforma. Dependências transitivas exactas preservadas nos lockfiles. + +Fontes: https://www.php.net/downloads.php, https://windows.php.net/downloads/releases/releases.json, https://nodejs.org/dist/v24.22.1/SHASUMS256.txt, https://getcomposer.org/download/2.10.3/composer.phar.sha256sum, https://repo.packagist.org e https://registry.npmjs.org. + +## Verificações concluídas + +- Composer check-platform-reqs: aprovado. +- Composer validate --strict --no-check-all: aprovado. --no-check-all desactiva os avisos contra versões exactas, que são deliberados neste âmbito; as verificações de esquema e lock permanecem. +- Composer audit e npm audit: sem vulnerabilidades conhecidas reportadas no momento da preparação. +- Vite build: concluído; manifest e recursos gerados. +- PHPUnit: 11 testes, 27 asserções aprovadas. Inclui acesso por pertença explícita, recusa entre empresas do mesmo tenant e de tenants diferentes, contexto ausente/limpo, escopo de leitura/escrita, modelo de contexto anterior, relação inválida na base e protecção do destino dos testes. +- migrate:fresh --env=local: recusado pelo guard antes da execução destrutiva. +- Aplicação de desenvolvimento: sgf_dev_app sem administração, sem CREATE no esquema e sem CONNECT à base de testes. Executor de testes sem CONNECT à base de desenvolvimento. +- Base de desenvolvimento sem fixtures dos testes. +- HTTP: /, /up e manifest com 200; /api/context sem autenticação com 401. +- Vite serviu JSX transformado em ARM64, HTTP 200. +- Colisão na porta 8000: arranque recusado, PIDs existentes preservados. +- Paragem e novo arranque do cluster e servidor próprios: concluídos. +- .env, .env.testing, vendor e node_modules ignorados pelo Git. Sem commit, remoto ou publicação. + +## Limites e decisões pendentes + +A demonstração é local e limitada à identidade/contexto. Não constitui isolamento de produção ou aceitação dos módulos. Permanecem pendentes estratégia de isolamento entre clientes, RLS, autenticação de produto, permissões detalhadas, propagação de contexto a filas/anexos/exportações, regras financeiras, fiscalidade, planos, preços, elegibilidade, quotas, fornecedores e operação dos futuros ambientes. As tabelas cache/jobs do esqueleto são apenas infraestrutura Laravel; esta entrega usa cache/sessões locais e fila síncrona, sem trabalhadores financeiros. + +Não foram alterados o InvesteMoz, o serviço PostgreSQL existente, o PATH global ou a política global de execução. Servidor HTTP e cluster SGF ligam apenas a 127.0.0.1. Instruções de arranque e paragem no README. \ No newline at end of file diff --git a/docs/SERVICES_WORKFLOW_SPEC.md b/docs/SERVICES_WORKFLOW_SPEC.md new file mode 100644 index 0000000..3b88349 --- /dev/null +++ b/docs/SERVICES_WORKFLOW_SPEC.md @@ -0,0 +1,207 @@ +# Primeiro percurso operacional de serviços + +Data: 25 de Outubro de 2026. + +Referência: SGF_TEMPO_Roteiro_v0_9.docx, particularmente secções 5, 14 a 19 e 20 a 24. Este documento especifica um percurso para revisão; não autoriza emissão fiscal, operações reais, movimentação de fundos ou implementação integral. + +## Decisões já tomadas + +- Começar pelo sector de prestação de serviços, com um serviço pontual como cenário de desenvolvimento. +- Reutilizar a fundação existente: tenant, empresa, unidade, utilizador, sessão, contexto, concessões e auditoria. +- Preservar independência do InvesteMoz, versões instaladas e separação entre desenvolvimento e testes. +- Usar dados sintéticos nas provas, sem os inserir como operações da Tempo Lda/SEGI. + +As entidades, estados, limites e entregas abaixo são propostas técnicas. Valores de teste não são preços comerciais, taxas fiscais ou regras contabilísticas aprovadas. + +## Condição antes da implementação seguinte + +O incremento de entrada, contexto e permissões tem implementação e provas técnicas documentadas em IDENTITY_DELIVERY.md. A verificação por leitura confirmou uma única SEGI, os direitos de gestão de Osmane na Tempo Lda e apenas company.view/unit.view para Samira na Tempo Lda/SEGI. A última suite executada passou com 30 testes e 117 asserções; não foi repetida nesta revisão documental. + +O utilizador aceitou e deu por concluído o incremento local de entrada, contexto e permissões em 25 de Outubro de 2026, no âmbito demonstrado e com os limites de IDENTITY_DELIVERY.md. Preservar essa entrega como base. Limites conhecidos: âmbito local, sem MFA/RLS de produção, sem criação geral de contas pela interface e com procedimentos locais assistidos de recuperação. A aceitação está registada separadamente do cenário de serviços. + +Nesta etapa está autorizada apenas a especificação de serviços. As entregas A/B/C abaixo são um plano para decisões posteriores, não uma ordem para as implementar agora. + +## Resultado pretendido + +Um utilizador autorizado escolhe um cliente e um serviço, regista a prestação, prepara a facturação, acompanha recebimentos parciais e uma correcção e consegue explicar o saldo pelas origens. Os acontecimentos alimentam captura contabilística permanente, incluindo pendências. Reconciliação e fecho só são apresentados como concluídos quando cumprirem os controlos aprovados. + +Percurso de referência: + +Cliente → serviço → prestação → documento de facturação → recebimento parcial → correcção → segundo recebimento → reconciliação → fecho. + +Os acontecimentos têm identidades e estados próprios. A prestação não é uma factura e uma factura não comprova recebimento. Registar um recebimento não inicia pagamento, transferência ou débito bancário. + +| Acontecimento | Significado | O que não demonstra por si só | +| --- | --- | --- | +| Serviço prestado | Registo do trabalho realizado, cliente, conteúdo, unidade e data da prestação | Factura emitida, pagamento recebido ou reconhecimento contabilístico aprovado | +| Factura | Documento de cobrança com identidade, data, linhas e regras próprias | Serviço concluído ou dinheiro recebido | +| Recebimento | Observação/registo de um valor recebido, com origem/evidência e afectação | Emissão de factura, liquidação confirmada pela fonte ou reconciliação concluída | + +Conservar separadamente datas, estados, identificadores e relações desses três acontecimentos. Não criar os três como efeito implícito de um único botão. + +## Cenário sintético de aceitação + +Entidades exclusivamente de teste: Empresa Exemplo de Serviços, Unidade de Teste, Cliente Exemplo e Serviço Pontual de Teste. Não utilizar os nomes, contas ou operações reais da Tempo Lda como fixtures. + +Para demonstrar as relações e a aritmética do sub-razão, usar o seguinte exemplo em MZN. O valor 1 000,00 é um montante de referência artificial do teste; não significa preço aprovado, tributação nula ou montante fiscal já apurado. + +### Caso principal liquidação por dois recebimentos + +| Acontecimento | Valor do teste | Saldo aritmético por receber | +| --- | ---: | ---: | +| Documento de referência do serviço | 1 000,00 | 1 000,00 | +| Recebimento parcial afectado ao documento | 400,00 | 600,00 | +| Segundo recebimento afectado ao documento | 600,00 | 0,00 | + +Resultado: 1 000,00 − 400,00 − 600,00 = 0,00. Cada recebimento tem identidade e afectação próprias. Repetir qualquer comando/importação ou processá-lo em concorrência não pode acrescentar outra afectação nem reduzir novamente o saldo. Mudar o conteúdo mantendo a mesma chave de repetição deve produzir conflito. + +### Variante de correcção redutora + +Reiniciar o cenário apenas com fixtures de teste próprias, sem alterar o caso principal nem a factura original. Ensaiar uma redução de 100,00 numa linha do documento, identificando documento e linha de origem, identidade da correcção, montante, data, autor e motivo sintético. + +| Acontecimento | Valor do teste | Saldo aritmético por receber | +| --- | ---: | ---: | +| Documento original preservado | 1 000,00 | 1 000,00 | +| Primeiro recebimento | 400,00 | 600,00 | +| Correcção redutora independente | 100,00 | 500,00 | +| Segundo recebimento | 500,00 | 0,00 | + +Resultado: 1 000,00 − 100,00 − 400,00 − 500,00 = 0,00. A correcção não apaga nem altera silenciosamente o original. A forma documental legal da correcção permanece por validar. + +Este cenário distingue três provas: saldo operacional explicado, contabilização válida e fecho válido. A primeira não demonstra automaticamente as outras duas. Um perfil artificial de cálculo/contabilização, se aprovado para ensaio, será exclusivo de testes, identificado como sintético e impossibilitado de activar regras reais em desenvolvimento. + +### Reconciliação exclusivamente simulada + +Comparar os dois recebimentos/afectações com duas observações de fonte sintética, identificadas como simulação e contendo identificador, documento de referência, moeda, montante, data e estado de teste. Uma observação repetida não cria outro recebimento. Demonstrar correspondência individual e total, além de uma variante com divergência que permanece pendente. + +Não consultar bancos, iniciar pagamentos, transferir fundos, executar débitos ou apresentar observações artificiais como extractos reais. A prova demonstra o mecanismo e os controlos incluídos, não integração ou liquidação bancária real. + +## Significado de fecho neste cenário + +Fecho significa o encerramento controlado de um período contabilístico de teste, com evidência preservada. Não significa apenas terminar o formulário, marcar a prestação como concluída ou obter saldo por receber igual a zero. Não é submissão fiscal ou bancária. + +O fecho proposto deve: + +1. Identificar empresa, período, corte e versões de regras/dados consideradas. +2. Verificar que os acontecimentos elegíveis foram capturados, processados e ligados aos documentos/afectações, sem efeitos perdidos ou repetidos. +3. Conferir o sub-razão, a reconciliação simulada e os lançamentos necessários, com débitos/créditos e saldos explicáveis sob um perfil de teste explicitamente aprovado. +4. Recusar encerramento integral se houver pendência material, divergência, classificação em falta ou configuração insuficiente. Mostrar o motivo sem inventar uma conta/regra. +5. Preservar evidências e actor responsável, passar de aberto para em fecho/encerrado conforme validações e impedir gravações concorrentes no período encerrado. + +Eventos tardios ou correcções posteriores não reabrem nem reescrevem o período automaticamente. O tratamento deve ser uma operação autorizada segundo política ainda por validar. Sem perfil contabilístico suficientemente definido, a prova esperada é a recusa fundamentada do fecho; não uma conclusão artificial de conformidade. + +## Dados mínimos propostos + +| Entidade | Dados e vínculos iniciais | +| --- | --- | +| Contraparte com papel de cliente | Identificador estável, empresa, nome e papel de cliente; não duplicar o futuro cadastro de fornecedor | +| Serviço | Identificador, empresa, nome e descrição; sem preço comercial ou regra fiscal por omissão | +| Prestação | Empresa, unidade, cliente, linhas de serviço, descrição, quantidade, data da prestação e estado | +| Rascunho de facturação | Origem da prestação, cliente, empresa/unidade, moeda, linhas, preços propostos, versões e pendências | +| Documento confirmado futuro | Identidade própria e fotografia dos dados/regras efectivamente aplicados; numeração e validade dependem de decisão | +| Recebimento futuro | Identidade, empresa, cliente, data, moeda, montante, origem/evidência, estado e afectações aos documentos | +| Correcção futura | Referência ao original, linhas/valores abrangidos, motivo, autor e efeitos aprovados | +| Evento durável | Identidade, origem/versionamento, empresa/unidade, instante, tipo, correlação e processamento | +| Pendência contabilística | Evento, informação/regra em falta, estado, motivo e historial de resolução | + +Não acrescentar já contratos recorrentes, horas, equipas de projecto, custos, campos fiscais presumidos ou stock. A moeda funcional, precisão e regras de cálculo da empresa não são inferidas do exemplo de teste. + +Identificadores de tenant, empresa e unidade vêm do contexto autorizado. Cliente e serviço devem pertencer à empresa da prestação. Uma escolha de cliente reutiliza o cadastro; documentos confirmados futuros preservam a fotografia histórica necessária em vez de dependerem do cadastro mutável. + +## Estados propostos + +- Prestação: rascunho, confirmada ou cancelada antes de confirmação. Uma correcção posterior referencia a prestação confirmada; não elimina a origem. +- Facturação: rascunho, com pendências, pronta para validação e confirmada apenas com regras/configuração suficientes. Guardar um rascunho não equivale a emitir factura. +- Cobrança: sem afectação, parcialmente recebida ou saldo liquidado, derivados dos montantes e estados admissíveis, não de um botão livre. +- Recebimento: registado, com evidência por verificar, conciliado ou corrigido por operação rastreável. Os critérios concretos de evidência e liquidação serão aprovados. +- Contabilidade: capturado, pendente, pronto, contabilizado ou sem efeito justificado. Falha técnica fica distinguida de informação em falta. +- Período: aberto, em fecho ou encerrado, sujeito à política a validar. + +O primeiro incremento não deve apresentar os estados futuros como capacidades já entregues. + +## Regras técnicas propostas + +1. Guardar preços, quantidades e montantes com precisão controlada; usar brick/math existente no servidor e cadeias decimais nas APIs. Não usar o JavaScript como autoridade financeira. +2. Validar escala e arredondamento explicitamente. A política financeira/fiscal precisa de aprovação; não depender de coerção silenciosa da base. +3. Negar por omissão cada acção e verificar empresa, unidade, registo e permissão no servidor. As concessões actuais de identidade não concedem acesso automático às novas áreas. +4. Recusar um formulário com contexto ou versão desactualizados. Mudança de empresa/unidade não relocaliza registos nem reaproveita silenciosamente autorizações anteriores. +5. Usar chaves de idempotência por empresa/operação/conteúdo para comandos repetíveis. Repetição idêntica recupera o resultado; conteúdo diferente com a mesma chave origina conflito. +6. Confirmar alteração, evento durável e trabalho pendente na mesma transacção. A outbox é uma proposta técnica a implementar no núcleo, sem exigir Redis ou novo fornecedor. +7. Não duplicar efeitos contabilísticos quando um evento é repetido ou uma interface comercial é activada posteriormente. +8. Sem plano de contas, classificação, imposto, moeda ou reconhecimento aprovados, criar pendências explícitas. Não escolher contas transitórias para ocultar lacunas. +9. Manter auditoria das alterações relevantes, sem palavras-passe, tokens ou raciocínio interno da IA. +10. Fecho verifica eventos, pendências, reconciliação e integridade, incluindo concorrência. Um saldo operacional nulo não basta para fechar. + +## Ecrãs propostos + +Reutilizar a navegação e o cabeçalho de contexto existentes: + +- Clientes: pesquisar, consultar e preparar o cadastro mínimo de contraparte com papel de cliente. +- Serviços: pesquisar e manter o catálogo mínimo. +- Prestações: lista, detalhe e formulário com cliente, serviço e origem reutilizados. +- Facturação: rascunho ligado à prestação, valores e pendências visíveis; sem aparência de documento fiscal emitido. +- Detalhe do percurso: linha do tempo de prestação, documentos, recebimentos, correcções e pendências, conforme cada entrega disponibilizada. +- Posteriormente, recebimentos/reconciliação e fecho, depois de aprovadas as regras respectivas. + +As interfaces mostram o que está guardado, o que falta e a próxima acção permitida. Não disponibilizar operações de servidor ainda inexistentes através de botões simulados. + +## Permissões propostas + +Separar consulta e alteração de cadastros, criação/edição/confirmação de prestações, preparação/confirmação de documentos, registo/afectação/correcção de recebimentos, reconciliação e fecho. + +As concessões serão dados parametrizados, mas o catálogo cobre apenas acções suportadas. Gestão de acessos não implica capacidade financeira. Não ampliar automaticamente os direitos de Osmane ou Samira. A matriz concreta e a autoridade inicial de concessão das novas acções precisam de aprovação antes da disponibilização. + +## Entregas verificáveis + +### A Cadastros e preparação operacional + +Proposta para a primeira implementação: + +- Contraparte/cliente e serviço mínimos. +- Prestação em rascunho, reutilizando esses cadastros e o contexto existente. +- Rascunho de facturação ligado à prestação, sem emissão fiscal ou numeração definitiva. +- Captura durável dos acontecimentos abrangidos e pendências explícitas de classificação, sem inventar lançamentos. +- Permissões, auditoria, controlo de versão/contexto e repetição segura desde estes primeiros comandos. +- Dados sintéticos e provas apenas na base de testes; nenhuma factura ou recebimento real em desenvolvimento. + +Critério: percurso cliente → serviço → prestação → rascunho reproduzível, com origem preservada, acessos indevidos recusados e informação insuficiente assinalada. Isto não é ainda o circuito financeiro completo. + +### B Documentos e contabilidade permanente + +Após validar campos/regras aplicáveis: confirmação documental, fotografia histórica, eventos/outbox, consumidor repetível, regras de contabilização e pendências. Demonstrar contabilidade permanente mesmo sem interface comercial de Contabilidade contratada. + +### C Recebimentos correcção reconciliação e fecho + +Completar o cenário sintético, incluindo os dois recebimentos, correcção ligada ao original, reconciliação explicável e tentativas de fecho com e sem pendências. Demonstrar concorrência, interrupções e recuperação. Utilização real fica dependente de regras e responsáveis aprovados. + +Demonstrar separadamente o caso principal (400,00 + 600,00 liquidam 1 000,00) e a variante de correcção (400,00 + 500,00 liquidam o saldo líquido de 900,00). A reconciliação é sempre identificada como simulada. + +Estas entregas partilham o mesmo núcleo. Não criam três produtos ou versões divergentes. + +## Critérios de aceitação + +- Cliente/serviço de outra empresa ou unidade não autorizada recusados por URL/API, identificador manipulado ou tarefa. +- Utilizador de consulta não consegue alterar, confirmar, receber, corrigir ou fechar. +- Direitos revogados e contexto alterado produzem recusa no pedido seguinte. +- Um cliente e uma prestação são reutilizados na facturação sem recaptura ou duplicação de cadastros. +- Guardar rascunho, repetir comando e retomar depois de falha não duplica documentos/eventos. +- Documento confirmado futuro conserva dados e regras mesmo que o cadastro seja alterado. +- Os valores do cenário e todas as afectações são explicáveis pelas origens e calculados com decimais controlados. +- Falta de regra fiscal/contabilística gera pendência, não taxa zero, conta inventada ou estado contabilizado. +- Correcção conserva o original, motivo e vínculos, sem edição directa de lançamentos confirmados. +- Falhas antes/depois do commit e dois consumidores concorrentes não deixam efeitos parciais ou duplicados. +- Fecho com lacuna material é recusado; lançamento concorrente não ultrapassa período encerrado. +- Activação posterior de interface de Contabilidade não repete efeitos já produzidos. +- Testes destrutivos continuam restritos a sgf_tempo_test e fixtures não entram como operações da Tempo Lda. + +## Decisões pendentes antes das entregas correspondentes + +Para A: aprovar esta delimitação e a matriz de permissões/autoridade inicial; confirmar quais dados mínimos do cliente são indispensáveis para um rascunho (a proposta inicial exige apenas nome). + +Para B/C: responsáveis de validação contabilística/fiscal, documentos e numeração, regime/impostos aplicáveis, moeda funcional, plano de contas, reconhecimento, arredondamento, evidências de recebimento/reconciliação, corte e regras de fecho/correcção. O exemplo de teste não decide estas matérias. + +Não seleccionar fornecedor, API bancária ou integração de pagamento. Não construir agora plano comercial, motor geral de parâmetros, IA, sincronização offline ou toda a orquestração Camaleão. As lacunas não justificam codificar valores de negócio fixos como substituto de validação. + +## Estado desta etapa + +Especificação proposta para revisão. Nenhuma migração, cadastro, documento, evento financeiro ou lançamento foi criado nesta etapa. O incremento de identidade está aceite e concluído; qualquer implementação posterior exige autorização sobre uma entrega concreta. O utilizador manteve expressamente serviços apenas em especificação e não autorizou implementação financeira ou publicação. Não implementar a entrega A nesta revisão documental. diff --git a/docs/proofs/01-invalid-login.png b/docs/proofs/01-invalid-login.png new file mode 100644 index 0000000000000000000000000000000000000000..745469fcbc66f4e148aa9adf958e68fbf06e8487 GIT binary patch literal 60796 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 D_^*{h literal 0 HcmV?d00001 diff --git a/docs/proofs/02-authorized-context.png b/docs/proofs/02-authorized-context.png new file mode 100644 index 0000000000000000000000000000000000000000..95faa651283c2099a0c81c765322b7647417ea52 GIT binary patch literal 82252 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 literal 0 HcmV?d00001 diff --git a/docs/proofs/06-logged-out.png b/docs/proofs/06-logged-out.png new file mode 100644 index 0000000000000000000000000000000000000000..5c1bc5ccc0a264a5308c75420c927c5fcf31ca2b GIT binary patch literal 55041 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 z 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%0D%cbe-Q)!H5mw zrX0#lS{y%=$q9}>Sdeq`HJ)9Kr!P1|IQTcU~1Xsd~drUcPMqfRF- zZ30@0NLR9 z6~5=C3kq%39%hh6YEC4*Inb$T>lkZv;zR$#>HdygFH_YrZe9T2oh(EFuGD-5En&d$ zR^pUT>3O^_5S$Cyd_HwN?^0dWhx36ryR+22vn8SJZjo04SNvbU5=f7r_>zU;QcGDj z5XbLwS!dn_F{Ey7>8eAW{Sh$*Zl-AsGS2FBG`p|fM$s~KX6rI?NPb|Rj#+Gh? zZMYW8GV>_ed~;F=7vX_CzSHW_Ei!myWc^-%|G3}T-nF8tRLQx?DIcyc!neC0K+qVX zX9+U56`vM=0Cl@l>6FpF65Oh?eQ1HoPYJT1*z91FX%5eCfW{;hqZjWDv9a=0E0tF% z#oUK>h6V)IX+~B__smrOX%W%fR4@zmif0p5$nj~d6<&Vi4pnL6R3#@$$e{>*5lHoL zdc8K4bjVZK`ih1T1nd##fOlLQ`gtnKqs#FMZws`Xfg`hAJ`9@l6{I2x1gW}aBRH|^ zaDUr=W%4Kid0sHU5BxzDA}^Y=vT)Z%)uOAI;5iyUOemU5%HMGZ@ZrZ6Trl+n9~yeZ z%3PLbD%JpX8jgB=G=1`>d+G~{dWWsyblh5z@SbT-@1A$Wu{*5n$*srI0shsOMJY!7 zi&n}m3fcxLs)O&CF$#804h`<+t^{+W2X9dnM$AF&R)ejS8EVr_w|Q)I9K}7R^-0e$ zZ0?%9VSm)M{#EyfnW!zgnujTnsg^$NHX6tICq>0lax19`3owMxV>?14WJt?pHNdW; zQ2OBG;f3zaR6~OThUz-fgc8_BOkdxhJQ1YZ`_uC2xb7uGm(XtuF8T)MvJIm??*0$BpekKKY*m9QI-wrd> zx*>o4LnOZ-f1SC&WEBF5F`m7)WVk`)gXy8g!y!c{q@?$6h5`8n+EqoAYHte59SMOu zigt%eP+xF9aE_VMNNei|>~yuaHZM%L-(W?PYj8iy$a*)u&G)?2L1&JnK81AbXThSN zQjTr77hMbkHGP)3xcsQ0$yZhz-VjVt0ua_SnbT00yLWpY5rJgnC4~nxGQWtDxUX|# zEyNk@{-|%UV?#4-?Q&POX;R&;%=_|CVXoP$IUSZ`dzqVG76>eotJw)(lI;X8?9?H) zBW%w`ty{sAXo)@CJ>vZy0aj!XkT1P!xQ_y+(;Ws-b5pzgSwNWEyGk2K^|5`sm`FGj z#WXTYAu`OCrZ&uBwWIXouGaXWp+hTy&546E5sRmbe^A?>6g+%9W36m?^@=?@`l@V7 z z63_EbFv=+axiHMOeG$rxoNBy0DHQ3k$z59dS|;RcmyPh z9!zh4a{%JeGdMp22jHlJ8r6E!RCQ-#UifLY)C9%=p5RU0Gi8ast&s@seDYrMNgFJo z`q$aRpH|9xBh9bC1^P0;AlP$PP0@k~3!f$!kALWv#7S)^X66vrVNpVNu!jn7J*(Bu zFc$xs5??-!>Ym?83ag!^uq1a$x%tZg)Q-46sROd9EKIt(XtIC4YurM=OT@XRp1d{7 z5oyVJwqgWhJSHGW0s;_6J62z=eEWk6z2ubceLC}^2uQz3^e091=5O*oX2qBUpi-V? zUcdmjRdkmduyu*a-!TeY=k}cDuX)dx!2!f6LoL&CUo2jyG`%dalVys_8VtS`js3h8 z|4TC451FrIv^C`nO<666$^{WUI5+bKlS&!3L3QND_j^y4t>3#nV3D5QtUc-7PElC+ za)@TdSVfITY~MZX1!;bf33}W&_AdWZN%Tu9;cbr};$DjNaC3FODHe`m&t46;^8K~_ zwzoSX4xK*=PNJXJ*-K)`GyK+vMNQtj)}I|qvt+ z0s-Q5j8h4I$AmCP*kA@433ZCm74`@si!9z8cto7& zHtoN-_|%Lw+#3!GUsl_CD#Ti1e>*$5Ur}VTEGAzDIAWml*9_Ffuh(LAD|i8GaIy(y zmV%|na<_y~w{?%2r15hChD*hfFiqlV z1`uDhUZ$2cD{tAFO+dSk_tJmY{9{)YmCVcuAEqUjh7=T26>EzcZV%bP>W{t?40K^6 z$I_{Pn57i!VzuVLhtD+ z*@SB3>7@MpBy|@-lgsPC*%PlGJe?&au)Cf(fEdw8k zmEr*Kr;{Z?f-A93`|Dgn668aZ{n{rH-aN{(fE zr8K}SIemLmb!=HW!mkeNen^`dzdho2Fg=|d%;|9yhpVID6B-(Q`6Kb=*rmR(3jZ;qe{1H#<@9Oz{fi5|Fl>9j)Ftx3crqxZv9FiVa$R zSTPR~`=mmqu2XhKgCJJp)LBM6e=qsmL_>W}m2$88N2T|X^a_k+z+^bqCVfW)xB-C? z1^R8k#3;ZjgWuBgU`{iRc3tw}wY1H%X@qsRJ0yglq*6&-HS2uU&Qc*+-dxLYk;VW? zhEo_fQ{unbXpRf1xV7}L@7dR{eVwk;Sa<~ zHUdAr)8F&?_Abh({gH!~JN68pKC=;$IlVzLPGnu`qg@OcXui02J1g!~vkmFp8LP-@ zla$I@0-3?$jqr2a(h+Xlm3xsZ8530rzY&M6*_o)Vzl+>f@Fl_2Szc^&@Omq#k)Q%H zk$j}nI?Gm&Xx^pzrDY3e@zBdMeoEO81S*6ZsMaIYNr6c33mL=Frw-NHTbA9u__A<_ z1H}|P+Bg9|6=NJfTSEX)8IheOhsQGDX~Pb`1B1SUs0?wSYNzQ5V9L2H9Qt}k3?>Z>;A~iGGK_# z=V&e_E$^VcziGLooZIjSoG+1DRo-dQb1K@iQa4teq*&7`<}@`YGz}`%&}*3?32rvd z=o&v)Ds%Fy8xmjfMM0PE)TkKd)7GnQd1m_Va4%UR%PPYkiQtYf9y^pq*`%X!A)gia@<|f zmR&N+tRkaM2yTpro9}Pni-L$^;#||+P81lbN;lA4&(;Z6PCS5^yRlJUwxzZ==p>*3 zPhb(l_BH(_C8)Px$B5)gaGpA4Vg|fx(NKrW^7rrAqQ<**UveL&=LCU|42R3ug?PM^ z#(Z*eO8o|*7KACQK8`b&aqw-C-6zIy*HC>CU<+94BgFBIOK8ezAoGRX0z_R5*#k52 ze+V0}KDJbEpO;OhM5Wsdd$Z*50aXJT?i)+SX)bP$wLGKOvrNZfx@WI-)|L;pc9i1e z3+E7x?Ggkcbo%0@0-FR>Rn^JVXIoZuN@_iW0w6bPKS8XJpN&z+Uiz$4hYl9B0o(PL zp5b$%s7tgnJYr#3cxvq_V+wVGCAUsqTCbIt5Kqx=ch?Z${j1Z64)%bMSF59Pw~g*1 zAT4(;8xK!;TN8Y5+zBZ3@_(_N=HeQc3fA72n&j_K;jX=YJN0Rmn4r_0cOPsxYwpEh zOem)rfji%nH^H5Q8n{v2Qub!Z{Y{7S0+D5d8p@CIYT;ZQP_QuRw5B6jt~-k=sU1$g zBl{1wo!pCTcg~EvFzBFJ=7}ZN^w0`GXoIYMsiyik`1J4!nYTtdU)N0e@;z6%Pwlc6 zGSXK+SCyo!Q2|i?_e?i-ays7Jrxa9H4l?u}=psMsjvop;vMiJ6B@VeBtuZ{ZXi-^7 z2xt=xq&SrL4{6rLD(upZX8Y>_{_`2g(n7p^HBw2cg}8ao6Z#z1dfXTom*NZK0%RJ* zJL*Hc+WNc*Z|<%I?}S;lt=73nz-RsRBoUhg?{;xyp?m<9TXW)RCjr?mfTHl|Xyu3)U~uv+&b=XK@nT^C`L8X(iNboW0}efPV=RU==#`8t$h$XV+V^p z#H1K1A)d)ts7PX@*Jm2!B($>b%Sw*VUVjug%)ehDa>T)6079s7J2e~ucJN(1=Vq{8 zUb9>e>{vXxcS3YhvxukL*_PYxni{rZkDhz49ii5h%m-n+<)-L3%>A}u>mX}`hBHC{ z)}5ExRF0jlp(}gR-1Y*zYk~zSv%aV*UvXH(!fXt;zHqm`RK?FW?4BC2Dk1o@+oL&; zL%ehERJc>i&?C*S=}(Z@YHsGu_IvFOWSa*iQ}49quLq2{TIA$;xNKjYm%!la6|u%% zEA)14&4cKHC$3sH z)*VQkBC#alswiYQkHTP7j$naI@NbN#zyld0!v-h1-y45_*u2$-SevPdxGuTGD2wOK z6z9O#TRIO~ZUtcRnyU}hRY#0^m(}JLd%DZ#MUBwt_IgU07&P|D)a5IHm-jK&TQJ=9 z;gz$lY+@y=3TrMxS$1u%5bApu=AK@@op(H>@#AcS>d+Vb^d4JDNV(@iq5!&9Qq$UZ zF6PRzlTK-212L2MY(J3{ZoNH0rR0yTlLvzgS;wsJT_m`UnIG=XdE&!J3-J;Ev;qL> zoQz6!R~eEJM{=%hKW;e_qk%|2R;?N>C8gA?I*L7F11@3G_xipMBZU-swQO?6Clx-; z%{+Z%;NfJhcKcH_8dv}b?2@W0#jLtpr=Bep$&14t9M!w6N_RQj5U}eA&kjtyDik)f z{FI3LEMmcGUKb{Tq;6+qRZ7amS-!*kfKXEX7QGF#R*D%Rt0eNLR!jSQ#_jd^OAQuL z^Oy5yd+-S!v1XZv%jBR>W;YGKi1W%spYCYw3ugc>*3VItSw_Nh?^1`GA46{shukRg zd}3>emVXnxtFOE0&(mW?ZQC}mMgiZR<>K@HUI}0e#}t$tOrQD~_>ICRvLEVH4zB5e zMh$orOANUAbjC?r?)oia+sJi->Om%JeXh-hnle8z{8EHrSW#-v_1KRtA|W{7ak!D4 z08prOZdr#2$Ww3x$pQgEc=V)o^`up~bY4}8Jf_`WIVrwf`N7Wj=?4dFk3OR{sC6^pm)~iop`G}jn=yQ(JvTrU0 zpaba=k1Tx(<=ND|zz^PT+B%JWw$A3r%~X-1tb{_6%CV<2C8o3@lSwgMfA*^hH(`f} z9Xj=+KQA)}%?csm#Fk>{PJkyVOw_|Z-EryS>b<3C(L)x-CZ}_tS{ON8I#rp(NSSy^ zUMo3~E|?i=(>u9tEj74XSnl7Hhb;_C!1C*02{|6aWltiL=>$UR09Ceed^`}2RqOfP za@Qwumz62>xk*O;zT$EFZfsRpx3jq%TjU)lHB0pfluo9^)Q?tmb?xRaKT67rNBLez z&4AlJga{pyEkonot~SAT|7hb{_OO0>A?6;Mj60ahjlUeQKw~J?d)5Z32vl@$fCb!j zALO{|axRu0pS5~#lkYornNc%ibAK39GbNiv@JklqcBXU7kwuB8@uy4s;jwPL3lhVg zg#~z%M8n&o{r$NcMG4P7V|_3dZ+p*D-^MfB$sL_cnfs%a+w+r^+r0k!%P}s?Bld#I zi5VN1l5pcIBxIEDxCrZ%;p*I2XVNDULwjnOVL>6oJ}uA0Z!7tPd^U)Hte8ZB^72n z+usY3z=mB{0!1 zsO7R+Pt^8V0fMB6F_+N*Y@u;gm(X3q&|7AV=wDv0tzEn^n2t0x3R5}yj)>j0gzyNN zMyKXX4{AGBLa8r^H3jS2zHL$zI!wlLwSBoG?kH^>80OK^vMB<1+x0{11*NzATWYPN z%ozPuH(gEJRxh~xEeZfmluf{7Sv;b`V>UJx447aKV5B=|Bu!~#_W`S=r7t_i_(OvYB})&Y zbiol-qCf#RC^yvu4hF$2VQ_me7z~NJ^|THEvRwbZdod<%Ahj+$d{NlbIX6lhZW__& z>>Kn$yf0pD>|#D6;ag={PMsU*6igBy0fvZe*M0(o80i*)YQ&5n#n^Du-E2QQE#K5l z1k6*JLaUHfb&E9J>f=17ADmBor~88-ABMQ9#-??;ee|0cWliog#o7e9X{9ETYJ657 z`MN)XjhpmqLd%P<5p5ezr=TlmXQ8TDKptoJQ)_rX=hU@LG8GKvq&7~(w2U+fIrfi4 z^}Q3yb@G0BPPb9dDm0c@8wLcKgTA2JtF)1J!-x)q@3OruPOE!luULH&y3>e(?b+`J zik(Y3dx%}b9M28YUO+zQxn>_y=VAmv_-cJYp>V32?GX@hs!=4cthPAsr{O@{%&Q4~ z4kf~lCW0_mFZ0-Bz;t(sA38NXCqS${%F83-dQk`h2&T38T;{wA22U8ACr0O;cjuP2 zz1WBeg0P7zL1{*FKaG)m6$c zh^?2-cQgIBLrN)1#(Zx824I{}tPU7ss1q^+yX$k8QKT+4Z_#pIHhBDbl+&<{0*71? zoS3tP!t5*6+j-n)0Sadm$4P}K!d;L}Fk^}WH=kpzrpoxEla4MAcGRP!!d-Aq!R}c< zVmY2awCVnE*VFoA9pGKAJqb|pBb;#JWyWeMqQkM#(F;r>}o3^Hv}1AQ_k*R7)^&nLu2EW(U;v5qKeL4W^TiVI$6w! zpd-7(yi5>Od{Q*#V2YVN6*Tai`|Z?dKT{}%=n;^9A9r2i0-{7PONk}GlYxLYl{wU3 zwwk+g^uemRS80ciL$6{lw)m|z9smv}%ln{J50U_?KoC>Nv{7(#ToJ=niI9wONfeA3yLh=4 zg0SsU*>-Jz>opblBn*L6`<{aqRU4Z2Tq>p94!3<>CDs!9AS6{d&6B-cR72F4KR_;z z{upogwi`{{C0l2WFcuuU00P+%S&ZzD^Pv8Ym(byD1ScC^rTS97qf?omVjk$kX+WGE{8(+xmjmG(99$F1zN__>#Od;uCUUuGV3wI{ zwX|H^g#7$wB`2zNItv!Z7y*IZjxxS@&=ktsBj3PyhZY@@Tx4JHV{w~sHQx*Fdt(@BG-J6FAW zS;|DlR3R=m?oA?2#l(=PjihwJT(AlV)Y?YY-pW@n||9*VbhS+)Cp8tcu0lDxwM zhUZO2jj+YI4fSetY@_F3k*#9eGx`3s@8}C|CBH|m8o|Nb>t$0f2v?RW@lDCMtu zZd|HROeJL=tx?XNC$3%I_2LJ*ichzH&m%G$v(vTZTp<$T(d#R&7lG|9yJb(0HxR-q zlwR?R*2ScROpD>7x|PjENn&lutqjsv7TAW2$CbC+T;Cy9jVlIODo+*+F8RhJfJmhW z7Z>kIkeqbSjim>k1?kCtIv>7P!E~_<3xA5e|GD<741lCFQqrh$dxT3uRjhr~T!07&ge+pAnf z7udTWq42M6O}Xbalb$Xs0_5{oS-tj}b-j(BG@#2X{8~kpduBy3P0l5OMtk#>3``Qk zie>~@R4ZcJMG?VI^`KEd?1}hJ;3gl{9_9ku!c0wN4z`HCoeDrC$6o8^2AK?)AJ0Rp zlX*^3Kx(Q}+YvBuxA$U!46~As=c6TuEtho=yP=_RaUmW`$y0oQ*eR+@%0)aYU{z04 ziRv6%B1^97MonV}rFc|K{U^b%*a(o*te_*H0mv4nZi~36@i^kFok!pU#ejk31X}D` z9^1&gQsWm~@C%Ck z5OySRMH`UIK$m!c#j@4VA1y zHb?{J0mR7%E`R#yxWM1LU8GX9Ni1$o1a5UnOXUDN5*TElVc!sxcr)sY_VLSC>wIBX zObXZO04_Y$t`%TfP*_iuQn^gYfHAHiIdrhaMFZ3Hg1gG{V~JC>Mff!o7oja>0Ja1J zZJn88P~*3#qsE4VmtvWDp+f?^8r3@QJ6FN5A^kumI%`mV;eC8 zPtUKCB1fC~STm`0F$b>k1Gj~O>v|muN2!?nVK_Myse|P`AI^%vdr`*&+gmJ7Wc@+B znfLzN-6}Xjx(JY9qap`cd{4&INIvUXdgUlRZF|qHF6^Kk6$}#;=$`HDs)Y^Krla{B zw=zwSR?C*|-lnws>_5m{yW9K2PIol(bkB(!9aSI@$QBB9yPjX-!E*WqBlgdVB*Yz% zwg0KWTe;&nBTJZT(Psi{ZY_4h`uzD$E-V(;xJh6in>p$9_|~#BTBouMnHqa|;p0@m z{gvfpKtSotmR9gIK_ITh{^ru~H^YYUM!@LiN}Jds~!C-atc{=RQB_PRKXbraKo_Cusb za1c@s#Cg9bZs&1oetto6G60G{Hd|zT7acir>UF7{eBaW)Fc0t7AIr3fcaLb!js~*Z zQn;h6JtOa2Uaa1zp;DLCYW>M<{{oP2KVVjB(bYW~=(kopzuKG$+ zCnEFVS^zkssR^(P${s{@=0g!Hx69f{ z_xSf|Wyr(I$R&>6M&WRg4GZD8t=X5KB;}PH@hXtbCHqV+DcGq_loiXa&M@*~Lj1`ShP(m8%ngc323GlbwA!W`YsZo=MxCw4 zIXe0Xf{e_?V4c9+6ujHj7<%vM$nz=7YX2)@OKi0>^GgZp-@LlLobB&oC8QSI4LBnMD@o|0C`#lF|J;pG423a-_-l?`p_1-Jo2vc^hrcy^g z_K|oHM9s~?qlC)9Ah-U=nTeCsYZtl(h0T09;)JDSIszgBp+K6pZ8Ei*@D!S*-~3r^ zbAxctqT0E;puq1#fb4%82Vga$yZ2wMSAjq^ikq_bRt{=z13OhJ*Ju>mzk295cKKW= z4teGEWKq}k<|L}yS@#T|2&?H>51$b$DH=0H-K&0^O<3Rf{l3^`vwHD!RVe=Pw@NAT zR8ixe?O8*;_2E3cHw8o8Zbvd3ZL6ex6JPRZX!sqFHfa?bK&8JVt;g=_BPq9LZ5*`x z2Ue`*vj5jwi>r+Svk; zv+MR*X;KO4A*z18T!kYpx}t1!D)n&Q_phG--PIBy6D^_c95}}=KDNh2aP1){9eiZO z^D*t#M4$wuHO$9i(x+dV4mtSPRmr(IIWM9m5wteQMb9%VmG+wh-xdh`A%3$-(u7x` zl8JHlQ%9eIS!seFJdloe9YWvbFg|ZP4ZTNPbZH7hXB~!<1(L@ z?Cj&Kc><4?UWi+oBiZ*km>t^1BOU!>OwV%18*dK;i3+0vBgzwl6CiDIKW1pQzI?LCNPkii8G(>w;N5gUYInrWf7`uD;&sbA?ul3i{l} zPT?W_AFsdctLwf>_|XrTYH=0{-o#Dh8+2m?8&MqkD(b#5f#gc1Dax&e$;^z1i zs>Y}Vy(RDv`ZnfSja(`VmL+sJ-i?}rS`PswXO>!yvI>+)xWiaGkut4)8L$|Njh)Xf{qoG9NmE?M1mHVU4e*hrf` zZ;9ZbE;Y2R+KUwyQIN2j_Ye_gCUP5dojD3CGP%&&nwBv7rC+B{9m@6rr}}D(-}im1 z7tRSaeUbS7pFF;&>;wUU^Er0l-;1NJD$CqNE8%9PKr#XsACy~7BbEexR$>?!*7QW# zP;+o8aS5TcVmocqlAB;Wj@@3YFI8a^32>7LmMU8*#a6C4t(@5{OITw%+^||3r(0?+ z5qh|=Oe#iI_X{d_x6aUREG@7L?~}kspSoB#w&Th@%^OZX+6?n+Q*1o&;0Ne+-<2-%ZCRzpD9i;Y3G!YmKQZZ2 zlx^d{0#+kHZrL`>({9@lLkRY{%coA5`!%d=vQui8LAN>3bD5CBXLVCTAYZ4{QeiKXkwOQqo%Il&F3tz!C!3l+M zOO*k*>8V|~V4^DaV#A(i?aJa!kq$1xX>OU!goHb<^CrrDpP#bJxEo}YN_mh~HA_w~ z9}W$@<{`=>eOc(ayoGB);v4Kx0jxqds~xqR5Wo#T=Nmf|V^zCcEhg?sOH)plT2mOs zSsF(p$8L&4OjK4DutpqTSz4UCK`l!R@=GguZ)&i0!ratiR}`c-g5&4(tOnDIO%h%` z=*@fL-@8dlGqqVThujpSL)`%>n;c)-`Ic2jI9Pv_B}D#WfGLiqOBm%*4PwmP$-alS^4MsbFb=?MJeCez{DO_=rwd1a(qxN4nLE`8%2O!EW7)K9xd&t z#`x*!y*CH$*YvR6#nJxOS9^oI`f>hkubCEMjnXMV_xBsKl+yUvMef5&OeKJ8C=ZZz z^w)JY`skWsLw=h2c8POi_Op1)ALTE{sBc3Dq7L6)aApgUA1l#~*CJr{d7rNZ#Va=m z{NFMIr7y<(&ZKT?q#~5_2pCEI?khnKXJ$lDN?aOD_5NAE zGOL#00xOFR>&EeX8b1OZkm?R#A~d;WTvybf%D^0Z`OLTO^x6I(zn6?jzoh=lBTQYB zNwKbpbw>8d=Xp$=;PYFSc4x1MAt7Ac?6VV>AW|RLS%4KpF_mMsnrW!(a%1$o` z-)if2Z*hKO6Xe?Ns$;J$#LoK^ZmMUkRo>!o&T*b6a@o!(#VCH{6j3IfNL}z8_~+DT zf3{J7!S3Siw^|`VtzCvztFK;C7^?*@0jZv`8C(ot5ws)i`@|Ox0)-zee+|a|=lh!#ou?Sus z0|?1B&KDF$N)QdPRk7~2ts0kQ>g57iRnODkro3tsuVP-(FLYOv>__66dE;nGSOu-H z)>fpkQWiWrVb6>F-5I(s-TG~Pl&Dg4;X+6kpR7u)A2*SQgonb=}KrDT3fVyiMlTqAogL?-?a7+_A7^rpzbrk}aFBtPfrI>>D z(&|#P8rGUM6_W+Ox){kcXvfj*dIzNL-AKXC7^2{N&93yX`EhpF%so zrxqo%s-Rt}r=^@>SX1}H`p!@(7CEgpZ8>)o(OzNBmyym z^pNMTl_s%(xS`aY8MdUqqt;IUHhK9bQqjRr@!K?I~X;gm@v{f{1yuX+lA*h{!_h73P@p|iuq!Bc6 z6gTk9d9)_+t;t|%xi;#DnOC(Mo~LYxkZlWhkgsEJI0Jx3nNYU@=hFu)DCW`f5pMaL z18-p>Qt#8cahh@{(mI&!)Xi~hS?TH)L2>#C1F4nEe$|yXg}d5G0;SR`0ns?l!)DO6quBdr`t%m|d$Df*eKlGM6$9{dSKeuUupbtu5$iuuVBY zCR}g{a?_iCynd&_EH%RA+)DdrC0FB49MP^NXkKZ5Eo6T?$jQkQ-R;;44fKtaA35$9N!$ zZ57PIdoPBmh8aTm1VYmTDzdYKeN-*ATryCKkwa>$8kAg^iCy;Ldq^6#*ncbAwVi zvE&EDTV6VgzTNpulhlFJEctBadyM1^zY?SiCAtJjNAfCTMz)aV8wh~ex|A7<>#)Ri zcJ|qwsz)1n%3xb#l>l35Rl$oUA#6sN_CZM9#3D3N*SFVFWJ|Dr1Xt2WRtq!l>(TC0 zfgq`uo)d{#s&LJA^5`WR8O4Nf>Yy-Nz=5I(vajbxq^MKWANan$fZ;^wP%3Jj3N78S za!4E_VA#b%)Z|BvzqN2yyl`u5(&rU7)AJPE)9&~Hz+yh!^E$sYKZ&{*+wT94IagFV zIKV+26>!S@L<+8=nG;ky-=RK#z1e?A;|I+5Q{WW(aLs8!SF;PX;S7jdS>cCb;~x3 znG7Jy=iJd#VZiGW>cbgD8fYUe9V6TZ9{Id`J}TbrJW|L!{{>$++>8d0CzMjizzfl5 zWc>2CH!J>Uv)td5{)G}uN44Z!#A}rZ1rAT=RVL55?(4T#&i_q4|LWo2X{GqY+;}8gOiUTYV}YdB&c^0A(GVUTV#ZnVPfHF`Y_o!;h6>FZ;CV z5%XGNAPNkU{_sL2m$W~N02es-eg@9~TDsel)wjY=%d?9s3n*fr%siF`s9;{2i!ht~=8lCf7pRmO{_PtTp zr0Gay4>#nCq#~wHII~nNEj2RY(QF8HF8n91tvMEn?Y!l}%=SlZ7IrM}$XM!>&bS4# z2L99Q(l%Qi88ykDsX2-{-tGzZ2O8CtO_5UzF z|H8k2n*j1JT>f*H{E{bsHM{{Q5~AFpv9~6k)79tq6-^y*gZvtsN@fko5oSMIK%L&n z`@U_Xca8MsK!pD!>CXopZ$Sz1hAxR4kbRdweM0|B>punm)KC9gb&nda(lrSvC=Le1 z3jkkE?x&avkp@1sc4dZ@pS%HWfhI;@{`%)0(Z8JgH$DD0-W*{0@3S(OtI1CR?3QoS z9?EdSd+j&Ba7Umc&D*ZopK96~3$O2Q5+`n$1GK?!nSJ$7rCR=uZs#u@@c-!Gm#DuS zG~Av7q;ml^c|8g9eeKq&p=oNVN&^PAA1s&!Tol7i?;gng<^YedAMINW zIXsRj?Q&I%Q4rjGQa<&~foGq`{L^awT?^t0;7ll>0V>5M$Mfaagw+W(8?V1R>_-Su z2aRV7RS8wQUow7`S18@{+I+Ga>(6x1Vtie$Sa0%7ICFVKqU>ok`}RzXphjGh;%3d+ zW-ni@_|L`vpL7_Ri%*SRfom;JaI61sEU>?mSpTO_-7o&~m*mkOi13quXIciLT?g?HYGq&Y5HT|@RfQ@1*e|8k0M7M#w}^A{EaDa>27yGYbuHj4XQie% zUS&Rdv$@V^*P7{Hs!lh#y}TgfB9i-!BJd)Q7FeV=kSUzLYnERi>ld)M_L^Rk+8v7D z92o06c&Bn%;d;>F*IqThl6%)5j4wLp8_XiUN)@?9dG17xm{gW*+#=DJ?Q2U~_1a1T zVJ$_cOy=FQvOFC{h*)XL_-Q(ht0-oJH8fOLcX#)zNmn9IPCVFg;uW^!MhdQ`8;7Rq z5=5R<>NGr4-nQyAloDVqOQ`GGJkMeEuBFDEWhxsE!l2o9%vH!HpR6z`K$Te47z>x! zv0Y3}fY^P4hh<=jF-s%Gh3x{j`?1b^M!>D0X=z{O3--f^3sc8q1PTD$t1r~WA+)-8 z2m>|*gOw*~rKsOTxN54voBqCiOHXI|0@6Jxj9OQn#Kc&GfMWc${*^WnsOkDr{!m{> za)#%Hpj!*jW5e-HGOwC3Bx#sAo;x^bZ$Xs-PkZho~dd@3)JE1b?1h;mUgHKFX z&??symuS@4E!(v>2Tm<^FYgyi+7D4D_UvjhbQBH__L}vktE*Gh$|CLi70awc8gc;< zhBMkW$&RHR2$WZvMF1 z_)~LVCce*+eeuJlPPMIPFZ*d!QCde|sBc?4#|kGaJ98UpqS97B$VkQ`K0+-yW$c zsYH+tDoO$cDW{8KA#GxurRbzs#Vxmsr)7U1bwg?6=jX}I%kiY9MjUC?z{)AXfb_fT za;FBzots%huYLA+O@0whZ2m&Dc?=hFeY==mJ&iqayxt;k!j~cEBTv(wO;H%E{1hgW z@LtJLL)|pLo@!*JsDP#9*$6zB@nbSzV=gP;h8KJDl%+x+TS zi2LDdacQ6NTWlVnk7)Ba>B-@RkpMoRE^lfp0$-d0|?_oJ=+rAy^e^S$`*8Syo zWz*3BcX7zX-TxlBcfJ4d%v;!(e}COO%)|D7_v<=Ur~mGTzyD7i|J@&BU#86PT-OjV zcUAH*^4p)EMgDa5-<0QJ0OS?y`-;Mi80I4F@Sb~JU7LG87c@jKZav)RC2lu3v~gyB zci^8l{m=Jxj$I9RG2b>iQ$wL(Wm~;quD?{^gY{Q7?c}~WFn#A^=$}je?B~D9Qh595 zUig~>>d3_O5OMC`Sm2Kj{OaqUZRbCp{Oi8r{hYtr-S5E<{O%u1{_X$&7?Swg@BYQ( zW11b{X{0>yghAh*j*b_fYDoO(qvIdg{pL?~#7X z<;s638uIAbI~d+`GBHww(c{j(fA7r!`tAKQyP18u@4Y$TI<^bn((0+Et6k)E={{@s zUnYv4C2H-v{Iy_;9nOJauX=(VePW@xPi@|$uQ+_>Yr1FqaM^9reGaqdzJW9L-23hA zlC=fHR)?(Z-;X)W4m+eI8fE&pDKq*1m%mDuCVIrnJ`*?nrM86sdgiuGIyzqRs%${C zUA7=~uKr7H#(!y>lRCn|MmGOV>nuO4=4|V-RgKc%+367d1 zVv?y(Za*)qR^}*%xe?u!na;y58Gv%Spsamhf_4A#^7#)W-$yqb`n5C9sq;kCl#|fj z9B13o;wX%Yo$imlHZw~<{yO%#!Q9yU(sgEwHOD4${{-`MF1j%-mPliIh&-a(#BQjv zgu+Ge)49*)ccARnxJ%A{H6dU8pvGbWMQ|OwPa!}st%(mXC7ae{?9ZTn5TY;|hD^eVv3qJDEAUpA3B<{5nm+AY3V+-R53ZB_8Zx2%yLVIZhTVKPiI z*p0%=eDW6kR>u7oWKSkBIO9xfDRT${=oJxk_*{z?*M12~!&XWo$CbC0wc7lz_Rc-3 zsVn{a{${3~sja#wHx5dkehO|@6>=*0;Nd^0)ZMdKp;uEC6EZV<2XV98ODkv z5txD|Z~~#oC58}am5V|GjUfgS63Q*eB>{wR75bjOYt78BYv!G|znOQf{xkobbF$A~ zJ9|B6@8>+{dA=XpHb+>O%5^YF5Dj$c;IZN}sd#j+P~@hq-*=v`+X4yZ6Z&K4#tNNx zPw8WS>HM>8JWcl%e*{xz9SciSL#-WxJ}8P`bAAO$=#Mdg%xvGF({IHbi^nSSYcC}+ zjR;QsdBw7?MZpzyuH><6a?7T(C-{oJ7MPORO3@g?&=?y{%ZSo6+>sJ`a7Now*qK?n znmQw?p8edY{azFmZ514-reIC}{!u-$fg1yL!?ydco?bh>x$Dq-KeU9`X`fxyQNg;C z+==gYanAorvFN!)c|5vw=<2eogKB$e8}qBzj{rZs=Z9xMk+c1ajF+GiGv&*UvB9gH zjK0GZrISn+P%8P!qImG(?Z}aFw_edb`;p=tSoCcsXnjdpb&4qt4jlJvB?w6c*xo zMPWFMwcnu0fwJKF;<;($S)$4m(bMzzDX@*j9FlhGB%$c4+J)%Q*i2r#e*7(WJYWCh zNiIK;Z|XPJR4Q<1f-!_BiuH5kD$QYjtynZRB(HZAZHmmT6ulG$0Ae!GqICnD6UrMb zV2ejni|X0sNcbEx{+`z$bCL+oJE@ z+@TsoA{NV}I8^L_8}ki?Wp1?=8ccH~b-MZvK)4p~X37s=npeX^-|1g!Sst@`F8X8L z)u`@fQdckKvVNhO_qi&`u@zv)b(0HQvoY%YjxR1}HK#N7XJJl>9}wL-QWe;)G-$9Y zwG<5S<;Vim?yWBMxVt{yp1OYa3AFU{=sqwJQAFmj1tmyH6UDK_;IKLA06Fzgow!tH zU%mW6^C+Y7*(t;*Z+4j7GwzV((~f{h8I(u~(X^W+GJKFg94SW zM=4W1ROnIf0Bzf)Tm znVm5wPICjw$J@^KXkD_zM$YK0_5&xwyOxm?Z9F;!{UTqwhD>V4Ar>glv)oFx%rgV+ z&Y1?s;mZvd2D3ENs<8UaMkqJ@iJb2-hS-p8oKWa^k~+q=<(@ zJB8s%K#~+5$#u@;5|3-$%6S8XytR9IWpyQ;n#EKq3bC~b=JARmMN%9FJ)2l)OyGcF z)UAoy^sI)?lXn&&Q^SoMg0L|-GPg&_H7|8kff&z@*nKSPdyB?ENceGC(G9CYvM@ci zfG2hn)qv!g;}wB7Z~0n;Jqd)^XV4iXEcrZKnVJGo(wyX%@I;<2YHB0B2ch(*>*{L> znv5m8J%|(`-y1COBG6wnqqzKbW&jQfGW@z#6Z5N{%ggg0$D!u)L{2~@I|0=524*XE z6HDj3zj|@^^zCbm*QJex!55x9mEr8>z|=a)OQK6$mQEvuh%UzVf~xF?bjx?oFXgbQ z@-Ev=I0h!~4DLB65UH9>-yrd-j5iNnw|5!HLeqgs33bXEm5yr)QCXWyE1GFB;=I80 zID81ocO>6`ei(qP-5Lu;=xE!zl~IPmVV}$M5Gv`)g(_z^;3~Tjt47-@2gDyN1U=)A0z%a|M^?kNE2dIHAWlBkg+Xa15ueQkwRF4y~*4_|1f zg=Tvh6gM{^I6b5IReyHNsCs@>P!!bXW44`dO%6l0h$PL_6)gb4N7H05O^XWDBGS^M zW=fg-ifCeFf!mi(+YHvM5PbA-ST*b=rDaPkMj~$zN=@#6sK0nQE=qXB&WP|ImV}@# zAjzV*EbdkIh8LE0m{B@2runm;+ogH;B~^`X--LAHVFr;Js}s3yMB%)|p$iu3Mq&NM z*aqe{VLRW>#MqwNf`_5QzuOh*5?9M=%a)T~FRYFjMDvT-@2@+(|w{SK>#^{#ptRY&<}( z*L~GMht7x%Q4P0I;aTJH3BuY;+QeKDeSzzk6B0traUn!#gk4-GTAT`|gknQhfj}_IC4_L3frmp0Z+C;z!Ym5(S&mFV8QS(mDZVay8;EzD0wqp|WYz?14Y-um8gfx+o!B@jA%nb9*E^LS1FBoi)E`b z?S?;>kjof*Ye$iS_R{pUamS2?<6l-Xi5F3vsZJAzU})Pf1z$(YO6 zdEscJQ!9U}H@+f)n?=vNc{O>#{Oe1ftl#>%#}t>c(HX{+G^4chYP(sHOWYkEMLctQ zY(n{wL3%ySn`fgifjZZTG6ay1i!NLPK`4~XU>35lEn@GHM}ukU6kkWv$)=CBPnYwg zwrWG@(P6-Ka!TvdnPFVCWQ42M$*V4e{EWEqk?zJ~WX+R$mwAns0**PXdCCTNuy#FC zH+ZxUQq*}eYrpsbCG0kimyw!=VhhSe)R;&n6Vnk=!5c{$ib+h}&bHV_N$uPkae&kS zF3Ya$D^ogmr`& ze>;boI@B!&Z2^XdDWaHFk83xlvc4FL>1@88=0Vx$$8FY+@CW6}GjfzyFqo%hvgsjI zWsO!@U#lYf#B*ai3!*mcO!~%DbzgHBSR~e;Sqivv4E`x%!uF#F4EV_Lo^C0LI+-O8 z){04L99UEQQg&Ee*mf+trMp0$@}=b@`|+eTLNitUo|SXFR32SCg;t!SBBrSlYr z4^=>CU)SB}g4V^r=oM0jXB`bIP?w<#~8laotnvlXZ%Z|$dB(CByHf%U6v$Gfv5iqV_1{K-hslpVlJ z$9q|WYBQiHeUGWI?_fV7@Y2LE|J7!OE?=)83~EAN4R*yibgQxl4-Ii!@xZmTtWpR) z)DXUG4W~idSeqz)tbJ~6V8!*+S0hhkEJts*h8&cINj$Syg z8P%9yqxeS0{T)(qS(>vq;1MAWi7DHE#{-X5V)4Pz+Ui`e9-X^sDQvO)$^CN5-T;r& z_YE-}A%3wEM6DVYl~*`U*5yQ$3HV#4t=PES6T@G1%5Ialar$n7%XA6}m=OneFGIb? z9R2;6CuW~z1V{8%{ZeiY;}lW#z4g%mrOrVVFfJD2)vQ=6I^3c>nqu<}y@tJrbg}4a1_aYDa79Ic7v6J#~o^ z(Ic~S>8fR=qp&zAR%6vnKqrjED=tD1U7K&CHc3<*Oo@V{U>U|4KV`@77f!75sz+r!#+#?@?k0oYB;84G zc*%ajDK)rhk7bt5IWQ+WA-4{8*LMwV=8y=YXmZ^}ll_()po~-mx|N$pdIU|u%!y%# z-j}NqoGf%bz>8E1%vC0L;$Mt3f?xxr?jEK&%*!-YH2q!_0-iX&57vl9dExpbYfCdi zPZx+zP!fMn)A#Hc^>Y(+AzBTPaY5+DZcS3Tq z=QI>rnp61)To8b`;3}YoG_(wEP6+Z(-HY$f&TmYW4|Nddhh=24aSA|`-w=K(kqvh^$3RYm2(RYf!ouCS4-`Wy??O|ezz#Z4HyL85CCG~q z0%zIE2EY9*kf6H{#iKXGbM0RzuXiQ1mIvOCL1kP7ON76i)G?BDL;?u9rxoQ9~cXfvhMD_ zs<(y3IZoi~_3^1v0d3D*ZkZ9WH2bhB@@YY`dFyrkfy_IuVuEAZVS^f6a|}4ECW=3k zrn+}F>Li?X=>5PiLf%m};X|tSH}`u4M~ks*X|d-d*>3dGnWhjh5*?+t{!og4vzs2Q zm}?57OGX7q2##{(!M@2n8KVjf%4uPuXFn=VN z_tV;s9;%!YI%tT})tc^J{x%Ea0Qyl@hngv~g%kHI;6K84bY2jz$A2{V?$Y8$?F4!b zr|Zja3i^PdWt5=q@O0S&@*+DeWz9i`*qFdmn>;+Yx_pUJS0fk%OM43n=3? zY>z~_b4-HUwQw|A!$%dyTf`z zC!*)s~+=!gpILoXGy2=HuNzKCbx_E%A+g zUkRK){JIZltr6NKaT9ZA@Nhp_#NBcm5W@*XSDJJw6(}pv*i_(N22VQ^8q(-1&kT)C zBL0Hk5xS>qz+dQzn9@mL7x-?Kdc;;uGY%I9JHv9R+guo1^=vXBi~*NN$(-P==k9%1=q1ktjSX>(kd zu0cgFx2a$QHw^-L$dRhOunzcB2|5C%30y`)?Lp)zIj;yG8AoaJJMg9Jb=8W`B2CNh z&v^0(jC;_INClarR|7$PK0b2B5yS%3*MF>HV7vOcM)wBtRJDM5%T{3x{ce}?NOR`y zM-wkHCN7_un2r|T7)9@lLsad{P^@a8<&{+4ZwRPcWj*;BO9otD*~=CQz^y zaNSEZE=_^;m77)BoKMdst-m^jNcDdJYtJ>CBGl9(?WHhs?v7SvHIV8rMgalX}7T|HDAa z%32-0leM_CIJ?2PVbW9%t7bZ|45W0^18s%BKLF3*GlMf0Nni1$e!e)w18RSUb~&jd z1ZQ8V_j(F?L1$0_huWmwhNnxT!tQ_~UUgzAzWD_2b28oBA0$A*l_*TGs?R2q(zIa8 zv$TBZTCW{@+DPS^;td5_&ykLhGs<9#2mx>ekBCf`-*0X``@}i4A(bN~%xOgEIdM{M zo=9Rb9R~4-xkZzc)EyLf#Y*$7JLdzRG4LD}L5spYF?mTvj55xla^g z9<(W)>oU@H8o!jXg|#>y5p&X<=3{|;v8V0{pOg!7B`V7!44kDx&X?ytPI<_L=oe_D zXc;{%Q32Fcx*Dp*`j;k0s|Rb==c^o0LNtF0d`$2`em$}0NLOc{+*qu|F^}edKBlAt zLUB=H%n6m(%Ndbt-srqwYj80=X7i$rUdVrk ziLLs>jO4&_*&W;#r&N_sNRQ%=e&K5=Ya`E1oNkz1y~Z@7?pBQLuIc6X@J6H~VNg)S zav?bMsj$8vr#o|ZT=I)m*D)Q_e;6?OpHzOY=c%%JxnRD1DEr_7qnPF!U_?t>NIfSa zD-Fs3sBciDY{${~@v+pJPs@HbkGoDU{B3n_cjL+J`Ju|X7o5Bq>t}9-Rkhh)KIk5M z1>&rC8}@?L(G6ev=61j^(RjZt6KtSfBTfDp*Ww39vzI(B8l#&*2(d|>Doq~&+Q||? zSep)zIb{=q*w=Q7`FQ@s*o3Z65`%!>1hEd>>{Bz%X}+{}rI+|d_}Se*vY_Pq1^FjR zcmDBv!9Q>LpW*-A{QQU_)xW#vU%c?2+5fwV`_JtE-IV-aF8s%M{%&G^D&zSt%i`aS z{(L5ebQ{;l^@nSo8ru^?&KLv_r}x=l4qXq4er^wx6d-uxfQh-S2m*y6>F#rejL0P!4Qs1_79-FX)f~go};`FgU=w8+B z=*Q;X44_WXLcSmyGMJ$m_8u{8^7L{Z=)lI`kCtYx2dbX={OSD<8}kTh#pvEjML0!~ zhJFIL&`S%e5|-xXv^L~su*zcu(5FyEpR2umL)DP>Ra~nV^@6;&k>yk7EyXA0H^jme zvn1}RN;*KSAngo%G#5K~BKq;5TMy6n<54jhkthss(>f(iv6DM#Xsl^YN0l)xkxkr& zdR3o-G?|9$b5Qxm4_g3Z;&5hGV_q?_HPv~e*g?J>mD!S=6n?irbc~-S?Ze>UaY3v$ znth@+VQ!+YNmOY!ku^{FB(v`YU+2puC{f5 zx64h|!qFwnblk{4T{Ee^%?c=V_^=_)d4O-~op9k1rrIOHZ)cz;ffG?w9PmJWPurY2 zFOL)x(yZFLyr502Sc+DX%AFNcTWdfaz(hXDwTP9{+gs4#C-`lDL*do$JKCB}+0tf# za=|VnWG>)d*0G%Fk;&Y)TbPKER_mnS?aBe#*j3(lSy*P+%o^*A#x`(gA>81e@a)06 z=D2ay4 zytt)LsG~x1M_yG4ATeX`CrrU=@!9f5E9I9--2Q-oDnjPT=N^~(A<`Izy-S_A5e=tU z`O>V~SnbWUF`p!L3Pr;U9@jmSxbmqzN8uZ_-3H&Zv=D=S^EZ1!6$`1TY(@VE+EbEv zYWu#jF2k0@EL>pdZk1$p#H9!#06m6k_@a+oc984J=Sea4L^d-h_I8K1=34cTlsxLc zNsS*-Rf}!=v5^4DLoKsT%?W<_a^2JxXn3F$=sE%EDO)uThKnz8(SMHshqfqH)bj0e zKTvzjAI3mt&5o9oe_)_54L>AJ4~w8qCOO#?)fRc|j*BNc4Xv1FZl-}k#ZZTyP+Q;4 z!V!H?ZbCyf<^Y36DWpr6P*Ac*$cic&?%Pq*p6tN8TitY8H%E@G#hGIBpZy(=?3OYfX8*WU2=vtZ`e)XFF2YcGx1&T5^)oL2SmNe=b4qKi$BlV{wz3+anq4JYZZ|+5Ok5aD z?D=}o^zF2cJGXrBR4rj6T}33;$yjGh9cv}94RGnfj_@+NS_KIrBAv6@Yl^O9yNmSc z%Gjp>k?6L`D~Uk~TZ5w&PsM1PsD|LE9ywpi80YX$u{bN$0Eoz%ap(l!3k%rOMkHOUv!|ev&IvF<9UW$_Nl7cpqpKP{3>x1H`4Z&d{_jDn>a%Q(;EChGI5tz zQ|JTcz}X12uo&K{j7D3@!o*KEhp)W#wE59yx!)zUEj~xCqE&!UEs3IuIWf7g3XS}H zh--QELjD+dPJ$oqvN7awXh(G?k&>Xw!MU*Wt(ZX^57o7 zRFgyCjM#fPyS5p@zW=HZaB(7YL5L!iH)YfXj z6wXH8nVl-++(>)7AX21&9sRHfAaEh&4E*z*H%C4 zI^^GX{r(i5b1mAUdO+Fe;%<-JY9HOC-w7Y|N>H!689Q!2&bk6E3q;wm@*A-idfAmV z+&WZ>!hr&QppLcgKR9;xrW~^50e*g9Lzg`R9gFFT*`#{K1|O(bHT5gKY%q@2&m+wZ zz|<^~C7*9A5LVPNCpD)H-8T=MVG!P*pS66_-YeO-SRZsD>Rhu{eEUFLK&+#u_lD<# z4G&8DKbfK*`O}Zl0{W3%{Xd)iC2Ah<_}hISZte5@vhqIk!MI*u(%{(unYayoSGLe{ zla2JCR>?QK2WNxt5x1~yXE!|3An(20@+|n*rM~_;vL7M2`Pa7p=E2`eJObL=KD9{A z3%tpET3 literal 0 HcmV?d00001 diff --git a/docs/proofs/07-current-workspace.png b/docs/proofs/07-current-workspace.png new file mode 100644 index 0000000000000000000000000000000000000000..3929116e3581fcf96b3e83a20e508635a82f8c27 GIT binary patch literal 68523 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 literal 0 HcmV?d00001 diff --git a/docs/proofs/08-duplicate-removed.png b/docs/proofs/08-duplicate-removed.png new file mode 100644 index 0000000000000000000000000000000000000000..aafa2d0bd1d65d5ec39b118ecc4eb636193a3d50 GIT binary patch literal 61805 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 literal 0 HcmV?d00001 diff --git a/docs/proofs/09-samira-read-only.png b/docs/proofs/09-samira-read-only.png new file mode 100644 index 0000000000000000000000000000000000000000..dcbe1ab61b97724374510790578354b2e8e68171 GIT binary patch literal 56184 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 z zXpAXCb_}L3NECP5ah8)pqpHf`3ThMslFlX-n7DD!>^~faX-Fv$C{M$>AWm8}M_2yXKyiSzWX-!g+v7Ds7Rm=;R6ITzsiw()7tICR!D@qEW56Zx_)OeA&UcL&9#0-e|FChZL@{}J-I@>Y0yrM@G8xj^ zHGD|B({8N|(fV9fMzl(yIJu}te`6^U7-hQ)x*()k!fiPYmK?nr*6!dwj~#B+G&>xQ z_VO+H#en49;$>#FjKcl~)0wgbK(r`Y;8p#AI@!&?Ew*>nF0Sn{Nk! z*5=P~6XK{>?n3tVBWO!a_2MVJ zwDf=}y~PP90;&3noJYDsW%sl*<%eP|RKa|eB^=CYPVXvGKa_zz91fhGd$>|-)(}v> zK=lK7hWO~#;VIb#6au68-C(hT%C+ef`Jy!E;_PcUhEKbBWyqitO|IX;rAVu&&;_Z9 zn@@ib{Z(LURAgcqF@2A2GVIs)_O}Sc@x*E>zm2*aUiP3L>vs^)bCK&7#`AgAdq9F! zQ}%a^MX5JZ@Gjb^1iu!hdk166Zj%FnP1)MI7;e{3`q5ztXP%2>0)6cI8&q)@}y-zHfQon4V#|Y{iH7 z$id9#(|#ShY4X!l`E`3V4m-nBGe|p-=F3*$cI$gCGB+L?t!fWDi|*sV(O{SE;k7av z;%rJ9VUZeA(H#bcgB-fMH}OQ*kAN3_Uw&rJzB^{>TA0F1zx-)Pv-(-(gC2sn zZ;?cQJTd)22&>y>aNwP{W}5P8!&*DzE}Fr@FpvvUf`+7{k|b4jtK$1seLbCnwjRLrb}o_MIS^Lh^TW{E+;v26N6-6}x#nR1-1G;S36)RYE!n|c zIu8P3K<%S$5W8^%ay z=v&&d>mR=U96X){uY~}lFX!90C8zHU-Kx^lB%@LsXAP2wmsgzqNAH#g9fPOh{J(F; z$Mu-j3YmH!TTD~GxJssg0}t%mc-h{(&n{TCnQoa_HK#wLx)14rP4kSicqC@dr%FEt z$fVDZ>@6_6^rHzWmVaOqU>X_M=17@5odL10>A58KrA(3%b0rl@y1)Y@q&t;4jG1;T zL@f!(QkO~G-REroSulPUUUdsIG0lI^Y7B1M3+b`y3WI=Q<{xr}XV=e54`f@Fyx*`E z!`8YVJ{k?@ss?ZxBuvI9*%wo+YTlNDaQ7fKwZ{|Q(b4QxN*(0tUF4HBV&_Q)B=h$V zqwumXO0g>jtQgsD1aRAfoIev9c3Ery?@}2M-Aj52e^54JDHifW;_9`$=9UawE23}qQ z#_lJQ8eW3))hz4NZ!pOFi z!L2GNJu_CkcO>dBTNQijsz|zO7auq?-OG40`Up7)U@9Q?SrXKBwTT1`nfl@ zoT!NKo^L@XecA;Xex~2Bc*>WIF4cQvdI^Mh+D{`SF2X13_O*Exi|dtSLoq#8_i=>l z{dQ8j>iPK>{j#;2Q=DLOQ$0BezxU9jpqSM8@N-LsG^&$BN;hYSs5Hux3^8`0*=!3OYFk!FSu5# zw5;6tI5KF|D{#J@qjtUIm=?j8rcz4vu7F3=d8WqoLl(zZdcmbMpM;H+P^g_#D}7iv z&owE~n}3tb7&*#%KRL#(yYJafz2PU`XlQIaz3tFeM~dCBDb^EXmY+IK#mNmCnI!7^ zxxCivvkl=hp&d-iZ8-E$rtfaj&%h6Z{aw&(8HIWSJiY=|$HV3!DLawiHfAVHNZhrI z=-z$lmi?{EiiVe|*~>{6CUvA3F-TJL&tq=sL*Ecgfo7YSX6C!5z7vl|KP>qq)WppN zGE6(i#;dbTh<0WMFs068NuF#;!Y7wrW&ZwcBHb3LdJ`sbH9UB zmA%d;-uRLbqyFxSc18;UEZo0cJlYs?swZsNLzzJ)lM?axg8DA!cZ>ek-BXP|j@+9S z_OIG_nk}3~j)0e&5*mVVfYI#&ccXT@3wosW4_zp$uT0gSL?HDV#*CuxEXCY5?HwEc zIO$%8wR%jNSJ+N?R^DrN=^)!t83clAQ0om>_`@nn5rK4v2R@vcRM#vlUrrR&F)!R5KHJ#2SJQCC5hJCu0FV zPq&+&meC4YdD>A;L|T3l<=iMYm^eFHSXhTE83%~8`;;~FnLd8jN5&e8nHH@BK`Wb* zqsQ8TUk9dV`KXNATS+gP8;f6IhBTzRo}6BOTN{z%_MRIS))p-{x)YYw`%mlPOkahBKs~Mb3zE(jOM4Gcr=?r`f*}*zTTRcloKwW z?BD3Ek`l%R$btZRDgZrz7zC=WRg@!|>W>XY=spi!>J1xhID6cd-AVH%2>4Ee95|>) zdRbzuX0oAVa$f0s7Bi(F-Csj-F?bjyl7)k9-grgb|9R)$BWdipl7^4JGoZh(#GSK} zL*UY_>d7TcDi)u(GWKPXzvsO}8HZ@~T#+PA42FL3ab#$_2+ikEcb&FtpxTIe396)B zljtb$VMnB^Y?VB+I5nT`HKuWX-T@{{2RjWS93)|I07%@~Yv&ZY^H8DXR1%G)ockz_ zk?!7rI}cEqu^$jC%X-xj(HkOwm{oinB`BC(kuO8z8Mj?LZ2R&ah-x-gi%K`)s^e3l zL`xpZcjl?9<#DnmxxR>?CUwhrYU+`AghIyE=$nh6W4&i_HmM?RW=^nL{Ufh3Qi}aT z@~klz!Hg|#rBqC<#GmzcUMhcdkYUw)GV!m9lxQtgQVJ$tM&Pfwe^@>#+@`CmLTRs& zfuB5Eq$wC;tn8=m*bMV+EAv|u9qzC@>fbQ;>GG!`FQ4Dp`m2U#KfB&a#5s2psZSI5j^$Im}8g59sW==57?o_<6K z0%zGR6_ipR|Lf@?Wpih%-uGHSA^;0}w|f8%MZEH!@W|c3eB{WZNU==Vr#}9L6y;Zs z?Bb95uRq3{iOt^6wReyT%9u9Xh1^ZH1b8CP2WE4_Fq;HC{;)x*^|qkU_p)E z&&Q+VyD=oSpS~y%cH||528JK^pg0e#tdnWM-LCm5`okRnIZW+=$`=b}#VhSke4gL1 zDgfBhYvaz=O}EjNV2%(n(%9xHs~cMXu%CaeZ(d7~zW}Q~*LpMX#}9)MQu}*3Txx$m`-}ahMy6H&+o_>?uf(63r@l&}eAX*n}``*|Em{qVNqtUK|8$g$~SE9EH~ zVtk_~wmZbz#v^ieCoZRRyluefQ73aN;fKZH>hi)PgVmdXHty?-k!|GUvL$lboup(^ zWtPbXDHf7)w5IoqUQTsL)h5NmFQH3;>P8D5zrk(3Ax)A&V5ZdrhJ`rH&!V82#?wiM zGNR3x!QLx7m9LReYr}m9>4!4Vloyc}D{=U?`fQ5gjKZy(tJmmm-d3HZMfD4WA}va` zmyd6fqzutO3$suCTH&<#aqAU(ydyA$%x}(;1&71?-RsGTn=H6&^M~o!U&U3WKdyqy z&Cd;y1o=^@YP=1BV@fZhdU;2`2%A@-;#|{0Z`d6d<=m}qmCU3lFBw?X0~r+NY^5Iw z7}Xt0R7Fj7npkma3U9qDFp*CI;F0Ai`_&fhZsZwPuF39@ns)x1&ewt)Vtfnylbles zh5yl|(GJ`-78w1yqlBP2GdqHlXT=Zlb$(jd1ckD<1sF@T7BWHme z7~)Ay4&YdY*jieFls0j@%ac7;uI?l5#yJ;*hR?3hcmYB}MSk?A^(vBpVt9;=kaF>f zTOBR?VXZOtQ30Q%$kasKY>xvM-Pjm%kt+*Qg{1{uRnGmCk0BB(78J7^iSC^XjVb!l z!fQAD%9vViL4#Vs9LDp>H_c?fEHUL3%Jk~vj8_xz%ya{hTbgshLL%8q4XK6~Dp__% zlzTr|u)PO;7_@xWYxTyb%ZddCo4(|0d0=NojV(vcdUI`U+iq{EqSe&zPeJBLq`@=d zt~q-PTzSp3;1-4Zp;%X|jj-fOyr)U#$~ulC=g+oW zIsd0e&%!CcJtDIiaml_+cLas%pSUtkK&rRL7~D-vbPL93+1;3e9DPb|D@g?H4+MLa z(e@!-`J+tCnr1NA|1yB?X}a(bH=P3FeqK0*#>vt+mQS z8K(*2)~)zBG;Lzr^~Q*rL}`H6|;1)3b=_QQ}b z7NhJ+o>At-)ivFD&Q3YrQ967|gtV*Ke71~&rM!#s2#jF3%#<}+u5sl9-Iy2q_6A{k zk|o6Sj(bDX@hN4C9|qAM=c_Kl-S@)PlB(r64hRRho}N;h-hy|{;=%jvxFNf%mt2Ul zV@$U;L$ni4%=aY~%;K8raJv#4^!zyZLWZeDrJvh(&*q|Z!t%Rg#e|AJ7oQOas1q^t z4IF-v1BUBeWMM$&U!;0KZiD$Ezz^+JV=isXgy6Djhh@5UXJq(R`?_iXb4z8)Zzo^9 zbV}%g6Byc2$A;Ge5f|YQ6E0e7`*oqu@ z)xk5;j5C>l)L6{!N{}`SpcBHKTKlRqNW3CSjxMh-f~1LC7*nUNs#MTz0s`;9!D-xk z&k53Rgn4!`doDiU`k-cgTK(`Ozr-zAeb=vxl>VaCv9A&47{_$%Vt=!pFR3(1l6jrS zLP0oWbz4$pkGb6?4xEXvkBS8kX3y zPeUd~B11^$L{mUC2-47n-I*31{|!96%6A#lQ|N~i z^*g|<8mC&+38rS5qEPc&i%=z9cuU{M#T4VKeDkc(-7sn4yfoc4{OV9q2F%v z3DnT9{vQSBHSAL0aEOr0Prk+&Fi1=!hvy21UuEF%J~wmfpQCjO62f&Y)P@YerL$BK zuZZB69@BM?##=rr=t_+W;|IC*-GIYWYWkb^ICkUcJ)?C0(Qk;QD|1KZ5tw1PLMZcg zIMPR=-C3Lstdus&tlp=f%#v0FOR@*&TG%PZ6$Vq8=43K~G)G0@#Jt$N(9Nrs!Hpcy zuKRf>0;n$hRuD}oB71oX(NSQ_;-G+d-n8ASlJ(wly@_4HNH5;2-8_r!yc<_-3CF10 zx6z_}n*nB0hutz39w-tt*?j(CVyW{@jk)2Z%i_GlgYXyQZH0G}jcr|crDRlE;G8dR zbjr|Su~p&Oo0vh4VL@aCUKg1lKs^9iWn(LI*&$QJC7;_n;Rih%6{^+~ zXKvUjca<1^rskhY@K0v)NU@su^ms_4YXEI{&vrujxN(EoeP@~-96-a0T&auw<{i^X ziNw&&M`>L~DJGVS^t5F!4=SPDDs4*IFk|CBLI9SE?fB4&d#rV)T4U}PuNqu+HkN9R9f7#NY zo#Jo9bTmgw`_Q*G_9>w-C2p5_S;3^?Za@3E(OzQBS#nB}tNfa_~A`;%@PAa`bYhRi!3cyV{Kfk5)jLt;-^@k_?Ng z+*sqP5Zr$Kmh3|I2IQzcSJwvIU>ddDV^Ps1?Iyzfd?x5zb6L=_%5WI>*3wufwaJ%^ zDkv2WXr?>ZkiXK8mPUpJBjeISEe_b7a%!4m8__$sOyBylb8?DnJNm8Dj!{sYkL*gj z$FZ`whSZ*0^?oUIjVLnB0jjeu%q5_3l05C0(ohrU{L3j6j%8%;F-sVDcdvfeHpZ>| z_%Fz-A4(F}f%p_TNQ!=6ZRs3dlA*Wf%6@^hl8@FJyhioXYK-csH(MXG@|>_O6tNfj z1?L6p9nkM+@vtE{2`q^vHj-raw9_>kKYpHqRKr=2( zPj#)c?>zBaU87K)4-urT6DvUU%V&C*hqX#nRmyNX{*;~Z2bO)qCxZ43$%ith;!nn( zn2kRX5)#=Li->Ga?;H;;TFYlKGe&CMX|`NDgFs4-!6r-(ZgRkT2{;phDZ?+ldOZ;* zP0}3neYE+)y|V;P8iZvCrn)&`He?EeN$0gZdiBXIlD{adHv^Bhw6~@*GqB^pt$E&P z=$;=XKH#C{t}7u;jJ>hw6la zXvlIY9UjUBK_g|GHl*e5;;WWAx99R%50y;l@z*>!A|@A`fD@-b?7m*8obwy@8Wd2&$;=QX4j4*}f-CL4e7aWBul?Xr zdqFwJ(%Kqm69jjS;8Qi&3uJY1XIF>e1(Bl97qf8Nwmf=;3n><+-v+Z-XNv+3e%QI_ zyx1DsvrP8Rjmp-xw01NBl_md^%o;OY^G;N(F_>M1u!=*NXy9SR-sb+YY7La)MWyV zJtM7~c>0CrlVe(4G~6qc+@}ccRz$5x+DJuJZ=Y_LAbsMhCzMRFx<#wYCs)x|6*h3+ z4y9yzhUcIgne|>V*ZFaofSTpSF{PY~ViB%&)T(seaN|r~&dp^w%0D%cbe-Q)!H5mw zrX0#lS{y%=$q9}>Sdeq`HJ)9Kr!P1|IQTcU~1Xsd~drUcPMqfRF- zZ30@0NLR9 z6~5=C3kq%39%hh6YEC4*Inb$T>lkZv;zR$#>HdygFH_YrZe9T2oh(EFuGD-5En&d$ zR^pUT>3O^_5S$Cyd_HwN?^0dWhx36ryR+22vn8SJZjo04SNvbU5=f7r_>zU;QcGDj z5XbLwS!dn_F{Ey7>8eAW{Sh$*Zl-AsGS2FBG`p|fM$s~KX6rI?NPb|Rj#+Gh? zZMYW8GV>_ed~;F=7vX_CzSHW_Ei!myWc^-%|G3}T-nF8tRLQx?DIcyc!neC0K+qVX zX9+U56`vM=0Cl@l>6FpF65Oh?eQ1HoPYJT1*z91FX%5eCfW{;hqZjWDv9a=0E0tF% z#oUK>h6V)IX+~B__smrOX%W%fR4@zmif0p5$nj~d6<&Vi4pnL6R3#@$$e{>*5lHoL zdc8K4bjVZK`ih1T1nd##fOlLQ`gtnKqs#FMZws`Xfg`hAJ`9@l6{I2x1gW}aBRH|^ zaDUr=W%4Kid0sHU5BxzDA}^Y=vT)Z%)uOAI;5iyUOemU5%HMGZ@ZrZ6Trl+n9~yeZ z%3PLbD%JpX8jgB=G=1`>d+G~{dWWsyblh5z@SbT-@1A$Wu{*5n$*srI0shsOMJY!7 zi&n}m3fcxLs)O&CF$#804h`<+t^{+W2X9dnM$AF&R)ejS8EVr_w|Q)I9K}7R^-0e$ zZ0?%9VSm)M{#EyfnW!zgnujTnsg^$NHX6tICq>0lax19`3owMxV>?14WJt?pHNdW; zQ2OBG;f3zaR6~OThUz-fgc8_BOkdxhJQ1YZ`_uC2xb7uGm(XtuF8T)MvJIm??*0$BpekKKY*m9QI-wrd> zx*>o4LnOZ-f1SC&WEBF5F`m7)WVk`)gXy8g!y!c{q@?$6h5`8n+EqoAYHte59SMOu zigt%eP+xF9aE_VMNNei|>~yuaHZM%L-(W?PYj8iy$a*)u&G)?2L1&JnK81AbXThSN zQjTr77hMbkHGP)3xcsQ0$yZhz-VjVt0ua_SnbT00yLWpY5rJgnC4~nxGQWtDxUX|# zEyNk@{-|%UV?#4-?Q&POX;R&;%=_|CVXoP$IUSZ`dzqVG76>eotJw)(lI;X8?9?H) zBW%w`ty{sAXo)@CJ>vZy0aj!XkT1P!xQ_y+(;Ws-b5pzgSwNWEyGk2K^|5`sm`FGj z#WXTYAu`OCrZ&uBwWIXouGaXWp+hTy&546E5sRmbe^A?>6g+%9W36m?^@=?@`l@V7 z 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.12.0" + } + }, + "node_modules/@rolldown/binding-android-arm64": { + "version": "1.2.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.2.15.tgz", + "integrity": "sha512-xD7DdZCrbThKuxNg7ooQmvp07ys4J/pnSEMTG3/OdOWl6daC67m/Q4fL78sRHMxTH/N4fGUbYhcPM0MF5WFHkg==", + "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.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.2.15.tgz", + "integrity": "sha512-m2WuQ6r0B4OTYxyPpNLtXaMRbRDUbG8YQV2Q3KTdSSK8Th6KHCnC8jVCJt8bvYeSB5WivkkNbc85mKadaSdOxA==", + "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.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.2.15.tgz", + "integrity": "sha512-5RtnsHM36nodM9WbMy+zip0LGS/G+y5wro5RHrpOlr4ac24+1zSi9kiV2MP1myZeZ/ifEHfulQcWjnAXzc2C2A==", + "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.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.2.15.tgz", + "integrity": "sha512-g3l09pyFqhu+135JKkbkwiKGQmwU5hUMUPJ4VdBADvuqR8d33L6H578rh8m7rtxbdp+VmX/+nzI7nvhSZlzpUQ==", + "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.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.2.15.tgz", + "integrity": "sha512-nIe3VugI97nGQtspPxDqA4sXMUpeiocKIP/CqpY/u/vgbT+alX+cVxu1C/oVBPKg4feNTmYovE91v4DgXvXNwQ==", + "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.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.2.15.tgz", + "integrity": "sha512-iTBjXx+B5QSvgI89lJfmqh4wTh8NabR1YZIIN3hNx4zSG0EVfVqkOvLulNpG4251pbd6/IAmZ/LefVk1Y4rPhw==", + "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.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.2.15.tgz", + "integrity": "sha512-uN26XOnVR7rqQupG3V9oAG2EGGatWjcJHOeDOHUFCh4TBWmP2tHTFoVN13aYbwfm0aHqJAEmcwhAu6sooIjfqQ==", + "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.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.2.15.tgz", + "integrity": "sha512-9nWkcdd+H+XhaA3fQIwpHnKIrfx/PQ6rO0pivr78Og07tXlUlctBBJoEYLPfhTmCR/QxEVdn6uPjHV5SymPhdw==", + "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.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.2.15.tgz", + "integrity": "sha512-Ggh0ciFjLwIusLSLz7LZYEaGdxOAUJXI+Qu5JCbhPJJHEt8vP+IjRATTJheiJsdzzTYgUiHUiw3X1Ea3ZpMBdA==", + "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.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.2.15.tgz", + "integrity": "sha512-FHg60rS6DBePAYZ9X9F67x+JObFdmgn6tupA1C/a3B+CufFmTD4mX+e8M75tCiAO3foR/6xwVBI0KQiI7sn/rw==", + "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.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.2.15.tgz", + "integrity": "sha512-/cvV/7v5VGz/moiz0XKRj2dE8DzsKyhIu1KpOvJGPjRywg3yscON889UGvAe8zfiJLHup7VLjBduoGWi3HusWQ==", + "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.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.2.15.tgz", + "integrity": "sha512-MyzC5Hrv/sm+Z7TSGKP/j8001RO2xQm1zOpCNVL4j0cY/VhBZviludA2YFQ7i4lH6ZAXxQm0lcMdBzM+99mE7w==", + "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.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.2.15.tgz", + "integrity": "sha512-+PgYiS+AH5omy6L45ZLxybasauJaj3M8buoT83D+nzPmCayXlxUV9hydhciCKVyIg0B/v0BtXPDE1uGqNwCPpg==", + "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.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.2.15.tgz", + "integrity": "sha512-HFZd2QNQYn1JbIi+Hpd7H+r/lkWxcfIu28nirZ6eCn2LafuvmExMlb/P96Sfx5tf7pPArw39IdhmCF8vmV+NhQ==", + "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/@vitejs/plugin-react": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-6.1.2.tgz", + "integrity": "sha512-fhJNGUdscQa4HkI0xFxwonWyhnVReCPDbXI7FH7jmzpnVCrFQI7PRrhWecO263610vOrs9tr2Y4xcf8uAdFxbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rolldown/pluginutils": "^1.0.1" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "peerDependencies": { + "@rolldown/plugin-babel": "^0.1.7 || ^0.2.0", + "babel-plugin-react-compiler": "^1.0.0", + "oxc-transform-react": "^0.152.0", + "vite": "^8.0.0" + }, + "peerDependenciesMeta": { + "@rolldown/plugin-babel": { + "optional": true + }, + "babel-plugin-react-compiler": { + "optional": true + }, + "oxc-transform-react": { + "optional": true + } + } + }, + "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/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/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.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/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/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/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/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/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/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/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/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/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/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/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/nanoid": { + "version": "3.3.20", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.20.tgz", + "integrity": "sha512-uKdg2G3GNCKQn9byYOpxbGqrT2fGO5KRt5J/8b3pok8rT6qxGWF6hxMyJiEYtAf+FVyYuD9hRaDqX5uPFYJ4ZQ==", + "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/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.31", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.31.tgz", + "integrity": "sha512-YUbWYCgErwnMAVkjUnYa+KlMBzGpHwiIt/DE7f0G33AuX2LH9UcTk6KgWxd3zRU+pN3u/C+Xl3EnMLM4Hea7Sg==", + "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.20", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/react": { + "version": "19.2.9", + "resolved": "https://registry.npmjs.org/react/-/react-19.2.9.tgz", + "integrity": "sha512-RuLdAokXv3sRmZa2/N8QH0KmTBIgDKC+buRUikGqow31+mGSGidLCX2o4XFq8OV+xBFWfhM9DVgTq1PPHADH4w==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "19.2.9", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.9.tgz", + "integrity": "sha512-YceU74W21fXEHszKBLj16MY0CmvpFKOs60iVrIyW/cCgOPsZJNaB6GVJEtIUqt6AG6EjzKLui5lPRrxAeS328Q==", + "license": "MIT", + "dependencies": { + "scheduler": "^0.27.0" + }, + "peerDependencies": { + "react": "^19.2.9" + } + }, + "node_modules/rolldown": { + "version": "1.2.15", + "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.2.15.tgz", + "integrity": "sha512-6odND+fel5zVw3I4Yc2e69gvguDnX0CAAGiNDZSq4ik5WUcaLrkD2GLuog0XcODbor31hZ5ayEMgVDno+KPV5g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@oxc-project/types": "=0.155.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.15", + "@rolldown/binding-android-arm64": "1.2.15", + "@rolldown/binding-darwin-arm64": "1.2.15", + "@rolldown/binding-darwin-x64": "1.2.15", + "@rolldown/binding-freebsd-x64": "1.2.15", + "@rolldown/binding-linux-arm-gnueabihf": "1.2.15", + "@rolldown/binding-linux-arm64-gnu": "1.2.15", + "@rolldown/binding-linux-arm64-musl": "1.2.15", + "@rolldown/binding-linux-ppc64-gnu": "1.2.15", + "@rolldown/binding-linux-s390x-gnu": "1.2.15", + "@rolldown/binding-linux-x64-gnu": "1.2.15", + "@rolldown/binding-linux-x64-musl": "1.2.15", + "@rolldown/binding-openharmony-arm64": "1.2.15", + "@rolldown/binding-win32-arm64-msvc": "1.2.15", + "@rolldown/binding-win32-x64-msvc": "1.2.15" + } + }, + "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" + }, + "node_modules/source-map-js": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.2.tgz", + "integrity": "sha512-KGj/8Y43x35aZVDtt+J4mK1hoLGHULMYfSkODJNQjNDC3oW1PqPoxMwo0pLUsWM/UEGzON/NxeHywEfNXNP3Vw==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "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/vite": { + "version": "8.3.5", + "resolved": "https://registry.npmjs.org/vite/-/vite-8.3.5.tgz", + "integrity": "sha512-z1YpjieJ9g0ebTmQpLBv/oq9E3F9EIlOe+7LahW8SrE3LTiG3udBRUXQOlYXP9b+IC2q2phHeVxj9xGlw34OEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "lightningcss": "^1.33.0", + "picomatch": "^4.0.7", + "postcss": "^8.5.30", + "rolldown": "~1.2.14", + "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.7.1 || ^0.8.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" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..9445d8f --- /dev/null +++ b/package.json @@ -0,0 +1,18 @@ +{ + "name": "sgf-tempo", + "private": true, + "type": "module", + "scripts": { + "dev": "vite --host 127.0.0.1 --port 5173 --strictPort", + "build": "vite build" + }, + "dependencies": { + "react": "19.2.9", + "react-dom": "19.2.9" + }, + "devDependencies": { + "laravel-vite-plugin": "3.2.0", + "vite": "8.3.5", + "@vitejs/plugin-react": "6.1.2" + } +} \ No newline at end of file diff --git a/phpunit.xml b/phpunit.xml new file mode 100644 index 0000000..6305a38 --- /dev/null +++ b/phpunit.xml @@ -0,0 +1,34 @@ + + + + + tests/Unit + + + tests/Feature + + + + + app + + + + + + + + + + + + + + + + + diff --git a/public/.htaccess b/public/.htaccess new file mode 100644 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/favicon.ico b/public/favicon.ico new file mode 100644 index 0000000..e69de29 diff --git a/public/index.php b/public/index.php new file mode 100644 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 100644 index 0000000..eb05362 --- /dev/null +++ b/public/robots.txt @@ -0,0 +1,2 @@ +User-agent: * +Disallow: diff --git a/resources/css/app.css b/resources/css/app.css new file mode 100644 index 0000000..9f5ca09 --- /dev/null +++ b/resources/css/app.css @@ -0,0 +1,2 @@ +:root{font-family:Inter,Segoe UI,system-ui,sans-serif;color:#20393e;background:#f4f6f5;font-synthesis:none}*{box-sizing:border-box}body{margin:0}button,input,select,textarea{font:inherit}button{cursor:pointer;border:1px solid #c5d6d2;background:#fff;color:#21564c;border-radius:7px;padding:10px 15px;font-weight:600}button:hover{background:#edf6f2}button:disabled{opacity:.5;cursor:not-allowed}button.primary{background:#176b55;border-color:#176b55;color:white}button.primary:hover{background:#125440}input,select,textarea{display:block;width:100%;border:1px solid #c6d3cf;border-radius:7px;padding:12px;background:white;color:#20393e;margin-top:8px}input:focus,select:focus,textarea:focus{outline:3px solid #cbe8dc;outline-offset:1px}input[readonly]{background:#f4f6f5}label{display:block;font-size:.9rem;font-weight:600;margin-bottom:20px}h1{font-size:2rem;line-height:1.2;letter-spacing:-.04em}h2{font-size:1.25rem}p{line-height:1.65}.muted,.help{color:#5d716d}.help{font-size:.85rem}.eyebrow{font-size:.7rem;font-weight:750;letter-spacing:.13em;color:#347968}.brand{font-size:1.6rem;letter-spacing:.15em;font-weight:750;color:inherit;text-decoration:none}.brand span{display:block;font-size:.68rem;letter-spacing:.38em;margin-top:5px}.login-layout{min-height:100vh;display:grid;grid-template-columns:1fr 1fr}.login-layout>aside{background:#123f35;color:#f7fcf9;padding:70px 12%;display:flex;flex-direction:column;justify-content:center}.login-layout>aside h1{font-size:clamp(2.2rem,4vw,3.8rem);margin:80px 0 20px}.login-layout>aside p{color:#bddecf;max-width:350px}.login-layout>aside small{color:#8ab8a4;margin-top:auto;padding-top:60px}.login-card{align-self:center;padding:60px 12%;max-width:650px}.login-card h2{font-size:2rem;letter-spacing:-.04em}.login-card form{margin-top:30px}.login-card .primary{width:100%;padding:14px}.shell{display:flex;min-height:100vh}.sidebar{width:240px;flex-shrink:0;background:#123f35;color:#f5fbf7;padding:32px 20px;display:flex;flex-direction:column}.sidebar .brand{padding:0 12px}.sidebar-label{font-size:.63rem;letter-spacing:.12em;color:#8bb7a6;margin:55px 12px 12px}.sidebar nav{display:flex;flex-direction:column;gap:6px}.sidebar nav button{background:none;border:none;color:#b9d5c9;text-align:left;padding:13px 14px}.sidebar nav button.active{background:#275b4b;color:#fff}.sidebar-bottom{margin-top:auto;padding:40px 10px 0}.sidebar-bottom strong,.sidebar-bottom small{display:block;overflow-wrap:anywhere}.sidebar-bottom small{font-size:.75rem;color:#9cbeb0;margin:6px 0 20px}.sidebar-bottom button{background:none;color:#c3ddcf;border-color:#477667;font-size:.8rem}.workspace{flex:1;min-width:0}.workspace header{background:white;border-bottom:1px solid #dce6e1;padding:24px 40px;display:flex;justify-content:space-between;gap:15px}.workspace header strong,.workspace header .muted{display:block;margin-top:5px}.workspace header strong{font-size:1.15rem}.workspace header .muted{font-size:.85rem}.local-badge{align-self:flex-start;font-size:.7rem;padding:7px 10px;border:1px solid #d8e5de;border-radius:20px;color:#58746a;white-space:nowrap}.workspace main{padding:30px 40px;max-width:1250px}.context-card{background:#e9f0ec;border:1px solid #d9e5df;border-radius:10px;padding:20px;display:grid;grid-template-columns:1fr 1fr;gap:0 20px;margin-bottom:35px}.context-card label{margin-bottom:4px}.context-card p{grid-column:1/-1;font-size:.75rem;color:#64796f;margin-bottom:0}.panel{background:white;border:1px solid #dce6e1;border-radius:10px;padding:28px;margin-bottom:22px}.page-title{margin:35px 0 25px}.page-title h1{margin:10px 0}.summary-grid{display:grid;grid-template-columns:1fr 1fr;gap:22px}.panel form{max-width:650px}.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:20px}.actions{display:flex;gap:12px;flex-wrap:wrap}.alert{border-radius:8px;padding:14px 18px;margin-bottom:20px;font-size:.9rem}.error{background:#fff0ec;border:1px solid #edc5b8;color:#943d27}.success{background:#e9f5ec;border:1px solid #bfdec8;color:#2a6540}.unit-list{list-style:none;padding:0;margin-bottom:30px}.unit-list li{display:flex;align-items:center;justify-content:space-between;padding:14px 0;gap:15px;border-bottom:1px solid #e7ede9}.table-scroll{overflow:auto}table{border-collapse:collapse;width:100%;text-align:left;font-size:.85rem}th{background:#f3f7f4;color:#5d7468;font-size:.75rem}th,td{padding:14px;border-bottom:1px solid #e3eae5}td small{display:block;color:#6d8176;margin-top:4px}footer{padding:10px 40px 30px;color:#7a8d82;font-size:.72rem}.loading{padding:15vh 10%}@media(max-width:800px){.login-layout{grid-template-columns:1fr}.login-layout>aside{padding:35px}.login-layout>aside h1{font-size:2rem;margin:30px 0 10px}.login-layout>aside small{padding-top:20px}.login-card{padding:35px;max-width:none}.sidebar{width:170px;padding:25px 10px}.workspace header{padding:22px}.workspace main{padding:22px}.summary-grid{grid-template-columns:1fr}}@media(max-width:560px){.shell{display:block}.sidebar{width:100%;padding:15px}.sidebar .brand{font-size:1.1rem}.sidebar .brand span,.sidebar-label,.sidebar-bottom strong,.sidebar-bottom small{display:none}.sidebar nav{flex-direction:row;flex-wrap:wrap;margin-top:15px}.sidebar nav button{padding:8px}.sidebar-bottom{padding:5px 0 0}.sidebar-bottom button{font-size:.7rem}.context-card,.form-grid{grid-template-columns:1fr}.workspace header{padding:18px}.workspace main{padding:18px}.panel{padding:20px}.local-badge{display:none}footer{padding:18px}} +.setup-pending{max-width:900px;margin:10vh auto;padding:25px}.setup-pending pre{white-space:pre-wrap;overflow-wrap:anywhere;background:#edf3ef;border:1px solid #d6e3da;padding:18px;border-radius:7px;font-size:.85rem;line-height:1.6} diff --git a/resources/js/app.js b/resources/js/app.js new file mode 100644 index 0000000..8337712 --- /dev/null +++ b/resources/js/app.js @@ -0,0 +1 @@ +// diff --git a/resources/js/app.jsx b/resources/js/app.jsx new file mode 100644 index 0000000..7e5cb7a --- /dev/null +++ b/resources/js/app.jsx @@ -0,0 +1,75 @@ +import React, { useEffect, useState } from 'react'; +import { createRoot } from 'react-dom/client'; +import '../css/app.css'; + +const labels = { 'company.view': 'Consultar empresa', 'company.edit': 'Editar nome da empresa', 'unit.create': 'Criar unidades', 'access.manage': 'Gerir acessos', 'unit.view': 'Consultar unidade', 'unit.edit': 'Editar nome da unidade' }; + +function App() { + const [state, setState] = useState(null); + const [error, setError] = useState(''); + const [notice, setNotice] = useState(''); + const [busy, setBusy] = useState(false); + const [page, setPage] = useState('home'); + const context = state?.context; + const can = (permission, unit = null) => !!context?.grants.some(g => g.permission === permission && g.unit_id === unit); + + async function api(path, method = 'GET', body, token = context?.token) { + const response = await fetch(path, { method, credentials: 'same-origin', headers: { Accept: 'application/json', 'Content-Type': 'application/json', 'X-CSRF-TOKEN': state?.csrf || '', 'X-SGF-Context': token || '' }, ...(body === undefined ? {} : { body: JSON.stringify(body) }) }); + const result = await response.json().catch(() => ({})); + if (!response.ok) { + if (response.status === 401) { await refresh(); } + const message = response.status === 419 ? 'A sessão expirou. Actualize a página e entre novamente.' : Object.values(result.errors || {}).flat().join(' ') || result.message || 'Não foi possível concluir a operação.'; + throw new Error(message); + } + return result; + } + async function refresh() { + const response = await fetch('/api/session', { credentials: 'same-origin', headers: { Accept: 'application/json' } }); + if (!response.ok) throw new Error('Não foi possível carregar a sessão.'); + const next = await response.json(); setState(next); + if (next.notice) setNotice(next.notice); + } + useEffect(() => { refresh().catch(e => setError(e.message)); }, []); + async function perform(operation, message) { + setBusy(true); setError(''); setNotice(''); + try { await operation(); await refresh(); if (message) setNotice(message); } + catch (e) { setError(e.message); } + finally { setBusy(false); } + } + async function select(companyId, unitId = null) { + const company = state.companies.find(c => c.id === Number(companyId)); + if (!company) return; + await perform(() => api('/api/context', 'POST', { tenant_id: company.tenant_id, company_id: company.id, unit_id: unitId }), 'Contexto alterado. Os formulários foram recarregados.'); + } + if (!state) return

SGF TEMPO

{error || 'A carregar…'}

; + if (state.setup_pending) return

SGF TEMPO · PREPARAÇÃO LOCAL

Falta concluir a primeira conta

A aplicação está pronta, mas ainda não existe um utilizador. O login ficará disponível depois de definires a palavra-passe no procedimento local já autorizado.

Concluir no terminal do VS Code

Executa este comando, confere o âmbito apresentado e define a palavra-passe nos dois pedidos de entrada oculta:

powershell.exe -NoProfile -ExecutionPolicy Bypass -File C:\laragon\data\sgf-tempo\run\complete-first-admin.ps1

Não envies a palavra-passe pelo chat. Nenhuma conta é criada por este ecrã.

{error &&

{error}

}
; + if (!state.user) return

BEM-VINDO AO SGF TEMPO

Entrar na aplicação

Use a conta preparada pelo procedimento local autorizado.

{error &&
{error}
} perform(() => api('/api/login', 'POST', { email, password }), 'Sessão iniciada. Seleccione o contexto de trabalho.')} />

Precisa de recuperar o acesso? Solicite recuperação local assistida. Não existe recuperação por email nesta etapa.

; + return
; +} +function Login({ busy, onSubmit }) { + const [email, setEmail] = useState(''); const [password, setPassword] = useState(''); + return
{ e.preventDefault(); await onSubmit(email, password); setPassword(''); }}>
; +} +function NameForm({ label, initial, editable, busy, onSave, button = 'Guardar nome' }) { + const [name, setName] = useState(initial); + return
{ e.preventDefault(); onSave(name); }}>{editable && }
; +} +function AccessPanel({ context, can, api, perform, busy }) { + const [list, setList] = useState(null); const [loadError, setLoadError] = useState(''); + const [email, setEmail] = useState(''); const [scope, setScope] = useState('company'); const [permission, setPermission] = useState('company.view'); const [reason, setReason] = useState(''); + const unit = scope === 'company' ? null : Number(scope); + const options = (unit === null ? ['company.view', 'company.edit', 'unit.create', 'access.manage'] : ['unit.view', 'unit.edit']).filter(p => can(p, unit)); + useEffect(() => { api('/api/accesses').then(setList).catch(e => setLoadError(e.message)); }, [context.token]); + async function change(grant) { await perform(async () => { await api(grant ? '/api/accesses' : '/api/accesses/revoke', 'POST', { email, permission, unit_id: unit, reason }, context.token); setList(await api('/api/accesses')); }, grant ? 'Concessão registada.' : 'Revogação registada.'); } + return <>

AUTORIZAÇÕES EXPLÍCITAS

Gestão de acessos

Actua apenas nesta empresa e pode delegar apenas direitos que possui no mesmo âmbito. Os utilizadores são preparados pelo procedimento local.

{loadError &&

{loadError}

}
{ e.preventDefault(); change(true); }}>
CONTEXTO DE TRABALHO{context?.company.name || 'Seleccione uma empresa'}{context?.unit?.name || 'Sem unidade seleccionada'}
Ambiente local
+ {error &&
{error}
}{notice &&
{notice}
} +

Apenas os contextos com acesso explícito são apresentados.

+ {!state.companies.length ?

Sem empresas autorizadas

A conta existe, mas ainda não tem acesso a uma empresa. Peça ao responsável uma concessão explícita.

: !context ?

Escolha onde vai trabalhar

Seleccione uma empresa. A pertença a um cliente contratante não dá acesso automático às suas empresas ou unidades.

:
+ {page === 'home' && <>

ÁREA INICIAL

Bem-vindo, {state.user.name.split(' ')[0]}.

O contexto permanece visível e cada operação é validada pelo servidor.

EMPRESA ACTIVA

{context.company.name}

Cliente contratante #{context.company.tenant_id} · Empresa #{context.company.id}

UNIDADE ACTIVA

{context.unit?.name || 'Ainda não seleccionada'}

{context.units.length} unidade(s) com consulta autorizada

} + {page === 'company' &&

DADOS BÁSICOS

Empresa

perform(() => api(`/api/companies/${context.company.id}`, 'PATCH', { name }, context.token), 'Nome da empresa actualizado.')} />{!can('company.edit') &&

O seu acesso permite consulta. A edição exige uma concessão própria.

}
} + {page === 'units' && <>

DADOS BÁSICOS

Unidades autorizadas

{!context.units.length &&

Não tem consulta concedida a nenhuma unidade desta empresa.

}
    {context.units.map(u =>
  • {u.name}
  • )}
{context.unit && perform(() => api(`/api/units/${context.unit.id}`, 'PATCH', { name }, context.token), 'Nome da unidade actualizado.')} />}
{can('unit.create') &&

Criar unidade

A unidade será criada nesta empresa. Receberá consulta e edição explícitas apenas para a nova unidade.

perform(() => api('/api/units', 'POST', { name }, context.token), 'Unidade criada com os seus acessos explícitos.')} />
}} + {page === 'access' && (can('access.manage') ? :

Acesso não autorizado

A gestão de acessos exige uma concessão própria.

)} +
} +