beddel 0.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 (236) hide show
  1. package/README.md +297 -0
  2. package/dist/agents/agentRegistry.d.ts +68 -0
  3. package/dist/agents/agentRegistry.d.ts.map +1 -0
  4. package/dist/agents/agentRegistry.js +222 -0
  5. package/dist/agents/agentRegistry.js.map +1 -0
  6. package/dist/agents/formatter-agent.d.ts +10 -0
  7. package/dist/agents/formatter-agent.d.ts.map +1 -0
  8. package/dist/agents/formatter-agent.js +49 -0
  9. package/dist/agents/formatter-agent.js.map +1 -0
  10. package/dist/agents/genkit-agent.d.ts +12 -0
  11. package/dist/agents/genkit-agent.d.ts.map +1 -0
  12. package/dist/agents/genkit-agent.js +119 -0
  13. package/dist/agents/genkit-agent.js.map +1 -0
  14. package/dist/agents/i18n-messages.d.ts +17 -0
  15. package/dist/agents/i18n-messages.d.ts.map +1 -0
  16. package/dist/agents/i18n-messages.js +92 -0
  17. package/dist/agents/i18n-messages.js.map +1 -0
  18. package/dist/agents/index.d.ts +10 -0
  19. package/dist/agents/index.d.ts.map +1 -0
  20. package/dist/agents/index.js +26 -0
  21. package/dist/agents/index.js.map +1 -0
  22. package/dist/agents/pipeline.d.ts +15 -0
  23. package/dist/agents/pipeline.d.ts.map +1 -0
  24. package/dist/agents/pipeline.js +45 -0
  25. package/dist/agents/pipeline.js.map +1 -0
  26. package/dist/agents/schema-factory.d.ts +40 -0
  27. package/dist/agents/schema-factory.d.ts.map +1 -0
  28. package/dist/agents/schema-factory.js +121 -0
  29. package/dist/agents/schema-factory.js.map +1 -0
  30. package/dist/agents/translation-validators.d.ts +26 -0
  31. package/dist/agents/translation-validators.d.ts.map +1 -0
  32. package/dist/agents/translation-validators.js +77 -0
  33. package/dist/agents/translation-validators.js.map +1 -0
  34. package/dist/agents/translator-agents.d.ts +184 -0
  35. package/dist/agents/translator-agents.d.ts.map +1 -0
  36. package/dist/agents/translator-agents.js +613 -0
  37. package/dist/agents/translator-agents.js.map +1 -0
  38. package/dist/agents/types/translation.types.d.ts +100 -0
  39. package/dist/agents/types/translation.types.d.ts.map +1 -0
  40. package/dist/agents/types/translation.types.js +3 -0
  41. package/dist/agents/types/translation.types.js.map +1 -0
  42. package/dist/agents/validator-agent.d.ts +42 -0
  43. package/dist/agents/validator-agent.d.ts.map +1 -0
  44. package/dist/agents/validator-agent.js +122 -0
  45. package/dist/agents/validator-agent.js.map +1 -0
  46. package/dist/audit/auditTrail.d.ts +55 -0
  47. package/dist/audit/auditTrail.d.ts.map +1 -0
  48. package/dist/audit/auditTrail.js +93 -0
  49. package/dist/audit/auditTrail.js.map +1 -0
  50. package/dist/compliance/gdprEngine.d.ts +44 -0
  51. package/dist/compliance/gdprEngine.d.ts.map +1 -0
  52. package/dist/compliance/gdprEngine.js +178 -0
  53. package/dist/compliance/gdprEngine.js.map +1 -0
  54. package/dist/compliance/lgpdEngine.d.ts +51 -0
  55. package/dist/compliance/lgpdEngine.d.ts.map +1 -0
  56. package/dist/compliance/lgpdEngine.js +221 -0
  57. package/dist/compliance/lgpdEngine.js.map +1 -0
  58. package/dist/config.d.ts +78 -0
  59. package/dist/config.d.ts.map +1 -0
  60. package/dist/config.js +77 -0
  61. package/dist/config.js.map +1 -0
  62. package/dist/errors.d.ts +17 -0
  63. package/dist/errors.d.ts.map +1 -0
  64. package/dist/errors.js +40 -0
  65. package/dist/errors.js.map +1 -0
  66. package/dist/firebase/tenantManager.d.ts +84 -0
  67. package/dist/firebase/tenantManager.d.ts.map +1 -0
  68. package/dist/firebase/tenantManager.js +378 -0
  69. package/dist/firebase/tenantManager.js.map +1 -0
  70. package/dist/index.d.ts +36 -0
  71. package/dist/index.d.ts.map +1 -0
  72. package/dist/index.js +118 -0
  73. package/dist/index.js.map +1 -0
  74. package/dist/integration/secure-yaml-runtime.d.ts +68 -0
  75. package/dist/integration/secure-yaml-runtime.d.ts.map +1 -0
  76. package/dist/integration/secure-yaml-runtime.js +245 -0
  77. package/dist/integration/secure-yaml-runtime.js.map +1 -0
  78. package/dist/parser/secure-yaml-parser.d.ts +62 -0
  79. package/dist/parser/secure-yaml-parser.d.ts.map +1 -0
  80. package/dist/parser/secure-yaml-parser.js +234 -0
  81. package/dist/parser/secure-yaml-parser.js.map +1 -0
  82. package/dist/performance/autoscaling.d.ts +100 -0
  83. package/dist/performance/autoscaling.d.ts.map +1 -0
  84. package/dist/performance/autoscaling.js +339 -0
  85. package/dist/performance/autoscaling.js.map +1 -0
  86. package/dist/performance/benchmark.d.ts +104 -0
  87. package/dist/performance/benchmark.d.ts.map +1 -0
  88. package/dist/performance/benchmark.js +514 -0
  89. package/dist/performance/benchmark.js.map +1 -0
  90. package/dist/performance/index.d.ts +14 -0
  91. package/dist/performance/index.d.ts.map +1 -0
  92. package/dist/performance/index.js +35 -0
  93. package/dist/performance/index.js.map +1 -0
  94. package/dist/performance/monitor.d.ts +126 -0
  95. package/dist/performance/monitor.d.ts.map +1 -0
  96. package/dist/performance/monitor.js +324 -0
  97. package/dist/performance/monitor.js.map +1 -0
  98. package/dist/performance/streaming.d.ts +82 -0
  99. package/dist/performance/streaming.d.ts.map +1 -0
  100. package/dist/performance/streaming.js +287 -0
  101. package/dist/performance/streaming.js.map +1 -0
  102. package/dist/runtime/audit.d.ts +240 -0
  103. package/dist/runtime/audit.d.ts.map +1 -0
  104. package/dist/runtime/audit.js +641 -0
  105. package/dist/runtime/audit.js.map +1 -0
  106. package/dist/runtime/declarativeAgentRuntime.d.ts +123 -0
  107. package/dist/runtime/declarativeAgentRuntime.d.ts.map +1 -0
  108. package/dist/runtime/declarativeAgentRuntime.js +576 -0
  109. package/dist/runtime/declarativeAgentRuntime.js.map +1 -0
  110. package/dist/runtime/isolatedRuntime.d.ts +119 -0
  111. package/dist/runtime/isolatedRuntime.d.ts.map +1 -0
  112. package/dist/runtime/isolatedRuntime.js +425 -0
  113. package/dist/runtime/isolatedRuntime.js.map +1 -0
  114. package/dist/runtime/schemaCompiler.d.ts +35 -0
  115. package/dist/runtime/schemaCompiler.d.ts.map +1 -0
  116. package/dist/runtime/schemaCompiler.js +151 -0
  117. package/dist/runtime/schemaCompiler.js.map +1 -0
  118. package/dist/runtime/simpleRuntime.d.ts +57 -0
  119. package/dist/runtime/simpleRuntime.d.ts.map +1 -0
  120. package/dist/runtime/simpleRuntime.js +187 -0
  121. package/dist/runtime/simpleRuntime.js.map +1 -0
  122. package/dist/security/dashboard.d.ts +89 -0
  123. package/dist/security/dashboard.d.ts.map +1 -0
  124. package/dist/security/dashboard.js +300 -0
  125. package/dist/security/dashboard.js.map +1 -0
  126. package/dist/security/hardening.d.ts +130 -0
  127. package/dist/security/hardening.d.ts.map +1 -0
  128. package/dist/security/hardening.js +414 -0
  129. package/dist/security/hardening.js.map +1 -0
  130. package/dist/security/index.d.ts +128 -0
  131. package/dist/security/index.d.ts.map +1 -0
  132. package/dist/security/index.js +353 -0
  133. package/dist/security/index.js.map +1 -0
  134. package/dist/security/monitor.d.ts +88 -0
  135. package/dist/security/monitor.d.ts.map +1 -0
  136. package/dist/security/monitor.js +356 -0
  137. package/dist/security/monitor.js.map +1 -0
  138. package/dist/security/scanner.d.ts +104 -0
  139. package/dist/security/scanner.d.ts.map +1 -0
  140. package/dist/security/scanner.js +298 -0
  141. package/dist/security/scanner.js.map +1 -0
  142. package/dist/security/score.d.ts +150 -0
  143. package/dist/security/score.d.ts.map +1 -0
  144. package/dist/security/score.js +983 -0
  145. package/dist/security/score.js.map +1 -0
  146. package/dist/security/test-security.d.ts +22 -0
  147. package/dist/security/test-security.d.ts.map +1 -0
  148. package/dist/security/test-security.js +154 -0
  149. package/dist/security/test-security.js.map +1 -0
  150. package/dist/security/threatDetector.d.ts +39 -0
  151. package/dist/security/threatDetector.d.ts.map +1 -0
  152. package/dist/security/threatDetector.js +354 -0
  153. package/dist/security/threatDetector.js.map +1 -0
  154. package/dist/security/validation.d.ts +69 -0
  155. package/dist/security/validation.d.ts.map +1 -0
  156. package/dist/security/validation.js +286 -0
  157. package/dist/security/validation.js.map +1 -0
  158. package/dist/server/api/clientsRoute.d.ts +9 -0
  159. package/dist/server/api/clientsRoute.d.ts.map +1 -0
  160. package/dist/server/api/clientsRoute.js +71 -0
  161. package/dist/server/api/clientsRoute.js.map +1 -0
  162. package/dist/server/api/endpointsRoute.d.ts +8 -0
  163. package/dist/server/api/endpointsRoute.d.ts.map +1 -0
  164. package/dist/server/api/endpointsRoute.js +76 -0
  165. package/dist/server/api/endpointsRoute.js.map +1 -0
  166. package/dist/server/api/graphql.d.ts +9 -0
  167. package/dist/server/api/graphql.d.ts.map +1 -0
  168. package/dist/server/api/graphql.js +180 -0
  169. package/dist/server/api/graphql.js.map +1 -0
  170. package/dist/server/errors.d.ts +19 -0
  171. package/dist/server/errors.d.ts.map +1 -0
  172. package/dist/server/errors.js +42 -0
  173. package/dist/server/errors.js.map +1 -0
  174. package/dist/server/index.d.ts +7 -0
  175. package/dist/server/index.d.ts.map +1 -0
  176. package/dist/server/index.js +24 -0
  177. package/dist/server/index.js.map +1 -0
  178. package/dist/server/kvStore.d.ts +27 -0
  179. package/dist/server/kvStore.d.ts.map +1 -0
  180. package/dist/server/kvStore.js +128 -0
  181. package/dist/server/kvStore.js.map +1 -0
  182. package/dist/server/runtimeSecurity.d.ts +28 -0
  183. package/dist/server/runtimeSecurity.d.ts.map +1 -0
  184. package/dist/server/runtimeSecurity.js +85 -0
  185. package/dist/server/runtimeSecurity.js.map +1 -0
  186. package/dist/server/types.d.ts +53 -0
  187. package/dist/server/types.d.ts.map +1 -0
  188. package/dist/server/types.js +8 -0
  189. package/dist/server/types.js.map +1 -0
  190. package/dist/types/executionContext.d.ts +16 -0
  191. package/dist/types/executionContext.d.ts.map +1 -0
  192. package/dist/types/executionContext.js +3 -0
  193. package/dist/types/executionContext.js.map +1 -0
  194. package/package.json +77 -0
  195. package/src/agents/agentRegistry.ts +272 -0
  196. package/src/agents/image-agent.yaml +86 -0
  197. package/src/agents/joker-agent.yaml +47 -0
  198. package/src/agents/translator-agent.yaml +80 -0
  199. package/src/audit/auditTrail.ts +134 -0
  200. package/src/compliance/gdprEngine.ts +209 -0
  201. package/src/compliance/lgpdEngine.ts +268 -0
  202. package/src/config.ts +179 -0
  203. package/src/errors.ts +35 -0
  204. package/src/firebase/tenantManager.ts +443 -0
  205. package/src/index.ts +125 -0
  206. package/src/integration/secure-yaml-runtime.ts +341 -0
  207. package/src/parser/secure-yaml-parser.ts +273 -0
  208. package/src/performance/autoscaling.ts +495 -0
  209. package/src/performance/benchmark.ts +644 -0
  210. package/src/performance/index.ts +34 -0
  211. package/src/performance/monitor.ts +469 -0
  212. package/src/performance/streaming.ts +317 -0
  213. package/src/runtime/audit.ts +907 -0
  214. package/src/runtime/declarativeAgentRuntime.ts +836 -0
  215. package/src/runtime/isolatedRuntime.ts +572 -0
  216. package/src/runtime/schemaCompiler.ts +228 -0
  217. package/src/runtime/simpleRuntime.ts +201 -0
  218. package/src/security/dashboard.ts +462 -0
  219. package/src/security/hardening.ts +560 -0
  220. package/src/security/index.ts +439 -0
  221. package/src/security/monitor.ts +490 -0
  222. package/src/security/scanner.ts +368 -0
  223. package/src/security/score.ts +1138 -0
  224. package/src/security/threatDetector.ts +481 -0
  225. package/src/security/validation.ts +365 -0
  226. package/src/server/api/clientsRoute.ts +92 -0
  227. package/src/server/api/endpointsRoute.ts +97 -0
  228. package/src/server/api/graphql.ts +249 -0
  229. package/src/server/errors.ts +38 -0
  230. package/src/server/index.ts +6 -0
  231. package/src/server/kvStore.ts +152 -0
  232. package/src/server/runtimeSecurity.ts +102 -0
  233. package/src/server/types.ts +60 -0
  234. package/src/types/executionContext.ts +16 -0
  235. package/tools/seed.ts +365 -0
  236. package/tools/test-endpoints.ts +174 -0
@@ -0,0 +1,368 @@
1
+ /**
2
+ * Security scanner for YAML parsing
3
+ * Comprehensive vulnerability detection and security analysis
4
+ */
5
+
6
+ import { SecurityScoreResult, calculateSecurityScore } from './score';
7
+ import { SecurityValidator } from './validation';
8
+ import { SecurityHardening, createSecurityHardening } from './hardening';
9
+
10
+ export interface ScanResult {
11
+ secure: boolean;
12
+ score: number;
13
+ grade: string;
14
+ vulnerabilities: any[];
15
+ warnings: string[];
16
+ recommendations: string[];
17
+ details: SecurityDetails;
18
+ }
19
+
20
+ export interface SecurityDetails {
21
+ timestamp: number;
22
+ objectId: string;
23
+ size: number;
24
+ depth: number;
25
+ complexity: string;
26
+ riskLevel: 'LOW' | 'MEDIUM' | 'HIGH' | 'CRITICAL';
27
+ scanDuration: number;
28
+ }
29
+
30
+ class SecurityScanner {
31
+ private validator: SecurityValidator;
32
+ private hardening: SecurityHardening;
33
+ private scanHistory: ScanResult[] = [];
34
+
35
+ constructor() {
36
+ this.validator = new SecurityValidator();
37
+ this.hardening = createSecurityHardening();
38
+ }
39
+
40
+ /**
41
+ * Executa scanning completo de segurança
42
+ */
43
+ public async scan(obj: any): Promise<ScanResult> {
44
+ const startTime = Date.now();
45
+
46
+ // Validação de segurança básica
47
+ const validationResult = this.validator.validateObject(obj);
48
+
49
+ // Cálculo de score de segurança
50
+ const securityScore = calculateSecurityScore(obj);
51
+
52
+ // Aplica hardening e detecção
53
+ const hardeningResult = this.hardening.harden(obj);
54
+
55
+ // Verifica se é seguro
56
+ const isSecure = validationResult.valid && hardeningResult.secure && securityScore.score >= 60;
57
+
58
+ // Monta resultado final
59
+ const result: ScanResult = {
60
+ secure: isSecure,
61
+ score: securityScore.score,
62
+ grade: securityScore.grade,
63
+ vulnerabilities: securityScore.vulnerabilities,
64
+ warnings: this.extractWarnings(validationResult, securityScore),
65
+ recommendations: securityScore.recommendations,
66
+ details: {
67
+ timestamp: Date.now(),
68
+ objectId: this.generateObjectId(obj),
69
+ size: this.estimateObjectSize(obj),
70
+ depth: this.calculateMaxDepth(obj),
71
+ complexity: this.estimateComplexity(obj),
72
+ riskLevel: securityScore.riskLevel,
73
+ scanDuration: Date.now() - startTime
74
+ }
75
+ };
76
+
77
+ // Adiciona ao histórico
78
+ this.scanHistory.push(result);
79
+
80
+ // Mantém apenas os últimos 50 scans
81
+ if (this.scanHistory.length > 50) {
82
+ this.scanHistory = this.scanHistory.slice(-50);
83
+ }
84
+
85
+ return result;
86
+ }
87
+
88
+ /**
89
+ * Rápida validação de segurança
90
+ */
91
+ public quickValidate(obj: any): { isValid: boolean; warnings: number; errors: number } {
92
+ const result = this.validator.validateObject(obj);
93
+ return {
94
+ isValid: result.valid,
95
+ warnings: result.warnings.length,
96
+ errors: result.errors.length
97
+ };
98
+ }
99
+
100
+ /**
101
+ * Análise aprofundada de risco
102
+ */
103
+ public analyzeRisk(obj: any): { riskLevel: string; factors: string[]; score: number } {
104
+ const securityScore = calculateSecurityScore(obj);
105
+
106
+ const riskFactors: string[] = [];
107
+
108
+ if (securityScore.score < 70) {
109
+ riskFactors.push('Low security score');
110
+ }
111
+
112
+ if (securityScore.vulnerabilities.length > 0) {
113
+ riskFactors.push('Active vulnerabilities detected');
114
+ }
115
+
116
+ if (securityScore.vulnerabilities.some(v => v.severity === 'high' || v.severity === 'critical')) {
117
+ riskFactors.push('High/critical severity vulnerabilities');
118
+ }
119
+
120
+ const validation = this.validator.validateObject(obj);
121
+ if (!validation.valid) {
122
+ riskFactors.push('Security validation failures');
123
+ }
124
+
125
+ if (validation.stats.maxDepth > 500) {
126
+ riskFactors.push('Deep object nesting detected');
127
+ }
128
+
129
+ if (validation.stats.totalKeys > 10000) {
130
+ riskFactors.push('Large object size');
131
+ }
132
+
133
+ return {
134
+ riskLevel: securityScore.riskLevel,
135
+ factors: riskFactors,
136
+ score: securityScore.score
137
+ };
138
+ }
139
+
140
+ /**
141
+ * Gera relatório de segurança
142
+ */
143
+ public generateReport(obj: any): string {
144
+ const securityScore = calculateSecurityScore(obj);
145
+
146
+ let report = '=== SECURITY SCAN REPORT ===\n\n';
147
+
148
+ report += `✅ Status: ${securityScore.score >= 60 ? 'SECURE' : 'INSECURE'}\n`;
149
+ report += `📊 Score: ${securityScore.score}/100 (${securityScore.grade})\n`;
150
+ report += `🎯 Risk Level: ${securityScore.riskLevel}\n`;
151
+ report += `📦 Object Size: ${this.formatBytes(this.estimateObjectSize(obj))}\n`;
152
+ report += `📐 Max Depth: ${this.calculateMaxDepth(obj)}\n\n`;
153
+
154
+ if (securityScore.vulnerabilities.length > 0) {
155
+ report += '🔴 VULNERABILITIES DETECTED:\n';
156
+ securityScore.vulnerabilities.forEach(vuln => {
157
+ report += ` • [${vuln.severity.toUpperCase()}] ${vuln.type}: ${vuln.description}\n`;
158
+ report += ` Path: ${vuln.path}\n`;
159
+ report += ` CWE: ${vuln.cweId}\n`;
160
+ report += ` Fix: ${vuln.remediation}\n\n`;
161
+ });
162
+ }
163
+
164
+ if (securityScore.recommendations.length > 0) {
165
+ report += '💡 RECOMMENDATIONS:\n';
166
+ securityScore.recommendations.forEach(rec => {
167
+ report += ` • ${rec}\n`;
168
+ });
169
+ report += '\n';
170
+ }
171
+
172
+ const stats = this.validator.validateObject(obj).stats;
173
+ report += '📈 STATISTICS:\n';
174
+ report += ` • Total Keys: ${stats.totalKeys}\n`;
175
+ report += ` • Max Value Length: ${stats.maxValueLength} bytes\n`;
176
+ report += ` • Data Types: ${Object.entries(stats.dataTypes)
177
+ .map(([type, count]) => `${type}: ${count}`)
178
+ .join(', ')}\n`;
179
+
180
+ report += `\n🎯 Confidence: ${securityScore.confidence}%\n`;
181
+
182
+ return report;
183
+ }
184
+
185
+ /**
186
+ * Estatísticas do histórico de scans
187
+ */
188
+ public getScanHistory(): {
189
+ totalScans: number;
190
+ averageScore: number;
191
+ secureScans: number;
192
+ insecureScans: number;
193
+ averageRiskLevel: string;
194
+ } {
195
+ if (this.scanHistory.length === 0) {
196
+ return {
197
+ totalScans: 0,
198
+ averageScore: 0,
199
+ secureScans: 0,
200
+ insecureScans: 0,
201
+ averageRiskLevel: 'UNKNOWN'
202
+ };
203
+ }
204
+
205
+ const totalScans = this.scanHistory.length;
206
+ const secureScans = this.scanHistory.filter(s => s.secure).length;
207
+ const averageScore = this.scanHistory.reduce((sum, s) => sum + s.score, 0) / totalScans;
208
+
209
+ // Calcula risco médio
210
+ const riskOrder = ['LOW', 'MEDIUM', 'HIGH', 'CRITICAL'];
211
+ const riskScores = this.scanHistory.map(s => riskOrder.indexOf(s.details.riskLevel));
212
+ const avgRiskIndex = Math.round(riskScores.reduce((a, b) => a + b) / totalScans);
213
+ const averageRiskLevel = riskOrder[Math.min(avgRiskIndex, riskOrder.length - 1)];
214
+
215
+ return {
216
+ totalScans,
217
+ averageScore: Math.round(averageScore),
218
+ secureScans,
219
+ insecureScans: totalScans - secureScans,
220
+ averageRiskLevel
221
+ };
222
+ }
223
+
224
+ /**
225
+ * Extrai warnings dos resultados
226
+ */
227
+ private extractWarnings(validationResult: any, securityScore: SecurityScoreResult): string[] {
228
+ const warnings: string[] = [];
229
+
230
+ // Warnings da validação
231
+ validationResult.warnings?.forEach((warning: any) => {
232
+ warnings.push(`${warning.path}: ${warning.message}`);
233
+ });
234
+
235
+ // Warnings do score de segurança
236
+ if (securityScore.score < 80) {
237
+ warnings.push(`Low security score: ${securityScore.score}/100`);
238
+ }
239
+
240
+ if (securityScore.vulnerabilities.length > 0) {
241
+ warnings.push(`${securityScore.vulnerabilities.length} vulnerabilities detected`);
242
+ }
243
+
244
+ return warnings;
245
+ }
246
+
247
+ /**
248
+ * Estima tamanho do objeto
249
+ */
250
+ private estimateObjectSize(obj: any): number {
251
+ try {
252
+ return JSON.stringify(obj).length * 2; // UTF-16 chars
253
+ } catch {
254
+ return 0;
255
+ }
256
+ }
257
+
258
+ /**
259
+ * Calcula profundidade máxima
260
+ */
261
+ private calculateMaxDepth(obj: any): number {
262
+ const calculateDepth = (current: any, depth = 0): number => {
263
+ if (typeof current !== 'object' || current === null) {
264
+ return depth;
265
+ }
266
+
267
+ let maxDepth = depth;
268
+ for (const value of Object.values(current)) {
269
+ maxDepth = Math.max(maxDepth, calculateDepth(value, depth + 1));
270
+ }
271
+ return maxDepth;
272
+ };
273
+
274
+ return calculateDepth(obj);
275
+ }
276
+
277
+ /**
278
+ * Estima complexidade do objeto
279
+ */
280
+ private estimateComplexity(obj: any): string {
281
+ const depth = this.calculateMaxDepth(obj);
282
+ const keys = this.countTotalKeys(obj);
283
+
284
+ if (depth > 500 || keys > 5000) return 'very_high';
285
+ if (depth > 200 || keys > 1000) return 'high';
286
+ if (depth > 100 || keys > 500) return 'medium';
287
+ return 'low';
288
+ }
289
+
290
+ /**
291
+ * Conta chaves totais
292
+ */
293
+ private countTotalKeys(obj: any): number {
294
+ const countKeys = (current: any): number => {
295
+ if (typeof current !== 'object' || current === null) {
296
+ return 0;
297
+ }
298
+
299
+ if (Array.isArray(current)) {
300
+ return current.reduce((sum, item) => sum + countKeys(item), 0);
301
+ }
302
+
303
+ let total = Object.keys(current).length;
304
+ for (const value of Object.values(current)) {
305
+ total += countKeys(value);
306
+ }
307
+ return total;
308
+ };
309
+
310
+ return countKeys(obj);
311
+ }
312
+
313
+ /**
314
+ * Gera ID único do objeto
315
+ */
316
+ private generateObjectId(obj: any): string {
317
+ try {
318
+ const str = JSON.stringify(obj);
319
+ let hash = 0;
320
+ for (let i = 0; i < str.length; i++) {
321
+ const char = str.charCodeAt(i);
322
+ hash = ((hash << 5) - hash) + char;
323
+ hash = hash & hash; // Converte para inteiro de 32 bits
324
+ }
325
+ return Math.abs(hash).toString(36);
326
+ } catch {
327
+ return 'unknown';
328
+ }
329
+ }
330
+
331
+ /**
332
+ * Formata bytes
333
+ */
334
+ private formatBytes(bytes: number): string {
335
+ if (bytes < 1024) return `${bytes}B`;
336
+ if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(2)}KB`;
337
+ return `${(bytes / (1024 * 1024)).toFixed(2)}MB`;
338
+ }
339
+
340
+ /**
341
+ * Reinicializa o scanner
342
+ */
343
+ public reset(): void {
344
+ this.scanHistory = [];
345
+ this.validator = new SecurityValidator();
346
+ this.hardening = createSecurityHardening();
347
+ }
348
+ }
349
+
350
+ /**
351
+ * Função auxiliar para realizar scan rápido
352
+ */
353
+ export async function quickSecurityScan(obj: any): Promise<ScanResult> {
354
+ const scanner = new SecurityScanner();
355
+ return await scanner.scan(obj);
356
+ }
357
+
358
+ /**
359
+ * Função auxiliar para validar segurança básica
360
+ */
361
+ export function validateSecurityBasic(obj: any): boolean {
362
+ const scanner = new SecurityScanner();
363
+ const validator = new SecurityValidator();
364
+ const result = validator.validateObject(obj);
365
+ return result.valid;
366
+ }
367
+
368
+ export { SecurityScanner as SecurityScanner };