Compare commits

..

1 Commits

Author SHA1 Message Date
dependabot[bot]
04540be901 Bump the prod-patch-updates group across 1 directory with 5 updates
Bumps the prod-patch-updates group with 5 updates in the /test directory:

| Package | From | To |
| --- | --- | --- |
| [axios](https://github.com/axios/axios) | `1.13.1` | `1.13.3` |
| [eslint](https://github.com/eslint/eslint) | `9.39.0` | `9.39.2` |
| [eslint-plugin-cypress](https://github.com/cypress-io/eslint-plugin-cypress) | `5.2.0` | `5.2.1` |
| [form-data](https://github.com/form-data/form-data) | `4.0.4` | `4.0.5` |
| [mocha](https://github.com/mochajs/mocha) | `11.7.4` | `11.7.5` |



Updates `axios` from 1.13.1 to 1.13.3
- [Release notes](https://github.com/axios/axios/releases)
- [Changelog](https://github.com/axios/axios/blob/v1.x/CHANGELOG.md)
- [Commits](https://github.com/axios/axios/compare/v1.13.1...v1.13.3)

Updates `eslint` from 9.39.0 to 9.39.2
- [Release notes](https://github.com/eslint/eslint/releases)
- [Commits](https://github.com/eslint/eslint/compare/v9.39.0...v9.39.2)

Updates `eslint-plugin-cypress` from 5.2.0 to 5.2.1
- [Release notes](https://github.com/cypress-io/eslint-plugin-cypress/releases)
- [Commits](https://github.com/cypress-io/eslint-plugin-cypress/compare/v5.2.0...v5.2.1)

Updates `form-data` from 4.0.4 to 4.0.5
- [Release notes](https://github.com/form-data/form-data/releases)
- [Changelog](https://github.com/form-data/form-data/blob/master/CHANGELOG.md)
- [Commits](https://github.com/form-data/form-data/compare/v4.0.4...v4.0.5)

Updates `mocha` from 11.7.4 to 11.7.5
- [Release notes](https://github.com/mochajs/mocha/releases)
- [Changelog](https://github.com/mochajs/mocha/blob/v11.7.5/CHANGELOG.md)
- [Commits](https://github.com/mochajs/mocha/compare/v11.7.4...v11.7.5)

---
updated-dependencies:
- dependency-name: axios
  dependency-version: 1.13.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: prod-patch-updates
- dependency-name: eslint
  dependency-version: 9.39.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: prod-patch-updates
- dependency-name: eslint-plugin-cypress
  dependency-version: 5.2.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: prod-patch-updates
- dependency-name: form-data
  dependency-version: 4.0.5
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: prod-patch-updates
- dependency-name: mocha
  dependency-version: 11.7.5
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: prod-patch-updates
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-26 22:46:55 +00:00
34 changed files with 1143 additions and 2152 deletions

View File

@@ -3,7 +3,7 @@ updates:
- package-ecosystem: "npm"
directory: "/backend"
schedule:
interval: "weekly"
interval: "daily"
groups:
dev-patch-updates:
dependency-type: "development"
@@ -25,7 +25,7 @@ updates:
- package-ecosystem: "npm"
directory: "/frontend"
schedule:
interval: "weekly"
interval: "daily"
groups:
dev-patch-updates:
dependency-type: "development"
@@ -47,7 +47,7 @@ updates:
- package-ecosystem: "npm"
directory: "/docs"
schedule:
interval: "weekly"
interval: "daily"
groups:
dev-patch-updates:
dependency-type: "development"
@@ -69,7 +69,7 @@ updates:
- package-ecosystem: "npm"
directory: "/test"
schedule:
interval: "weekly"
interval: "daily"
groups:
dev-patch-updates:
dependency-type: "development"
@@ -91,7 +91,7 @@ updates:
- package-ecosystem: "docker"
directory: "/docker"
schedule:
interval: "weekly"
interval: "daily"
groups:
updates:
update-types:

View File

@@ -1,5 +1,5 @@
{
"$schema": "https://biomejs.dev/schemas/2.3.14/schema.json",
"$schema": "https://biomejs.dev/schemas/2.3.2/schema.json",
"vcs": {
"enabled": true,
"clientKind": "git",

View File

@@ -12,36 +12,36 @@
"validate-schema": "node validate-schema.js"
},
"dependencies": {
"@apidevtools/json-schema-ref-parser": "^14.1.1",
"@apidevtools/json-schema-ref-parser": "^11.7.0",
"ajv": "^8.17.1",
"archiver": "^7.0.1",
"archiver": "^5.3.0",
"batchflow": "^0.4.0",
"bcrypt": "^6.0.0",
"body-parser": "^2.2.2",
"bcrypt": "^5.0.0",
"body-parser": "^1.20.3",
"compression": "^1.7.4",
"express": "^5.2.1",
"express": "^4.22.0",
"express-fileupload": "^1.5.2",
"gravatar": "^1.8.2",
"jsonwebtoken": "^9.0.3",
"knex": "3.1.0",
"liquidjs": "10.24.0",
"liquidjs": "10.6.1",
"lodash": "^4.17.23",
"moment": "^2.30.1",
"mysql2": "^3.16.2",
"mysql2": "^3.15.3",
"node-rsa": "^1.1.1",
"objection": "3.1.5",
"objection": "3.0.1",
"otplib": "^12.0.1",
"path": "^0.12.7",
"pg": "^8.18.0",
"pg": "^8.16.3",
"proxy-agent": "^6.5.0",
"signale": "1.4.0",
"sqlite3": "^5.1.7",
"temp-write": "^4.0.0"
},
"devDependencies": {
"@apidevtools/swagger-parser": "^12.1.0",
"@biomejs/biome": "^2.3.14",
"chalk": "5.6.2",
"@apidevtools/swagger-parser": "^10.1.0",
"@biomejs/biome": "^2.3.12",
"chalk": "4.1.2",
"nodemon": "^3.1.11"
},
"signale": {

File diff suppressed because it is too large Load Diff

View File

@@ -109,7 +109,7 @@ services:
- "cypress_logs:/test/results"
- "./dev/resolv.conf:/etc/resolv.conf:ro"
- "/etc/localtime:/etc/localtime:ro"
command: cypress run --browser chrome --config-file=cypress/config/ci.mjs
command: cypress run --browser chrome --config-file=cypress/config/ci.js
networks:
- fulltest

View File

@@ -192,7 +192,7 @@ services:
- "../test/results:/results"
- "./dev/resolv.conf:/etc/resolv.conf:ro"
- "/etc/localtime:/etc/localtime:ro"
command: cypress run --browser chrome --config-file=cypress/config/ci.mjs
command: cypress run --browser chrome --config-file=cypress/config/ci.js
networks:
- nginx_proxy_manager

View File

@@ -5,9 +5,6 @@ if ($scheme = "http") {
if ($request_uri = /.well-known/acme-challenge/test-challenge) {
set $test "${test}T";
}
if ($http_x_forwarded_proto = "https") {
set $test "${test}S";
}
if ($test = H) {
return 301 https://$host$request_uri;
}

View File

@@ -1,5 +1,5 @@
{
"$schema": "https://biomejs.dev/schemas/2.3.12/schema.json",
"$schema": "https://biomejs.dev/schemas/2.3.2/schema.json",
"vcs": {
"enabled": true,
"clientKind": "git",

View File

@@ -9,7 +9,6 @@
const allLocales = [
["en", "en-US"],
["de", "de-DE"],
["pt", "pt-PT"],
["es", "es-ES"],
["fr", "fr-FR"],
["it", "it-IT"],

View File

@@ -17,50 +17,50 @@
},
"dependencies": {
"@tabler/core": "^1.4.0",
"@tabler/icons-react": "^3.36.1",
"@tanstack/react-query": "^5.90.20",
"@tabler/icons-react": "^3.35.0",
"@tanstack/react-query": "^5.90.6",
"@tanstack/react-table": "^8.21.3",
"@uiw/react-textarea-code-editor": "^3.1.1",
"classnames": "^2.5.1",
"country-flag-icons": "^1.6.12",
"country-flag-icons": "^1.5.21",
"date-fns": "^4.1.0",
"ez-modal-react": "^1.0.5",
"formik": "^2.4.9",
"formik": "^2.4.6",
"generate-password-browser": "^1.1.0",
"humps": "^2.0.1",
"query-string": "^9.3.1",
"react": "^19.2.4",
"react": "^19.2.3",
"react-bootstrap": "^2.10.10",
"react-dom": "^19.2.4",
"react-intl": "^8.1.3",
"react-dom": "^19.2.3",
"react-intl": "^7.1.14",
"react-markdown": "^10.1.0",
"react-router-dom": "^7.13.0",
"react-router-dom": "^7.9.5",
"react-select": "^5.10.2",
"react-toastify": "^11.0.5",
"rooks": "^9.5.0"
"rooks": "^9.3.0"
},
"devDependencies": {
"@biomejs/biome": "^2.3.13",
"@formatjs/cli": "^6.12.2",
"@tanstack/react-query-devtools": "^5.91.3",
"@biomejs/biome": "^2.3.2",
"@formatjs/cli": "^6.7.4",
"@tanstack/react-query-devtools": "^5.90.2",
"@testing-library/dom": "^10.4.1",
"@testing-library/jest-dom": "^6.9.1",
"@testing-library/react": "^16.3.2",
"@testing-library/react": "^16.3.0",
"@types/country-flag-icons": "^1.2.2",
"@types/humps": "^2.0.6",
"@types/react": "^19.2.10",
"@types/react": "^19.2.7",
"@types/react-dom": "^19.2.3",
"@types/react-table": "^7.7.20",
"@vitejs/plugin-react": "^5.1.3",
"happy-dom": "^20.5.0",
"@vitejs/plugin-react": "^5.1.2",
"happy-dom": "^20.0.10",
"postcss": "^8.5.6",
"postcss-simple-vars": "^7.0.1",
"sass": "^1.97.3",
"sass": "^1.93.3",
"tmp": "^0.2.5",
"typescript": "5.9.3",
"vite": "^7.3.1",
"vite-plugin-checker": "^0.12.0",
"vite": "^7.1.12",
"vite-plugin-checker": "^0.11.0",
"vite-tsconfig-paths": "^6.0.5",
"vitest": "^4.0.18"
"vitest": "^4.0.6"
}
}

View File

@@ -1,7 +1,6 @@
import { createIntl, createIntlCache } from "react-intl";
import langBg from "./lang/bg.json";
import langDe from "./lang/de.json";
import langPt from "./lang/pt.json";
import langEn from "./lang/en.json";
import langEs from "./lang/es.json";
import langFr from "./lang/fr.json";
@@ -27,7 +26,6 @@ const localeOptions = [
["en", "en-US", langEn],
["de", "de-DE", langDe],
["es", "es-ES", langEs],
["pt", "pt-PT", langPt],
["fr", "fr-FR", langFr],
["ga", "ga-IE", langGa],
["ja", "ja-JP", langJa],

View File

@@ -1,6 +1,5 @@
import * as bg from "./bg/index";
import * as de from "./de/index";
import * as pt from "./pt/index";
import * as en from "./en/index";
import * as es from "./es/index";
import * as fr from "./fr/index";
@@ -18,8 +17,7 @@ import * as zh from "./zh/index";
import * as tr from "./tr/index";
import * as hu from "./hu/index";
const items: any = { en, de, pt, es, ja, sk, zh, pl, ru, it, vi, nl, bg, ko, ga, id, fr, tr, hu };
const items: any = { en, de, es, ja, sk, zh, pl, ru, it, vi, nl, bg, ko, ga, id, fr, tr, hu };
const fallbackLang = "en";

View File

@@ -1,11 +0,0 @@
## O que é uma Access List?
As *Access Lists* fornecem uma lista de permissões (whitelist) ou bloqueios (blacklist)
de endereços IP específicos de clientes, juntamente com autenticação para os *Proxy Hosts*
via Autenticação HTTP Básica (*Basic Auth*).
Podes configurar múltiplas regras de cliente, nomes de utilizador e palavras-passe
para uma única *Access List*, e depois aplicá-la a um ou mais *Proxy Hosts*.
Isto é especialmente útil para serviços web encaminhados que não têm mecanismos
de autenticação integrados ou quando pretendes proteger o acesso contra clientes desconhecidos.

View File

@@ -1,31 +0,0 @@
## Ajuda de Certificados
### Certificado HTTP
Um certificado validado por HTTP significa que os servidores do Let's Encrypt irão
tentar aceder aos teus domínios via HTTP (não HTTPS!) e, se a ligação for bem-sucedida,
emitirão o certificado.
Para este método, é necessário ter um *Proxy Host* criado para o(s) teu(s) domínio(s),
acessível via HTTP e a apontar para esta instalação do Nginx. Depois de o certificado ser
emitido, podes modificar o *Proxy Host* para também utilizar esse certificado em ligações HTTPS.
No entanto, o *Proxy Host* deve continuar configurado para acesso HTTP para que a renovação
funcione corretamente.
Este processo **não** suporta domínios wildcard.
### Certificado DNS
Um certificado validado por DNS requer que uses um plugin de fornecedor DNS (*DNS Provider*).
Este fornecedor será usado para criar registos temporários no teu domínio, que serão consultados
pelo Let's Encrypt para confirmar que és o proprietário. Se tudo correr bem, o certificado será emitido.
Não é necessário ter um *Proxy Host* criado antes de pedir este tipo de certificado.
Também não é necessário que o *Proxy Host* tenha acesso HTTP configurado.
Este processo **suporta** domínios wildcard.
### Certificado Personalizado
Usa esta opção para carregar o teu próprio Certificado SSL, fornecido pela
tua Autoridade Certificadora.

View File

@@ -1,9 +0,0 @@
## O que é um 404 Host?
Um *404 Host* é simplesmente um host configurado para apresentar uma página 404.
Isto pode ser útil quando o teu domínio aparece em motores de busca e queres fornecer
uma página de erro mais agradável ou indicar especificamente aos indexadores de pesquisa
que as páginas desse domínio já não existem.
Outra vantagem é permitir consultar os registos de acessos a este host e ver os referenciadores.

View File

@@ -1,7 +0,0 @@
## O que é um Proxy Host?
Um *Proxy Host* é o ponto de entrada para um serviço web que pretendes encaminhar.
Permite, opcionalmente, fazer terminação SSL para um serviço que possa não ter suporte SSL nativo.
Os *Proxy Hosts* são a utilização mais comum do Nginx Proxy Manager.

View File

@@ -1,7 +0,0 @@
## O que é um Redirection Host?
Um *Redirection Host* redireciona pedidos recebidos no domínio de entrada e envia
o utilizador para outro domínio.
A razão mais comum para usar este tipo de host é quando o teu site muda de domínio
mas ainda tens motores de busca ou links de referência a apontar para o domínio antigo.

View File

@@ -1,6 +0,0 @@
## O que é um Stream?
Uma funcionalidade relativamente recente no Nginx, um *Stream* serve para encaminhar
tráfego TCP/UDP diretamente para outro computador na rede.
Se estiveres a executar servidores de jogos, FTP ou SSH, isto pode ser bastante útil.

View File

@@ -1,6 +0,0 @@
export * as AccessLists from "./AccessLists.md";
export * as Certificates from "./Certificates.md";
export * as DeadHosts from "./DeadHosts.md";
export * as ProxyHosts from "./ProxyHosts.md";
export * as RedirectionHosts from "./RedirectionHosts.md";
export * as Streams from "./Streams.md";

View File

@@ -11,9 +11,6 @@
"locale-de-DE": {
"defaultMessage": "German"
},
"locale-pt-PT": {
"defaultMessage": "Português (Europeu)"
},
"locale-fr-FR": {
"defaultMessage": "Français"
},

View File

@@ -1,683 +0,0 @@
{
"access-list": {
"defaultMessage": "Lista de Controlo de Acesso (ACL)"
},
"access-list.access-count": {
"defaultMessage": "{count} {count, plural, one {Regra} other {Regras}}"
},
"access-list.auth-count": {
"defaultMessage": "{count} {count, plural, one {Utilizador} other {Utilizadores}}"
},
"access-list.help-rules-last": {
"defaultMessage": "Quando existir pelo menos 1 regra, esta regra de negação geral será aplicada em último lugar"
},
"access-list.help.rules-order": {
"defaultMessage": "Nota: as diretivas allow e deny são aplicadas pela ordem em que forem definidas."
},
"access-list.pass-auth": {
"defaultMessage": "Passar Autenticação para o Upstream"
},
"access-list.public": {
"defaultMessage": "Acesso Público"
},
"access-list.public.subtitle": {
"defaultMessage": "Sem autenticação básica"
},
"access-list.rule-source.placeholder": {
"defaultMessage": "192.168.1.100 ou 192.168.1.0/24 ou 2001:0db8::/32"
},
"access-list.satisfy-any": {
"defaultMessage": "Satisfazer Qualquer"
},
"access-list.subtitle": {
"defaultMessage": "{users} {users, plural, one {Utilizador} other {Utilizadores}}, {rules} {rules, plural, one {Regra} other {Regras}} Criado em: {date}"
},
"access-lists": {
"defaultMessage": "Listas de Controlo de Acesso (ACL)"
},
"action.add": {
"defaultMessage": "Adicionar"
},
"action.add-location": {
"defaultMessage": "Adicionar Location"
},
"action.allow": {
"defaultMessage": "Permitir"
},
"action.close": {
"defaultMessage": "Fechar"
},
"action.delete": {
"defaultMessage": "Eliminar"
},
"action.deny": {
"defaultMessage": "Negar"
},
"action.disable": {
"defaultMessage": "Desativar"
},
"action.download": {
"defaultMessage": "Descarregar"
},
"action.edit": {
"defaultMessage": "Editar"
},
"action.enable": {
"defaultMessage": "Ativar"
},
"action.permissions": {
"defaultMessage": "Permissões"
},
"action.renew": {
"defaultMessage": "Renovar"
},
"action.view-details": {
"defaultMessage": "Ver Detalhes"
},
"auditlogs": {
"defaultMessage": "Registos de Auditoria"
},
"auto": {
"defaultMessage": "Automático"
},
"cancel": {
"defaultMessage": "Cancelar"
},
"certificate": {
"defaultMessage": "Certificado"
},
"certificate.custom-certificate": {
"defaultMessage": "Certificado Personalizado"
},
"certificate.custom-certificate-key": {
"defaultMessage": "Chave do Certificado"
},
"certificate.custom-intermediate": {
"defaultMessage": "Certificado Intermédio"
},
"certificate.in-use": {
"defaultMessage": "Em Utilização"
},
"certificate.none.subtitle": {
"defaultMessage": "Nenhum certificado atribuído"
},
"certificate.none.subtitle.for-http": {
"defaultMessage": "Este host não irá utilizar HTTPS"
},
"certificate.none.title": {
"defaultMessage": "Nenhum"
},
"certificate.not-in-use": {
"defaultMessage": "Não Utilizado"
},
"certificate.renew": {
"defaultMessage": "Renovar Certificado"
},
"certificates": {
"defaultMessage": "Certificados"
},
"certificates.custom": {
"defaultMessage": "Certificado Personalizado"
},
"certificates.custom.warning": {
"defaultMessage": "Ficheiros de chave protegidos por palavra-passe não são suportados."
},
"certificates.dns.credentials": {
"defaultMessage": "Conteúdo do Ficheiro de Credenciais"
},
"certificates.dns.credentials-note": {
"defaultMessage": "Este plugin requer um ficheiro de configuração contendo um token API ou outras credenciais do fornecedor DNS."
},
"certificates.dns.credentials-warning": {
"defaultMessage": "Estes dados serão guardados em texto simples na base de dados e num ficheiro!"
},
"certificates.dns.propagation-seconds": {
"defaultMessage": "Segundos de Propagação"
},
"certificates.dns.propagation-seconds-note": {
"defaultMessage": "Deixe em branco para usar o valor predefinido do plugin. Número de segundos a aguardar pela propagação DNS."
},
"certificates.dns.provider": {
"defaultMessage": "Fornecedor DNS"
},
"certificates.dns.provider.placeholder": {
"defaultMessage": "Selecionar fornecedor..."
},
"certificates.dns.warning": {
"defaultMessage": "Esta secção requer conhecimentos sobre o Certbot e os seus plugins DNS. Consulte a documentação dos plugins."
},
"certificates.http.reachability-404": {
"defaultMessage": "Foi encontrado um servidor neste domínio, mas não parece ser o Nginx Proxy Manager. Certifique-se de que o domínio aponta para o IP onde a sua instância está a correr."
},
"certificates.http.reachability-failed-to-check": {
"defaultMessage": "Falha ao verificar acessibilidade devido a um erro de comunicação com site24x7.com."
},
"certificates.http.reachability-not-resolved": {
"defaultMessage": "Não existe nenhum servidor acessível neste domínio. Certifique-se de que o domínio existe, aponta para o IP correto e que a porta 80 está encaminhada no seu router."
},
"certificates.http.reachability-ok": {
"defaultMessage": "O servidor está acessível e a criação de certificados deverá ser possível."
},
"certificates.http.reachability-other": {
"defaultMessage": "Foi encontrado um servidor neste domínio, mas devolveu um código inesperado ({code}). Será o servidor NPM? Confirme que o domínio aponta para o IP correto."
},
"certificates.http.reachability-wrong-data": {
"defaultMessage": "Foi encontrado um servidor neste domínio, mas devolveu dados inesperados. Será o servidor NPM? Confirme que o domínio aponta para o IP correto."
},
"certificates.http.test-results": {
"defaultMessage": "Resultados do Teste"
},
"certificates.http.warning": {
"defaultMessage": "Estes domínios devem já estar configurados para apontar para esta instalação."
},
"certificates.request.subtitle": {
"defaultMessage": "com o Let's Encrypt"
},
"certificates.request.title": {
"defaultMessage": "Pedir Novo Certificado"
},
"column.access": {
"defaultMessage": "Acesso"
},
"column.authorization": {
"defaultMessage": "Autorização"
},
"column.authorizations": {
"defaultMessage": "Autorizações"
},
"column.custom-locations": {
"defaultMessage": "Locations Personalizados"
},
"column.destination": {
"defaultMessage": "Destino"
},
"column.details": {
"defaultMessage": "Detalhes"
},
"column.email": {
"defaultMessage": "Email"
},
"column.event": {
"defaultMessage": "Evento"
},
"column.expires": {
"defaultMessage": "Expira"
},
"column.http-code": {
"defaultMessage": "Código HTTP"
},
"column.incoming-port": {
"defaultMessage": "Porta de Entrada"
},
"column.name": {
"defaultMessage": "Nome"
},
"column.protocol": {
"defaultMessage": "Protocolo"
},
"column.provider": {
"defaultMessage": "Fornecedor"
},
"column.roles": {
"defaultMessage": "Funções"
},
"column.rules": {
"defaultMessage": "Regras"
},
"column.satisfy": {
"defaultMessage": "Satisfazer"
},
"column.satisfy-all": {
"defaultMessage": "Todos"
},
"column.satisfy-any": {
"defaultMessage": "Qualquer"
},
"column.scheme": {
"defaultMessage": "Esquema"
},
"column.source": {
"defaultMessage": "Origem"
},
"column.ssl": {
"defaultMessage": "SSL"
},
"column.status": {
"defaultMessage": "Estado"
},
"created-on": {
"defaultMessage": "Criado em: {date}"
},
"dashboard": {
"defaultMessage": "Painel"
},
"dead-host": {
"defaultMessage": "Host 404"
},
"dead-hosts": {
"defaultMessage": "Hosts 404"
},
"dead-hosts.count": {
"defaultMessage": "{count} {count, plural, one {Host 404} other {Hosts 404}}"
},
"disabled": {
"defaultMessage": "Desativado"
},
"domain-names": {
"defaultMessage": "Nomes de Domínio"
},
"domain-names.max": {
"defaultMessage": "Máximo de {count} domínios"
},
"domain-names.placeholder": {
"defaultMessage": "Comece a escrever para adicionar um domínio..."
},
"domain-names.wildcards-not-permitted": {
"defaultMessage": "Wildcards não permitidos para este tipo"
},
"domain-names.wildcards-not-supported": {
"defaultMessage": "Wildcards não suportados por esta AC"
},
"domains.force-ssl": {
"defaultMessage": "Forçar SSL"
},
"domains.hsts-enabled": {
"defaultMessage": "HSTS Ativado"
},
"domains.hsts-subdomains": {
"defaultMessage": "HSTS para Subdomínios"
},
"domains.http2-support": {
"defaultMessage": "Suporte HTTP/2"
},
"domains.use-dns": {
"defaultMessage": "Utilizar DNS Challenge"
},
"email-address": {
"defaultMessage": "Endereço de Email"
},
"empty-search": {
"defaultMessage": "Nenhum resultado encontrado"
},
"empty-subtitle": {
"defaultMessage": "Porque não cria um?"
},
"enabled": {
"defaultMessage": "Ativado"
},
"error.access.at-least-one": {
"defaultMessage": "É necessária pelo menos uma Autorização ou uma Regra de Acesso"
},
"error.access.duplicate-usernames": {
"defaultMessage": "Os nomes de utilizador de autorização devem ser únicos"
},
"error.invalid-auth": {
"defaultMessage": "Email ou palavra-passe inválidos"
},
"error.invalid-domain": {
"defaultMessage": "Domínio inválido: {domain}"
},
"error.invalid-email": {
"defaultMessage": "Endereço de email inválido"
},
"error.max-character-length": {
"defaultMessage": "Tamanho máximo: {max} caractere{max, plural, one {} other {s}}"
},
"error.max-domains": {
"defaultMessage": "Demasiados domínios; o máximo é {max}"
},
"error.maximum": {
"defaultMessage": "Máximo permitido: {max}"
},
"error.min-character-length": {
"defaultMessage": "Tamanho mínimo: {min} caractere{min, plural, one {} other {s}}"
},
"error.minimum": {
"defaultMessage": "Mínimo permitido: {min}"
},
"error.passwords-must-match": {
"defaultMessage": "As palavras-passe têm de coincidir"
},
"error.required": {
"defaultMessage": "Campo obrigatório"
},
"expires.on": {
"defaultMessage": "Expira em: {date}"
},
"footer.github-fork": {
"defaultMessage": "Faz fork no GitHub"
},
"host.flags.block-exploits": {
"defaultMessage": "Bloquear Exploits Comuns"
},
"host.flags.cache-assets": {
"defaultMessage": "Cache de Conteúdos Estáticos"
},
"host.flags.preserve-path": {
"defaultMessage": "Preservar Caminho"
},
"host.flags.protocols": {
"defaultMessage": "Protocolos"
},
"host.flags.websockets-upgrade": {
"defaultMessage": "Suporte para WebSockets"
},
"host.forward-port": {
"defaultMessage": "Porta de Encaminhamento"
},
"host.forward-scheme": {
"defaultMessage": "Esquema"
},
"hosts": {
"defaultMessage": "Hosts"
},
"http-only": {
"defaultMessage": "Apenas HTTP"
},
"lets-encrypt": {
"defaultMessage": "Let's Encrypt"
},
"lets-encrypt-via-dns": {
"defaultMessage": "Let's Encrypt via DNS"
},
"lets-encrypt-via-http": {
"defaultMessage": "Let's Encrypt via HTTP"
},
"loading": {
"defaultMessage": "A carregar…"
},
"login.title": {
"defaultMessage": "Iniciar sessão na sua conta"
},
"nginx-config.label": {
"defaultMessage": "Configuração Nginx Personalizada"
},
"nginx-config.placeholder": {
"defaultMessage": "# Insira aqui a sua configuração Nginx personalizada (utilize por sua conta e risco!)"
},
"no-permission-error": {
"defaultMessage": "Não tem permissões para ver esta página."
},
"notfound.action": {
"defaultMessage": "Voltar à página inicial"
},
"notfound.content": {
"defaultMessage": "A página que procura não foi encontrada."
},
"notfound.title": {
"defaultMessage": "Oops… Encontrou uma página de erro"
},
"notification.error": {
"defaultMessage": "Erro"
},
"notification.object-deleted": {
"defaultMessage": "{object} foi eliminado"
},
"notification.object-disabled": {
"defaultMessage": "{object} foi desativado"
},
"notification.object-enabled": {
"defaultMessage": "{object} foi ativado"
},
"notification.object-renewed": {
"defaultMessage": "{object} foi renovado"
},
"notification.object-saved": {
"defaultMessage": "{object} foi guardado"
},
"notification.success": {
"defaultMessage": "Sucesso"
},
"object.actions-title": {
"defaultMessage": "{object} #{id}"
},
"object.add": {
"defaultMessage": "Adicionar {object}"
},
"object.delete": {
"defaultMessage": "Eliminar {object}"
},
"object.delete.content": {
"defaultMessage": "Tem a certeza de que deseja eliminar este {object}?"
},
"object.edit": {
"defaultMessage": "Editar {object}"
},
"object.empty": {
"defaultMessage": "Não existem {objects}"
},
"object.event.created": {
"defaultMessage": "{object} criado"
},
"object.event.deleted": {
"defaultMessage": "{object} eliminado"
},
"object.event.disabled": {
"defaultMessage": "{object} desativado"
},
"object.event.enabled": {
"defaultMessage": "{object} ativado"
},
"object.event.renewed": {
"defaultMessage": "{object} renovado"
},
"object.event.updated": {
"defaultMessage": "{object} atualizado"
},
"offline": {
"defaultMessage": "Offline"
},
"online": {
"defaultMessage": "Online"
},
"options": {
"defaultMessage": "Opções"
},
"password": {
"defaultMessage": "Palavra-passe"
},
"password.generate": {
"defaultMessage": "Gerar palavra-passe aleatória"
},
"password.hide": {
"defaultMessage": "Esconder Palavra-passe"
},
"password.show": {
"defaultMessage": "Mostrar Palavra-passe"
},
"permissions.hidden": {
"defaultMessage": "Oculto"
},
"permissions.manage": {
"defaultMessage": "Gerir"
},
"permissions.view": {
"defaultMessage": "Apenas Visualização"
},
"permissions.visibility.all": {
"defaultMessage": "Todos os Itens"
},
"permissions.visibility.title": {
"defaultMessage": "Visibilidade do Item"
},
"permissions.visibility.user": {
"defaultMessage": "Apenas Itens Criados"
},
"proxy-host": {
"defaultMessage": "Proxy Host"
},
"proxy-host.forward-host": {
"defaultMessage": "Hostname/IP de Encaminhamento"
},
"proxy-hosts": {
"defaultMessage": "Proxy Hosts"
},
"proxy-hosts.count": {
"defaultMessage": "{count} {count, plural, one {Proxy Host} other {Proxy Hosts}}"
},
"public": {
"defaultMessage": "Público"
},
"redirection-host": {
"defaultMessage": "Host de Redirecionamento"
},
"redirection-host.forward-domain": {
"defaultMessage": "Domínio de Destino"
},
"redirection-host.forward-http-code": {
"defaultMessage": "Código HTTP"
},
"redirection-hosts": {
"defaultMessage": "Hosts de Redirecionamento"
},
"redirection-hosts.count": {
"defaultMessage": "{count} {count, plural, one {Host de Redirecionamento} other {Hosts de Redirecionamento}}"
},
"redirection-hosts.http-code.300": {
"defaultMessage": "300 Múltiplas Escolhas"
},
"redirection-hosts.http-code.301": {
"defaultMessage": "301 Movido Permanentemente"
},
"redirection-hosts.http-code.302": {
"defaultMessage": "302 Movido Temporariamente"
},
"redirection-hosts.http-code.303": {
"defaultMessage": "303 Ver Outro"
},
"redirection-hosts.http-code.307": {
"defaultMessage": "307 Redirecionamento Temporário"
},
"redirection-hosts.http-code.308": {
"defaultMessage": "308 Redirecionamento Permanente"
},
"role.admin": {
"defaultMessage": "Administrador"
},
"role.standard-user": {
"defaultMessage": "Utilizador Comum"
},
"save": {
"defaultMessage": "Guardar"
},
"setting": {
"defaultMessage": "Definição"
},
"settings": {
"defaultMessage": "Definições"
},
"settings.default-site": {
"defaultMessage": "Site Predefinido"
},
"settings.default-site.404": {
"defaultMessage": "Página 404"
},
"settings.default-site.444": {
"defaultMessage": "Sem Resposta (444)"
},
"settings.default-site.congratulations": {
"defaultMessage": "Página de Boas-vindas"
},
"settings.default-site.description": {
"defaultMessage": "O que apresentar quando o Nginx recebe um Host desconhecido"
},
"settings.default-site.html": {
"defaultMessage": "HTML Personalizado"
},
"settings.default-site.html.placeholder": {
"defaultMessage": "<!-- Insira aqui o seu conteúdo HTML personalizado -->"
},
"settings.default-site.redirect": {
"defaultMessage": "Redirecionar"
},
"setup.preamble": {
"defaultMessage": "Comece por criar a sua conta de administrador."
},
"setup.title": {
"defaultMessage": "Bem-vindo!"
},
"sign-in": {
"defaultMessage": "Iniciar Sessão"
},
"ssl-certificate": {
"defaultMessage": "Certificado SSL"
},
"stream": {
"defaultMessage": "Stream"
},
"stream.forward-host": {
"defaultMessage": "Host de Destino"
},
"stream.forward-host.placeholder": {
"defaultMessage": "example.com ou 10.0.0.1 ou 2001:db8:3333:4444:5555:6666:7777:8888"
},
"stream.incoming-port": {
"defaultMessage": "Porta de Entrada"
},
"streams": {
"defaultMessage": "Streams"
},
"streams.count": {
"defaultMessage": "{count} {count, plural, one {Stream} other {Streams}}"
},
"streams.tcp": {
"defaultMessage": "TCP"
},
"streams.udp": {
"defaultMessage": "UDP"
},
"test": {
"defaultMessage": "Testar"
},
"update-available": {
"defaultMessage": "Atualização Disponível: {latestVersion}"
},
"user": {
"defaultMessage": "Utilizador"
},
"user.change-password": {
"defaultMessage": "Alterar Palavra-passe"
},
"user.confirm-password": {
"defaultMessage": "Confirmar Palavra-passe"
},
"user.current-password": {
"defaultMessage": "Palavra-passe Atual"
},
"user.edit-profile": {
"defaultMessage": "Editar Perfil"
},
"user.full-name": {
"defaultMessage": "Nome Completo"
},
"user.login-as": {
"defaultMessage": "Iniciar sessão como {name}"
},
"user.logout": {
"defaultMessage": "Terminar Sessão"
},
"user.new-password": {
"defaultMessage": "Nova Palavra-passe"
},
"user.nickname": {
"defaultMessage": "Alcunha"
},
"user.set-password": {
"defaultMessage": "Definir Palavra-passe"
},
"user.set-permissions": {
"defaultMessage": "Definir Permissões para {name}"
},
"user.switch-dark": {
"defaultMessage": "Ativar Modo Escuro"
},
"user.switch-light": {
"defaultMessage": "Ativar Modo Claro"
},
"username": {
"defaultMessage": "Nome de Utilizador"
},
"users": {
"defaultMessage": "Utilizadores"
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -1,4 +1,4 @@
FROM cypress/included:15.9.0
FROM cypress/included:14.0.1
# Disable Cypress CLI colors
ENV FORCE_COLOR=0

View File

@@ -24,10 +24,10 @@ describe('Streams', () => {
// Create a custom cert pair
cy.exec('mkcert -cert-file=/test/cypress/fixtures/website1.pem -key-file=/test/cypress/fixtures/website1.key.pem website1.example.com').then((result) => {
expect(result.exitCode).to.eq(0);
expect(result.code).to.eq(0);
// Install CA
cy.exec('mkcert -install').then((result) => {
expect(result.exitCode).to.eq(0);
expect(result.code).to.eq(0);
});
});
@@ -56,7 +56,7 @@ describe('Streams', () => {
expect(data).to.have.property('udp_forwarding', false);
cy.exec('curl --noproxy -- http://website1.example.com:1500').then((result) => {
expect(result.exitCode).to.eq(0);
expect(result.code).to.eq(0);
expect(result.stdout).to.contain('yay it works');
});
});
@@ -107,7 +107,7 @@ describe('Streams', () => {
expect(data).to.have.property('udp_forwarding', true);
cy.exec('curl --noproxy -- http://website1.example.com:1502').then((result) => {
expect(result.exitCode).to.eq(0);
expect(result.code).to.eq(0);
expect(result.stdout).to.contain('yay it works');
});
});
@@ -176,7 +176,6 @@ describe('Streams', () => {
'cert_chain_of_trust',
'cert_extlifeSpan',
'cert_revocation',
'engine_problem',
'overall_grade',
];

View File

@@ -1,5 +1,5 @@
import axios from "axios";
import logger from "./logger.mjs";
const logger = require('./logger');
const axios = require('axios').default;
const BackendApi = function(config, token) {
this.config = config;
@@ -22,16 +22,18 @@ BackendApi.prototype.setToken = function (token) {
* @param {bool} returnOnError
*/
BackendApi.prototype._prepareOptions = function(returnOnError) {
const options = {
let options = {
headers: {
Accept: "application/json",
},
};
Accept: 'application/json'
}
}
if (this.token) {
options.headers.Authorization = `Bearer ${this.token}`;
options.headers.Authorization = 'Bearer ' + this.token;
}
if (returnOnError) {
options.validateStatus = () => true;
options.validateStatus = function () {
return true;
}
}
return options;
};
@@ -42,30 +44,13 @@ BackendApi.prototype._prepareOptions = function (returnOnError) {
* @param {function} reject
* @param {bool} returnOnError
*/
BackendApi.prototype._handleResponse = (
response,
resolve,
reject,
returnOnError,
) => {
logger("Response data:", response.data);
if (
!returnOnError &&
typeof response.data === "object" &&
typeof response.data.error === "object"
) {
if (
typeof response.data === "object" &&
typeof response.data.error === "object" &&
typeof response.data.error.message !== "undefined"
) {
reject(
new Error(
`${response.data.error.code}: ${response.data.error.message}`,
),
);
BackendApi.prototype._handleResponse = function(response, resolve, reject, returnOnError) {
logger('Response data:', response.data);
if (!returnOnError && typeof response.data === 'object' && typeof response.data.error === 'object') {
if (typeof response.data === 'object' && typeof response.data.error === 'object' && typeof response.data.error.message !== 'undefined') {
reject(new Error(response.data.error.code + ': ' + response.data.error.message));
} else {
reject(new Error(`Error ${response.status}`));
reject(new Error('Error ' + response.status));
}
} else {
resolve(response.data);
@@ -78,10 +63,10 @@ BackendApi.prototype._handleResponse = (
* @param {function} reject
* @param {bool} returnOnError
*/
BackendApi.prototype._handleError = (err, resolve, reject, returnOnError) => {
logger("Axios Error:", err);
BackendApi.prototype._handleError = function(err, resolve, reject, returnOnError) {
logger('Axios Error:', err);
if (returnOnError) {
resolve(typeof err.response.data !== "undefined" ? err.response.data : err);
resolve(typeof err.response.data !== 'undefined' ? err.response.data : err);
} else {
reject(err);
}
@@ -99,11 +84,11 @@ BackendApi.prototype.request = function (method, path, returnOnError, data) {
const options = this._prepareOptions(returnOnError);
return new Promise((resolve, reject) => {
const opts = {
let opts = {
method: method,
url: path,
...options,
};
...options
}
if (data !== undefined && data !== null) {
opts.data = data;
}
@@ -125,17 +110,16 @@ BackendApi.prototype.request = function (method, path, returnOnError, data) {
* @returns {Promise<object>}
*/
BackendApi.prototype.postForm = function (path, form, returnOnError) {
logger("POST", this.config.baseUrl + path);
logger('POST', this.config.baseUrl + path);
const options = this._prepareOptions(returnOnError);
return new Promise((resolve, reject) => {
const opts = {
...options,
...form.getHeaders(),
};
}
this.axios
.post(path, form, opts)
this.axios.post(path, form, opts)
.then((response) => {
this._handleResponse(response, resolve, reject, returnOnError);
})
@@ -145,4 +129,4 @@ BackendApi.prototype.postForm = function (path, form, returnOnError) {
});
};
export default BackendApi;
module.exports = BackendApi;

View File

@@ -0,0 +1,7 @@
const _ = require("lodash");
module.exports = function() {
let arr = _.values(arguments);
arr.unshift('[Backend API]');
console.log.apply(null, arr);
};

View File

@@ -1,7 +0,0 @@
const log = (...args) => {
const arr = args;
arr.unshift("[Backend API]");
console.log(...arr);
};
export default log;

View File

@@ -1,12 +1,13 @@
import fs from "node:fs";
import FormData from "form-data";
import Client from "./client.mjs";
import logger from "./logger.mjs";
const fs = require('fs');
const FormData = require('form-data');
const logger = require('./logger');
const Client = require('./client');
export default (config) => {
logger("Client Ready using", config.baseUrl);
module.exports = function (config) {
logger('Client Ready using', config.baseUrl);
return {
/**
* @param {object} options
* @param {string} options.path API path
@@ -17,7 +18,7 @@ export default (config) => {
backendApiGet: (options) => {
const api = new Client(config);
api.setToken(options.token);
return api.request("get", options.path, options.returnOnError || false);
return api.request('get', options.path, options.returnOnError || false);
},
/**
@@ -31,12 +32,7 @@ export default (config) => {
backendApiPost: (options) => {
const api = new Client(config);
api.setToken(options.token);
return api.request(
"post",
options.path,
options.returnOnError || false,
options.data,
);
return api.request('post', options.path, options.returnOnError || false, options.data);
},
/**
@@ -52,11 +48,8 @@ export default (config) => {
api.setToken(options.token);
const form = new FormData();
for (const [key, value] of Object.entries(options.files)) {
form.append(
key,
fs.createReadStream(`${config.fixturesFolder}/${value}`),
);
for (let [key, value] of Object.entries(options.files)) {
form.append(key, fs.createReadStream(config.fixturesFolder + '/' + value));
}
return api.postForm(options.path, form, options.returnOnError || false);
},
@@ -72,12 +65,7 @@ export default (config) => {
backendApiPut: (options) => {
const api = new Client(config);
api.setToken(options.token);
return api.request(
"put",
options.path,
options.returnOnError || false,
options.data,
);
return api.request('put', options.path, options.returnOnError || false, options.data);
},
/**
@@ -90,11 +78,7 @@ export default (config) => {
backendApiDelete: (options) => {
const api = new Client(config);
api.setToken(options.token);
return api.request(
"delete",
options.path,
options.returnOnError || false,
);
},
return api.request('delete', options.path, options.returnOnError || false);
}
};
};

View File

@@ -1,26 +1,20 @@
import { SwaggerValidation } from "@jc21/cypress-swagger-validation";
import chalk from "chalk";
import backendTask from "./backendApi/task.mjs";
import { SwaggerValidation } from '@jc21/cypress-swagger-validation';
import chalk from 'chalk';
export default (on, config) => {
// Replace swaggerBase config var wildcard
if (typeof config.env.swaggerBase !== "undefined") {
config.env.swaggerBase = config.env.swaggerBase.replace(
"{{baseUrl}}",
config.baseUrl,
);
if (typeof config.env.swaggerBase !== 'undefined') {
config.env.swaggerBase = config.env.swaggerBase.replace('{{baseUrl}}', config.baseUrl);
}
// Plugin Events
on("task", SwaggerValidation(config));
on("task", backendTask(config));
on("task", {
on('task', SwaggerValidation(config));
on('task', require('./backendApi/task')(config));
on('task', {
log(message) {
console.log(
`${chalk.cyan.bold("[")}${chalk.blue.bold("LOG")}${chalk.cyan.bold("]")} ${chalk.red.bold(message)}`,
);
console.log(`${chalk.cyan.bold('[')}${chalk.blue.bold('LOG')}${chalk.cyan.bold(']')} ${chalk.red.bold(message)}`);
return null;
},
}
});
return config;

View File

@@ -35,7 +35,7 @@ Cypress.Commands.add("validateSwaggerFile", (url, savePath) => {
.then((response) => cy.writeFile(savePath, response.body, { log: false }))
.then(() => cy.exec(`yarn swagger-lint '${savePath}'`, { failOnNonZeroExit: false }))
.then((result) => cy.task('log', `Swagger Vacuum Results:\n${result.stdout || ''}`)
.then(() => expect(result.exitCode).to.eq(0)));
.then(() => expect(result.code).to.eq(0)));
});
});

View File

@@ -1,4 +1,4 @@
import './commands.mjs';
import './commands';
Cypress.on('uncaught:exception', (/*err, runnable*/) => {
// returning false here prevents Cypress from

View File

@@ -4,10 +4,6 @@
"cypress/**/*.js",
"cypress/config/dev.mjs",
"cypress/config/ci.mjs",
"cypress/plugins/index.mjs",
"cypress/plugins/backendApi/task.mjs",
"cypress/plugins/backendApi/logger.mjs",
"cypress/plugins/backendApi/client.mjs",
"cypress/support/commands.mjs"
"cypress/plugins/index.mjs"
]
}

View File

@@ -5,7 +5,7 @@
"main": "index.js",
"dependencies": {
"@jc21/cypress-swagger-validation": "^0.3.2",
"@quobix/vacuum": "^0.23.4",
"@quobix/vacuum": "^0.19.4",
"axios": "^1.13.1",
"chalk": "^5.6.2",
"cypress": "^15.9.0",

View File

@@ -183,13 +183,6 @@
wrap-ansi "^8.1.0"
wrap-ansi-cjs "npm:wrap-ansi@^7.0.0"
"@isaacs/fs-minipass@^4.0.0":
version "4.0.1"
resolved "https://registry.yarnpkg.com/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz#2d59ae3ab4b38fb4270bfa23d30f8e2e86c7fe32"
integrity sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==
dependencies:
minipass "^7.0.4"
"@jc21/cypress-swagger-validation@^0.3.2":
version "0.3.2"
resolved "https://registry.yarnpkg.com/@jc21/cypress-swagger-validation/-/cypress-swagger-validation-0.3.2.tgz#6d1cd6c702405caf7661398b662de84a3fa50f8e"
@@ -216,14 +209,13 @@
resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33"
integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==
"@quobix/vacuum@^0.23.4":
version "0.23.5"
resolved "https://registry.yarnpkg.com/@quobix/vacuum/-/vacuum-0.23.5.tgz#f8cbfb27cdec7437b516422752545439039c26c9"
integrity sha512-4/ybLW692DNkX/kXT/CRTkFF3bOqP5L+hRd7G49bUbXqAkU5E2WwB0z6xEYoVkB+BDDDYm35sw4pzARjJfXcUA==
"@quobix/vacuum@^0.19.4":
version "0.19.4"
resolved "https://registry.yarnpkg.com/@quobix/vacuum/-/vacuum-0.19.4.tgz#1250269268aa0838e503ea97836a98d7c9756bf1"
integrity sha512-+riEvta1fR2loK//bpdPOVs5AgE8F26RrKe6/oGjapAKVB/OOcqE88S+TSe/yeQbmj03QLi5EX3ZmrL9n0qyDg==
dependencies:
https-proxy-agent "^7.0.6"
node-fetch "^3.3.2"
tar "^7.5.2"
node-fetch "^3.2.10"
tar "^6.1.11"
"@types/color-name@^1.1.1":
version "1.1.1"
@@ -277,11 +269,6 @@ acorn@^8.15.0:
resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.15.0.tgz#a360898bc415edaac46c8241f6383975b930b816"
integrity sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==
agent-base@^7.1.2:
version "7.1.4"
resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.4.tgz#e3cd76d4c548ee895d3c3fd8dc1f6c5b9032e7a8"
integrity sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==
aggregate-error@^3.0.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a"
@@ -424,9 +411,9 @@ aws4@^1.8.0:
integrity sha512-Uvq6hVe90D0B2WEnUqtdgY1bATGz3mw33nH9Y+dmA+w5DHvUmBgkr5rM/KCHpCsiFNRUfokW/szpPPgMK2hm4A==
axios@^1.13.1, axios@^1.7.7:
version "1.13.4"
resolved "https://registry.yarnpkg.com/axios/-/axios-1.13.4.tgz#15d109a4817fb82f73aea910d41a2c85606076bc"
integrity sha512-1wVkUaAO6WyaYtCkcYCOx12ZgpGf9Zif+qXa4n+oYzK558YryKqiL6UWwd5DqiH3VRW0GYhTZQ/vlgJrCoNQlg==
version "1.13.3"
resolved "https://registry.yarnpkg.com/axios/-/axios-1.13.3.tgz#f123e77356630a22b0163920662556944f2be1a1"
integrity sha512-ERT8kdX7DZjtUm7IitEyV7InTHAF42iJuMArIiDIV5YtPanJkgw4hw5Dyg9fh0mihdWNn1GKaeIWErfe56UQ1g==
dependencies:
follow-redirects "^1.15.6"
form-data "^4.0.4"
@@ -558,10 +545,10 @@ chokidar@^4.0.1:
dependencies:
readdirp "^4.0.1"
chownr@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/chownr/-/chownr-3.0.0.tgz#9855e64ecd240a9cc4267ce8a4aa5d24a1da15e4"
integrity sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==
chownr@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece"
integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==
ci-info@^4.1.0:
version "4.2.0"
@@ -748,13 +735,6 @@ dayjs@^1.10.4:
resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.7.tgz#4b296922642f70999544d1144a2c25730fce63e2"
integrity sha512-+Yw9U6YO5TQohxLcIkrXBeY73WP3ejHWVvx8XCk3gxvQDCTEmS48ZrSZCKciI7Bhl/uCMyxYtE9UqRILmFphkQ==
debug@4:
version "4.4.3"
resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.3.tgz#c6ae432d9bd9662582fce08709b038c58e9e3d6a"
integrity sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==
dependencies:
ms "^2.1.3"
debug@^3.1.0:
version "3.2.6"
resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b"
@@ -1196,6 +1176,13 @@ fs-extra@^9.1.0:
jsonfile "^6.0.1"
universalify "^2.0.0"
fs-minipass@^2.0.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb"
integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==
dependencies:
minipass "^3.0.0"
function-bind@^1.1.2:
version "1.1.2"
resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c"
@@ -1336,14 +1323,6 @@ http-signature@~1.4.0:
jsprim "^2.0.2"
sshpk "^1.18.0"
https-proxy-agent@^7.0.6:
version "7.0.6"
resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz#da8dfeac7da130b05c2ba4b59c9b6cd66611a6b9"
integrity sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==
dependencies:
agent-base "^7.1.2"
debug "4"
human-signals@^1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3"
@@ -1671,17 +1650,35 @@ minimist@^1.2.8:
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c"
integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==
"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.0.4, minipass@^7.1.2:
minipass@^3.0.0:
version "3.3.6"
resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.6.tgz#7bba384db3a1520d18c9c0e5251c3444e95dd94a"
integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==
dependencies:
yallist "^4.0.0"
minipass@^5.0.0:
version "5.0.0"
resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d"
integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==
"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.1.2:
version "7.1.2"
resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.1.2.tgz#93a9626ce5e5e66bd4db86849e7515e92340a707"
integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==
minizlib@^3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-3.1.0.tgz#6ad76c3a8f10227c9b51d1c9ac8e30b27f5a251c"
integrity sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==
minizlib@^2.1.1:
version "2.1.2"
resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931"
integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==
dependencies:
minipass "^7.1.2"
minipass "^3.0.0"
yallist "^4.0.0"
mkdirp@^1.0.3:
version "1.0.4"
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e"
integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==
mkdirp@^3.0.0:
version "3.0.1"
@@ -1741,7 +1738,7 @@ node-domexception@^1.0.0:
resolved "https://registry.yarnpkg.com/node-domexception/-/node-domexception-1.0.0.tgz#6888db46a1f71c0b76b3f7555016b63fe64766e5"
integrity sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==
node-fetch@^3.3.2:
node-fetch@^3.2.10:
version "3.3.2"
resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-3.3.2.tgz#d1e889bacdf733b4ff3b2b243eb7a12866a0b78b"
integrity sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==
@@ -2217,16 +2214,17 @@ systeminformation@^5.27.14:
resolved "https://registry.yarnpkg.com/systeminformation/-/systeminformation-5.30.6.tgz#c100cb632bbb955fc44ba033f624da22c3a6a5be"
integrity sha512-LEIyK1aEv5P3BhAPW3swdlIyCihxwEq/Gki+kcONieU4PIeRCSLDuGkk0Va/56PSBgjVgEksOM88dmY6YqOyfQ==
tar@^7.5.2:
version "7.5.7"
resolved "https://registry.yarnpkg.com/tar/-/tar-7.5.7.tgz#adf99774008ba1c89819f15dbd6019c630539405"
integrity sha512-fov56fJiRuThVFXD6o6/Q354S7pnWMJIVlDBYijsTNx6jKSE4pvrDTs6lUnmGvNyfJwFQQwWy3owKz1ucIhveQ==
tar@^6.1.11:
version "6.2.1"
resolved "https://registry.yarnpkg.com/tar/-/tar-6.2.1.tgz#717549c541bc3c2af15751bea94b1dd068d4b03a"
integrity sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==
dependencies:
"@isaacs/fs-minipass" "^4.0.0"
chownr "^3.0.0"
minipass "^7.1.2"
minizlib "^3.1.0"
yallist "^5.0.0"
chownr "^2.0.0"
fs-minipass "^2.0.0"
minipass "^5.0.0"
minizlib "^2.1.1"
mkdirp "^1.0.3"
yallist "^4.0.0"
throttleit@^1.0.0:
version "1.0.0"
@@ -2422,10 +2420,10 @@ y18n@^5.0.5:
resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55"
integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==
yallist@^5.0.0:
version "5.0.0"
resolved "https://registry.yarnpkg.com/yallist/-/yallist-5.0.0.tgz#00e2de443639ed0d78fd87de0d27469fbcffb533"
integrity sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==
yallist@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"
integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
yargs-parser@^21.1.1:
version "21.1.1"