mirror of
https://github.com/NginxProxyManager/nginx-proxy-manager.git
synced 2026-02-04 09:52:52 +00:00
Compare commits
90 Commits
60a23a55ca
...
develop
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
cdde543e8a | ||
|
|
0d62c26164 | ||
|
|
c3173d83b8 | ||
|
|
65cf8ce583 | ||
|
|
a4bc8d5d21 | ||
|
|
3e3d08b68f | ||
|
|
f90066822f | ||
|
|
bb4b5fb3aa | ||
|
|
8014f34195 | ||
|
|
4f8037ded2 | ||
|
|
e7a1f84e45 | ||
|
|
6f0931bed5 | ||
|
|
7f0c5d4364 | ||
|
|
60404b6f7e | ||
|
|
c2fddee2c7 | ||
|
|
f09876d31b | ||
|
|
8708a3bab8 | ||
|
|
218fadd168 | ||
|
|
9cf1d000c8 | ||
|
|
714bebbbc7 | ||
|
|
127008c9b5 | ||
|
|
7cc2bfbf6a | ||
|
|
de3b543d08 | ||
|
|
c515815b0e | ||
|
|
3db02370fd | ||
|
|
4ad1af5576 | ||
|
|
a73d54fedc | ||
|
|
8c8005f817 | ||
|
|
83d993578b | ||
|
|
8532e7520f | ||
|
|
58d47cd69a | ||
|
|
bad3eac515 | ||
|
|
00b58f73f8 | ||
|
|
47981f0d56 | ||
|
|
38257859e2 | ||
|
|
a169e1131c | ||
|
|
a99cde9cd8 | ||
|
|
c69bd187af | ||
|
|
98fe622967 | ||
|
|
eddca3597d | ||
|
|
ed0b2306a2 | ||
|
|
17f6050de2 | ||
|
|
469d72a2f9 | ||
|
|
3ed3ec0001 | ||
|
|
24ff3c7b11 | ||
|
|
58dda941b8 | ||
|
|
f9f743499f | ||
|
|
534afe6067 | ||
|
|
9580903f5d | ||
|
|
df81c8425f | ||
|
|
b6f421c5fc | ||
|
|
c1ef3a3795 | ||
|
|
0aad939ccc | ||
|
|
7e092e265c | ||
|
|
cd01a2ee6b | ||
|
|
9e6720561a | ||
|
|
c50f0a144e | ||
|
|
2a9c1df3cb | ||
|
|
ef6391f22e | ||
|
|
0f46337710 | ||
|
|
1b84b8ace2 | ||
|
|
8ea8286cec | ||
|
|
7ca48f876b | ||
|
|
7c3c59c79f | ||
|
|
ef7f444404 | ||
|
|
f509e0bdba | ||
|
|
9b7af474bb | ||
|
|
28982b8bc2 | ||
|
|
19e654b998 | ||
|
|
eaf9f5ab1e | ||
|
|
4af0a968f0 | ||
|
|
df06eb6c2f | ||
|
|
74360cc9b3 | ||
|
|
16a301fc64 | ||
|
|
2d774124dc | ||
|
|
124737bbc6 | ||
|
|
d5d222ef2d | ||
|
|
b96e932c64 | ||
|
|
d09cb2884c | ||
|
|
71deabcc67 | ||
|
|
a78039b65f | ||
|
|
48acbd33ab | ||
|
|
32cabc0f83 | ||
|
|
03a82cd861 | ||
|
|
5f19f7125e | ||
|
|
8d35644190 | ||
|
|
ad2e4c8afe | ||
|
|
69f9031447 | ||
|
|
727bc944ea | ||
|
|
a0ef0d9048 |
12
.github/dependabot.yml
vendored
12
.github/dependabot.yml
vendored
@@ -3,7 +3,7 @@ updates:
|
||||
- package-ecosystem: "npm"
|
||||
directory: "/backend"
|
||||
schedule:
|
||||
interval: "daily"
|
||||
interval: "weekly"
|
||||
groups:
|
||||
dev-patch-updates:
|
||||
dependency-type: "development"
|
||||
@@ -25,7 +25,7 @@ updates:
|
||||
- package-ecosystem: "npm"
|
||||
directory: "/frontend"
|
||||
schedule:
|
||||
interval: "daily"
|
||||
interval: "weekly"
|
||||
groups:
|
||||
dev-patch-updates:
|
||||
dependency-type: "development"
|
||||
@@ -47,7 +47,7 @@ updates:
|
||||
- package-ecosystem: "npm"
|
||||
directory: "/docs"
|
||||
schedule:
|
||||
interval: "daily"
|
||||
interval: "weekly"
|
||||
groups:
|
||||
dev-patch-updates:
|
||||
dependency-type: "development"
|
||||
@@ -69,7 +69,7 @@ updates:
|
||||
- package-ecosystem: "npm"
|
||||
directory: "/test"
|
||||
schedule:
|
||||
interval: "daily"
|
||||
interval: "weekly"
|
||||
groups:
|
||||
dev-patch-updates:
|
||||
dependency-type: "development"
|
||||
@@ -87,11 +87,11 @@ updates:
|
||||
dependency-type: "production"
|
||||
update-types:
|
||||
- "minor"
|
||||
|
||||
|
||||
- package-ecosystem: "docker"
|
||||
directory: "/docker"
|
||||
schedule:
|
||||
interval: "daily"
|
||||
interval: "weekly"
|
||||
groups:
|
||||
updates:
|
||||
update-types:
|
||||
|
||||
2
.github/workflows/stale.yml
vendored
2
.github/workflows/stale.yml
vendored
@@ -8,7 +8,7 @@ jobs:
|
||||
stale:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/stale@v9
|
||||
- uses: actions/stale@v10
|
||||
with:
|
||||
stale-issue-label: 'stale'
|
||||
stale-pr-label: 'stale'
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"$schema": "https://biomejs.dev/schemas/2.3.2/schema.json",
|
||||
"$schema": "https://biomejs.dev/schemas/2.3.12/schema.json",
|
||||
"vcs": {
|
||||
"enabled": true,
|
||||
"clientKind": "git",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import crypto from "node:crypto";
|
||||
import bcrypt from "bcrypt";
|
||||
import { authenticator } from "otplib";
|
||||
import { generateSecret, generateURI, verify } from "otplib";
|
||||
import errs from "../lib/error.js";
|
||||
import authModel from "../models/auth.js";
|
||||
import internalUser from "./user.js";
|
||||
@@ -27,7 +27,6 @@ const generateBackupCodes = async () => {
|
||||
};
|
||||
|
||||
const internal2fa = {
|
||||
|
||||
/**
|
||||
* Check if user has 2FA enabled
|
||||
* @param {number} userId
|
||||
@@ -72,8 +71,12 @@ const internal2fa = {
|
||||
startSetup: async (access, userId) => {
|
||||
await access.can("users:password", userId);
|
||||
const user = await internalUser.get(access, { id: userId });
|
||||
const secret = authenticator.generateSecret();
|
||||
const otpauth_url = authenticator.keyuri(user.email, APP_NAME, secret);
|
||||
const secret = generateSecret();
|
||||
const otpauth_url = generateURI({
|
||||
issuer: APP_NAME,
|
||||
label: user.email,
|
||||
secret: secret,
|
||||
});
|
||||
const auth = await internal2fa.getUserPasswordAuth(userId);
|
||||
|
||||
// ensure user isn't already setup for 2fa
|
||||
@@ -85,7 +88,8 @@ const internal2fa = {
|
||||
const meta = auth.meta || {};
|
||||
meta.totp_pending_secret = secret;
|
||||
|
||||
await authModel.query()
|
||||
await authModel
|
||||
.query()
|
||||
.where("id", auth.id)
|
||||
.andWhere("user_id", userId)
|
||||
.andWhere("type", "password")
|
||||
@@ -112,8 +116,8 @@ const internal2fa = {
|
||||
throw new errs.ValidationError("No pending 2FA setup found");
|
||||
}
|
||||
|
||||
const valid = authenticator.verify({ token: code, secret });
|
||||
if (!valid) {
|
||||
const result = await verify({ token: code, secret });
|
||||
if (!result.valid) {
|
||||
throw new errs.ValidationError("Invalid verification code");
|
||||
}
|
||||
|
||||
@@ -156,12 +160,12 @@ const internal2fa = {
|
||||
throw new errs.ValidationError("2FA is not enabled");
|
||||
}
|
||||
|
||||
const valid = authenticator.verify({
|
||||
const result = await verify({
|
||||
token: code,
|
||||
secret: auth.meta.totp_secret,
|
||||
});
|
||||
|
||||
if (!valid) {
|
||||
if (!result.valid) {
|
||||
throw new errs.AuthError("Invalid verification code");
|
||||
}
|
||||
|
||||
@@ -195,12 +199,12 @@ const internal2fa = {
|
||||
}
|
||||
|
||||
// Try TOTP code first
|
||||
const valid = authenticator.verify({
|
||||
const result = await verify({
|
||||
token,
|
||||
secret,
|
||||
});
|
||||
|
||||
if (valid) {
|
||||
if (result.valid) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -248,12 +252,12 @@ const internal2fa = {
|
||||
throw new errs.ValidationError("No 2FA secret found");
|
||||
}
|
||||
|
||||
const valid = authenticator.verify({
|
||||
const result = await verify({
|
||||
token,
|
||||
secret,
|
||||
});
|
||||
|
||||
if (!valid) {
|
||||
if (!result.valid) {
|
||||
throw new errs.ValidationError("Invalid verification code");
|
||||
}
|
||||
|
||||
@@ -271,11 +275,7 @@ const internal2fa = {
|
||||
},
|
||||
|
||||
getUserPasswordAuth: async (userId) => {
|
||||
const auth = await authModel
|
||||
.query()
|
||||
.where("user_id", userId)
|
||||
.andWhere("type", "password")
|
||||
.first();
|
||||
const auth = await authModel.query().where("user_id", userId).andWhere("type", "password").first();
|
||||
|
||||
if (!auth) {
|
||||
throw new errs.ItemNotFoundError("Auth not found");
|
||||
|
||||
@@ -12,37 +12,37 @@
|
||||
"validate-schema": "node validate-schema.js"
|
||||
},
|
||||
"dependencies": {
|
||||
"@apidevtools/json-schema-ref-parser": "^11.7.0",
|
||||
"@apidevtools/json-schema-ref-parser": "^14.1.1",
|
||||
"ajv": "^8.17.1",
|
||||
"archiver": "^5.3.0",
|
||||
"archiver": "^7.0.1",
|
||||
"batchflow": "^0.4.0",
|
||||
"bcrypt": "^5.0.0",
|
||||
"body-parser": "^1.20.3",
|
||||
"bcrypt": "^6.0.0",
|
||||
"body-parser": "^2.2.2",
|
||||
"compression": "^1.7.4",
|
||||
"express": "^4.22.0",
|
||||
"express": "^5.2.1",
|
||||
"express-fileupload": "^1.5.2",
|
||||
"gravatar": "^1.8.2",
|
||||
"jsonwebtoken": "^9.0.2",
|
||||
"knex": "2.4.2",
|
||||
"liquidjs": "10.6.1",
|
||||
"jsonwebtoken": "^9.0.3",
|
||||
"knex": "3.1.0",
|
||||
"liquidjs": "10.24.0",
|
||||
"lodash": "^4.17.23",
|
||||
"moment": "^2.30.1",
|
||||
"mysql2": "^3.15.3",
|
||||
"mysql2": "^3.16.2",
|
||||
"node-rsa": "^1.1.1",
|
||||
"objection": "3.0.1",
|
||||
"otplib": "^12.0.1",
|
||||
"objection": "3.1.5",
|
||||
"otplib": "^13.2.1",
|
||||
"path": "^0.12.7",
|
||||
"pg": "^8.16.3",
|
||||
"pg": "^8.18.0",
|
||||
"proxy-agent": "^6.5.0",
|
||||
"signale": "1.4.0",
|
||||
"sqlite3": "^5.1.7",
|
||||
"temp-write": "^4.0.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@apidevtools/swagger-parser": "^10.1.0",
|
||||
"@biomejs/biome": "^2.3.2",
|
||||
"chalk": "4.1.2",
|
||||
"nodemon": "^2.0.2"
|
||||
"@apidevtools/swagger-parser": "^12.1.0",
|
||||
"@biomejs/biome": "^2.3.12",
|
||||
"chalk": "5.6.2",
|
||||
"nodemon": "^3.1.11"
|
||||
},
|
||||
"signale": {
|
||||
"displayDate": true,
|
||||
|
||||
1342
backend/yarn.lock
1342
backend/yarn.lock
File diff suppressed because it is too large
Load Diff
@@ -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.js
|
||||
command: cypress run --browser chrome --config-file=cypress/config/ci.mjs
|
||||
networks:
|
||||
- fulltest
|
||||
|
||||
|
||||
@@ -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.js
|
||||
command: cypress run --browser chrome --config-file=cypress/config/ci.mjs
|
||||
networks:
|
||||
- nginx_proxy_manager
|
||||
|
||||
|
||||
@@ -5,6 +5,9 @@ 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;
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"$schema": "https://biomejs.dev/schemas/2.3.2/schema.json",
|
||||
"$schema": "https://biomejs.dev/schemas/2.3.14/schema.json",
|
||||
"vcs": {
|
||||
"enabled": true,
|
||||
"clientKind": "git",
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
const allLocales = [
|
||||
["en", "en-US"],
|
||||
["de", "de-DE"],
|
||||
["pt", "pt-PT"],
|
||||
["es", "es-ES"],
|
||||
["fr", "fr-FR"],
|
||||
["it", "it-IT"],
|
||||
|
||||
@@ -17,50 +17,50 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@tabler/core": "^1.4.0",
|
||||
"@tabler/icons-react": "^3.35.0",
|
||||
"@tanstack/react-query": "^5.90.6",
|
||||
"@tabler/icons-react": "^3.36.1",
|
||||
"@tanstack/react-query": "^5.90.20",
|
||||
"@tanstack/react-table": "^8.21.3",
|
||||
"@uiw/react-textarea-code-editor": "^3.1.1",
|
||||
"classnames": "^2.5.1",
|
||||
"country-flag-icons": "^1.5.21",
|
||||
"country-flag-icons": "^1.6.12",
|
||||
"date-fns": "^4.1.0",
|
||||
"ez-modal-react": "^1.0.5",
|
||||
"formik": "^2.4.6",
|
||||
"formik": "^2.4.9",
|
||||
"generate-password-browser": "^1.1.0",
|
||||
"humps": "^2.0.1",
|
||||
"query-string": "^9.3.1",
|
||||
"react": "^19.2.3",
|
||||
"react": "^19.2.4",
|
||||
"react-bootstrap": "^2.10.10",
|
||||
"react-dom": "^19.2.3",
|
||||
"react-intl": "^7.1.14",
|
||||
"react-dom": "^19.2.4",
|
||||
"react-intl": "^8.1.3",
|
||||
"react-markdown": "^10.1.0",
|
||||
"react-router-dom": "^7.9.5",
|
||||
"react-router-dom": "^7.13.0",
|
||||
"react-select": "^5.10.2",
|
||||
"react-toastify": "^11.0.5",
|
||||
"rooks": "^9.3.0"
|
||||
"rooks": "^9.5.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@biomejs/biome": "^2.3.2",
|
||||
"@formatjs/cli": "^6.7.4",
|
||||
"@tanstack/react-query-devtools": "^5.90.2",
|
||||
"@biomejs/biome": "^2.3.14",
|
||||
"@formatjs/cli": "^6.12.2",
|
||||
"@tanstack/react-query-devtools": "^5.91.3",
|
||||
"@testing-library/dom": "^10.4.1",
|
||||
"@testing-library/jest-dom": "^6.9.1",
|
||||
"@testing-library/react": "^16.3.0",
|
||||
"@testing-library/react": "^16.3.2",
|
||||
"@types/country-flag-icons": "^1.2.2",
|
||||
"@types/humps": "^2.0.6",
|
||||
"@types/react": "^19.2.7",
|
||||
"@types/react": "^19.2.10",
|
||||
"@types/react-dom": "^19.2.3",
|
||||
"@types/react-table": "^7.7.20",
|
||||
"@vitejs/plugin-react": "^5.1.2",
|
||||
"happy-dom": "^20.0.10",
|
||||
"@vitejs/plugin-react": "^5.1.3",
|
||||
"happy-dom": "^20.5.0",
|
||||
"postcss": "^8.5.6",
|
||||
"postcss-simple-vars": "^7.0.1",
|
||||
"sass": "^1.93.3",
|
||||
"sass": "^1.97.3",
|
||||
"tmp": "^0.2.5",
|
||||
"typescript": "5.9.3",
|
||||
"vite": "^7.1.12",
|
||||
"vite-plugin-checker": "^0.11.0",
|
||||
"vite-tsconfig-paths": "^5.1.4",
|
||||
"vitest": "^4.0.6"
|
||||
"vite": "^7.3.1",
|
||||
"vite-plugin-checker": "^0.12.0",
|
||||
"vite-tsconfig-paths": "^6.0.5",
|
||||
"vitest": "^4.0.18"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
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";
|
||||
@@ -26,6 +27,7 @@ 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],
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
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";
|
||||
@@ -17,7 +18,8 @@ import * as zh from "./zh/index";
|
||||
import * as tr from "./tr/index";
|
||||
import * as hu from "./hu/index";
|
||||
|
||||
const items: any = { en, de, es, ja, sk, zh, pl, ru, it, vi, nl, bg, ko, ga, id, fr, tr, hu };
|
||||
const items: any = { en, de, pt, es, ja, sk, zh, pl, ru, it, vi, nl, bg, ko, ga, id, fr, tr, hu };
|
||||
|
||||
|
||||
const fallbackLang = "en";
|
||||
|
||||
|
||||
11
frontend/src/locale/src/HelpDoc/pt/AccessLists.md
Normal file
11
frontend/src/locale/src/HelpDoc/pt/AccessLists.md
Normal file
@@ -0,0 +1,11 @@
|
||||
## 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.
|
||||
31
frontend/src/locale/src/HelpDoc/pt/Certificates.md
Normal file
31
frontend/src/locale/src/HelpDoc/pt/Certificates.md
Normal file
@@ -0,0 +1,31 @@
|
||||
## 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.
|
||||
9
frontend/src/locale/src/HelpDoc/pt/DeadHosts.md
Normal file
9
frontend/src/locale/src/HelpDoc/pt/DeadHosts.md
Normal file
@@ -0,0 +1,9 @@
|
||||
## 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.
|
||||
7
frontend/src/locale/src/HelpDoc/pt/ProxyHosts.md
Normal file
7
frontend/src/locale/src/HelpDoc/pt/ProxyHosts.md
Normal file
@@ -0,0 +1,7 @@
|
||||
## 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.
|
||||
7
frontend/src/locale/src/HelpDoc/pt/RedirectionHosts.md
Normal file
7
frontend/src/locale/src/HelpDoc/pt/RedirectionHosts.md
Normal file
@@ -0,0 +1,7 @@
|
||||
## 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.
|
||||
6
frontend/src/locale/src/HelpDoc/pt/Streams.md
Normal file
6
frontend/src/locale/src/HelpDoc/pt/Streams.md
Normal file
@@ -0,0 +1,6 @@
|
||||
## 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.
|
||||
6
frontend/src/locale/src/HelpDoc/pt/index.ts
Normal file
6
frontend/src/locale/src/HelpDoc/pt/index.ts
Normal file
@@ -0,0 +1,6 @@
|
||||
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";
|
||||
File diff suppressed because it is too large
Load Diff
@@ -11,6 +11,9 @@
|
||||
"locale-de-DE": {
|
||||
"defaultMessage": "German"
|
||||
},
|
||||
"locale-pt-PT": {
|
||||
"defaultMessage": "Português (Europeu)"
|
||||
},
|
||||
"locale-fr-FR": {
|
||||
"defaultMessage": "Français"
|
||||
},
|
||||
|
||||
683
frontend/src/locale/src/pt.json
Normal file
683
frontend/src/locale/src/pt.json
Normal file
@@ -0,0 +1,683 @@
|
||||
{
|
||||
"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"
|
||||
}
|
||||
}
|
||||
@@ -41,7 +41,7 @@ const RenewCertificateModal = EasyModal.create(({ id, visible, remove }: Props)
|
||||
.finally(() => {
|
||||
setIsSubmitting(false);
|
||||
});
|
||||
}, [id, data, isFresh, isSubmitting, remove, queryClient.invalidateQueries]);
|
||||
}, [id, data, isFresh, isSubmitting, remove, queryClient]);
|
||||
|
||||
return (
|
||||
<Modal show={visible} onHide={isSubmitting ? undefined : remove}>
|
||||
|
||||
1008
frontend/yarn.lock
1008
frontend/yarn.lock
File diff suppressed because it is too large
Load Diff
@@ -1,4 +1,4 @@
|
||||
FROM cypress/included:14.0.1
|
||||
FROM cypress/included:15.9.0
|
||||
|
||||
# Disable Cypress CLI colors
|
||||
ENV FORCE_COLOR=0
|
||||
|
||||
@@ -1,22 +0,0 @@
|
||||
const { defineConfig } = require('cypress');
|
||||
|
||||
module.exports = defineConfig({
|
||||
requestTimeout: 30000,
|
||||
defaultCommandTimeout: 20000,
|
||||
reporter: 'cypress-multi-reporters',
|
||||
reporterOptions: {
|
||||
configFile: 'multi-reporter.json'
|
||||
},
|
||||
video: true,
|
||||
videosFolder: 'results/videos',
|
||||
screenshotsFolder: 'results/screenshots',
|
||||
e2e: {
|
||||
setupNodeEvents(on, config) {
|
||||
return require("../plugins/index.js")(on, config);
|
||||
},
|
||||
env: {
|
||||
swaggerBase: '{{baseUrl}}/api/schema?ts=' + Date.now(),
|
||||
},
|
||||
baseUrl: 'http://fullstack:81',
|
||||
}
|
||||
});
|
||||
23
test/cypress/config/ci.mjs
Normal file
23
test/cypress/config/ci.mjs
Normal file
@@ -0,0 +1,23 @@
|
||||
import { defineConfig } from 'cypress';
|
||||
import pluginSetup from '../plugins/index.mjs';
|
||||
|
||||
export default defineConfig({
|
||||
requestTimeout: 30000,
|
||||
defaultCommandTimeout: 20000,
|
||||
reporter: "cypress-multi-reporters",
|
||||
reporterOptions: {
|
||||
configFile: "multi-reporter.json"
|
||||
},
|
||||
video: true,
|
||||
videosFolder: "results/videos",
|
||||
screenshotsFolder: "results/screenshots",
|
||||
e2e: {
|
||||
setupNodeEvents(on, config) {
|
||||
return pluginSetup(on, config);
|
||||
},
|
||||
env: {
|
||||
swaggerBase: `{{baseUrl}}/api/schema?ts=${Date.now()}`,
|
||||
},
|
||||
baseUrl: "http://fullstack:81",
|
||||
}
|
||||
});
|
||||
@@ -1,22 +0,0 @@
|
||||
const { defineConfig } = require('cypress');
|
||||
|
||||
module.exports = defineConfig({
|
||||
requestTimeout: 30000,
|
||||
defaultCommandTimeout: 20000,
|
||||
reporter: 'cypress-multi-reporters',
|
||||
reporterOptions: {
|
||||
configFile: 'multi-reporter.json'
|
||||
},
|
||||
video: true,
|
||||
videosFolder: 'results/videos',
|
||||
screenshotsFolder: 'results/screenshots',
|
||||
e2e: {
|
||||
setupNodeEvents(on, config) {
|
||||
return require("../plugins/index.js")(on, config);
|
||||
},
|
||||
env: {
|
||||
swaggerBase: '{{baseUrl}}/api/schema?ts=' + Date.now(),
|
||||
},
|
||||
baseUrl: 'http://127.0.0.1:3081',
|
||||
}
|
||||
});
|
||||
23
test/cypress/config/dev.mjs
Normal file
23
test/cypress/config/dev.mjs
Normal file
@@ -0,0 +1,23 @@
|
||||
import { defineConfig } from 'cypress';
|
||||
import pluginSetup from '../plugins/index.mjs';
|
||||
|
||||
export default defineConfig({
|
||||
requestTimeout: 30000,
|
||||
defaultCommandTimeout: 20000,
|
||||
reporter: "cypress-multi-reporters",
|
||||
reporterOptions: {
|
||||
configFile: "multi-reporter.json"
|
||||
},
|
||||
video: true,
|
||||
videosFolder: "results/videos",
|
||||
screenshotsFolder: "results/screenshots",
|
||||
e2e: {
|
||||
setupNodeEvents(on, config) {
|
||||
return pluginSetup(on, config);
|
||||
},
|
||||
env: {
|
||||
swaggerBase: `{{baseUrl}}/api/schema?ts=${Date.now()}`,
|
||||
},
|
||||
baseUrl: "http://127.0.0.1:3081",
|
||||
}
|
||||
});
|
||||
@@ -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.code).to.eq(0);
|
||||
expect(result.exitCode).to.eq(0);
|
||||
// Install CA
|
||||
cy.exec('mkcert -install').then((result) => {
|
||||
expect(result.code).to.eq(0);
|
||||
expect(result.exitCode).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.code).to.eq(0);
|
||||
expect(result.exitCode).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.code).to.eq(0);
|
||||
expect(result.exitCode).to.eq(0);
|
||||
expect(result.stdout).to.contain('yay it works');
|
||||
});
|
||||
});
|
||||
@@ -176,6 +176,7 @@ describe('Streams', () => {
|
||||
'cert_chain_of_trust',
|
||||
'cert_extlifeSpan',
|
||||
'cert_revocation',
|
||||
'engine_problem',
|
||||
'overall_grade',
|
||||
];
|
||||
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
const logger = require('./logger');
|
||||
const axios = require('axios').default;
|
||||
import axios from "axios";
|
||||
import logger from "./logger.mjs";
|
||||
|
||||
const BackendApi = function(config, token) {
|
||||
const BackendApi = function (config, token) {
|
||||
this.config = config;
|
||||
this.token = token;
|
||||
this.token = token;
|
||||
|
||||
this.axios = axios.create({
|
||||
baseURL: config.baseUrl,
|
||||
@@ -14,26 +14,24 @@ const BackendApi = function(config, token) {
|
||||
/**
|
||||
* @param {string} token
|
||||
*/
|
||||
BackendApi.prototype.setToken = function(token) {
|
||||
BackendApi.prototype.setToken = function (token) {
|
||||
this.token = token;
|
||||
};
|
||||
|
||||
/**
|
||||
* @param {bool} returnOnError
|
||||
*/
|
||||
BackendApi.prototype._prepareOptions = function(returnOnError) {
|
||||
let options = {
|
||||
BackendApi.prototype._prepareOptions = function (returnOnError) {
|
||||
const 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 = function () {
|
||||
return true;
|
||||
}
|
||||
options.validateStatus = () => true;
|
||||
}
|
||||
return options;
|
||||
};
|
||||
@@ -44,13 +42,30 @@ BackendApi.prototype._prepareOptions = function(returnOnError) {
|
||||
* @param {function} reject
|
||||
* @param {bool} returnOnError
|
||||
*/
|
||||
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));
|
||||
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}`,
|
||||
),
|
||||
);
|
||||
} else {
|
||||
reject(new Error('Error ' + response.status));
|
||||
reject(new Error(`Error ${response.status}`));
|
||||
}
|
||||
} else {
|
||||
resolve(response.data);
|
||||
@@ -63,10 +78,10 @@ BackendApi.prototype._handleResponse = function(response, resolve, reject, retur
|
||||
* @param {function} reject
|
||||
* @param {bool} returnOnError
|
||||
*/
|
||||
BackendApi.prototype._handleError = function(err, resolve, reject, returnOnError) {
|
||||
logger('Axios Error:', err);
|
||||
BackendApi.prototype._handleError = (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);
|
||||
}
|
||||
@@ -84,11 +99,11 @@ BackendApi.prototype.request = function (method, path, returnOnError, data) {
|
||||
const options = this._prepareOptions(returnOnError);
|
||||
|
||||
return new Promise((resolve, reject) => {
|
||||
let opts = {
|
||||
const opts = {
|
||||
method: method,
|
||||
url: path,
|
||||
...options
|
||||
}
|
||||
...options,
|
||||
};
|
||||
if (data !== undefined && data !== null) {
|
||||
opts.data = data;
|
||||
}
|
||||
@@ -110,16 +125,17 @@ 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);
|
||||
})
|
||||
@@ -129,4 +145,4 @@ BackendApi.prototype.postForm = function (path, form, returnOnError) {
|
||||
});
|
||||
};
|
||||
|
||||
module.exports = BackendApi;
|
||||
export default BackendApi;
|
||||
@@ -1,7 +0,0 @@
|
||||
const _ = require("lodash");
|
||||
|
||||
module.exports = function() {
|
||||
let arr = _.values(arguments);
|
||||
arr.unshift('[Backend API]');
|
||||
console.log.apply(null, arr);
|
||||
};
|
||||
7
test/cypress/plugins/backendApi/logger.mjs
Normal file
7
test/cypress/plugins/backendApi/logger.mjs
Normal file
@@ -0,0 +1,7 @@
|
||||
const log = (...args) => {
|
||||
const arr = args;
|
||||
arr.unshift("[Backend API]");
|
||||
console.log(...arr);
|
||||
};
|
||||
|
||||
export default log;
|
||||
@@ -1,13 +1,12 @@
|
||||
const fs = require('fs');
|
||||
const FormData = require('form-data');
|
||||
const logger = require('./logger');
|
||||
const Client = require('./client');
|
||||
import fs from "node:fs";
|
||||
import FormData from "form-data";
|
||||
import Client from "./client.mjs";
|
||||
import logger from "./logger.mjs";
|
||||
|
||||
module.exports = function (config) {
|
||||
logger('Client Ready using', config.baseUrl);
|
||||
export default (config) => {
|
||||
logger("Client Ready using", config.baseUrl);
|
||||
|
||||
return {
|
||||
|
||||
/**
|
||||
* @param {object} options
|
||||
* @param {string} options.path API path
|
||||
@@ -18,7 +17,7 @@ module.exports = function (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);
|
||||
},
|
||||
|
||||
/**
|
||||
@@ -32,7 +31,12 @@ module.exports = function (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,
|
||||
);
|
||||
},
|
||||
|
||||
/**
|
||||
@@ -48,8 +52,11 @@ module.exports = function (config) {
|
||||
api.setToken(options.token);
|
||||
|
||||
const form = new FormData();
|
||||
for (let [key, value] of Object.entries(options.files)) {
|
||||
form.append(key, fs.createReadStream(config.fixturesFolder + '/' + value));
|
||||
for (const [key, value] of Object.entries(options.files)) {
|
||||
form.append(
|
||||
key,
|
||||
fs.createReadStream(`${config.fixturesFolder}/${value}`),
|
||||
);
|
||||
}
|
||||
return api.postForm(options.path, form, options.returnOnError || false);
|
||||
},
|
||||
@@ -65,7 +72,12 @@ module.exports = function (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,
|
||||
);
|
||||
},
|
||||
|
||||
/**
|
||||
@@ -78,7 +90,11 @@ module.exports = function (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,
|
||||
);
|
||||
},
|
||||
};
|
||||
};
|
||||
@@ -1,21 +0,0 @@
|
||||
const { SwaggerValidation } = require('@jc21/cypress-swagger-validation');
|
||||
const chalk = require('chalk');
|
||||
|
||||
module.exports = (on, config) => {
|
||||
// Replace swaggerBase config var wildcard
|
||||
if (typeof config.env.swaggerBase !== 'undefined') {
|
||||
config.env.swaggerBase = config.env.swaggerBase.replace('{{baseUrl}}', config.baseUrl);
|
||||
}
|
||||
|
||||
// Plugin Events
|
||||
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)}`);
|
||||
return null;
|
||||
}
|
||||
});
|
||||
|
||||
return config;
|
||||
};
|
||||
27
test/cypress/plugins/index.mjs
Normal file
27
test/cypress/plugins/index.mjs
Normal file
@@ -0,0 +1,27 @@
|
||||
import { SwaggerValidation } from "@jc21/cypress-swagger-validation";
|
||||
import chalk from "chalk";
|
||||
import backendTask from "./backendApi/task.mjs";
|
||||
|
||||
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,
|
||||
);
|
||||
}
|
||||
|
||||
// Plugin Events
|
||||
on("task", SwaggerValidation(config));
|
||||
on("task", backendTask(config));
|
||||
on("task", {
|
||||
log(message) {
|
||||
console.log(
|
||||
`${chalk.cyan.bold("[")}${chalk.blue.bold("LOG")}${chalk.cyan.bold("]")} ${chalk.red.bold(message)}`,
|
||||
);
|
||||
return null;
|
||||
},
|
||||
});
|
||||
|
||||
return config;
|
||||
};
|
||||
@@ -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.code).to.eq(0)));
|
||||
.then(() => expect(result.exitCode).to.eq(0)));
|
||||
});
|
||||
});
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import './commands';
|
||||
import './commands.mjs';
|
||||
|
||||
Cypress.on('uncaught:exception', (/*err, runnable*/) => {
|
||||
// returning false here prevents Cypress from
|
||||
|
||||
@@ -1,6 +1,13 @@
|
||||
{
|
||||
"include": [
|
||||
"./node_modules/cypress",
|
||||
"cypress/**/*.js"
|
||||
"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"
|
||||
]
|
||||
}
|
||||
|
||||
@@ -5,10 +5,10 @@
|
||||
"main": "index.js",
|
||||
"dependencies": {
|
||||
"@jc21/cypress-swagger-validation": "^0.3.2",
|
||||
"@quobix/vacuum": "^0.19.4",
|
||||
"@quobix/vacuum": "^0.23.4",
|
||||
"axios": "^1.13.1",
|
||||
"chalk": "^4.1.0",
|
||||
"cypress": "^14.0.1",
|
||||
"chalk": "^5.6.2",
|
||||
"cypress": "^15.9.0",
|
||||
"cypress-multi-reporters": "^2.0.5",
|
||||
"cypress-wait-until": "^3.0.2",
|
||||
"eslint": "^9.39.0",
|
||||
@@ -21,9 +21,9 @@
|
||||
"mocha-junit-reporter": "^2.2.1"
|
||||
},
|
||||
"scripts": {
|
||||
"cypress": "HTTP_PROXY=127.0.0.1:8128 HTTPS_PROXY=127.0.0.1:8128 cypress open --config-file=cypress/config/ci.js",
|
||||
"cypress:headless": "HTTP_PROXY=127.0.0.1:8128 HTTPS_PROXY=127.0.0.1:8128 cypress run --config-file=cypress/config/ci.js",
|
||||
"cypress:dev": "cypress run --config-file=cypress/config/dev.js",
|
||||
"cypress": "HTTP_PROXY=127.0.0.1:8128 HTTPS_PROXY=127.0.0.1:8128 cypress open --config-file=cypress/config/ci.mjs",
|
||||
"cypress:headless": "HTTP_PROXY=127.0.0.1:8128 HTTPS_PROXY=127.0.0.1:8128 cypress run --config-file=cypress/config/ci.mjs",
|
||||
"cypress:dev": "cypress run --config-file=cypress/config/dev.mjs",
|
||||
"swagger-lint": "vacuum lint -b -q -d -a --no-clip -n=warn"
|
||||
},
|
||||
"author": "",
|
||||
|
||||
197
test/yarn.lock
197
test/yarn.lock
@@ -43,10 +43,10 @@
|
||||
ajv-draft-04 "^1.0.0"
|
||||
call-me-maybe "^1.0.1"
|
||||
|
||||
"@cypress/request@^3.0.9":
|
||||
version "3.0.9"
|
||||
resolved "https://registry.yarnpkg.com/@cypress/request/-/request-3.0.9.tgz#8ed6e08fea0c62998b5552301023af7268f11625"
|
||||
integrity sha512-I3l7FdGRXluAS44/0NguwWlO83J18p0vlr2FYHrJkWdNYhgVoiYo61IXPqaOsL+vNxU1ZqMACzItGK3/KKDsdw==
|
||||
"@cypress/request@^3.0.10":
|
||||
version "3.0.10"
|
||||
resolved "https://registry.yarnpkg.com/@cypress/request/-/request-3.0.10.tgz#e09c695e8460a82acafe6cfaf089cf2ca06dc054"
|
||||
integrity sha512-hauBrOdvu08vOsagkZ/Aju5XuiZx6ldsLfByg1htFeldhex+PeMrYauANzFsMJeAA0+dyPLbDoX2OYuvVoLDkQ==
|
||||
dependencies:
|
||||
aws-sign2 "~0.7.0"
|
||||
aws4 "^1.8.0"
|
||||
@@ -61,7 +61,7 @@
|
||||
json-stringify-safe "~5.0.1"
|
||||
mime-types "~2.1.19"
|
||||
performance-now "^2.1.0"
|
||||
qs "6.14.0"
|
||||
qs "~6.14.1"
|
||||
safe-buffer "^5.1.2"
|
||||
tough-cookie "^5.0.0"
|
||||
tunnel-agent "^0.6.0"
|
||||
@@ -183,6 +183,13 @@
|
||||
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"
|
||||
@@ -209,13 +216,14 @@
|
||||
resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33"
|
||||
integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==
|
||||
|
||||
"@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==
|
||||
"@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==
|
||||
dependencies:
|
||||
node-fetch "^3.2.10"
|
||||
tar "^6.1.11"
|
||||
https-proxy-agent "^7.0.6"
|
||||
node-fetch "^3.3.2"
|
||||
tar "^7.5.2"
|
||||
|
||||
"@types/color-name@^1.1.1":
|
||||
version "1.1.1"
|
||||
@@ -247,6 +255,11 @@
|
||||
resolved "https://registry.yarnpkg.com/@types/sizzle/-/sizzle-2.3.2.tgz#a811b8c18e2babab7d542b3365887ae2e4d9de47"
|
||||
integrity sha512-7EJYyKTL7tFR8+gDbB6Wwz/arpGa0Mywk1TJbNzKzHtzbwVmY4HR9WqS5VV7dsBUKQmPNr192jHr/VpBluj/hg==
|
||||
|
||||
"@types/tmp@^0.2.3":
|
||||
version "0.2.6"
|
||||
resolved "https://registry.yarnpkg.com/@types/tmp/-/tmp-0.2.6.tgz#d785ee90c52d7cc020e249c948c36f7b32d1e217"
|
||||
integrity sha512-chhaNf2oKHlRkDGt+tiKE2Z5aJ6qalm7Z9rlLdBwmOiAAf09YQvvoLXjWK4HWPF1xU/fqvMgfNfpVoBscA/tKA==
|
||||
|
||||
"@types/yauzl@^2.9.1":
|
||||
version "2.10.0"
|
||||
resolved "https://registry.yarnpkg.com/@types/yauzl/-/yauzl-2.10.0.tgz#b3248295276cf8c6f153ebe6a9aba0c988cb2599"
|
||||
@@ -264,6 +277,11 @@ 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"
|
||||
@@ -385,11 +403,6 @@ astral-regex@^2.0.0:
|
||||
resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31"
|
||||
integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==
|
||||
|
||||
async@^3.2.0:
|
||||
version "3.2.6"
|
||||
resolved "https://registry.yarnpkg.com/async/-/async-3.2.6.tgz#1b0728e14929d51b85b449b7f06e27c1145e38ce"
|
||||
integrity sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==
|
||||
|
||||
asynckit@^0.4.0:
|
||||
version "0.4.0"
|
||||
resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
|
||||
@@ -411,9 +424,9 @@ aws4@^1.8.0:
|
||||
integrity sha512-Uvq6hVe90D0B2WEnUqtdgY1bATGz3mw33nH9Y+dmA+w5DHvUmBgkr5rM/KCHpCsiFNRUfokW/szpPPgMK2hm4A==
|
||||
|
||||
axios@^1.13.1, axios@^1.7.7:
|
||||
version "1.13.2"
|
||||
resolved "https://registry.yarnpkg.com/axios/-/axios-1.13.2.tgz#9ada120b7b5ab24509553ec3e40123521117f687"
|
||||
integrity sha512-VPk9ebNqPcy5lRGuSlKx752IlDatOjT9paPlm8A7yOuW2Fbvp4X3JznJtT4f0GzGLLiWE9W8onz51SqLYwzGaA==
|
||||
version "1.13.4"
|
||||
resolved "https://registry.yarnpkg.com/axios/-/axios-1.13.4.tgz#15d109a4817fb82f73aea910d41a2c85606076bc"
|
||||
integrity sha512-1wVkUaAO6WyaYtCkcYCOx12ZgpGf9Zif+qXa4n+oYzK558YryKqiL6UWwd5DqiH3VRW0GYhTZQ/vlgJrCoNQlg==
|
||||
dependencies:
|
||||
follow-redirects "^1.15.6"
|
||||
form-data "^4.0.4"
|
||||
@@ -528,16 +541,16 @@ chalk@^4.0.0, chalk@^4.1.0:
|
||||
ansi-styles "^4.1.0"
|
||||
supports-color "^7.1.0"
|
||||
|
||||
chalk@^5.6.2:
|
||||
version "5.6.2"
|
||||
resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.6.2.tgz#b1238b6e23ea337af71c7f8a295db5af0c158aea"
|
||||
integrity sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==
|
||||
|
||||
charenc@0.0.2:
|
||||
version "0.0.2"
|
||||
resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667"
|
||||
integrity sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==
|
||||
|
||||
check-more-types@^2.24.0:
|
||||
version "2.24.0"
|
||||
resolved "https://registry.yarnpkg.com/check-more-types/-/check-more-types-2.24.0.tgz#1420ffb10fd444dcfc79b43891bbfffd32a84600"
|
||||
integrity sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA==
|
||||
|
||||
chokidar@^4.0.1:
|
||||
version "4.0.3"
|
||||
resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-4.0.3.tgz#7be37a4c03c9aee1ecfe862a4a23b2c70c205d30"
|
||||
@@ -545,10 +558,10 @@ chokidar@^4.0.1:
|
||||
dependencies:
|
||||
readdirp "^4.0.1"
|
||||
|
||||
chownr@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece"
|
||||
integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==
|
||||
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==
|
||||
|
||||
ci-info@^4.1.0:
|
||||
version "4.2.0"
|
||||
@@ -670,22 +683,22 @@ cypress-wait-until@^3.0.2:
|
||||
resolved "https://registry.yarnpkg.com/cypress-wait-until/-/cypress-wait-until-3.0.2.tgz#c90dddfa4c46a2c422f5b91d486531c560bae46e"
|
||||
integrity sha512-iemies796dD5CgjG5kV0MnpEmKSH+s7O83ZoJLVzuVbZmm4lheMsZqAVT73hlMx4QlkwhxbyUzhOBUOZwoOe0w==
|
||||
|
||||
cypress@^14.0.1:
|
||||
version "14.5.4"
|
||||
resolved "https://registry.yarnpkg.com/cypress/-/cypress-14.5.4.tgz#d821fbb6220c3328e7413acc7724b75319c9e64d"
|
||||
integrity sha512-0Dhm4qc9VatOcI1GiFGVt8osgpPdqJLHzRwcAB5MSD/CAAts3oybvPUPawHyvJZUd8osADqZe/xzMsZ8sDTjXw==
|
||||
cypress@^15.9.0:
|
||||
version "15.9.0"
|
||||
resolved "https://registry.yarnpkg.com/cypress/-/cypress-15.9.0.tgz#9bcbbfbf3923d8aca7d06990cb174d5ba67e4084"
|
||||
integrity sha512-Ks6Bdilz3TtkLZtTQyqYaqtL/WT3X3APKaSLhTV96TmTyudzSjc6EJsJCHmBb7DxO+3R12q3Jkbjgm/iPgmwfg==
|
||||
dependencies:
|
||||
"@cypress/request" "^3.0.9"
|
||||
"@cypress/request" "^3.0.10"
|
||||
"@cypress/xvfb" "^1.2.4"
|
||||
"@types/sinonjs__fake-timers" "8.1.1"
|
||||
"@types/sizzle" "^2.3.2"
|
||||
"@types/tmp" "^0.2.3"
|
||||
arch "^2.2.0"
|
||||
blob-util "^2.0.2"
|
||||
bluebird "^3.7.2"
|
||||
buffer "^5.7.1"
|
||||
cachedir "^2.3.0"
|
||||
chalk "^4.1.0"
|
||||
check-more-types "^2.24.0"
|
||||
ci-info "^4.1.0"
|
||||
cli-cursor "^3.1.0"
|
||||
cli-table3 "0.6.1"
|
||||
@@ -700,10 +713,8 @@ cypress@^14.0.1:
|
||||
extract-zip "2.0.1"
|
||||
figures "^3.2.0"
|
||||
fs-extra "^9.1.0"
|
||||
getos "^3.2.1"
|
||||
hasha "5.2.2"
|
||||
is-installed-globally "~0.4.0"
|
||||
lazy-ass "^1.6.0"
|
||||
listr2 "^3.8.3"
|
||||
lodash "^4.17.21"
|
||||
log-symbols "^4.0.0"
|
||||
@@ -713,9 +724,9 @@ cypress@^14.0.1:
|
||||
process "^0.11.10"
|
||||
proxy-from-env "1.0.0"
|
||||
request-progress "^3.0.0"
|
||||
semver "^7.7.1"
|
||||
supports-color "^8.1.1"
|
||||
tmp "~0.2.3"
|
||||
systeminformation "^5.27.14"
|
||||
tmp "~0.2.4"
|
||||
tree-kill "1.2.2"
|
||||
untildify "^4.0.0"
|
||||
yauzl "^2.10.0"
|
||||
@@ -737,6 +748,13 @@ 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"
|
||||
@@ -1178,13 +1196,6 @@ 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"
|
||||
@@ -1226,13 +1237,6 @@ get-stream@^5.0.0, get-stream@^5.1.0:
|
||||
dependencies:
|
||||
pump "^3.0.0"
|
||||
|
||||
getos@^3.2.1:
|
||||
version "3.2.1"
|
||||
resolved "https://registry.yarnpkg.com/getos/-/getos-3.2.1.tgz#0134d1f4e00eb46144c5a9c0ac4dc087cbb27dc5"
|
||||
integrity sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q==
|
||||
dependencies:
|
||||
async "^3.2.0"
|
||||
|
||||
getpass@^0.1.1:
|
||||
version "0.1.7"
|
||||
resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa"
|
||||
@@ -1332,6 +1336,14 @@ 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"
|
||||
@@ -1529,11 +1541,6 @@ keyv@^4.5.4:
|
||||
dependencies:
|
||||
json-buffer "3.0.1"
|
||||
|
||||
lazy-ass@^1.6.0:
|
||||
version "1.6.0"
|
||||
resolved "https://registry.yarnpkg.com/lazy-ass/-/lazy-ass-1.6.0.tgz#7999655e8646c17f089fdd187d150d3324d54513"
|
||||
integrity sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw==
|
||||
|
||||
levn@^0.4.1:
|
||||
version "0.4.1"
|
||||
resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade"
|
||||
@@ -1664,35 +1671,17 @@ minimist@^1.2.8:
|
||||
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c"
|
||||
integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==
|
||||
|
||||
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:
|
||||
"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.0.4, 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@^2.1.1:
|
||||
version "2.1.2"
|
||||
resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931"
|
||||
integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==
|
||||
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==
|
||||
dependencies:
|
||||
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==
|
||||
minipass "^7.1.2"
|
||||
|
||||
mkdirp@^3.0.0:
|
||||
version "3.0.1"
|
||||
@@ -1752,7 +1741,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.2.10:
|
||||
node-fetch@^3.3.2:
|
||||
version "3.3.2"
|
||||
resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-3.3.2.tgz#d1e889bacdf733b4ff3b2b243eb7a12866a0b78b"
|
||||
integrity sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==
|
||||
@@ -1935,10 +1924,10 @@ punycode@^2.1.0:
|
||||
resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec"
|
||||
integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==
|
||||
|
||||
qs@6.14.0:
|
||||
version "6.14.0"
|
||||
resolved "https://registry.yarnpkg.com/qs/-/qs-6.14.0.tgz#c63fa40680d2c5c941412a0e899c89af60c0a930"
|
||||
integrity sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==
|
||||
qs@~6.14.1:
|
||||
version "6.14.1"
|
||||
resolved "https://registry.yarnpkg.com/qs/-/qs-6.14.1.tgz#a41d85b9d3902f31d27861790506294881871159"
|
||||
integrity sha512-4EK3+xJl8Ts67nLYNwqw/dsFVnCf+qR7RgXSK9jEEm9unao3njwMDdmsdvoKBKHzxd7tCYz5e5M+SnMjdtXGQQ==
|
||||
dependencies:
|
||||
side-channel "^1.1.0"
|
||||
|
||||
@@ -2011,7 +2000,7 @@ safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0:
|
||||
resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
|
||||
integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
|
||||
|
||||
semver@^7.6.3, semver@^7.7.1:
|
||||
semver@^7.6.3:
|
||||
version "7.7.2"
|
||||
resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.2.tgz#67d99fdcd35cec21e6f8b87a7fd515a33f982b58"
|
||||
integrity sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==
|
||||
@@ -2223,17 +2212,21 @@ supports-color@^8.1.1:
|
||||
dependencies:
|
||||
has-flag "^4.0.0"
|
||||
|
||||
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==
|
||||
systeminformation@^5.27.14:
|
||||
version "5.30.6"
|
||||
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==
|
||||
dependencies:
|
||||
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"
|
||||
"@isaacs/fs-minipass" "^4.0.0"
|
||||
chownr "^3.0.0"
|
||||
minipass "^7.1.2"
|
||||
minizlib "^3.1.0"
|
||||
yallist "^5.0.0"
|
||||
|
||||
throttleit@^1.0.0:
|
||||
version "1.0.0"
|
||||
@@ -2257,7 +2250,7 @@ tldts@^6.1.32:
|
||||
dependencies:
|
||||
tldts-core "^6.1.86"
|
||||
|
||||
tmp@~0.2.3:
|
||||
tmp@~0.2.4:
|
||||
version "0.2.5"
|
||||
resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.5.tgz#b06bcd23f0f3c8357b426891726d16015abfd8f8"
|
||||
integrity sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==
|
||||
@@ -2429,10 +2422,10 @@ y18n@^5.0.5:
|
||||
resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55"
|
||||
integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==
|
||||
|
||||
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==
|
||||
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==
|
||||
|
||||
yargs-parser@^21.1.1:
|
||||
version "21.1.1"
|
||||
|
||||
Reference in New Issue
Block a user