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,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"}