@ingcrea/aumic-puf 0.0.0-stage → 3.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +661 -0
- package/MANIFEST.es.md +172 -0
- package/MANIFEST.md +64 -0
- package/PUF-15.md +118 -0
- package/PUF_G16_Lighthouse.md +70 -0
- package/README.es.md +256 -0
- package/README.md +253 -2
- package/dist/adapters/astro.d.ts +28 -0
- package/dist/adapters/astro.d.ts.map +1 -0
- package/dist/adapters/astro.js +68 -0
- package/dist/adapters/astro.js.map +1 -0
- package/dist/adapters/base.d.ts +53 -0
- package/dist/adapters/base.d.ts.map +1 -0
- package/dist/adapters/base.js +138 -0
- package/dist/adapters/base.js.map +1 -0
- package/dist/adapters/cpp.d.ts +27 -0
- package/dist/adapters/cpp.d.ts.map +1 -0
- package/dist/adapters/cpp.js +48 -0
- package/dist/adapters/cpp.js.map +1 -0
- package/dist/adapters/csharp.d.ts +28 -0
- package/dist/adapters/csharp.d.ts.map +1 -0
- package/dist/adapters/csharp.js +100 -0
- package/dist/adapters/csharp.js.map +1 -0
- package/dist/adapters/flutter.d.ts +27 -0
- package/dist/adapters/flutter.d.ts.map +1 -0
- package/dist/adapters/flutter.js +49 -0
- package/dist/adapters/flutter.js.map +1 -0
- package/dist/adapters/java.d.ts +28 -0
- package/dist/adapters/java.d.ts.map +1 -0
- package/dist/adapters/java.js +123 -0
- package/dist/adapters/java.js.map +1 -0
- package/dist/adapters/nextjs.d.ts +27 -0
- package/dist/adapters/nextjs.d.ts.map +1 -0
- package/dist/adapters/nextjs.js +59 -0
- package/dist/adapters/nextjs.js.map +1 -0
- package/dist/adapters/php.d.ts +27 -0
- package/dist/adapters/php.d.ts.map +1 -0
- package/dist/adapters/php.js +50 -0
- package/dist/adapters/php.js.map +1 -0
- package/dist/adapters/python.d.ts +27 -0
- package/dist/adapters/python.d.ts.map +1 -0
- package/dist/adapters/python.js +55 -0
- package/dist/adapters/python.js.map +1 -0
- package/dist/adapters/rust.d.ts +27 -0
- package/dist/adapters/rust.d.ts.map +1 -0
- package/dist/adapters/rust.js +59 -0
- package/dist/adapters/rust.js.map +1 -0
- package/dist/adapters/selector.d.ts +14 -0
- package/dist/adapters/selector.d.ts.map +1 -0
- package/dist/adapters/selector.js +65 -0
- package/dist/adapters/selector.js.map +1 -0
- package/dist/adapters/shell.d.ts +28 -0
- package/dist/adapters/shell.d.ts.map +1 -0
- package/dist/adapters/shell.js +101 -0
- package/dist/adapters/shell.js.map +1 -0
- package/dist/adapters/swift.d.ts +28 -0
- package/dist/adapters/swift.d.ts.map +1 -0
- package/dist/adapters/swift.js +91 -0
- package/dist/adapters/swift.js.map +1 -0
- package/dist/adapters/typescript.d.ts +27 -0
- package/dist/adapters/typescript.d.ts.map +1 -0
- package/dist/adapters/typescript.js +63 -0
- package/dist/adapters/typescript.js.map +1 -0
- package/dist/cli/index.d.ts +10 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +259 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/interfaz.d.ts +21 -0
- package/dist/cli/interfaz.d.ts.map +1 -0
- package/dist/cli/interfaz.js +71 -0
- package/dist/cli/interfaz.js.map +1 -0
- package/dist/core/arbol-proyecto.d.ts +18 -0
- package/dist/core/arbol-proyecto.d.ts.map +1 -0
- package/dist/core/arbol-proyecto.js +119 -0
- package/dist/core/arbol-proyecto.js.map +1 -0
- package/dist/core/certificado.d.ts +17 -0
- package/dist/core/certificado.d.ts.map +1 -0
- package/dist/core/certificado.js +49 -0
- package/dist/core/certificado.js.map +1 -0
- package/dist/core/evaluador-ciberseguridad.d.ts +9 -0
- package/dist/core/evaluador-ciberseguridad.d.ts.map +1 -0
- package/dist/core/evaluador-ciberseguridad.js +139 -0
- package/dist/core/evaluador-ciberseguridad.js.map +1 -0
- package/dist/core/evaluador-estilos.d.ts +9 -0
- package/dist/core/evaluador-estilos.d.ts.map +1 -0
- package/dist/core/evaluador-estilos.js +132 -0
- package/dist/core/evaluador-estilos.js.map +1 -0
- package/dist/core/evaluador-licencias.d.ts +10 -0
- package/dist/core/evaluador-licencias.d.ts.map +1 -0
- package/dist/core/evaluador-licencias.js +139 -0
- package/dist/core/evaluador-licencias.js.map +1 -0
- package/dist/core/evaluador-lighthouse.d.ts +5 -0
- package/dist/core/evaluador-lighthouse.d.ts.map +1 -0
- package/dist/core/evaluador-lighthouse.js +78 -0
- package/dist/core/evaluador-lighthouse.js.map +1 -0
- package/dist/core/evaluador-sanitizer.d.ts +5 -0
- package/dist/core/evaluador-sanitizer.d.ts.map +1 -0
- package/dist/core/evaluador-sanitizer.js +109 -0
- package/dist/core/evaluador-sanitizer.js.map +1 -0
- package/dist/core/evaluador-sintaxis.d.ts +37 -0
- package/dist/core/evaluador-sintaxis.d.ts.map +1 -0
- package/dist/core/evaluador-sintaxis.js +372 -0
- package/dist/core/evaluador-sintaxis.js.map +1 -0
- package/dist/core/evaluador-topologia.d.ts +9 -0
- package/dist/core/evaluador-topologia.d.ts.map +1 -0
- package/dist/core/evaluador-topologia.js +86 -0
- package/dist/core/evaluador-topologia.js.map +1 -0
- package/dist/core/evaluador-wp-woo.d.ts +15 -0
- package/dist/core/evaluador-wp-woo.d.ts.map +1 -0
- package/dist/core/evaluador-wp-woo.js +197 -0
- package/dist/core/evaluador-wp-woo.js.map +1 -0
- package/dist/core/generador-reporte-html.d.ts +12 -0
- package/dist/core/generador-reporte-html.d.ts.map +1 -0
- package/dist/core/generador-reporte-html.js +760 -0
- package/dist/core/generador-reporte-html.js.map +1 -0
- package/dist/core/linter-inline-css.d.ts +20 -0
- package/dist/core/linter-inline-css.d.ts.map +1 -0
- package/dist/core/linter-inline-css.js +77 -0
- package/dist/core/linter-inline-css.js.map +1 -0
- package/dist/core/orquestador.d.ts +33 -0
- package/dist/core/orquestador.d.ts.map +1 -0
- package/dist/core/orquestador.js +518 -0
- package/dist/core/orquestador.js.map +1 -0
- package/dist/core/punto-control.d.ts +26 -0
- package/dist/core/punto-control.d.ts.map +1 -0
- package/dist/core/punto-control.js +129 -0
- package/dist/core/punto-control.js.map +1 -0
- package/dist/core/repositorio-sqlite.d.ts +16 -0
- package/dist/core/repositorio-sqlite.d.ts.map +1 -0
- package/dist/core/repositorio-sqlite.js +129 -0
- package/dist/core/repositorio-sqlite.js.map +1 -0
- package/dist/core/types.d.ts +77 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +41 -0
- package/dist/core/types.js.map +1 -0
- package/dist/hooks/guardian-git.d.ts +23 -0
- package/dist/hooks/guardian-git.d.ts.map +1 -0
- package/dist/hooks/guardian-git.js +111 -0
- package/dist/hooks/guardian-git.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +29 -0
- package/dist/index.js.map +1 -0
- package/dist/utils/ejecutor.d.ts +19 -0
- package/dist/utils/ejecutor.d.ts.map +1 -0
- package/dist/utils/ejecutor.js +44 -0
- package/dist/utils/ejecutor.js.map +1 -0
- package/package.json +53 -4
- package/puf-github-action.yml +30 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interfaz.d.ts","sourceRoot":"","sources":["../../src/cli/interfaz.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAG9E,qBAAa,eAAe;IAC1B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAc;IAC3C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAe;IAC3C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAe;IAC5C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAgB;IAC5C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAc;IAC9C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAgB;IAC5C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAgB;IAC5C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAc;WAE/B,aAAa,IAAI,IAAI;WAWrB,yBAAyB,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI;WAW/F,mBAAmB,CAAC,SAAS,EAAE,iBAAiB,GAAG,IAAI;WAsBvD,mBAAmB,CAAC,SAAS,EAAE,kBAAkB,GAAG,IAAI;CAgBvE"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @file interfaz.ts
|
|
4
|
+
* @description Interfaz interactiva de consola para PUF-15 con colores ANSI y telemetria visual.
|
|
5
|
+
* Estandar AUM-IC 7:2026.
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.InterfazConsola = void 0;
|
|
9
|
+
const types_js_1 = require("../core/types.js");
|
|
10
|
+
class InterfazConsola {
|
|
11
|
+
static RESET = '\x1b[0m';
|
|
12
|
+
static BOLD = '\x1b[1m';
|
|
13
|
+
static VERDE = '\x1b[32m';
|
|
14
|
+
static ROJO = '\x1b[31m';
|
|
15
|
+
static AMARILLO = '\x1b[33m';
|
|
16
|
+
static CIAN = '\x1b[36m';
|
|
17
|
+
static GRIS = '\x1b[90m';
|
|
18
|
+
static MAGENTA = '\x1b[35m';
|
|
19
|
+
static mostrarBanner() {
|
|
20
|
+
const total = types_js_1.TOTAL_COMPUERTAS_PUF;
|
|
21
|
+
console.log('\n' +
|
|
22
|
+
this.CIAN + this.BOLD + '========================================================================\n' +
|
|
23
|
+
` PROTOCOLO UNIVERSAL CONTRA FALLOS (PUF-${total}) — AUM-IC 7:2026\n` +
|
|
24
|
+
` Matriz Multi-Lenguaje Universal | ${total} Compuertas de Calidad\n` +
|
|
25
|
+
'========================================================================' + this.RESET + '\n');
|
|
26
|
+
}
|
|
27
|
+
static renderizarInicioAuditoria(idIncidente, failFast, totalAFiltrar) {
|
|
28
|
+
const total = totalAFiltrar ?? types_js_1.TOTAL_COMPUERTAS_PUF;
|
|
29
|
+
console.log(this.CIAN + `⚡ Evaluando Matriz Concurrente PUF-${types_js_1.TOTAL_COMPUERTAS_PUF} (G0 a G${types_js_1.TOTAL_COMPUERTAS_PUF - 1})` + this.RESET);
|
|
30
|
+
console.log(this.GRIS + ' Incidente:' + this.RESET + ' ' + this.BOLD + idIncidente + this.RESET);
|
|
31
|
+
const modoTexto = failFast
|
|
32
|
+
? this.AMARILLO + 'Fail-Fast (Aborta al primer fallo)' + this.RESET
|
|
33
|
+
: this.VERDE + `Auditoria Exhaustiva Concurrente (${total} Gates)` + this.RESET;
|
|
34
|
+
console.log(this.GRIS + ' Modo:' + this.RESET + ' ' + modoTexto);
|
|
35
|
+
console.log(this.GRIS + '------------------------------------------------------------------------' + this.RESET);
|
|
36
|
+
}
|
|
37
|
+
static renderizarCompuerta(compuerta) {
|
|
38
|
+
const esAprobada = compuerta.estado === 'aprobada';
|
|
39
|
+
const esOmitida = compuerta.estado === 'omitida';
|
|
40
|
+
const icono = esAprobada
|
|
41
|
+
? this.VERDE + '✔ [APROBADA]' + this.RESET
|
|
42
|
+
: esOmitida
|
|
43
|
+
? this.MAGENTA + '~ [OMITIDA] ' + this.RESET
|
|
44
|
+
: this.ROJO + '✖ [RECHAZADA]' + this.RESET;
|
|
45
|
+
const id = this.BOLD + compuerta.id.padEnd(4) + this.RESET;
|
|
46
|
+
const tiempo = this.GRIS + '(' + compuerta.tiempoEjecucionMs + 'ms)' + this.RESET;
|
|
47
|
+
console.log(' ' + icono + ' ' + id + ' ' + compuerta.nombre + ' ' + tiempo);
|
|
48
|
+
if (!esAprobada && !esOmitida) {
|
|
49
|
+
console.log(' ' + this.ROJO + '↳ Detalle: ' + compuerta.detalle + this.RESET);
|
|
50
|
+
console.log(' ' + this.ROJO + '↳ Evidencia: ' + compuerta.evidencia + this.RESET);
|
|
51
|
+
}
|
|
52
|
+
if (esOmitida) {
|
|
53
|
+
console.log(' ' + this.MAGENTA + '↳ ' + compuerta.detalle + this.RESET);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
static renderizarResultado(resultado) {
|
|
57
|
+
console.log(this.GRIS + '------------------------------------------------------------------------' + this.RESET);
|
|
58
|
+
const total = types_js_1.TOTAL_COMPUERTAS_PUF;
|
|
59
|
+
if (resultado.todasAprobadas) {
|
|
60
|
+
console.log('\n' + this.VERDE + this.BOLD + `✔ CERTIFICACION PUF-${total} APROBADA (100% CUMPLIMIENTO)` + this.RESET + '\n' +
|
|
61
|
+
this.VERDE + ' Ecosistema: ' + resultado.lenguajeDetectado.toUpperCase() + ' | Codigo blindado y apto para produccion.' + this.RESET + '\n');
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
console.log('\n' + this.ROJO + this.BOLD + '✖ AUDITORIA DENEGADA (COMPUERTAS FALLIDAS)' + this.RESET + '\n' +
|
|
65
|
+
this.ROJO + ' Se requiere subsanar las desviaciones detectadas antes de proceder.' + this.RESET + '\n');
|
|
66
|
+
}
|
|
67
|
+
console.log(resultado.reporteMarkdown);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
exports.InterfazConsola = InterfazConsola;
|
|
71
|
+
//# sourceMappingURL=interfaz.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interfaz.js","sourceRoot":"","sources":["../../src/cli/interfaz.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAGH,+CAAwD;AAExD,MAAa,eAAe;IAClB,MAAM,CAAU,KAAK,GAAI,SAAS,CAAC;IACnC,MAAM,CAAU,IAAI,GAAK,SAAS,CAAC;IACnC,MAAM,CAAU,KAAK,GAAI,UAAU,CAAC;IACpC,MAAM,CAAU,IAAI,GAAK,UAAU,CAAC;IACpC,MAAM,CAAU,QAAQ,GAAG,UAAU,CAAC;IACtC,MAAM,CAAU,IAAI,GAAK,UAAU,CAAC;IACpC,MAAM,CAAU,IAAI,GAAK,UAAU,CAAC;IACpC,MAAM,CAAU,OAAO,GAAG,UAAU,CAAC;IAEtC,MAAM,CAAC,aAAa;QACzB,MAAM,KAAK,GAAG,+BAAoB,CAAC;QACnC,OAAO,CAAC,GAAG,CACT,IAAI;YACJ,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,4EAA4E;YACpG,6CAA6C,KAAK,qBAAqB;YACvE,wCAAwC,KAAK,0BAA0B;YACvE,0EAA0E,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAC/F,CAAC;IACJ,CAAC;IAEM,MAAM,CAAC,yBAAyB,CAAC,WAAmB,EAAE,QAAiB,EAAE,aAAsB;QACpG,MAAM,KAAK,GAAG,aAAa,IAAI,+BAAoB,CAAC;QACpD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,sCAAsC,+BAAoB,WAAW,+BAAoB,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QACvI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,eAAe,GAAG,IAAI,CAAC,KAAK,GAAG,GAAG,GAAG,IAAI,CAAC,IAAI,GAAG,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QACnG,MAAM,SAAS,GAAG,QAAQ;YACxB,CAAC,CAAC,IAAI,CAAC,QAAQ,GAAG,oCAAoC,GAAG,IAAI,CAAC,KAAK;YACnE,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG,qCAAqC,KAAK,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC;QAClF,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,UAAU,GAAG,IAAI,CAAC,KAAK,GAAG,GAAG,GAAG,SAAS,CAAC,CAAC;QACnE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,0EAA0E,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;IACnH,CAAC;IAEM,MAAM,CAAC,mBAAmB,CAAC,SAA4B;QAC5D,MAAM,UAAU,GAAG,SAAS,CAAC,MAAM,KAAK,UAAU,CAAC;QACnD,MAAM,SAAS,GAAI,SAAS,CAAC,MAAM,KAAK,SAAS,CAAC;QAClD,MAAM,KAAK,GAAG,UAAU;YACtB,CAAC,CAAC,IAAI,CAAC,KAAK,GAAK,cAAc,GAAG,IAAI,CAAC,KAAK;YAC5C,CAAC,CAAC,SAAS;gBACT,CAAC,CAAC,IAAI,CAAC,OAAO,GAAG,eAAe,GAAG,IAAI,CAAC,KAAK;gBAC7C,CAAC,CAAC,IAAI,CAAC,IAAI,GAAM,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC;QAElD,MAAM,EAAE,GAAO,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;QAC/D,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,GAAG,GAAG,GAAG,SAAS,CAAC,iBAAiB,GAAG,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QAElF,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,KAAK,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG,GAAG,SAAS,CAAC,MAAM,GAAG,GAAG,GAAG,MAAM,CAAC,CAAC;QAC5E,IAAI,CAAC,UAAU,IAAI,CAAC,SAAS,EAAE,CAAC;YAC9B,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,GAAG,aAAa,GAAG,SAAS,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;YAChF,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,GAAG,eAAe,GAAG,SAAS,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QACtF,CAAC;QACD,IAAI,SAAS,EAAE,CAAC;YACd,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QAC5E,CAAC;IACH,CAAC;IAEM,MAAM,CAAC,mBAAmB,CAAC,SAA6B;QAC7D,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,0EAA0E,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QACjH,MAAM,KAAK,GAAG,+BAAoB,CAAC;QACnC,IAAI,SAAS,CAAC,cAAc,EAAE,CAAC;YAC7B,OAAO,CAAC,GAAG,CACT,IAAI,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,GAAG,uBAAuB,KAAK,+BAA+B,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI;gBAC/G,IAAI,CAAC,KAAK,GAAG,gBAAgB,GAAG,SAAS,CAAC,iBAAiB,CAAC,WAAW,EAAE,GAAG,4CAA4C,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAC7I,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CACT,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,4CAA4C,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI;gBAC/F,IAAI,CAAC,IAAI,GAAG,uEAAuE,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CACxG,CAAC;QACJ,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;IACzC,CAAC;;AArEH,0CAsEC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export interface EntradaArchivo {
|
|
2
|
+
readonly rutaRelativa: string;
|
|
3
|
+
readonly rutaAbsoluta: string;
|
|
4
|
+
readonly extension: string;
|
|
5
|
+
readonly tamanoBytes: number;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* LectorArbolProyecto (VFS Snapshot en memoria)
|
|
9
|
+
* Escanea el árbol de directorios una sola vez y expone el listado indexado
|
|
10
|
+
* para evitar lecturas de disco redundantes en las compuertas G4, G18, G19, G20.
|
|
11
|
+
*/
|
|
12
|
+
export declare class LectorArbolProyecto {
|
|
13
|
+
private static instanciaCache;
|
|
14
|
+
private static readonly TTL_MS;
|
|
15
|
+
static obtenerSnapshot(directorioRaiz: string): Promise<readonly EntradaArchivo[]>;
|
|
16
|
+
static filtrarPorExtension(directorioRaiz: string, extensiones: readonly string[]): Promise<readonly EntradaArchivo[]>;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=arbol-proyecto.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"arbol-proyecto.d.ts","sourceRoot":"","sources":["../../src/core/arbol-proyecto.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAED;;;;GAIG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,MAAM,CAAC,cAAc,CAAsF;IACnH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAS;WAEnB,eAAe,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,cAAc,EAAE,CAAC;WAsE3E,mBAAmB,CACrC,cAAc,EAAE,MAAM,EACtB,WAAW,EAAE,SAAS,MAAM,EAAE,GAC7B,OAAO,CAAC,SAAS,cAAc,EAAE,CAAC;CAKtC"}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.LectorArbolProyecto = void 0;
|
|
37
|
+
const fs = __importStar(require("node:fs/promises"));
|
|
38
|
+
const path = __importStar(require("node:path"));
|
|
39
|
+
/**
|
|
40
|
+
* LectorArbolProyecto (VFS Snapshot en memoria)
|
|
41
|
+
* Escanea el árbol de directorios una sola vez y expone el listado indexado
|
|
42
|
+
* para evitar lecturas de disco redundantes en las compuertas G4, G18, G19, G20.
|
|
43
|
+
*/
|
|
44
|
+
class LectorArbolProyecto {
|
|
45
|
+
static instanciaCache = new Map();
|
|
46
|
+
static TTL_MS = 15000; // 15 segundos de validez
|
|
47
|
+
static async obtenerSnapshot(directorioRaiz) {
|
|
48
|
+
const ahora = Date.now();
|
|
49
|
+
const enCache = this.instanciaCache.get(directorioRaiz);
|
|
50
|
+
if (enCache && (ahora - enCache.timestamp) < this.TTL_MS) {
|
|
51
|
+
return enCache.archivos;
|
|
52
|
+
}
|
|
53
|
+
const archivos = [];
|
|
54
|
+
const carpetasIgnoradas = new Set([
|
|
55
|
+
'node_modules',
|
|
56
|
+
'.git',
|
|
57
|
+
'dist',
|
|
58
|
+
'.next',
|
|
59
|
+
'.astro',
|
|
60
|
+
'vendor',
|
|
61
|
+
'.venv',
|
|
62
|
+
'venv',
|
|
63
|
+
'__pycache__',
|
|
64
|
+
'target',
|
|
65
|
+
'build',
|
|
66
|
+
'bin',
|
|
67
|
+
'obj',
|
|
68
|
+
'.idea',
|
|
69
|
+
'.vscode',
|
|
70
|
+
'uploads',
|
|
71
|
+
'cache',
|
|
72
|
+
'checkpoints',
|
|
73
|
+
'coverage',
|
|
74
|
+
'.turbo',
|
|
75
|
+
'.aumic'
|
|
76
|
+
]);
|
|
77
|
+
const escanearDirectorio = async (dirActual) => {
|
|
78
|
+
let entradas;
|
|
79
|
+
try {
|
|
80
|
+
entradas = await fs.readdir(dirActual, { withFileTypes: true });
|
|
81
|
+
}
|
|
82
|
+
catch {
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
const promesasCarpetas = [];
|
|
86
|
+
for (const e of entradas) {
|
|
87
|
+
const rutaCompleta = path.join(dirActual, e.name);
|
|
88
|
+
if (e.isDirectory()) {
|
|
89
|
+
if (!carpetasIgnoradas.has(e.name)) {
|
|
90
|
+
promesasCarpetas.push(escanearDirectorio(rutaCompleta));
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
else if (e.isFile()) {
|
|
94
|
+
const ext = path.extname(e.name).toLowerCase();
|
|
95
|
+
const rutaRel = path.relative(directorioRaiz, rutaCompleta).replace(/\\/g, '/');
|
|
96
|
+
archivos.push({
|
|
97
|
+
rutaRelativa: rutaRel,
|
|
98
|
+
rutaAbsoluta: rutaCompleta,
|
|
99
|
+
extension: ext,
|
|
100
|
+
tamanoBytes: 0,
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
if (promesasCarpetas.length > 0) {
|
|
105
|
+
await Promise.all(promesasCarpetas);
|
|
106
|
+
}
|
|
107
|
+
};
|
|
108
|
+
await escanearDirectorio(directorioRaiz);
|
|
109
|
+
this.instanciaCache.set(directorioRaiz, { timestamp: ahora, archivos });
|
|
110
|
+
return archivos;
|
|
111
|
+
}
|
|
112
|
+
static async filtrarPorExtension(directorioRaiz, extensiones) {
|
|
113
|
+
const todos = await this.obtenerSnapshot(directorioRaiz);
|
|
114
|
+
const setExt = new Set(extensiones.map((e) => (e.startsWith('.') ? e.toLowerCase() : '.' + e.toLowerCase())));
|
|
115
|
+
return todos.filter((a) => setExt.has(a.extension));
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
exports.LectorArbolProyecto = LectorArbolProyecto;
|
|
119
|
+
//# sourceMappingURL=arbol-proyecto.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"arbol-proyecto.js","sourceRoot":"","sources":["../../src/core/arbol-proyecto.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file certificado.ts
|
|
3
|
+
* @description Generador estricto en español del Certificado de Aprobacion de Compuertas de Calidad (PUF-15).
|
|
4
|
+
* Estandar AUM-IC 7:2026.
|
|
5
|
+
*/
|
|
6
|
+
import type { RegistroCompuerta, ResultadoAuditoria } from './types.js';
|
|
7
|
+
export declare class GeneradorCertificado {
|
|
8
|
+
/**
|
|
9
|
+
* Genera el bloque markdown oficial del Certificado de Calidad PUF
|
|
10
|
+
*/
|
|
11
|
+
static generar(resultado: ResultadoAuditoria): string;
|
|
12
|
+
/**
|
|
13
|
+
* Formatea un registro de compuerta individual para salida de consola en alta densidad
|
|
14
|
+
*/
|
|
15
|
+
static formatearConsola(registro: RegistroCompuerta): string;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=certificado.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"certificado.d.ts","sourceRoot":"","sources":["../../src/core/certificado.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAGxE,qBAAa,oBAAoB;IAC/B;;OAEG;WACW,OAAO,CAAC,SAAS,EAAE,kBAAkB,GAAG,MAAM;IA6B5D;;OAEG;WACW,gBAAgB,CAAC,QAAQ,EAAE,iBAAiB,GAAG,MAAM;CAIpE"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @file certificado.ts
|
|
4
|
+
* @description Generador estricto en español del Certificado de Aprobacion de Compuertas de Calidad (PUF-15).
|
|
5
|
+
* Estandar AUM-IC 7:2026.
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.GeneradorCertificado = void 0;
|
|
9
|
+
const types_js_1 = require("./types.js");
|
|
10
|
+
class GeneradorCertificado {
|
|
11
|
+
/**
|
|
12
|
+
* Genera el bloque markdown oficial del Certificado de Calidad PUF
|
|
13
|
+
*/
|
|
14
|
+
static generar(resultado) {
|
|
15
|
+
const total = resultado.compuertas?.length ?? types_js_1.TOTAL_COMPUERTAS_PUF;
|
|
16
|
+
const estadoGlobal = resultado.todasAprobadas
|
|
17
|
+
? 'APROBADO (100% CUMPLIMIENTO)'
|
|
18
|
+
: 'RECHAZADO (COMPUERTAS FALLIDAS)';
|
|
19
|
+
const filasCompuertas = resultado.compuertas
|
|
20
|
+
.map((c) => {
|
|
21
|
+
const icono = c.estado === 'aprobada' ? '[x]' : c.estado === 'omitida' ? '[~]' : '[ ]';
|
|
22
|
+
const estadoTexto = c.estado.toUpperCase();
|
|
23
|
+
return `- ${icono} **${c.id}: ${c.nombre}** — *${estadoTexto}*\n - **Detalle:** ${c.detalle}\n - **Evidencia:** \`${c.evidencia}\` (${c.tiempoEjecucionMs}ms)`;
|
|
24
|
+
})
|
|
25
|
+
.join('\n');
|
|
26
|
+
return [
|
|
27
|
+
`# Certificado de Calidad PUF-${types_js_1.TOTAL_COMPUERTAS_PUF} — AUM-IC 7:2026`,
|
|
28
|
+
`**Estado Global:** \`${estadoGlobal}\``,
|
|
29
|
+
`**ID de Incidente:** \`${resultado.idIncidente}\``,
|
|
30
|
+
`**Ecosistema Detectado:** \`${resultado.lenguajeDetectado.toUpperCase()}\``,
|
|
31
|
+
`**Fecha de Registro:** \`${resultado.fechaRegistro}\``,
|
|
32
|
+
'',
|
|
33
|
+
`## Matriz de ${total} Compuertas de Calidad Evaluadas`,
|
|
34
|
+
filasCompuertas,
|
|
35
|
+
'',
|
|
36
|
+
`---`,
|
|
37
|
+
`*Certificado emitido bajo el Paradigma de Excelencia Tecnica y Cero Deuda de Ingenieria Creativa.*`,
|
|
38
|
+
].join('\n');
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Formatea un registro de compuerta individual para salida de consola en alta densidad
|
|
42
|
+
*/
|
|
43
|
+
static formatearConsola(registro) {
|
|
44
|
+
const simbolo = registro.estado === 'aprobada' ? '✓' : registro.estado === 'omitida' ? '~' : '✗';
|
|
45
|
+
return `[${registro.id}] ${simbolo} ${registro.nombre}: ${registro.detalle} (${registro.tiempoEjecucionMs}ms)`;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
exports.GeneradorCertificado = GeneradorCertificado;
|
|
49
|
+
//# sourceMappingURL=certificado.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"certificado.js","sourceRoot":"","sources":["../../src/core/certificado.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAGH,yCAAkD;AAElD,MAAa,oBAAoB;IAC/B;;OAEG;IACI,MAAM,CAAC,OAAO,CAAC,SAA6B;QACjD,MAAM,KAAK,GAAG,SAAS,CAAC,UAAU,EAAE,MAAM,IAAI,+BAAoB,CAAC;QACnE,MAAM,YAAY,GAAG,SAAS,CAAC,cAAc;YAC3C,CAAC,CAAC,8BAA8B;YAChC,CAAC,CAAC,iCAAiC,CAAC;QAEtC,MAAM,eAAe,GAAG,SAAS,CAAC,UAAU;aACzC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;YACT,MAAM,KAAK,GAAG,CAAC,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;YACvF,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;YAC3C,OAAO,KAAK,KAAK,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,MAAM,SAAS,WAAW,uBAAuB,CAAC,CAAC,OAAO,0BAA0B,CAAC,CAAC,SAAS,OAAO,CAAC,CAAC,iBAAiB,KAAK,CAAC;QACnK,CAAC,CAAC;aACD,IAAI,CAAC,IAAI,CAAC,CAAC;QAEd,OAAO;YACL,gCAAgC,+BAAoB,kBAAkB;YACtE,wBAAwB,YAAY,IAAI;YACxC,0BAA0B,SAAS,CAAC,WAAW,IAAI;YACnD,+BAA+B,SAAS,CAAC,iBAAiB,CAAC,WAAW,EAAE,IAAI;YAC5E,4BAA4B,SAAS,CAAC,aAAa,IAAI;YACvD,EAAE;YACF,gBAAgB,KAAK,kCAAkC;YACvD,eAAe;YACf,EAAE;YACF,KAAK;YACL,oGAAoG;SACrG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACf,CAAC;IAED;;OAEG;IACI,MAAM,CAAC,gBAAgB,CAAC,QAA2B;QACxD,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;QACjG,OAAO,IAAI,QAAQ,CAAC,EAAE,KAAK,OAAO,IAAI,QAAQ,CAAC,MAAM,KAAK,QAAQ,CAAC,OAAO,KAAK,QAAQ,CAAC,iBAAiB,KAAK,CAAC;IACjH,CAAC;CACF;AAxCD,oDAwCC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { RegistroCompuerta } from "./types.js";
|
|
2
|
+
/**
|
|
3
|
+
* G19: Blindaje de Superficie de Ataque, Cero Fugas e Inyecciones (Zero-Injection & Attack Surface Guard).
|
|
4
|
+
* Optimizado con LectorArbolProyecto (VFS Snapshot en memoria) para cero redundancia de I/O.
|
|
5
|
+
*/
|
|
6
|
+
export declare class EvaluadorCiberseguridad {
|
|
7
|
+
static auditar(directorioRaiz: string): Promise<RegistroCompuerta>;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=evaluador-ciberseguridad.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evaluador-ciberseguridad.d.ts","sourceRoot":"","sources":["../../src/core/evaluador-ciberseguridad.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAK/C;;;GAGG;AACH,qBAAa,uBAAuB;WACd,OAAO,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;CAmGhF"}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.EvaluadorCiberseguridad = void 0;
|
|
37
|
+
const path = __importStar(require("node:path"));
|
|
38
|
+
const fs = __importStar(require("node:fs/promises"));
|
|
39
|
+
const arbol_proyecto_js_1 = require("./arbol-proyecto.js");
|
|
40
|
+
/**
|
|
41
|
+
* G19: Blindaje de Superficie de Ataque, Cero Fugas e Inyecciones (Zero-Injection & Attack Surface Guard).
|
|
42
|
+
* Optimizado con LectorArbolProyecto (VFS Snapshot en memoria) para cero redundancia de I/O.
|
|
43
|
+
*/
|
|
44
|
+
class EvaluadorCiberseguridad {
|
|
45
|
+
static async auditar(directorioRaiz) {
|
|
46
|
+
const t = Date.now();
|
|
47
|
+
const archivosProhibidos = new Set([
|
|
48
|
+
"dump.sql",
|
|
49
|
+
"database.sql",
|
|
50
|
+
"backup.sql",
|
|
51
|
+
"id_rsa",
|
|
52
|
+
"id_ed25519",
|
|
53
|
+
"phpinfo.php",
|
|
54
|
+
"xmlrpc.php"
|
|
55
|
+
]);
|
|
56
|
+
const todosLosArchivos = await arbol_proyecto_js_1.LectorArbolProyecto.obtenerSnapshot(directorioRaiz);
|
|
57
|
+
const violacionesArchivos = [];
|
|
58
|
+
for (const arch of todosLosArchivos) {
|
|
59
|
+
const nombreBase = path.basename(arch.rutaAbsoluta);
|
|
60
|
+
if (archivosProhibidos.has(nombreBase)) {
|
|
61
|
+
violacionesArchivos.push(arch.rutaRelativa);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
// Verificar si .env está en gitignore
|
|
65
|
+
let envIgnorado = true;
|
|
66
|
+
const existeEnv = todosLosArchivos.some((a) => a.rutaRelativa === '.env' || a.rutaRelativa.endsWith('/.env'));
|
|
67
|
+
if (existeEnv) {
|
|
68
|
+
const gitignoreArch = todosLosArchivos.find((a) => a.rutaRelativa === '.gitignore');
|
|
69
|
+
if (gitignoreArch) {
|
|
70
|
+
try {
|
|
71
|
+
const gitignore = await fs.readFile(gitignoreArch.rutaAbsoluta, "utf8");
|
|
72
|
+
if (!gitignore.includes(".env")) {
|
|
73
|
+
envIgnorado = false;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
catch {
|
|
77
|
+
envIgnorado = false;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
envIgnorado = false;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
if (!envIgnorado) {
|
|
85
|
+
return {
|
|
86
|
+
id: "G19",
|
|
87
|
+
nombre: "Blindaje de Superficie de Ataque y Cero Inyecciones (Zero-Injection Guard)",
|
|
88
|
+
estado: "rechazada",
|
|
89
|
+
detalle: "Vulnerabilidad crítica: Archivo sensible '.env' detectado sin protección en '.gitignore'. Riesgo de filtración de secretos.",
|
|
90
|
+
evidencia: ".env sin blindaje en gitignore",
|
|
91
|
+
tiempoEjecucionMs: Date.now() - t
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
if (violacionesArchivos.length > 0) {
|
|
95
|
+
return {
|
|
96
|
+
id: "G19",
|
|
97
|
+
nombre: "Blindaje de Superficie de Ataque y Cero Inyecciones (Zero-Injection Guard)",
|
|
98
|
+
estado: "rechazada",
|
|
99
|
+
detalle: `Archivos de alta exposición o riesgo detectados: ${violacionesArchivos.join(", ")}. Deben purgarse de inmediato.`,
|
|
100
|
+
evidencia: `Archivos expuestos: ${violacionesArchivos.join(", ")}`,
|
|
101
|
+
tiempoEjecucionMs: Date.now() - t
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
// Escaneo pasivo paralelo de consultas SQL vulnerables
|
|
105
|
+
let patronesConcatenacionSql = 0;
|
|
106
|
+
const archivosBackend = await arbol_proyecto_js_1.LectorArbolProyecto.filtrarPorExtension(directorioRaiz, [".ts", ".js", ".php", ".py"]);
|
|
107
|
+
await Promise.all(archivosBackend.map(async (arch) => {
|
|
108
|
+
if (arch.rutaRelativa.includes('test') || arch.rutaRelativa.includes('evaluador'))
|
|
109
|
+
return;
|
|
110
|
+
try {
|
|
111
|
+
const raw = await fs.readFile(arch.rutaAbsoluta, "utf8");
|
|
112
|
+
if (/SELECT\s+.*\s+FROM\s+.*\s+WHERE\s+.*(\+|`.*(\$\{.*\}).*`|\.\s*\$)/i.test(raw)) {
|
|
113
|
+
patronesConcatenacionSql++;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
catch { }
|
|
117
|
+
}));
|
|
118
|
+
if (patronesConcatenacionSql > 0) {
|
|
119
|
+
return {
|
|
120
|
+
id: "G19",
|
|
121
|
+
nombre: "Blindaje de Superficie de Ataque y Cero Inyecciones (Zero-Injection Guard)",
|
|
122
|
+
estado: "rechazada",
|
|
123
|
+
detalle: `Posible vector de Inyección SQL: Se detectaron ${patronesConcatenacionSql} consultas SQL construidas con concatenación dinámica directa. Utilizar consultas preparadas/parametrizadas obligatoriamente.`,
|
|
124
|
+
evidencia: `${patronesConcatenacionSql} queries no parametrizadas`,
|
|
125
|
+
tiempoEjecucionMs: Date.now() - t
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
return {
|
|
129
|
+
id: "G19",
|
|
130
|
+
nombre: "Blindaje de Superficie de Ataque y Cero Inyecciones (Zero-Injection Guard)",
|
|
131
|
+
estado: "aprobada",
|
|
132
|
+
detalle: "Superficie de ataque sellada: Cero fugas de credenciales en .env, cero endpoints legacy vulnerables y consultas parametrizadas conformes.",
|
|
133
|
+
evidencia: "Cero vectores de inyeccion pasiva",
|
|
134
|
+
tiempoEjecucionMs: Date.now() - t
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
exports.EvaluadorCiberseguridad = EvaluadorCiberseguridad;
|
|
139
|
+
//# sourceMappingURL=evaluador-ciberseguridad.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evaluador-ciberseguridad.js","sourceRoot":"","sources":["../../src/core/evaluador-ciberseguridad.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { RegistroCompuerta } from "./types.js";
|
|
2
|
+
/**
|
|
3
|
+
* G18: Consistencia de Motores de Estilo y Erradicacion de Antipatrones (Style Engine Consistency).
|
|
4
|
+
* Optimizado con LectorArbolProyecto (VFS Snapshot en memoria) para cero redundancia de I/O.
|
|
5
|
+
*/
|
|
6
|
+
export declare class EvaluadorEstilos {
|
|
7
|
+
static auditar(directorioRaiz: string): Promise<RegistroCompuerta>;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=evaluador-estilos.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evaluador-estilos.d.ts","sourceRoot":"","sources":["../../src/core/evaluador-estilos.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAK/C;;;GAGG;AACH,qBAAa,gBAAgB;WACP,OAAO,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;CA2FhF"}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.EvaluadorEstilos = void 0;
|
|
37
|
+
const path = __importStar(require("node:path"));
|
|
38
|
+
const fs = __importStar(require("node:fs/promises"));
|
|
39
|
+
const arbol_proyecto_js_1 = require("./arbol-proyecto.js");
|
|
40
|
+
/**
|
|
41
|
+
* G18: Consistencia de Motores de Estilo y Erradicacion de Antipatrones (Style Engine Consistency).
|
|
42
|
+
* Optimizado con LectorArbolProyecto (VFS Snapshot en memoria) para cero redundancia de I/O.
|
|
43
|
+
*/
|
|
44
|
+
class EvaluadorEstilos {
|
|
45
|
+
static async auditar(directorioRaiz) {
|
|
46
|
+
const t = Date.now();
|
|
47
|
+
let tieneTailwind = false;
|
|
48
|
+
let tieneBootstrap = false;
|
|
49
|
+
let tieneScss = false;
|
|
50
|
+
let contadorImportant = 0;
|
|
51
|
+
const extensiones = [".astro", ".tsx", ".jsx", ".vue", ".html", ".css", ".scss"];
|
|
52
|
+
// 1. Detectar dependencias o configs
|
|
53
|
+
try {
|
|
54
|
+
const pkgPath = path.join(directorioRaiz, "package.json");
|
|
55
|
+
const pkgRaw = await fs.readFile(pkgPath, "utf8");
|
|
56
|
+
const pkg = JSON.parse(pkgRaw);
|
|
57
|
+
const allDeps = { ...pkg.dependencies, ...pkg.devDependencies };
|
|
58
|
+
if (allDeps["tailwindcss"] || allDeps["@tailwindcss/vite"] || allDeps["@astrojs/tailwind"]) {
|
|
59
|
+
tieneTailwind = true;
|
|
60
|
+
}
|
|
61
|
+
if (allDeps["bootstrap"] || allDeps["react-bootstrap"]) {
|
|
62
|
+
tieneBootstrap = true;
|
|
63
|
+
}
|
|
64
|
+
if (allDeps["sass"] || allDeps["sass-embedded"]) {
|
|
65
|
+
tieneScss = true;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
catch { }
|
|
69
|
+
const configs = ["tailwind.config.js", "tailwind.config.mjs", "tailwind.config.cjs", "tailwind.config.ts"];
|
|
70
|
+
for (const c of configs) {
|
|
71
|
+
if (await fs.stat(path.join(directorioRaiz, c)).catch(() => null)) {
|
|
72
|
+
tieneTailwind = true;
|
|
73
|
+
break;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
// 2. Escaneo ultrarrápido desde snapshot en memoria
|
|
77
|
+
const archivos = await arbol_proyecto_js_1.LectorArbolProyecto.filtrarPorExtension(directorioRaiz, extensiones);
|
|
78
|
+
// Leer archivos en lotes paralelos
|
|
79
|
+
await Promise.all(archivos.map(async (arch) => {
|
|
80
|
+
// Excluir carpetas irrelevantes de UI interna o reportes
|
|
81
|
+
if (arch.rutaRelativa.startsWith('test') || arch.rutaRelativa.includes('dashboard.astro')) {
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
try {
|
|
85
|
+
const raw = await fs.readFile(arch.rutaAbsoluta, "utf8");
|
|
86
|
+
const matches = raw.match(/!important/g);
|
|
87
|
+
if (matches) {
|
|
88
|
+
contadorImportant += matches.length;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
catch { }
|
|
92
|
+
}));
|
|
93
|
+
const motoresDetectados = [];
|
|
94
|
+
if (tieneTailwind)
|
|
95
|
+
motoresDetectados.push("Tailwind CSS");
|
|
96
|
+
if (tieneBootstrap)
|
|
97
|
+
motoresDetectados.push("Bootstrap");
|
|
98
|
+
if (tieneScss)
|
|
99
|
+
motoresDetectados.push("SCSS/Sass");
|
|
100
|
+
if (tieneTailwind && tieneBootstrap) {
|
|
101
|
+
return {
|
|
102
|
+
id: "G18",
|
|
103
|
+
nombre: "Consistencia de Motores de Estilo y Erradicacion de Antipatrones (Style Engine Consistency)",
|
|
104
|
+
estado: "rechazada",
|
|
105
|
+
detalle: "Conflicto de arquitectura: Coexistencia simultánea de Tailwind CSS y Bootstrap en el mismo proyecto. Rompe la coherencia y aumenta el payload.",
|
|
106
|
+
evidencia: "Colisión Tailwind + Bootstrap detectada",
|
|
107
|
+
tiempoEjecucionMs: Date.now() - t
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
if (contadorImportant > 20) {
|
|
111
|
+
return {
|
|
112
|
+
id: "G18",
|
|
113
|
+
nombre: "Consistencia de Motores de Estilo y Erradicacion de Antipatrones (Style Engine Consistency)",
|
|
114
|
+
estado: "rechazada",
|
|
115
|
+
detalle: `Deuda de especificidad CSS: Se detectaron ${contadorImportant} declaraciones '!important' en el código fuente (Máximo tolerable: 20).`,
|
|
116
|
+
evidencia: `${contadorImportant} ocurrencias de !important`,
|
|
117
|
+
tiempoEjecucionMs: Date.now() - t
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
const motorPrincipal = motoresDetectados.length > 0 ? motoresDetectados.join(", ") : "CSS Moderno Puro";
|
|
121
|
+
return {
|
|
122
|
+
id: "G18",
|
|
123
|
+
nombre: "Consistencia de Motores de Estilo y Erradicacion de Antipatrones (Style Engine Consistency)",
|
|
124
|
+
estado: "aprobada",
|
|
125
|
+
detalle: `Arquitectura de estilos homogénea [${motorPrincipal}]. Especificidad limpia (${contadorImportant} declaraciones '!important' controladas).`,
|
|
126
|
+
evidencia: `Motor: ${motorPrincipal} | !important: ${contadorImportant}`,
|
|
127
|
+
tiempoEjecucionMs: Date.now() - t
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
exports.EvaluadorEstilos = EvaluadorEstilos;
|
|
132
|
+
//# sourceMappingURL=evaluador-estilos.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evaluador-estilos.js","sourceRoot":"","sources":["../../src/core/evaluador-estilos.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { RegistroCompuerta } from "./types.js";
|
|
2
|
+
/**
|
|
3
|
+
* G17: Blindaje Legal, Integridad de Licencias y Compatibilidad de Dependencias (AUM-IC IP & License Guard).
|
|
4
|
+
* - En proyectos con archivo de licencia o manifiesto con licencia declarada: audita a fondo su correcta implementación.
|
|
5
|
+
* - En proyectos privativos de clientes sin licencia: emite recomendación no bloqueante (estado: aprobada con advertencia o omitida).
|
|
6
|
+
*/
|
|
7
|
+
export declare class EvaluadorLicencias {
|
|
8
|
+
static auditar(directorioRaiz: string): Promise<RegistroCompuerta>;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=evaluador-licencias.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evaluador-licencias.d.ts","sourceRoot":"","sources":["../../src/core/evaluador-licencias.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAI/C;;;;GAIG;AACH,qBAAa,kBAAkB;WACT,OAAO,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;CAqGhF"}
|