@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.
Files changed (149) hide show
  1. package/LICENSE +661 -0
  2. package/MANIFEST.es.md +172 -0
  3. package/MANIFEST.md +64 -0
  4. package/PUF-15.md +118 -0
  5. package/PUF_G16_Lighthouse.md +70 -0
  6. package/README.es.md +256 -0
  7. package/README.md +253 -2
  8. package/dist/adapters/astro.d.ts +28 -0
  9. package/dist/adapters/astro.d.ts.map +1 -0
  10. package/dist/adapters/astro.js +68 -0
  11. package/dist/adapters/astro.js.map +1 -0
  12. package/dist/adapters/base.d.ts +53 -0
  13. package/dist/adapters/base.d.ts.map +1 -0
  14. package/dist/adapters/base.js +138 -0
  15. package/dist/adapters/base.js.map +1 -0
  16. package/dist/adapters/cpp.d.ts +27 -0
  17. package/dist/adapters/cpp.d.ts.map +1 -0
  18. package/dist/adapters/cpp.js +48 -0
  19. package/dist/adapters/cpp.js.map +1 -0
  20. package/dist/adapters/csharp.d.ts +28 -0
  21. package/dist/adapters/csharp.d.ts.map +1 -0
  22. package/dist/adapters/csharp.js +100 -0
  23. package/dist/adapters/csharp.js.map +1 -0
  24. package/dist/adapters/flutter.d.ts +27 -0
  25. package/dist/adapters/flutter.d.ts.map +1 -0
  26. package/dist/adapters/flutter.js +49 -0
  27. package/dist/adapters/flutter.js.map +1 -0
  28. package/dist/adapters/java.d.ts +28 -0
  29. package/dist/adapters/java.d.ts.map +1 -0
  30. package/dist/adapters/java.js +123 -0
  31. package/dist/adapters/java.js.map +1 -0
  32. package/dist/adapters/nextjs.d.ts +27 -0
  33. package/dist/adapters/nextjs.d.ts.map +1 -0
  34. package/dist/adapters/nextjs.js +59 -0
  35. package/dist/adapters/nextjs.js.map +1 -0
  36. package/dist/adapters/php.d.ts +27 -0
  37. package/dist/adapters/php.d.ts.map +1 -0
  38. package/dist/adapters/php.js +50 -0
  39. package/dist/adapters/php.js.map +1 -0
  40. package/dist/adapters/python.d.ts +27 -0
  41. package/dist/adapters/python.d.ts.map +1 -0
  42. package/dist/adapters/python.js +55 -0
  43. package/dist/adapters/python.js.map +1 -0
  44. package/dist/adapters/rust.d.ts +27 -0
  45. package/dist/adapters/rust.d.ts.map +1 -0
  46. package/dist/adapters/rust.js +59 -0
  47. package/dist/adapters/rust.js.map +1 -0
  48. package/dist/adapters/selector.d.ts +14 -0
  49. package/dist/adapters/selector.d.ts.map +1 -0
  50. package/dist/adapters/selector.js +65 -0
  51. package/dist/adapters/selector.js.map +1 -0
  52. package/dist/adapters/shell.d.ts +28 -0
  53. package/dist/adapters/shell.d.ts.map +1 -0
  54. package/dist/adapters/shell.js +101 -0
  55. package/dist/adapters/shell.js.map +1 -0
  56. package/dist/adapters/swift.d.ts +28 -0
  57. package/dist/adapters/swift.d.ts.map +1 -0
  58. package/dist/adapters/swift.js +91 -0
  59. package/dist/adapters/swift.js.map +1 -0
  60. package/dist/adapters/typescript.d.ts +27 -0
  61. package/dist/adapters/typescript.d.ts.map +1 -0
  62. package/dist/adapters/typescript.js +63 -0
  63. package/dist/adapters/typescript.js.map +1 -0
  64. package/dist/cli/index.d.ts +10 -0
  65. package/dist/cli/index.d.ts.map +1 -0
  66. package/dist/cli/index.js +259 -0
  67. package/dist/cli/index.js.map +1 -0
  68. package/dist/cli/interfaz.d.ts +21 -0
  69. package/dist/cli/interfaz.d.ts.map +1 -0
  70. package/dist/cli/interfaz.js +71 -0
  71. package/dist/cli/interfaz.js.map +1 -0
  72. package/dist/core/arbol-proyecto.d.ts +18 -0
  73. package/dist/core/arbol-proyecto.d.ts.map +1 -0
  74. package/dist/core/arbol-proyecto.js +119 -0
  75. package/dist/core/arbol-proyecto.js.map +1 -0
  76. package/dist/core/certificado.d.ts +17 -0
  77. package/dist/core/certificado.d.ts.map +1 -0
  78. package/dist/core/certificado.js +49 -0
  79. package/dist/core/certificado.js.map +1 -0
  80. package/dist/core/evaluador-ciberseguridad.d.ts +9 -0
  81. package/dist/core/evaluador-ciberseguridad.d.ts.map +1 -0
  82. package/dist/core/evaluador-ciberseguridad.js +139 -0
  83. package/dist/core/evaluador-ciberseguridad.js.map +1 -0
  84. package/dist/core/evaluador-estilos.d.ts +9 -0
  85. package/dist/core/evaluador-estilos.d.ts.map +1 -0
  86. package/dist/core/evaluador-estilos.js +132 -0
  87. package/dist/core/evaluador-estilos.js.map +1 -0
  88. package/dist/core/evaluador-licencias.d.ts +10 -0
  89. package/dist/core/evaluador-licencias.d.ts.map +1 -0
  90. package/dist/core/evaluador-licencias.js +139 -0
  91. package/dist/core/evaluador-licencias.js.map +1 -0
  92. package/dist/core/evaluador-lighthouse.d.ts +5 -0
  93. package/dist/core/evaluador-lighthouse.d.ts.map +1 -0
  94. package/dist/core/evaluador-lighthouse.js +78 -0
  95. package/dist/core/evaluador-lighthouse.js.map +1 -0
  96. package/dist/core/evaluador-sanitizer.d.ts +5 -0
  97. package/dist/core/evaluador-sanitizer.d.ts.map +1 -0
  98. package/dist/core/evaluador-sanitizer.js +109 -0
  99. package/dist/core/evaluador-sanitizer.js.map +1 -0
  100. package/dist/core/evaluador-sintaxis.d.ts +37 -0
  101. package/dist/core/evaluador-sintaxis.d.ts.map +1 -0
  102. package/dist/core/evaluador-sintaxis.js +372 -0
  103. package/dist/core/evaluador-sintaxis.js.map +1 -0
  104. package/dist/core/evaluador-topologia.d.ts +9 -0
  105. package/dist/core/evaluador-topologia.d.ts.map +1 -0
  106. package/dist/core/evaluador-topologia.js +86 -0
  107. package/dist/core/evaluador-topologia.js.map +1 -0
  108. package/dist/core/evaluador-wp-woo.d.ts +15 -0
  109. package/dist/core/evaluador-wp-woo.d.ts.map +1 -0
  110. package/dist/core/evaluador-wp-woo.js +197 -0
  111. package/dist/core/evaluador-wp-woo.js.map +1 -0
  112. package/dist/core/generador-reporte-html.d.ts +12 -0
  113. package/dist/core/generador-reporte-html.d.ts.map +1 -0
  114. package/dist/core/generador-reporte-html.js +760 -0
  115. package/dist/core/generador-reporte-html.js.map +1 -0
  116. package/dist/core/linter-inline-css.d.ts +20 -0
  117. package/dist/core/linter-inline-css.d.ts.map +1 -0
  118. package/dist/core/linter-inline-css.js +77 -0
  119. package/dist/core/linter-inline-css.js.map +1 -0
  120. package/dist/core/orquestador.d.ts +33 -0
  121. package/dist/core/orquestador.d.ts.map +1 -0
  122. package/dist/core/orquestador.js +518 -0
  123. package/dist/core/orquestador.js.map +1 -0
  124. package/dist/core/punto-control.d.ts +26 -0
  125. package/dist/core/punto-control.d.ts.map +1 -0
  126. package/dist/core/punto-control.js +129 -0
  127. package/dist/core/punto-control.js.map +1 -0
  128. package/dist/core/repositorio-sqlite.d.ts +16 -0
  129. package/dist/core/repositorio-sqlite.d.ts.map +1 -0
  130. package/dist/core/repositorio-sqlite.js +129 -0
  131. package/dist/core/repositorio-sqlite.js.map +1 -0
  132. package/dist/core/types.d.ts +77 -0
  133. package/dist/core/types.d.ts.map +1 -0
  134. package/dist/core/types.js +41 -0
  135. package/dist/core/types.js.map +1 -0
  136. package/dist/hooks/guardian-git.d.ts +23 -0
  137. package/dist/hooks/guardian-git.d.ts.map +1 -0
  138. package/dist/hooks/guardian-git.js +111 -0
  139. package/dist/hooks/guardian-git.js.map +1 -0
  140. package/dist/index.d.ts +13 -0
  141. package/dist/index.d.ts.map +1 -0
  142. package/dist/index.js +29 -0
  143. package/dist/index.js.map +1 -0
  144. package/dist/utils/ejecutor.d.ts +19 -0
  145. package/dist/utils/ejecutor.d.ts.map +1 -0
  146. package/dist/utils/ejecutor.js +44 -0
  147. package/dist/utils/ejecutor.js.map +1 -0
  148. package/package.json +53 -4
  149. package/puf-github-action.yml +30 -0
@@ -0,0 +1,197 @@
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.EvaluadorWpWoo = void 0;
37
+ const fs = __importStar(require("node:fs/promises"));
38
+ const arbol_proyecto_js_1 = require("./arbol-proyecto.js");
39
+ /**
40
+ * G21: Cumplimiento y Buenas Prácticas Oficiales WordPress & WooCommerce (WP & WC Core Compliance Guard).
41
+ * Audita apego a WordPress Coding Standards (WPCS) y WooCommerce HPOS/CRUD Guidelines.
42
+ */
43
+ class EvaluadorWpWoo {
44
+ static async auditar(directorioRaiz) {
45
+ const t = Date.now();
46
+ const archivos = await arbol_proyecto_js_1.LectorArbolProyecto.obtenerSnapshot(directorioRaiz);
47
+ // Detección heurística de ecosistema WordPress / WooCommerce
48
+ const esWordPress = archivos.some(a => a.rutaRelativa.endsWith("functions.php") ||
49
+ a.rutaRelativa.endsWith("wp-config.php") ||
50
+ a.rutaRelativa.includes("wp-content/") ||
51
+ a.rutaRelativa.includes("_ic-megazone-woo"));
52
+ const archivosPhp = archivos.filter(a => a.extension === ".php");
53
+ if (!esWordPress && archivosPhp.length === 0) {
54
+ return {
55
+ id: "G21",
56
+ nombre: "Cumplimiento Oficial WordPress & WooCommerce (WPCS & WC Guidelines)",
57
+ estado: "omitida",
58
+ detalle: "No se detectó estructura ni dependencias de WordPress / WooCommerce. Compuerta omitida.",
59
+ evidencia: "Entorno no WordPress",
60
+ tiempoEjecucionMs: Date.now() - t
61
+ };
62
+ }
63
+ let detectadoWpTokens = esWordPress;
64
+ if (!detectadoWpTokens) {
65
+ for (const arch of archivosPhp.slice(0, 10)) {
66
+ try {
67
+ const raw = await fs.readFile(arch.rutaAbsoluta, "utf8");
68
+ if (raw.includes("add_action(") || raw.includes("add_filter(") || raw.includes("wc_get_order") || raw.includes("wp_send_json")) {
69
+ detectadoWpTokens = true;
70
+ break;
71
+ }
72
+ }
73
+ catch { }
74
+ }
75
+ }
76
+ if (!detectadoWpTokens) {
77
+ return {
78
+ id: "G21",
79
+ nombre: "Cumplimiento Oficial WordPress & WooCommerce (WPCS & WC Guidelines)",
80
+ estado: "omitida",
81
+ detalle: "Proyecto PHP estándar sin hooks o APIs nativas de WordPress/WooCommerce.",
82
+ evidencia: "Proyecto PHP general",
83
+ tiempoEjecucionMs: Date.now() - t
84
+ };
85
+ }
86
+ const violaciones = [];
87
+ let cuentaArchivosWp = 0;
88
+ let tieneWooCommerce = false;
89
+ let declaraHpos = false;
90
+ for (const arch of archivosPhp) {
91
+ if (arch.rutaRelativa.includes("vendor/") || arch.rutaRelativa.includes("tests/"))
92
+ continue;
93
+ cuentaArchivosWp++;
94
+ let contenido;
95
+ try {
96
+ contenido = await fs.readFile(arch.rutaAbsoluta, "utf8");
97
+ }
98
+ catch {
99
+ continue;
100
+ }
101
+ if (contenido.includes("custom_order_tables") || contenido.includes("declare_compatibility")) {
102
+ declaraHpos = true;
103
+ }
104
+ if (contenido.includes("WC_") || contenido.includes("wc_") || contenido.includes("woocommerce")) {
105
+ tieneWooCommerce = true;
106
+ }
107
+ const lineas = contenido.split(/\r?\n/);
108
+ for (let i = 0; i < lineas.length; i++) {
109
+ const lineaNum = i + 1;
110
+ const texto = lineas[i] || "";
111
+ const lineaLimpia = texto.trim();
112
+ // Ignorar comentarios
113
+ if (lineaLimpia.startsWith("//") || lineaLimpia.startsWith("#") || lineaLimpia.startsWith("*"))
114
+ continue;
115
+ // Regla 1: WordPress Security - Acceso a superglobales sin sanitizar
116
+ if (/(?:\$_GET|\$_POST|\$_REQUEST)\[.+\]/.test(texto)) {
117
+ const sanitizado = /(?:sanitize_text_field|sanitize_key|absint|intval|sanitize_email|esc_url_raw|wp_unslash)\s*\(/.test(texto) ||
118
+ /array_map\s*\(\s*['"](?:sanitize_text_field|intval|absint)['"]/.test(texto);
119
+ const issetSolo = /isset\s*\(|empty\s*\(/.test(texto);
120
+ if (!sanitizado && !issetSolo) {
121
+ violaciones.push({
122
+ archivo: arch.rutaRelativa,
123
+ linea: lineaNum,
124
+ regla: "WP-SEC-01 (Sanitización)",
125
+ mensaje: "Acceso directo a superglobal ($_POST/$_GET/$_REQUEST) sin función canónica de sanitización (sanitize_text_field, absint, esc_url_raw)."
126
+ });
127
+ }
128
+ }
129
+ // Regla 2: WordPress Security - Consultas directas a WPDB sin prepare
130
+ // Detecta consultas donde el payload SQL concatena variables de usuario (. $var) o interpola dentro del string comillas
131
+ const contieneLlamadaWpdb = /\$wpdb->(?:query|get_results|get_row|get_var)\s*\(/i.test(texto);
132
+ if (contieneLlamadaWpdb && !texto.includes("$wpdb->prepare") && !texto.includes("prepare(")) {
133
+ // Extraer lo que está dentro del paréntesis de la llamada a wpdb
134
+ const matchCall = texto.match(/\$wpdb->(?:query|get_results|get_row|get_var)\s*\((.+)/i);
135
+ if (matchCall && matchCall[1]) {
136
+ const cuerpoSql = matchCall[1];
137
+ // Concatena variable externa con punto: . $variable
138
+ const concatenaVar = /\.\s*\$[a-zA-Z_]/i.test(cuerpoSql);
139
+ // Interpola variable que no sea tabla canónica del core: $var o {$var}
140
+ const interpolaVar = /(?<!\{?wpdb->(?:prefix|posts|postmeta|users|usermeta|options|terms|term_taxonomy|term_relationships)\b)\$[a-zA-Z_]/i.test(cuerpoSql.replace(/\$wpdb->(?:prefix|posts|postmeta|users|usermeta|options|terms|term_taxonomy|term_relationships)\b/g, ''));
141
+ if (concatenaVar || interpolaVar) {
142
+ violaciones.push({
143
+ archivo: arch.rutaRelativa,
144
+ linea: lineaNum,
145
+ regla: "WP-SEC-02 (SQL Injection)",
146
+ mensaje: "Consulta directa a $wpdb construida con variables dinámicas no sanitizadas sin $wpdb->prepare(). Vulnerabilidad de Inyección SQL."
147
+ });
148
+ }
149
+ }
150
+ }
151
+ // Regla 3: WooCommerce CRUD & HPOS - Acceso a get_post_meta para pedidos
152
+ if (/get_post_meta\s*\(\s*\$order(?:->get_id\(\)|\b)/i.test(texto) || /get_post_meta\s*\(\s*\$order_id\s*,\s*["']_shipping_/i.test(texto)) {
153
+ violaciones.push({
154
+ archivo: arch.rutaRelativa,
155
+ linea: lineaNum,
156
+ regla: "WC-HPOS-01 (CRUD Mandatorio)",
157
+ mensaje: "Uso obsoleto de get_post_meta() en órdenes. Incumple HPOS. Usar $order->get_meta() o métodos CRUD canónicos de WC_Order."
158
+ });
159
+ }
160
+ // Regla 4: WooCommerce Core - Acceso directo a propiedades obsoletas
161
+ if (/\$order->(?:id|status|total|shipping_postcode|billing_email)\b/i.test(texto)) {
162
+ violaciones.push({
163
+ archivo: arch.rutaRelativa,
164
+ linea: lineaNum,
165
+ regla: "WC-CORE-01 (Propiedades Obsoletas)",
166
+ mensaje: "Acceso directo a propiedades privadas de WC_Order obsoletas desde WooCommerce 3.0. Reemplazar por getters canónicos (ej. $order->get_id(), $order->get_status())."
167
+ });
168
+ }
169
+ }
170
+ }
171
+ if (violaciones.length > 0) {
172
+ const resumen = violaciones.slice(0, 3).map(v => `${v.archivo}:${v.linea} [${v.regla}] ${v.mensaje}`).join(" | ");
173
+ return {
174
+ id: "G21",
175
+ nombre: "Cumplimiento Oficial WordPress & WooCommerce (WPCS & WC Guidelines)",
176
+ estado: "rechazada",
177
+ detalle: `Se detectaron ${violaciones.length} desviaciones de la documentación oficial de WP/WC: ${resumen}`,
178
+ evidencia: `${violaciones.length} no conformidades oficiales detectadas`,
179
+ tiempoEjecucionMs: Date.now() - t
180
+ };
181
+ }
182
+ let detalleAprobado = `Auditoría oficial aprobada en ${cuentaArchivosWp} archivo(s) PHP. Cero vulnerabilidades WPCS y compatibilidad con CRUD/HPOS verificada.`;
183
+ if (tieneWooCommerce) {
184
+ detalleAprobado += declaraHpos ? " Compatibilidad formal HPOS declarada." : " Métodos CRUD de WC_Order respetados.";
185
+ }
186
+ return {
187
+ id: "G21",
188
+ nombre: "Cumplimiento Oficial WordPress & WooCommerce (WPCS & WC Guidelines)",
189
+ estado: "aprobada",
190
+ detalle: detalleAprobado,
191
+ evidencia: `${cuentaArchivosWp} archivos auditados conforme a WP/WC Core`,
192
+ tiempoEjecucionMs: Date.now() - t
193
+ };
194
+ }
195
+ }
196
+ exports.EvaluadorWpWoo = EvaluadorWpWoo;
197
+ //# sourceMappingURL=evaluador-wp-woo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evaluador-wp-woo.js","sourceRoot":"","sources":["../../src/core/evaluador-wp-woo.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * @file generador-reporte-html.ts
3
+ * @description Generador visual del Reporte Forense HTML Soberano para el Protocolo PUF.
4
+ * Diseño visual idéntico y de alta fidelidad basado en el estándar AUM-IC Inspector Forense.
5
+ * Incluye SVG Gauge animado, tarjetas KPI con iconografía y bordes, tabla forense detallada.
6
+ * Estándar AUM-IC 7:2026.
7
+ */
8
+ import type { ResultadoAuditoria } from './types.js';
9
+ export declare class GeneradorReporteHtml {
10
+ static generar(resultado: ResultadoAuditoria, rutaDestino: string): Promise<string>;
11
+ }
12
+ //# sourceMappingURL=generador-reporte-html.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generador-reporte-html.d.ts","sourceRoot":"","sources":["../../src/core/generador-reporte-html.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAErD,qBAAa,oBAAoB;WACX,OAAO,CAAC,SAAS,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CA8sBjG"}