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,245 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SecureYamlRuntime = void 0;
|
|
4
|
+
const scanner_1 = require("../security/scanner");
|
|
5
|
+
const config_1 = require("../config");
|
|
6
|
+
class SecureYamlRuntime {
|
|
7
|
+
constructor(runtimeManagerInstance) {
|
|
8
|
+
this.runtimeManagerInstance = runtimeManagerInstance;
|
|
9
|
+
this.runtimeManager = runtimeManagerInstance;
|
|
10
|
+
this.securityScanner = new scanner_1.SecurityScanner();
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Parse YAML in isolated runtime environment
|
|
14
|
+
*/
|
|
15
|
+
async parseYamlSecureRuntime(yamlContent, config = {}) {
|
|
16
|
+
const startTime = performance.now();
|
|
17
|
+
try {
|
|
18
|
+
// Validate input
|
|
19
|
+
this.validateInput(yamlContent);
|
|
20
|
+
// Security scan if enabled
|
|
21
|
+
if (config.validateSecurity !== false) {
|
|
22
|
+
const scanResult = await this.securityScanner.scan({
|
|
23
|
+
code: yamlContent,
|
|
24
|
+
executionId: `yaml-parse-${Date.now()}`,
|
|
25
|
+
});
|
|
26
|
+
if (!scanResult.secure) {
|
|
27
|
+
throw new Error(`Security scan failed: ${scanResult.warnings.join(", ")}`);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
// Prepare execution code
|
|
31
|
+
const executionCode = this.buildYamlExecutionCode(yamlContent);
|
|
32
|
+
// Execute in isolated runtime
|
|
33
|
+
const executionResult = await this.runtimeManager.execute({
|
|
34
|
+
code: executionCode,
|
|
35
|
+
securityProfile: config.securityProfile || "ultra-secure",
|
|
36
|
+
timeout: config.timeout || 5000,
|
|
37
|
+
memoryLimit: config.memoryLimit || 2,
|
|
38
|
+
tenantId: config.tenantId,
|
|
39
|
+
scanForSecurity: config.validateSecurity,
|
|
40
|
+
});
|
|
41
|
+
const endTime = performance.now();
|
|
42
|
+
const totalTime = endTime - startTime;
|
|
43
|
+
// Validate performance targets
|
|
44
|
+
this.validatePerformanceTargets(totalTime, executionResult.memoryUsed);
|
|
45
|
+
const auditHash = this.generateAuditHash(yamlContent, executionResult, config);
|
|
46
|
+
return {
|
|
47
|
+
success: executionResult.success,
|
|
48
|
+
result: executionResult.result,
|
|
49
|
+
error: executionResult.error,
|
|
50
|
+
executionTime: totalTime,
|
|
51
|
+
memoryUsed: executionResult.memoryUsed,
|
|
52
|
+
securityScore: this.calculateSecurityScore(executionResult, config),
|
|
53
|
+
auditHash,
|
|
54
|
+
tenantId: config.tenantId,
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
catch (error) {
|
|
58
|
+
const endTime = performance.now();
|
|
59
|
+
const totalTime = endTime - startTime;
|
|
60
|
+
return {
|
|
61
|
+
success: false,
|
|
62
|
+
error: error instanceof Error ? error : new Error(String(error)),
|
|
63
|
+
executionTime: totalTime,
|
|
64
|
+
memoryUsed: 0,
|
|
65
|
+
tenantId: config.tenantId,
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Multi-tenant YAML processing with isolation
|
|
71
|
+
*/
|
|
72
|
+
async parseYamlMultiTenant(yamlContent, tenantId, config = {}) {
|
|
73
|
+
const tenantConfig = {
|
|
74
|
+
...config,
|
|
75
|
+
tenantId,
|
|
76
|
+
securityProfile: config.securityProfile || "tenant-isolated",
|
|
77
|
+
validateSecurity: config.validateSecurity !== false,
|
|
78
|
+
auditEnabled: config.auditEnabled !== false,
|
|
79
|
+
};
|
|
80
|
+
return this.parseYamlSecureRuntime(yamlContent, tenantConfig);
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Batch process YAML for multiple tenants
|
|
84
|
+
*/
|
|
85
|
+
async parseYamlBatch(yamlContents, config = {}) {
|
|
86
|
+
const results = new Map();
|
|
87
|
+
// Process each tenant's YAML in isolated runtime
|
|
88
|
+
for (const { content, tenantId } of yamlContents) {
|
|
89
|
+
const result = await this.parseYamlMultiTenant(content, tenantId, config);
|
|
90
|
+
results.set(tenantId, result);
|
|
91
|
+
}
|
|
92
|
+
return results;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Test multi-tenant isolation
|
|
96
|
+
*/
|
|
97
|
+
async testTenantIsolation(tenantIds) {
|
|
98
|
+
const results = {};
|
|
99
|
+
for (const tenantId of tenantIds) {
|
|
100
|
+
try {
|
|
101
|
+
// Execute code that should trigger isolation violations if not properly isolated
|
|
102
|
+
const testCode = `
|
|
103
|
+
const memoryLeak = [];
|
|
104
|
+
for (let i = 0; i < 1000; i++) {
|
|
105
|
+
memoryLeak.push(new Array(10000).fill('${tenantId}'));
|
|
106
|
+
}
|
|
107
|
+
global.tenantData = '${tenantId}';
|
|
108
|
+
return global.tenantData;
|
|
109
|
+
`;
|
|
110
|
+
const executionResult = await this.runtimeManager.execute({
|
|
111
|
+
code: testCode,
|
|
112
|
+
tenantId,
|
|
113
|
+
securityProfile: "tenant-isolated",
|
|
114
|
+
timeout: 2000,
|
|
115
|
+
memoryLimit: 1,
|
|
116
|
+
});
|
|
117
|
+
results[tenantId] =
|
|
118
|
+
executionResult.success && executionResult.result === tenantId;
|
|
119
|
+
}
|
|
120
|
+
catch (error) {
|
|
121
|
+
results[tenantId] = false;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
return results;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Validate performance targets
|
|
128
|
+
*/
|
|
129
|
+
validatePerformanceTargets(executionTime, memoryUsed) {
|
|
130
|
+
const timeTarget = config_1.performanceTargets.find((t) => t.metric === "executionTime");
|
|
131
|
+
const memoryTarget = config_1.performanceTargets.find((t) => t.metric === "memoryUsage");
|
|
132
|
+
if (timeTarget && executionTime > timeTarget.target) {
|
|
133
|
+
console.warn(`[SecureYamlRuntime] Performance warning: execution time ${executionTime}ms exceeds target ${timeTarget.target}ms`);
|
|
134
|
+
}
|
|
135
|
+
if (memoryTarget && memoryUsed > memoryTarget.target) {
|
|
136
|
+
console.warn(`[SecureYamlRuntime] Performance warning: memory usage ${memoryUsed}MB exceeds target ${memoryTarget.target}MB`);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Calculate security score
|
|
141
|
+
*/
|
|
142
|
+
calculateSecurityScore(executionResult, config) {
|
|
143
|
+
const profile = config_1.securityProfiles[config.securityProfile || "ultra-secure"];
|
|
144
|
+
let score = 9.5; // Base score
|
|
145
|
+
if (!executionResult.success) {
|
|
146
|
+
score -= 1.0;
|
|
147
|
+
}
|
|
148
|
+
if (config.tenantId) {
|
|
149
|
+
score += 0.5;
|
|
150
|
+
}
|
|
151
|
+
if (config.validateSecurity === false) {
|
|
152
|
+
score -= 1.5;
|
|
153
|
+
}
|
|
154
|
+
return Math.max(0, Math.min(10, score));
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Validate input
|
|
158
|
+
*/
|
|
159
|
+
validateInput(yamlContent) {
|
|
160
|
+
if (typeof yamlContent !== "string") {
|
|
161
|
+
throw new Error("YAML content must be a string");
|
|
162
|
+
}
|
|
163
|
+
if (yamlContent.length === 0) {
|
|
164
|
+
throw new Error("YAML content cannot be empty");
|
|
165
|
+
}
|
|
166
|
+
if (yamlContent.length > 1024 * 1024) {
|
|
167
|
+
// 1MB max
|
|
168
|
+
throw new Error("YAML content exceeds maximum size limit (1MB)");
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Build execution code for YAML parsing
|
|
173
|
+
*/
|
|
174
|
+
buildYamlExecutionCode(yamlContent) {
|
|
175
|
+
// Escape the YAML content to avoid injection attacks
|
|
176
|
+
const escapedYaml = JSON.stringify(yamlContent);
|
|
177
|
+
return `
|
|
178
|
+
// Secure YAML Parser implementation
|
|
179
|
+
class SecureYamlRuntime {
|
|
180
|
+
constructor() {
|
|
181
|
+
this.schema = 'FAILSAFE_SCHEMA';
|
|
182
|
+
this.allowedTypes = ['null', 'boolean', 'integer', 'float', 'string'];
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
parseSecure(yamlContent) {
|
|
186
|
+
// Simulate basic YAML parsing logic
|
|
187
|
+
const lines = yamlContent.split('\\n');
|
|
188
|
+
const result = {};
|
|
189
|
+
|
|
190
|
+
for (const line of lines) {
|
|
191
|
+
const trimmedLine = line.trim();
|
|
192
|
+
if (trimmedLine && !trimmedLine.startsWith('#')) {
|
|
193
|
+
const colonIndex = trimmedLine.indexOf(':');
|
|
194
|
+
if (colonIndex !== -1) {
|
|
195
|
+
const key = trimmedLine.substring(0, colonIndex).trim();
|
|
196
|
+
const value = trimmedLine.substring(colonIndex + 1).trim();
|
|
197
|
+
|
|
198
|
+
// Basic type conversion
|
|
199
|
+
if (value === 'null') {
|
|
200
|
+
result[key] = null;
|
|
201
|
+
} else if (value === 'true') {
|
|
202
|
+
result[key] = true;
|
|
203
|
+
} else if (value === 'false') {
|
|
204
|
+
result[key] = false;
|
|
205
|
+
} else if (!isNaN(parseFloat(value))) {
|
|
206
|
+
result[key] = parseFloat(value);
|
|
207
|
+
} else {
|
|
208
|
+
result[key] = value;
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
return result;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
const runtime = new SecureYamlRuntime();
|
|
219
|
+
const yamlContent = ${escapedYaml};
|
|
220
|
+
return runtime.parseSecure(yamlContent);
|
|
221
|
+
`;
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Generate audit hash
|
|
225
|
+
*/
|
|
226
|
+
generateAuditHash(yamlContent, executionResult, config) {
|
|
227
|
+
const crypto = require("node:crypto");
|
|
228
|
+
const auditData = {
|
|
229
|
+
yamlHash: crypto.createHash("sha256").update(yamlContent).digest("hex"),
|
|
230
|
+
executionResult: executionResult.success,
|
|
231
|
+
securityProfile: config.securityProfile || "ultra-secure",
|
|
232
|
+
tenantId: config.tenantId,
|
|
233
|
+
timestamp: Date.now(),
|
|
234
|
+
executionTime: executionResult.executionTime,
|
|
235
|
+
memoryUsed: executionResult.memoryUsed,
|
|
236
|
+
};
|
|
237
|
+
return crypto
|
|
238
|
+
.createHash("sha256")
|
|
239
|
+
.update(JSON.stringify(auditData))
|
|
240
|
+
.digest("hex");
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
exports.SecureYamlRuntime = SecureYamlRuntime;
|
|
244
|
+
exports.default = SecureYamlRuntime;
|
|
245
|
+
//# sourceMappingURL=secure-yaml-runtime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"secure-yaml-runtime.js","sourceRoot":"","sources":["../../src/integration/secure-yaml-runtime.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { YAMLParserConfig } from '../config';
|
|
2
|
+
/**
|
|
3
|
+
* Parser YAML seguro com FAILSAFE_SCHEMA e validações rigorosas
|
|
4
|
+
* Preloading de módulos críticos realizada no construtor
|
|
5
|
+
*/
|
|
6
|
+
export declare class SecureYamlParser {
|
|
7
|
+
private readonly config;
|
|
8
|
+
constructor(config?: YAMLParserConfig);
|
|
9
|
+
/**
|
|
10
|
+
* Valida e merge configuração com padrões seguros
|
|
11
|
+
*/
|
|
12
|
+
private validateAndMergeConfig;
|
|
13
|
+
/**
|
|
14
|
+
* Parse YAML com segurança máxima usando FAILSAFE_SCHEMA
|
|
15
|
+
*/
|
|
16
|
+
parseSecure(yamlContent: string): any;
|
|
17
|
+
/**
|
|
18
|
+
* Constrói opções de segurança para FAILSAFE_SCHEMA
|
|
19
|
+
*/
|
|
20
|
+
private buildSecureOptions;
|
|
21
|
+
/**
|
|
22
|
+
* Valida entrada antes do parsing
|
|
23
|
+
*/
|
|
24
|
+
private validateInput;
|
|
25
|
+
/**
|
|
26
|
+
* Valida resultado após parsing
|
|
27
|
+
*/
|
|
28
|
+
private validateResult;
|
|
29
|
+
/**
|
|
30
|
+
* Verifica se é UTF-8 válido
|
|
31
|
+
*/
|
|
32
|
+
private isValidUTF8;
|
|
33
|
+
/**
|
|
34
|
+
* Calcula profundidade do objeto
|
|
35
|
+
*/
|
|
36
|
+
private getObjectDepth;
|
|
37
|
+
/**
|
|
38
|
+
* Verifica se os tipos são permitidos
|
|
39
|
+
*/
|
|
40
|
+
private isAllowedType;
|
|
41
|
+
/**
|
|
42
|
+
* Estima tamanho do objeto em bytes
|
|
43
|
+
*/
|
|
44
|
+
private estimateObjectSize;
|
|
45
|
+
/**
|
|
46
|
+
* Obtém tipo completo do objeto
|
|
47
|
+
*/
|
|
48
|
+
private getType;
|
|
49
|
+
/**
|
|
50
|
+
* Parse assíncrono para lazy loading
|
|
51
|
+
*/
|
|
52
|
+
parseSecureAsync(yamlContent: string): Promise<any>;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Factory function para criar parser com configuração padrão segura
|
|
56
|
+
*/
|
|
57
|
+
export declare function createSecureYamlParser(config?: Partial<YAMLParserConfig>): SecureYamlParser;
|
|
58
|
+
/**
|
|
59
|
+
* Função utilitária para parse rápido com configuração padrão
|
|
60
|
+
*/
|
|
61
|
+
export declare function parseSecureYaml(yamlContent: string, config?: Partial<YAMLParserConfig>): any;
|
|
62
|
+
//# sourceMappingURL=secure-yaml-parser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"secure-yaml-parser.d.ts","sourceRoot":"","sources":["../../src/parser/secure-yaml-parser.ts"],"names":[],"mappings":"AACA,OAAO,EAAwB,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAGnE;;;GAGG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAmB;gBAE9B,MAAM,GAAE,gBAAqB;IAIzC;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAiC9B;;OAEG;IACH,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,GAAG;IAmCrC;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAkB1B;;OAEG;IACH,OAAO,CAAC,aAAa;IAsBrB;;OAEG;IACH,OAAO,CAAC,cAAc;IA6BtB;;OAEG;IACH,OAAO,CAAC,WAAW;IASnB;;OAEG;IACH,OAAO,CAAC,cAAc;IAetB;;OAEG;IACH,OAAO,CAAC,aAAa;IAkBrB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAI1B;;OAEG;IACH,OAAO,CAAC,OAAO;IAUf;;OAEG;IACG,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;CAgB1D;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAAG,gBAAgB,CAE3F;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAAG,GAAG,CAG5F"}
|
|
@@ -0,0 +1,234 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SecureYamlParser = void 0;
|
|
4
|
+
exports.createSecureYamlParser = createSecureYamlParser;
|
|
5
|
+
exports.parseSecureYaml = parseSecureYaml;
|
|
6
|
+
const js_yaml_1 = require("js-yaml");
|
|
7
|
+
const errors_1 = require("../errors");
|
|
8
|
+
/**
|
|
9
|
+
* Parser YAML seguro com FAILSAFE_SCHEMA e validações rigorosas
|
|
10
|
+
* Preloading de módulos críticos realizada no construtor
|
|
11
|
+
*/
|
|
12
|
+
class SecureYamlParser {
|
|
13
|
+
constructor(config = {}) {
|
|
14
|
+
this.config = this.validateAndMergeConfig(config);
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Valida e merge configuração com padrões seguros
|
|
18
|
+
*/
|
|
19
|
+
validateAndMergeConfig(userConfig) {
|
|
20
|
+
const defaultConfig = {
|
|
21
|
+
schema: 'FAILSAFE_SCHEMA',
|
|
22
|
+
allowedTypes: ['null', 'boolean', 'integer', 'float', 'string'],
|
|
23
|
+
performanceTarget: 100,
|
|
24
|
+
maxDepth: 1000,
|
|
25
|
+
maxKeys: 10000,
|
|
26
|
+
maxStringLength: 1024 * 1024, // 1MB
|
|
27
|
+
maxValueSize: 10 * 1024 * 1024, // 10MB total
|
|
28
|
+
lazyLoading: true,
|
|
29
|
+
enableCaching: true,
|
|
30
|
+
validateUTF8: true,
|
|
31
|
+
strictMode: true,
|
|
32
|
+
filename: 'secure-parser'
|
|
33
|
+
};
|
|
34
|
+
// Merge com configurações do usuário, validando tipos
|
|
35
|
+
const merged = { ...defaultConfig, ...userConfig };
|
|
36
|
+
// Validar tipos permitidos contra FAILSAFE_SCHEMA
|
|
37
|
+
const invalidTypes = merged.allowedTypes.filter((type) => !defaultConfig.allowedTypes.includes(type));
|
|
38
|
+
if (invalidTypes.length > 0) {
|
|
39
|
+
throw new errors_1.YAMLSecurityError(`Tipos não permitidos na FAILSAFE_SCHEMA: ${invalidTypes.join(', ')}`);
|
|
40
|
+
}
|
|
41
|
+
return merged;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Parse YAML com segurança máxima usando FAILSAFE_SCHEMA
|
|
45
|
+
*/
|
|
46
|
+
parseSecure(yamlContent) {
|
|
47
|
+
const startTime = performance.now();
|
|
48
|
+
try {
|
|
49
|
+
// Validar entrada
|
|
50
|
+
this.validateInput(yamlContent);
|
|
51
|
+
// Configurar opções de segurança para FAILSAFE_SCHEMA
|
|
52
|
+
const parseOptions = this.buildSecureOptions();
|
|
53
|
+
// Fazer parsing com FAILSAFE_SCHEMA
|
|
54
|
+
const result = (0, js_yaml_1.load)(yamlContent, parseOptions);
|
|
55
|
+
// Validar resultado
|
|
56
|
+
this.validateResult(result);
|
|
57
|
+
const endTime = performance.now();
|
|
58
|
+
const parseTime = endTime - startTime;
|
|
59
|
+
// Log performance se exceder target
|
|
60
|
+
const target = this.config.performanceTarget || 100;
|
|
61
|
+
if (parseTime > target) {
|
|
62
|
+
console.warn(`[SecureYamlParser] Performance warning: ${parseTime}ms > ${target}ms target`);
|
|
63
|
+
}
|
|
64
|
+
return result;
|
|
65
|
+
}
|
|
66
|
+
catch (error) {
|
|
67
|
+
if (error instanceof Error && error.name === 'YAMLException') {
|
|
68
|
+
throw new errors_1.YAMLParseError(`Erro ao fazer parse do YAML: ${error.message}`);
|
|
69
|
+
}
|
|
70
|
+
throw error;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Constrói opções de segurança para FAILSAFE_SCHEMA
|
|
75
|
+
*/
|
|
76
|
+
buildSecureOptions() {
|
|
77
|
+
return {
|
|
78
|
+
schema: js_yaml_1.FAILSAFE_SCHEMA,
|
|
79
|
+
json: false, // Desabilitar JSON mode para maior segurança
|
|
80
|
+
onWarning: (warning) => {
|
|
81
|
+
console.warn(`[SecureYamlParser] WARN: ${warning}`);
|
|
82
|
+
},
|
|
83
|
+
maxDepth: this.config.maxDepth,
|
|
84
|
+
maxKeys: this.config.maxKeys,
|
|
85
|
+
strict: this.config.strictMode,
|
|
86
|
+
// Security hardening
|
|
87
|
+
filename: this.config.filename || 'secure-parser',
|
|
88
|
+
onError: (error) => {
|
|
89
|
+
throw new errors_1.YAMLSecurityError(`Erro de segurança durante parsing: ${error.message}`);
|
|
90
|
+
}
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Valida entrada antes do parsing
|
|
95
|
+
*/
|
|
96
|
+
validateInput(input) {
|
|
97
|
+
if (typeof input !== 'string') {
|
|
98
|
+
throw new errors_1.YAMLParseError('Input deve ser uma string');
|
|
99
|
+
}
|
|
100
|
+
const maxStringLength = this.config.maxStringLength || 1048576; // Default 1MB
|
|
101
|
+
if (input.length > maxStringLength) {
|
|
102
|
+
throw new errors_1.YAMLSecurityError(`Tamanho do input (${input.length}) excede limite máximo (${maxStringLength})`);
|
|
103
|
+
}
|
|
104
|
+
if (input.trim().length === 0) {
|
|
105
|
+
throw new errors_1.YAMLParseError('Input vazio não é permitido');
|
|
106
|
+
}
|
|
107
|
+
// Validações UTF-8 básicas
|
|
108
|
+
if ((this.config.validateUTF8 ?? true) && !this.isValidUTF8(input)) {
|
|
109
|
+
throw new errors_1.YAMLSecurityError('Input contém caracteres UTF-8 inválidos');
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Valida resultado após parsing
|
|
114
|
+
*/
|
|
115
|
+
validateResult(result) {
|
|
116
|
+
// Validar profundidade máxima antes de serialização
|
|
117
|
+
const depth = this.getObjectDepth(result);
|
|
118
|
+
const maxDepth = this.config.maxDepth || 1000;
|
|
119
|
+
if (depth > maxDepth) {
|
|
120
|
+
throw new errors_1.YAMLSecurityError(`Profundidade do objeto (${depth}) excede limite máximo (${maxDepth})`);
|
|
121
|
+
}
|
|
122
|
+
// Validar tipos permitidos
|
|
123
|
+
if (!this.isAllowedType(result)) {
|
|
124
|
+
const allowedTypes = this.config.allowedTypes || ['null', 'boolean', 'integer', 'float', 'string'];
|
|
125
|
+
throw new errors_1.YAMLSecurityError('O resultado contém tipos não permitidos. Tipos permitidos: ' +
|
|
126
|
+
allowedTypes.join(', '));
|
|
127
|
+
}
|
|
128
|
+
// Validar tamanho total aproximado
|
|
129
|
+
const size = this.estimateObjectSize(result);
|
|
130
|
+
const maxValueSize = this.config.maxValueSize || 10485760; // Default 10MB
|
|
131
|
+
if (size > maxValueSize) {
|
|
132
|
+
throw new errors_1.YAMLSecurityError(`Tamanho do objeto (${size} bytes) excede limite máximo (${maxValueSize} bytes)`);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Verifica se é UTF-8 válido
|
|
137
|
+
*/
|
|
138
|
+
isValidUTF8(str) {
|
|
139
|
+
try {
|
|
140
|
+
encodeURIComponent(str);
|
|
141
|
+
return true;
|
|
142
|
+
}
|
|
143
|
+
catch {
|
|
144
|
+
return false;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Calcula profundidade do objeto
|
|
149
|
+
*/
|
|
150
|
+
getObjectDepth(obj, currentDepth = 0) {
|
|
151
|
+
if (obj === null || typeof obj !== 'object') {
|
|
152
|
+
return currentDepth;
|
|
153
|
+
}
|
|
154
|
+
if (Array.isArray(obj)) {
|
|
155
|
+
return obj.reduce((max, item) => Math.max(max, this.getObjectDepth(item, currentDepth + 1)), currentDepth + 1);
|
|
156
|
+
}
|
|
157
|
+
const values = Object.values(obj);
|
|
158
|
+
return values.reduce((max, value) => Math.max(max, this.getObjectDepth(value, currentDepth + 1)), currentDepth + 1);
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Verifica se os tipos são permitidos
|
|
162
|
+
*/
|
|
163
|
+
isAllowedType(obj) {
|
|
164
|
+
const type = this.getType(obj);
|
|
165
|
+
// Verificar tipos básicos permitidos
|
|
166
|
+
const allowedTypes = this.config.allowedTypes || ['null', 'boolean', 'integer', 'float', 'string'];
|
|
167
|
+
if (!allowedTypes.includes(type)) {
|
|
168
|
+
return false;
|
|
169
|
+
}
|
|
170
|
+
// Recursivamente verificar objetos e arrays
|
|
171
|
+
if (typeof obj === 'object' && obj !== null) {
|
|
172
|
+
const values = Array.isArray(obj) ? obj : Object.values(obj);
|
|
173
|
+
return values.every(value => this.isAllowedType(value));
|
|
174
|
+
}
|
|
175
|
+
return true;
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Estima tamanho do objeto em bytes
|
|
179
|
+
*/
|
|
180
|
+
estimateObjectSize(obj) {
|
|
181
|
+
return JSON.stringify(obj).length;
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Obtém tipo completo do objeto
|
|
185
|
+
*/
|
|
186
|
+
getType(obj) {
|
|
187
|
+
if (obj === null)
|
|
188
|
+
return 'null';
|
|
189
|
+
if (Array.isArray(obj))
|
|
190
|
+
return 'array';
|
|
191
|
+
if (typeof obj === 'object')
|
|
192
|
+
return 'object';
|
|
193
|
+
if (typeof obj === 'number') {
|
|
194
|
+
return Number.isInteger(obj) ? 'integer' : 'float';
|
|
195
|
+
}
|
|
196
|
+
return typeof obj;
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Parse assíncrono para lazy loading
|
|
200
|
+
*/
|
|
201
|
+
async parseSecureAsync(yamlContent) {
|
|
202
|
+
if (this.config.lazyLoading) {
|
|
203
|
+
// Lazy loading - criar Promise para carregar parser apenas quando necessário
|
|
204
|
+
return new Promise((resolve, reject) => {
|
|
205
|
+
setTimeout(() => {
|
|
206
|
+
try {
|
|
207
|
+
resolve(this.parseSecure(yamlContent));
|
|
208
|
+
}
|
|
209
|
+
catch (error) {
|
|
210
|
+
reject(error);
|
|
211
|
+
}
|
|
212
|
+
}, 0);
|
|
213
|
+
});
|
|
214
|
+
}
|
|
215
|
+
else {
|
|
216
|
+
return this.parseSecure(yamlContent);
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
exports.SecureYamlParser = SecureYamlParser;
|
|
221
|
+
/**
|
|
222
|
+
* Factory function para criar parser com configuração padrão segura
|
|
223
|
+
*/
|
|
224
|
+
function createSecureYamlParser(config) {
|
|
225
|
+
return new SecureYamlParser(config);
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* Função utilitária para parse rápido com configuração padrão
|
|
229
|
+
*/
|
|
230
|
+
function parseSecureYaml(yamlContent, config) {
|
|
231
|
+
const parser = createSecureYamlParser(config);
|
|
232
|
+
return parser.parseSecure(yamlContent);
|
|
233
|
+
}
|
|
234
|
+
//# sourceMappingURL=secure-yaml-parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"secure-yaml-parser.js","sourceRoot":"","sources":["../../src/parser/secure-yaml-parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { IsolatedRuntimeManager } from "../runtime/isolatedRuntime";
|
|
2
|
+
export interface AutoscaleConfig {
|
|
3
|
+
enabled: boolean;
|
|
4
|
+
minPoolSize: number;
|
|
5
|
+
maxPoolSize: number;
|
|
6
|
+
scaleUpThreshold: number;
|
|
7
|
+
scaleDownThreshold: number;
|
|
8
|
+
scaleInterval: number;
|
|
9
|
+
scaleUpFactor: number;
|
|
10
|
+
scaleDownFactor: number;
|
|
11
|
+
metricsWindow: number;
|
|
12
|
+
safetyMargin: number;
|
|
13
|
+
}
|
|
14
|
+
export interface AutoscaleDecision {
|
|
15
|
+
action: "scale_up" | "scale_down" | "maintain";
|
|
16
|
+
currentSize: number;
|
|
17
|
+
targetSize: number;
|
|
18
|
+
reason: string;
|
|
19
|
+
timestamp: Date;
|
|
20
|
+
metrics: {
|
|
21
|
+
avgExecutionTime: number;
|
|
22
|
+
avgMemoryUsage: number;
|
|
23
|
+
successRate: number;
|
|
24
|
+
poolUtilization: number;
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
export declare class AutoscaleSystem {
|
|
28
|
+
private runtimeManager;
|
|
29
|
+
private config;
|
|
30
|
+
private isRunning;
|
|
31
|
+
private currentDecision;
|
|
32
|
+
private scalingHistory;
|
|
33
|
+
private lastScaleTime;
|
|
34
|
+
private readonly defaultConfig;
|
|
35
|
+
constructor(runtimeManager: IsolatedRuntimeManager, config: AutoscaleConfig);
|
|
36
|
+
/**
|
|
37
|
+
* Start autoscaling monitoring
|
|
38
|
+
*/
|
|
39
|
+
start(): void;
|
|
40
|
+
/**
|
|
41
|
+
* Stop autoscaling monitoring
|
|
42
|
+
*/
|
|
43
|
+
stop(): void;
|
|
44
|
+
/**
|
|
45
|
+
* Main monitoring loop
|
|
46
|
+
*/
|
|
47
|
+
private monitoringLoop;
|
|
48
|
+
/**
|
|
49
|
+
* Evaluate scaling decision based on current metrics
|
|
50
|
+
*/
|
|
51
|
+
private evaluateScalingDecision;
|
|
52
|
+
/**
|
|
53
|
+
* Execute scaling decision
|
|
54
|
+
*/
|
|
55
|
+
private executeScalingDecision;
|
|
56
|
+
/**
|
|
57
|
+
* Scale up pool size
|
|
58
|
+
*/
|
|
59
|
+
private scaleUp;
|
|
60
|
+
/**
|
|
61
|
+
* Scale down pool size
|
|
62
|
+
*/
|
|
63
|
+
private scaleDown;
|
|
64
|
+
/**
|
|
65
|
+
* Get current autoscaling status
|
|
66
|
+
*/
|
|
67
|
+
getStatus(): {
|
|
68
|
+
isRunning: boolean;
|
|
69
|
+
currentDecision: AutoscaleDecision | null;
|
|
70
|
+
lastScaleTime: Date;
|
|
71
|
+
scalingHistory: AutoscaleDecision[];
|
|
72
|
+
config: AutoscaleConfig;
|
|
73
|
+
};
|
|
74
|
+
/**
|
|
75
|
+
* Update autoscaling configuration
|
|
76
|
+
*/
|
|
77
|
+
updateConfig(newConfig: Partial<AutoscaleConfig>): void;
|
|
78
|
+
/**
|
|
79
|
+
* Get scaling recommendations
|
|
80
|
+
*/
|
|
81
|
+
getRecommendations(): string[];
|
|
82
|
+
/**
|
|
83
|
+
* Get current performance stats for scaling decisions
|
|
84
|
+
*/
|
|
85
|
+
private getCurrentStats;
|
|
86
|
+
/**
|
|
87
|
+
* Predict optimal pool size based on current metrics
|
|
88
|
+
*/
|
|
89
|
+
predictOptimalPoolSize(): {
|
|
90
|
+
recommended: number;
|
|
91
|
+
current: number;
|
|
92
|
+
confidence: "high" | "medium" | "low";
|
|
93
|
+
factors: string[];
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
export declare let autoscaleSystem: AutoscaleSystem | null;
|
|
97
|
+
export declare function initializeAutoscaling(runtimeManager: IsolatedRuntimeManager, config?: Partial<AutoscaleConfig>): AutoscaleSystem;
|
|
98
|
+
export declare function getAutoscalingConfig(): AutoscaleConfig | null;
|
|
99
|
+
export default AutoscaleSystem;
|
|
100
|
+
//# sourceMappingURL=autoscaling.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"autoscaling.d.ts","sourceRoot":"","sources":["../../src/performance/autoscaling.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AAEpE,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,UAAU,GAAG,YAAY,GAAG,UAAU,CAAC;IAC/C,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,IAAI,CAAC;IAChB,OAAO,EAAE;QACP,gBAAgB,EAAE,MAAM,CAAC;QACzB,cAAc,EAAE,MAAM,CAAC;QACvB,WAAW,EAAE,MAAM,CAAC;QACpB,eAAe,EAAE,MAAM,CAAC;KACzB,CAAC;CACH;AAED,qBAAa,eAAe;IAoBxB,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,MAAM;IApBhB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,eAAe,CAAkC;IACzD,OAAO,CAAC,cAAc,CAA2B;IACjD,OAAO,CAAC,aAAa,CAAK;IAE1B,OAAO,CAAC,QAAQ,CAAC,aAAa,CAW5B;gBAGQ,cAAc,EAAE,sBAAsB,EACtC,MAAM,EAAE,eAAe;IAGjC;;OAEG;IACI,KAAK,IAAI,IAAI;IAUpB;;OAEG;IACI,IAAI,IAAI,IAAI;IAInB;;OAEG;IACH,OAAO,CAAC,cAAc;IAyBtB;;OAEG;YACW,uBAAuB;IAuHrC;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAkC9B;;OAEG;IACH,OAAO,CAAC,OAAO;IAuBf;;OAEG;IACH,OAAO,CAAC,SAAS;IAsBjB;;OAEG;IACI,SAAS,IAAI;QAClB,SAAS,EAAE,OAAO,CAAC;QACnB,eAAe,EAAE,iBAAiB,GAAG,IAAI,CAAC;QAC1C,aAAa,EAAE,IAAI,CAAC;QACpB,cAAc,EAAE,iBAAiB,EAAE,CAAC;QACpC,MAAM,EAAE,eAAe,CAAC;KACzB;IAUD;;OAEG;IACI,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,IAAI;IAK9D;;OAEG;IACI,kBAAkB,IAAI,MAAM,EAAE;IAqCrC;;OAEG;IACH,OAAO,CAAC,eAAe;IAavB;;OAEG;IACI,sBAAsB,IAAI;QAC/B,WAAW,EAAE,MAAM,CAAC;QACpB,OAAO,EAAE,MAAM,CAAC;QAChB,UAAU,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;QACtC,OAAO,EAAE,MAAM,EAAE,CAAC;KACnB;CAkDF;AAGD,eAAO,IAAI,eAAe,EAAE,eAAe,GAAG,IAAW,CAAC;AAE1D,wBAAgB,qBAAqB,CACnC,cAAc,EAAE,sBAAsB,EACtC,MAAM,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,GAChC,eAAe,CAsBjB;AAGD,wBAAgB,oBAAoB,IAAI,eAAe,GAAG,IAAI,CAE7D;AAED,eAAe,eAAe,CAAC"}
|