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.
- package/README.md +297 -0
- package/dist/agents/agentRegistry.d.ts +68 -0
- package/dist/agents/agentRegistry.d.ts.map +1 -0
- package/dist/agents/agentRegistry.js +222 -0
- package/dist/agents/agentRegistry.js.map +1 -0
- package/dist/agents/formatter-agent.d.ts +10 -0
- package/dist/agents/formatter-agent.d.ts.map +1 -0
- package/dist/agents/formatter-agent.js +49 -0
- package/dist/agents/formatter-agent.js.map +1 -0
- package/dist/agents/genkit-agent.d.ts +12 -0
- package/dist/agents/genkit-agent.d.ts.map +1 -0
- package/dist/agents/genkit-agent.js +119 -0
- package/dist/agents/genkit-agent.js.map +1 -0
- package/dist/agents/i18n-messages.d.ts +17 -0
- package/dist/agents/i18n-messages.d.ts.map +1 -0
- package/dist/agents/i18n-messages.js +92 -0
- package/dist/agents/i18n-messages.js.map +1 -0
- package/dist/agents/index.d.ts +10 -0
- package/dist/agents/index.d.ts.map +1 -0
- package/dist/agents/index.js +26 -0
- package/dist/agents/index.js.map +1 -0
- package/dist/agents/pipeline.d.ts +15 -0
- package/dist/agents/pipeline.d.ts.map +1 -0
- package/dist/agents/pipeline.js +45 -0
- package/dist/agents/pipeline.js.map +1 -0
- package/dist/agents/schema-factory.d.ts +40 -0
- package/dist/agents/schema-factory.d.ts.map +1 -0
- package/dist/agents/schema-factory.js +121 -0
- package/dist/agents/schema-factory.js.map +1 -0
- package/dist/agents/translation-validators.d.ts +26 -0
- package/dist/agents/translation-validators.d.ts.map +1 -0
- package/dist/agents/translation-validators.js +77 -0
- package/dist/agents/translation-validators.js.map +1 -0
- package/dist/agents/translator-agents.d.ts +184 -0
- package/dist/agents/translator-agents.d.ts.map +1 -0
- package/dist/agents/translator-agents.js +613 -0
- package/dist/agents/translator-agents.js.map +1 -0
- package/dist/agents/types/translation.types.d.ts +100 -0
- package/dist/agents/types/translation.types.d.ts.map +1 -0
- package/dist/agents/types/translation.types.js +3 -0
- package/dist/agents/types/translation.types.js.map +1 -0
- package/dist/agents/validator-agent.d.ts +42 -0
- package/dist/agents/validator-agent.d.ts.map +1 -0
- package/dist/agents/validator-agent.js +122 -0
- package/dist/agents/validator-agent.js.map +1 -0
- package/dist/audit/auditTrail.d.ts +55 -0
- package/dist/audit/auditTrail.d.ts.map +1 -0
- package/dist/audit/auditTrail.js +93 -0
- package/dist/audit/auditTrail.js.map +1 -0
- package/dist/compliance/gdprEngine.d.ts +44 -0
- package/dist/compliance/gdprEngine.d.ts.map +1 -0
- package/dist/compliance/gdprEngine.js +178 -0
- package/dist/compliance/gdprEngine.js.map +1 -0
- package/dist/compliance/lgpdEngine.d.ts +51 -0
- package/dist/compliance/lgpdEngine.d.ts.map +1 -0
- package/dist/compliance/lgpdEngine.js +221 -0
- package/dist/compliance/lgpdEngine.js.map +1 -0
- package/dist/config.d.ts +78 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +77 -0
- package/dist/config.js.map +1 -0
- package/dist/errors.d.ts +17 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +40 -0
- package/dist/errors.js.map +1 -0
- package/dist/firebase/tenantManager.d.ts +84 -0
- package/dist/firebase/tenantManager.d.ts.map +1 -0
- package/dist/firebase/tenantManager.js +378 -0
- package/dist/firebase/tenantManager.js.map +1 -0
- package/dist/index.d.ts +36 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +118 -0
- package/dist/index.js.map +1 -0
- package/dist/integration/secure-yaml-runtime.d.ts +68 -0
- package/dist/integration/secure-yaml-runtime.d.ts.map +1 -0
- package/dist/integration/secure-yaml-runtime.js +245 -0
- package/dist/integration/secure-yaml-runtime.js.map +1 -0
- package/dist/parser/secure-yaml-parser.d.ts +62 -0
- package/dist/parser/secure-yaml-parser.d.ts.map +1 -0
- package/dist/parser/secure-yaml-parser.js +234 -0
- package/dist/parser/secure-yaml-parser.js.map +1 -0
- package/dist/performance/autoscaling.d.ts +100 -0
- package/dist/performance/autoscaling.d.ts.map +1 -0
- package/dist/performance/autoscaling.js +339 -0
- package/dist/performance/autoscaling.js.map +1 -0
- package/dist/performance/benchmark.d.ts +104 -0
- package/dist/performance/benchmark.d.ts.map +1 -0
- package/dist/performance/benchmark.js +514 -0
- package/dist/performance/benchmark.js.map +1 -0
- package/dist/performance/index.d.ts +14 -0
- package/dist/performance/index.d.ts.map +1 -0
- package/dist/performance/index.js +35 -0
- package/dist/performance/index.js.map +1 -0
- package/dist/performance/monitor.d.ts +126 -0
- package/dist/performance/monitor.d.ts.map +1 -0
- package/dist/performance/monitor.js +324 -0
- package/dist/performance/monitor.js.map +1 -0
- package/dist/performance/streaming.d.ts +82 -0
- package/dist/performance/streaming.d.ts.map +1 -0
- package/dist/performance/streaming.js +287 -0
- package/dist/performance/streaming.js.map +1 -0
- package/dist/runtime/audit.d.ts +240 -0
- package/dist/runtime/audit.d.ts.map +1 -0
- package/dist/runtime/audit.js +641 -0
- package/dist/runtime/audit.js.map +1 -0
- package/dist/runtime/declarativeAgentRuntime.d.ts +123 -0
- package/dist/runtime/declarativeAgentRuntime.d.ts.map +1 -0
- package/dist/runtime/declarativeAgentRuntime.js +576 -0
- package/dist/runtime/declarativeAgentRuntime.js.map +1 -0
- package/dist/runtime/isolatedRuntime.d.ts +119 -0
- package/dist/runtime/isolatedRuntime.d.ts.map +1 -0
- package/dist/runtime/isolatedRuntime.js +425 -0
- package/dist/runtime/isolatedRuntime.js.map +1 -0
- package/dist/runtime/schemaCompiler.d.ts +35 -0
- package/dist/runtime/schemaCompiler.d.ts.map +1 -0
- package/dist/runtime/schemaCompiler.js +151 -0
- package/dist/runtime/schemaCompiler.js.map +1 -0
- package/dist/runtime/simpleRuntime.d.ts +57 -0
- package/dist/runtime/simpleRuntime.d.ts.map +1 -0
- package/dist/runtime/simpleRuntime.js +187 -0
- package/dist/runtime/simpleRuntime.js.map +1 -0
- package/dist/security/dashboard.d.ts +89 -0
- package/dist/security/dashboard.d.ts.map +1 -0
- package/dist/security/dashboard.js +300 -0
- package/dist/security/dashboard.js.map +1 -0
- package/dist/security/hardening.d.ts +130 -0
- package/dist/security/hardening.d.ts.map +1 -0
- package/dist/security/hardening.js +414 -0
- package/dist/security/hardening.js.map +1 -0
- package/dist/security/index.d.ts +128 -0
- package/dist/security/index.d.ts.map +1 -0
- package/dist/security/index.js +353 -0
- package/dist/security/index.js.map +1 -0
- package/dist/security/monitor.d.ts +88 -0
- package/dist/security/monitor.d.ts.map +1 -0
- package/dist/security/monitor.js +356 -0
- package/dist/security/monitor.js.map +1 -0
- package/dist/security/scanner.d.ts +104 -0
- package/dist/security/scanner.d.ts.map +1 -0
- package/dist/security/scanner.js +298 -0
- package/dist/security/scanner.js.map +1 -0
- package/dist/security/score.d.ts +150 -0
- package/dist/security/score.d.ts.map +1 -0
- package/dist/security/score.js +983 -0
- package/dist/security/score.js.map +1 -0
- package/dist/security/test-security.d.ts +22 -0
- package/dist/security/test-security.d.ts.map +1 -0
- package/dist/security/test-security.js +154 -0
- package/dist/security/test-security.js.map +1 -0
- package/dist/security/threatDetector.d.ts +39 -0
- package/dist/security/threatDetector.d.ts.map +1 -0
- package/dist/security/threatDetector.js +354 -0
- package/dist/security/threatDetector.js.map +1 -0
- package/dist/security/validation.d.ts +69 -0
- package/dist/security/validation.d.ts.map +1 -0
- package/dist/security/validation.js +286 -0
- package/dist/security/validation.js.map +1 -0
- package/dist/server/api/clientsRoute.d.ts +9 -0
- package/dist/server/api/clientsRoute.d.ts.map +1 -0
- package/dist/server/api/clientsRoute.js +71 -0
- package/dist/server/api/clientsRoute.js.map +1 -0
- package/dist/server/api/endpointsRoute.d.ts +8 -0
- package/dist/server/api/endpointsRoute.d.ts.map +1 -0
- package/dist/server/api/endpointsRoute.js +76 -0
- package/dist/server/api/endpointsRoute.js.map +1 -0
- package/dist/server/api/graphql.d.ts +9 -0
- package/dist/server/api/graphql.d.ts.map +1 -0
- package/dist/server/api/graphql.js +180 -0
- package/dist/server/api/graphql.js.map +1 -0
- package/dist/server/errors.d.ts +19 -0
- package/dist/server/errors.d.ts.map +1 -0
- package/dist/server/errors.js +42 -0
- package/dist/server/errors.js.map +1 -0
- package/dist/server/index.d.ts +7 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +24 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/kvStore.d.ts +27 -0
- package/dist/server/kvStore.d.ts.map +1 -0
- package/dist/server/kvStore.js +128 -0
- package/dist/server/kvStore.js.map +1 -0
- package/dist/server/runtimeSecurity.d.ts +28 -0
- package/dist/server/runtimeSecurity.d.ts.map +1 -0
- package/dist/server/runtimeSecurity.js +85 -0
- package/dist/server/runtimeSecurity.js.map +1 -0
- package/dist/server/types.d.ts +53 -0
- package/dist/server/types.d.ts.map +1 -0
- package/dist/server/types.js +8 -0
- package/dist/server/types.js.map +1 -0
- package/dist/types/executionContext.d.ts +16 -0
- package/dist/types/executionContext.d.ts.map +1 -0
- package/dist/types/executionContext.js +3 -0
- package/dist/types/executionContext.js.map +1 -0
- package/package.json +77 -0
- package/src/agents/agentRegistry.ts +272 -0
- package/src/agents/image-agent.yaml +86 -0
- package/src/agents/joker-agent.yaml +47 -0
- package/src/agents/translator-agent.yaml +80 -0
- package/src/audit/auditTrail.ts +134 -0
- package/src/compliance/gdprEngine.ts +209 -0
- package/src/compliance/lgpdEngine.ts +268 -0
- package/src/config.ts +179 -0
- package/src/errors.ts +35 -0
- package/src/firebase/tenantManager.ts +443 -0
- package/src/index.ts +125 -0
- package/src/integration/secure-yaml-runtime.ts +341 -0
- package/src/parser/secure-yaml-parser.ts +273 -0
- package/src/performance/autoscaling.ts +495 -0
- package/src/performance/benchmark.ts +644 -0
- package/src/performance/index.ts +34 -0
- package/src/performance/monitor.ts +469 -0
- package/src/performance/streaming.ts +317 -0
- package/src/runtime/audit.ts +907 -0
- package/src/runtime/declarativeAgentRuntime.ts +836 -0
- package/src/runtime/isolatedRuntime.ts +572 -0
- package/src/runtime/schemaCompiler.ts +228 -0
- package/src/runtime/simpleRuntime.ts +201 -0
- package/src/security/dashboard.ts +462 -0
- package/src/security/hardening.ts +560 -0
- package/src/security/index.ts +439 -0
- package/src/security/monitor.ts +490 -0
- package/src/security/scanner.ts +368 -0
- package/src/security/score.ts +1138 -0
- package/src/security/threatDetector.ts +481 -0
- package/src/security/validation.ts +365 -0
- package/src/server/api/clientsRoute.ts +92 -0
- package/src/server/api/endpointsRoute.ts +97 -0
- package/src/server/api/graphql.ts +249 -0
- package/src/server/errors.ts +38 -0
- package/src/server/index.ts +6 -0
- package/src/server/kvStore.ts +152 -0
- package/src/server/runtimeSecurity.ts +102 -0
- package/src/server/types.ts +60 -0
- package/src/types/executionContext.ts +16 -0
- package/tools/seed.ts +365 -0
- 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 };
|