beddel 0.2.3 → 1.0.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 +138 -595
- package/dist/client.d.ts +10 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +9 -0
- package/dist/core/parser.d.ts +25 -0
- package/dist/core/parser.d.ts.map +1 -0
- package/dist/core/parser.js +31 -0
- package/dist/core/variable-resolver.d.ts +23 -0
- package/dist/core/variable-resolver.d.ts.map +1 -0
- package/dist/core/variable-resolver.js +98 -0
- package/dist/core/workflow.d.ts +39 -0
- package/dist/core/workflow.d.ts.map +1 -0
- package/dist/core/workflow.js +64 -0
- package/dist/index.d.ts +14 -36
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +15 -130
- package/dist/primitives/index.d.ts +37 -0
- package/dist/primitives/index.d.ts.map +1 -0
- package/dist/primitives/index.js +72 -0
- package/dist/primitives/llm.d.ts +56 -0
- package/dist/primitives/llm.d.ts.map +1 -0
- package/dist/primitives/llm.js +156 -0
- package/dist/primitives/output.d.ts +28 -0
- package/dist/primitives/output.d.ts.map +1 -0
- package/dist/primitives/output.js +39 -0
- package/dist/server/handler.d.ts +7 -0
- package/dist/server/handler.d.ts.map +1 -0
- package/dist/server/handler.js +55 -0
- package/dist/server.d.ts +10 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +9 -0
- package/dist/tools/index.d.ts +49 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +96 -0
- package/dist/types/index.d.ts +54 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +5 -0
- package/docs/architecture/api-reference.md +307 -0
- package/docs/architecture/components.md +246 -0
- package/docs/architecture/core-workflows.md +236 -0
- package/docs/architecture/high-level-architecture.md +76 -0
- package/docs/architecture/index.md +31 -0
- package/docs/architecture/source-tree.md +92 -0
- package/docs/architecture/tech-stack.md +25 -0
- package/docs/prd/epic-list.md +101 -0
- package/docs/prd/goals-context.md +23 -0
- package/docs/prd/index.md +21 -0
- package/docs/prd/requirements.md +25 -0
- package/docs/prd/technical-assumptions.md +35 -0
- package/package.json +31 -118
- package/src/client.ts +18 -0
- package/src/core/parser.ts +36 -0
- package/src/core/variable-resolver.ts +114 -0
- package/src/core/workflow.ts +77 -0
- package/src/index.ts +25 -159
- package/src/primitives/index.ts +83 -0
- package/src/primitives/llm.ts +210 -0
- package/src/primitives/output.ts +65 -0
- package/src/server/handler.ts +80 -0
- package/src/server.ts +10 -0
- package/src/tools/index.ts +118 -0
- package/src/types/index.ts +62 -0
- package/tsconfig.json +27 -0
- package/CHANGELOG.md +0 -78
- package/LICENSE +0 -21
- package/dist/agents/chat/chat.handler.d.ts +0 -12
- package/dist/agents/chat/chat.handler.d.ts.map +0 -1
- package/dist/agents/chat/chat.handler.js +0 -143
- package/dist/agents/chat/chat.handler.js.map +0 -1
- package/dist/agents/chat/chat.schema.d.ts +0 -38
- package/dist/agents/chat/chat.schema.d.ts.map +0 -1
- package/dist/agents/chat/chat.schema.js +0 -31
- package/dist/agents/chat/chat.schema.js.map +0 -1
- package/dist/agents/chat/chat.types.d.ts +0 -42
- package/dist/agents/chat/chat.types.d.ts.map +0 -1
- package/dist/agents/chat/chat.types.js +0 -6
- package/dist/agents/chat/chat.types.js.map +0 -1
- package/dist/agents/chat/chat.yaml +0 -150
- package/dist/agents/chat/index.d.ts +0 -16
- package/dist/agents/chat/index.d.ts.map +0 -1
- package/dist/agents/chat/index.js +0 -21
- package/dist/agents/chat/index.js.map +0 -1
- package/dist/agents/chromadb/chromadb.handler.d.ts +0 -12
- package/dist/agents/chromadb/chromadb.handler.d.ts.map +0 -1
- package/dist/agents/chromadb/chromadb.handler.js +0 -139
- package/dist/agents/chromadb/chromadb.handler.js.map +0 -1
- package/dist/agents/chromadb/chromadb.schema.d.ts +0 -36
- package/dist/agents/chromadb/chromadb.schema.d.ts.map +0 -1
- package/dist/agents/chromadb/chromadb.schema.js +0 -33
- package/dist/agents/chromadb/chromadb.schema.js.map +0 -1
- package/dist/agents/chromadb/chromadb.types.d.ts +0 -49
- package/dist/agents/chromadb/chromadb.types.d.ts.map +0 -1
- package/dist/agents/chromadb/chromadb.types.js +0 -6
- package/dist/agents/chromadb/chromadb.types.js.map +0 -1
- package/dist/agents/chromadb/chromadb.yaml +0 -128
- package/dist/agents/chromadb/index.d.ts +0 -15
- package/dist/agents/chromadb/index.d.ts.map +0 -1
- package/dist/agents/chromadb/index.js +0 -20
- package/dist/agents/chromadb/index.js.map +0 -1
- package/dist/agents/gemini-vectorize/gemini-vectorize.handler.d.ts +0 -8
- package/dist/agents/gemini-vectorize/gemini-vectorize.handler.d.ts.map +0 -1
- package/dist/agents/gemini-vectorize/gemini-vectorize.handler.js +0 -58
- package/dist/agents/gemini-vectorize/gemini-vectorize.handler.js.map +0 -1
- package/dist/agents/gemini-vectorize/gemini-vectorize.schema.d.ts +0 -22
- package/dist/agents/gemini-vectorize/gemini-vectorize.schema.d.ts.map +0 -1
- package/dist/agents/gemini-vectorize/gemini-vectorize.schema.js +0 -20
- package/dist/agents/gemini-vectorize/gemini-vectorize.schema.js.map +0 -1
- package/dist/agents/gemini-vectorize/gemini-vectorize.types.d.ts +0 -32
- package/dist/agents/gemini-vectorize/gemini-vectorize.types.d.ts.map +0 -1
- package/dist/agents/gemini-vectorize/gemini-vectorize.types.js +0 -6
- package/dist/agents/gemini-vectorize/gemini-vectorize.types.js.map +0 -1
- package/dist/agents/gemini-vectorize/gemini-vectorize.yaml +0 -84
- package/dist/agents/gemini-vectorize/index.d.ts +0 -15
- package/dist/agents/gemini-vectorize/index.d.ts.map +0 -1
- package/dist/agents/gemini-vectorize/index.js +0 -20
- package/dist/agents/gemini-vectorize/index.js.map +0 -1
- package/dist/agents/gitmcp/gitmcp.handler.d.ts +0 -12
- package/dist/agents/gitmcp/gitmcp.handler.d.ts.map +0 -1
- package/dist/agents/gitmcp/gitmcp.handler.js +0 -95
- package/dist/agents/gitmcp/gitmcp.handler.js.map +0 -1
- package/dist/agents/gitmcp/gitmcp.schema.d.ts +0 -17
- package/dist/agents/gitmcp/gitmcp.schema.d.ts.map +0 -1
- package/dist/agents/gitmcp/gitmcp.schema.js +0 -18
- package/dist/agents/gitmcp/gitmcp.schema.js.map +0 -1
- package/dist/agents/gitmcp/gitmcp.types.d.ts +0 -31
- package/dist/agents/gitmcp/gitmcp.types.d.ts.map +0 -1
- package/dist/agents/gitmcp/gitmcp.types.js +0 -6
- package/dist/agents/gitmcp/gitmcp.types.js.map +0 -1
- package/dist/agents/gitmcp/gitmcp.yaml +0 -71
- package/dist/agents/gitmcp/index.d.ts +0 -16
- package/dist/agents/gitmcp/index.d.ts.map +0 -1
- package/dist/agents/gitmcp/index.js +0 -21
- package/dist/agents/gitmcp/index.js.map +0 -1
- package/dist/agents/image/image.handler.d.ts +0 -8
- package/dist/agents/image/image.handler.d.ts.map +0 -1
- package/dist/agents/image/image.handler.js +0 -66
- package/dist/agents/image/image.handler.js.map +0 -1
- package/dist/agents/image/image.schema.d.ts +0 -29
- package/dist/agents/image/image.schema.d.ts.map +0 -1
- package/dist/agents/image/image.schema.js +0 -26
- package/dist/agents/image/image.schema.js.map +0 -1
- package/dist/agents/image/image.types.d.ts +0 -42
- package/dist/agents/image/image.types.d.ts.map +0 -1
- package/dist/agents/image/image.types.js +0 -6
- package/dist/agents/image/image.types.js.map +0 -1
- package/dist/agents/image/image.yaml +0 -86
- package/dist/agents/image/index.d.ts +0 -14
- package/dist/agents/image/index.d.ts.map +0 -1
- package/dist/agents/image/index.js +0 -19
- package/dist/agents/image/index.js.map +0 -1
- package/dist/agents/index.d.ts +0 -95
- package/dist/agents/index.d.ts.map +0 -1
- package/dist/agents/index.js +0 -76
- package/dist/agents/index.js.map +0 -1
- package/dist/agents/joker/index.d.ts +0 -14
- package/dist/agents/joker/index.d.ts.map +0 -1
- package/dist/agents/joker/index.js +0 -19
- package/dist/agents/joker/index.js.map +0 -1
- package/dist/agents/joker/joker.handler.d.ts +0 -8
- package/dist/agents/joker/joker.handler.d.ts.map +0 -1
- package/dist/agents/joker/joker.handler.js +0 -48
- package/dist/agents/joker/joker.handler.js.map +0 -1
- package/dist/agents/joker/joker.schema.d.ts +0 -12
- package/dist/agents/joker/joker.schema.d.ts.map +0 -1
- package/dist/agents/joker/joker.schema.js +0 -13
- package/dist/agents/joker/joker.schema.js.map +0 -1
- package/dist/agents/joker/joker.types.d.ts +0 -35
- package/dist/agents/joker/joker.types.d.ts.map +0 -1
- package/dist/agents/joker/joker.types.js +0 -6
- package/dist/agents/joker/joker.types.js.map +0 -1
- package/dist/agents/joker/joker.yaml +0 -47
- package/dist/agents/mcp-tool/index.d.ts +0 -14
- package/dist/agents/mcp-tool/index.d.ts.map +0 -1
- package/dist/agents/mcp-tool/index.js +0 -19
- package/dist/agents/mcp-tool/index.js.map +0 -1
- package/dist/agents/mcp-tool/mcp-tool.handler.d.ts +0 -12
- package/dist/agents/mcp-tool/mcp-tool.handler.d.ts.map +0 -1
- package/dist/agents/mcp-tool/mcp-tool.handler.js +0 -116
- package/dist/agents/mcp-tool/mcp-tool.handler.js.map +0 -1
- package/dist/agents/mcp-tool/mcp-tool.schema.d.ts +0 -19
- package/dist/agents/mcp-tool/mcp-tool.schema.d.ts.map +0 -1
- package/dist/agents/mcp-tool/mcp-tool.schema.js +0 -20
- package/dist/agents/mcp-tool/mcp-tool.schema.js.map +0 -1
- package/dist/agents/mcp-tool/mcp-tool.types.d.ts +0 -31
- package/dist/agents/mcp-tool/mcp-tool.types.d.ts.map +0 -1
- package/dist/agents/mcp-tool/mcp-tool.types.js +0 -6
- package/dist/agents/mcp-tool/mcp-tool.types.js.map +0 -1
- package/dist/agents/mcp-tool/mcp-tool.yaml +0 -71
- package/dist/agents/rag/index.d.ts +0 -15
- package/dist/agents/rag/index.d.ts.map +0 -1
- package/dist/agents/rag/index.js +0 -20
- package/dist/agents/rag/index.js.map +0 -1
- package/dist/agents/rag/rag.handler.d.ts +0 -8
- package/dist/agents/rag/rag.handler.d.ts.map +0 -1
- package/dist/agents/rag/rag.handler.js +0 -101
- package/dist/agents/rag/rag.handler.js.map +0 -1
- package/dist/agents/rag/rag.schema.d.ts +0 -27
- package/dist/agents/rag/rag.schema.d.ts.map +0 -1
- package/dist/agents/rag/rag.schema.js +0 -24
- package/dist/agents/rag/rag.schema.js.map +0 -1
- package/dist/agents/rag/rag.types.d.ts +0 -47
- package/dist/agents/rag/rag.types.d.ts.map +0 -1
- package/dist/agents/rag/rag.types.js +0 -6
- package/dist/agents/rag/rag.types.js.map +0 -1
- package/dist/agents/rag/rag.yaml +0 -89
- package/dist/agents/registry/agentRegistry.d.ts +0 -117
- package/dist/agents/registry/agentRegistry.d.ts.map +0 -1
- package/dist/agents/registry/agentRegistry.js +0 -551
- package/dist/agents/registry/agentRegistry.js.map +0 -1
- package/dist/agents/registry/index.d.ts +0 -6
- package/dist/agents/registry/index.d.ts.map +0 -1
- package/dist/agents/registry/index.js +0 -10
- package/dist/agents/registry/index.js.map +0 -1
- package/dist/agents/translator/index.d.ts +0 -14
- package/dist/agents/translator/index.d.ts.map +0 -1
- package/dist/agents/translator/index.js +0 -19
- package/dist/agents/translator/index.js.map +0 -1
- package/dist/agents/translator/translator.handler.d.ts +0 -8
- package/dist/agents/translator/translator.handler.d.ts.map +0 -1
- package/dist/agents/translator/translator.handler.js +0 -83
- package/dist/agents/translator/translator.handler.js.map +0 -1
- package/dist/agents/translator/translator.schema.d.ts +0 -27
- package/dist/agents/translator/translator.schema.d.ts.map +0 -1
- package/dist/agents/translator/translator.schema.js +0 -28
- package/dist/agents/translator/translator.schema.js.map +0 -1
- package/dist/agents/translator/translator.types.d.ts +0 -40
- package/dist/agents/translator/translator.types.d.ts.map +0 -1
- package/dist/agents/translator/translator.types.js +0 -6
- package/dist/agents/translator/translator.types.js.map +0 -1
- package/dist/agents/translator/translator.yaml +0 -80
- package/dist/audit/auditTrail.d.ts +0 -55
- package/dist/audit/auditTrail.d.ts.map +0 -1
- package/dist/audit/auditTrail.js +0 -93
- package/dist/audit/auditTrail.js.map +0 -1
- package/dist/client/index.d.ts +0 -89
- package/dist/client/index.d.ts.map +0 -1
- package/dist/client/index.js +0 -93
- package/dist/client/index.js.map +0 -1
- package/dist/client/types.d.ts +0 -17
- package/dist/client/types.d.ts.map +0 -1
- package/dist/client/types.js +0 -7
- package/dist/client/types.js.map +0 -1
- package/dist/compliance/gdprEngine.d.ts +0 -44
- package/dist/compliance/gdprEngine.d.ts.map +0 -1
- package/dist/compliance/gdprEngine.js +0 -178
- package/dist/compliance/gdprEngine.js.map +0 -1
- package/dist/compliance/lgpdEngine.d.ts +0 -51
- package/dist/compliance/lgpdEngine.d.ts.map +0 -1
- package/dist/compliance/lgpdEngine.js +0 -221
- package/dist/compliance/lgpdEngine.js.map +0 -1
- package/dist/config.d.ts +0 -78
- package/dist/config.d.ts.map +0 -1
- package/dist/config.js +0 -77
- package/dist/config.js.map +0 -1
- package/dist/errors.d.ts +0 -17
- package/dist/errors.d.ts.map +0 -1
- package/dist/errors.js +0 -40
- package/dist/errors.js.map +0 -1
- package/dist/firebase/tenantManager.d.ts +0 -116
- package/dist/firebase/tenantManager.d.ts.map +0 -1
- package/dist/firebase/tenantManager.js +0 -444
- package/dist/firebase/tenantManager.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/integration/secure-yaml-runtime.d.ts +0 -68
- package/dist/integration/secure-yaml-runtime.d.ts.map +0 -1
- package/dist/integration/secure-yaml-runtime.js +0 -245
- package/dist/integration/secure-yaml-runtime.js.map +0 -1
- package/dist/parser/secure-yaml-parser.d.ts +0 -62
- package/dist/parser/secure-yaml-parser.d.ts.map +0 -1
- package/dist/parser/secure-yaml-parser.js +0 -234
- package/dist/parser/secure-yaml-parser.js.map +0 -1
- package/dist/performance/autoscaling.d.ts +0 -100
- package/dist/performance/autoscaling.d.ts.map +0 -1
- package/dist/performance/autoscaling.js +0 -339
- package/dist/performance/autoscaling.js.map +0 -1
- package/dist/performance/benchmark.d.ts +0 -104
- package/dist/performance/benchmark.d.ts.map +0 -1
- package/dist/performance/benchmark.js +0 -514
- package/dist/performance/benchmark.js.map +0 -1
- package/dist/performance/index.d.ts +0 -14
- package/dist/performance/index.d.ts.map +0 -1
- package/dist/performance/index.js +0 -35
- package/dist/performance/index.js.map +0 -1
- package/dist/performance/monitor.d.ts +0 -126
- package/dist/performance/monitor.d.ts.map +0 -1
- package/dist/performance/monitor.js +0 -324
- package/dist/performance/monitor.js.map +0 -1
- package/dist/performance/streaming.d.ts +0 -82
- package/dist/performance/streaming.d.ts.map +0 -1
- package/dist/performance/streaming.js +0 -287
- package/dist/performance/streaming.js.map +0 -1
- package/dist/runtime/audit.d.ts +0 -240
- package/dist/runtime/audit.d.ts.map +0 -1
- package/dist/runtime/audit.js +0 -641
- package/dist/runtime/audit.js.map +0 -1
- package/dist/runtime/declarativeAgentRuntime.d.ts +0 -92
- package/dist/runtime/declarativeAgentRuntime.d.ts.map +0 -1
- package/dist/runtime/declarativeAgentRuntime.js +0 -512
- package/dist/runtime/declarativeAgentRuntime.js.map +0 -1
- package/dist/runtime/index.d.ts +0 -12
- package/dist/runtime/index.d.ts.map +0 -1
- package/dist/runtime/index.js +0 -33
- package/dist/runtime/index.js.map +0 -1
- package/dist/runtime/isolatedRuntime.d.ts +0 -119
- package/dist/runtime/isolatedRuntime.d.ts.map +0 -1
- package/dist/runtime/isolatedRuntime.js +0 -425
- package/dist/runtime/isolatedRuntime.js.map +0 -1
- package/dist/runtime/schemaCompiler.d.ts +0 -35
- package/dist/runtime/schemaCompiler.d.ts.map +0 -1
- package/dist/runtime/schemaCompiler.js +0 -152
- package/dist/runtime/schemaCompiler.js.map +0 -1
- package/dist/runtime/simpleRuntime.d.ts +0 -57
- package/dist/runtime/simpleRuntime.d.ts.map +0 -1
- package/dist/runtime/simpleRuntime.js +0 -187
- package/dist/runtime/simpleRuntime.js.map +0 -1
- package/dist/runtime/workflowExecutor.d.ts +0 -30
- package/dist/runtime/workflowExecutor.d.ts.map +0 -1
- package/dist/runtime/workflowExecutor.js +0 -70
- package/dist/runtime/workflowExecutor.js.map +0 -1
- package/dist/security/dashboard.d.ts +0 -89
- package/dist/security/dashboard.d.ts.map +0 -1
- package/dist/security/dashboard.js +0 -300
- package/dist/security/dashboard.js.map +0 -1
- package/dist/security/hardening.d.ts +0 -130
- package/dist/security/hardening.d.ts.map +0 -1
- package/dist/security/hardening.js +0 -414
- package/dist/security/hardening.js.map +0 -1
- package/dist/security/index.d.ts +0 -128
- package/dist/security/index.d.ts.map +0 -1
- package/dist/security/index.js +0 -353
- package/dist/security/index.js.map +0 -1
- package/dist/security/monitor.d.ts +0 -88
- package/dist/security/monitor.d.ts.map +0 -1
- package/dist/security/monitor.js +0 -356
- package/dist/security/monitor.js.map +0 -1
- package/dist/security/scanner.d.ts +0 -104
- package/dist/security/scanner.d.ts.map +0 -1
- package/dist/security/scanner.js +0 -298
- package/dist/security/scanner.js.map +0 -1
- package/dist/security/score.d.ts +0 -150
- package/dist/security/score.d.ts.map +0 -1
- package/dist/security/score.js +0 -983
- package/dist/security/score.js.map +0 -1
- package/dist/security/threatDetector.d.ts +0 -39
- package/dist/security/threatDetector.d.ts.map +0 -1
- package/dist/security/threatDetector.js +0 -354
- package/dist/security/threatDetector.js.map +0 -1
- package/dist/security/validation.d.ts +0 -69
- package/dist/security/validation.d.ts.map +0 -1
- package/dist/security/validation.js +0 -286
- package/dist/security/validation.js.map +0 -1
- package/dist/server/api/clientsRoute.d.ts +0 -9
- package/dist/server/api/clientsRoute.d.ts.map +0 -1
- package/dist/server/api/clientsRoute.js +0 -71
- package/dist/server/api/clientsRoute.js.map +0 -1
- package/dist/server/api/endpointsRoute.d.ts +0 -8
- package/dist/server/api/endpointsRoute.d.ts.map +0 -1
- package/dist/server/api/endpointsRoute.js +0 -76
- package/dist/server/api/endpointsRoute.js.map +0 -1
- package/dist/server/api/graphql.d.ts +0 -9
- package/dist/server/api/graphql.d.ts.map +0 -1
- package/dist/server/api/graphql.js +0 -222
- package/dist/server/api/graphql.js.map +0 -1
- package/dist/server/errors.d.ts +0 -19
- package/dist/server/errors.d.ts.map +0 -1
- package/dist/server/errors.js +0 -42
- package/dist/server/errors.js.map +0 -1
- package/dist/server/index.d.ts +0 -7
- package/dist/server/index.d.ts.map +0 -1
- package/dist/server/index.js +0 -24
- package/dist/server/index.js.map +0 -1
- package/dist/server/kvStore.d.ts +0 -27
- package/dist/server/kvStore.d.ts.map +0 -1
- package/dist/server/kvStore.js +0 -128
- package/dist/server/kvStore.js.map +0 -1
- package/dist/server/runtimeSecurity.d.ts +0 -28
- package/dist/server/runtimeSecurity.d.ts.map +0 -1
- package/dist/server/runtimeSecurity.js +0 -85
- package/dist/server/runtimeSecurity.js.map +0 -1
- package/dist/server/types.d.ts +0 -53
- package/dist/server/types.d.ts.map +0 -1
- package/dist/server/types.js +0 -8
- package/dist/server/types.js.map +0 -1
- package/dist/shared/index.d.ts +0 -7
- package/dist/shared/index.d.ts.map +0 -1
- package/dist/shared/index.js +0 -23
- package/dist/shared/index.js.map +0 -1
- package/dist/shared/types/agent.types.d.ts +0 -50
- package/dist/shared/types/agent.types.d.ts.map +0 -1
- package/dist/shared/types/agent.types.js +0 -7
- package/dist/shared/types/agent.types.js.map +0 -1
- package/dist/shared/types/execution.types.d.ts +0 -42
- package/dist/shared/types/execution.types.d.ts.map +0 -1
- package/dist/shared/types/execution.types.js +0 -7
- package/dist/shared/types/execution.types.js.map +0 -1
- package/dist/shared/types/index.d.ts +0 -7
- package/dist/shared/types/index.d.ts.map +0 -1
- package/dist/shared/types/index.js +0 -23
- package/dist/shared/types/index.js.map +0 -1
- package/dist/shared/types/schema.types.d.ts +0 -52
- package/dist/shared/types/schema.types.d.ts.map +0 -1
- package/dist/shared/types/schema.types.js +0 -7
- package/dist/shared/types/schema.types.js.map +0 -1
- package/dist/shared/utils/index.d.ts +0 -5
- package/dist/shared/utils/index.d.ts.map +0 -1
- package/dist/shared/utils/index.js +0 -21
- package/dist/shared/utils/index.js.map +0 -1
- package/dist/shared/utils/validation.d.ts +0 -42
- package/dist/shared/utils/validation.d.ts.map +0 -1
- package/dist/shared/utils/validation.js +0 -93
- package/dist/shared/utils/validation.js.map +0 -1
- package/dist/tenant/TenantManager.d.ts +0 -152
- package/dist/tenant/TenantManager.d.ts.map +0 -1
- package/dist/tenant/TenantManager.js +0 -392
- package/dist/tenant/TenantManager.js.map +0 -1
- package/dist/tenant/index.d.ts +0 -47
- package/dist/tenant/index.d.ts.map +0 -1
- package/dist/tenant/index.js +0 -74
- package/dist/tenant/index.js.map +0 -1
- package/dist/tenant/interfaces.d.ts +0 -170
- package/dist/tenant/interfaces.d.ts.map +0 -1
- package/dist/tenant/interfaces.js +0 -67
- package/dist/tenant/interfaces.js.map +0 -1
- package/dist/tenant/providerFactory.d.ts +0 -43
- package/dist/tenant/providerFactory.d.ts.map +0 -1
- package/dist/tenant/providerFactory.js +0 -70
- package/dist/tenant/providerFactory.js.map +0 -1
- package/dist/tenant/providerRegistry.d.ts +0 -47
- package/dist/tenant/providerRegistry.d.ts.map +0 -1
- package/dist/tenant/providerRegistry.js +0 -79
- package/dist/tenant/providerRegistry.js.map +0 -1
- package/dist/tenant/providers/FirebaseTenantProvider.d.ts +0 -41
- package/dist/tenant/providers/FirebaseTenantProvider.d.ts.map +0 -1
- package/dist/tenant/providers/FirebaseTenantProvider.js +0 -290
- package/dist/tenant/providers/FirebaseTenantProvider.js.map +0 -1
- package/dist/tenant/providers/InMemoryTenantProvider.d.ts +0 -18
- package/dist/tenant/providers/InMemoryTenantProvider.d.ts.map +0 -1
- package/dist/tenant/providers/InMemoryTenantProvider.js +0 -137
- package/dist/tenant/providers/InMemoryTenantProvider.js.map +0 -1
- package/dist/types/executionContext.d.ts +0 -16
- package/dist/types/executionContext.d.ts.map +0 -1
- package/dist/types/executionContext.js +0 -3
- package/dist/types/executionContext.js.map +0 -1
- package/src/agents/chat/chat.handler.ts +0 -209
- package/src/agents/chat/chat.schema.ts +0 -33
- package/src/agents/chat/chat.types.ts +0 -46
- package/src/agents/chat/chat.yaml +0 -150
- package/src/agents/chat/index.ts +0 -21
- package/src/agents/chromadb/chromadb.handler.ts +0 -130
- package/src/agents/chromadb/chromadb.schema.ts +0 -35
- package/src/agents/chromadb/chromadb.types.ts +0 -52
- package/src/agents/chromadb/chromadb.yaml +0 -128
- package/src/agents/chromadb/index.ts +0 -20
- package/src/agents/gemini-vectorize/gemini-vectorize.handler.ts +0 -72
- package/src/agents/gemini-vectorize/gemini-vectorize.schema.ts +0 -22
- package/src/agents/gemini-vectorize/gemini-vectorize.types.ts +0 -34
- package/src/agents/gemini-vectorize/gemini-vectorize.yaml +0 -84
- package/src/agents/gemini-vectorize/index.ts +0 -20
- package/src/agents/gitmcp/gitmcp.handler.ts +0 -122
- package/src/agents/gitmcp/gitmcp.schema.ts +0 -20
- package/src/agents/gitmcp/gitmcp.types.ts +0 -33
- package/src/agents/gitmcp/gitmcp.yaml +0 -71
- package/src/agents/gitmcp/index.ts +0 -21
- package/src/agents/image/image.handler.ts +0 -82
- package/src/agents/image/image.schema.ts +0 -28
- package/src/agents/image/image.types.ts +0 -45
- package/src/agents/image/image.yaml +0 -86
- package/src/agents/image/index.ts +0 -19
- package/src/agents/index.ts +0 -59
- package/src/agents/joker/index.ts +0 -19
- package/src/agents/joker/joker.handler.ts +0 -60
- package/src/agents/joker/joker.schema.ts +0 -15
- package/src/agents/joker/joker.types.ts +0 -37
- package/src/agents/joker/joker.yaml +0 -47
- package/src/agents/mcp-tool/index.ts +0 -19
- package/src/agents/mcp-tool/mcp-tool.handler.ts +0 -112
- package/src/agents/mcp-tool/mcp-tool.schema.ts +0 -22
- package/src/agents/mcp-tool/mcp-tool.types.ts +0 -33
- package/src/agents/mcp-tool/mcp-tool.yaml +0 -71
- package/src/agents/rag/index.ts +0 -20
- package/src/agents/rag/rag.handler.ts +0 -119
- package/src/agents/rag/rag.schema.ts +0 -26
- package/src/agents/rag/rag.types.ts +0 -51
- package/src/agents/rag/rag.yaml +0 -89
- package/src/agents/registry/agentRegistry.ts +0 -598
- package/src/agents/registry/index.ts +0 -6
- package/src/agents/translator/index.ts +0 -19
- package/src/agents/translator/translator.handler.ts +0 -99
- package/src/agents/translator/translator.schema.ts +0 -30
- package/src/agents/translator/translator.types.ts +0 -42
- package/src/agents/translator/translator.yaml +0 -80
- package/src/audit/auditTrail.ts +0 -134
- package/src/client/index.ts +0 -53
- package/src/client/types.ts +0 -38
- package/src/compliance/gdprEngine.ts +0 -209
- package/src/compliance/lgpdEngine.ts +0 -268
- package/src/config.ts +0 -179
- package/src/errors.ts +0 -35
- package/src/integration/secure-yaml-runtime.ts +0 -341
- package/src/parser/secure-yaml-parser.ts +0 -273
- package/src/performance/autoscaling.ts +0 -495
- package/src/performance/benchmark.ts +0 -644
- package/src/performance/index.ts +0 -34
- package/src/performance/monitor.ts +0 -469
- package/src/performance/streaming.ts +0 -317
- package/src/runtime/audit.ts +0 -907
- package/src/runtime/declarativeAgentRuntime.ts +0 -772
- package/src/runtime/index.ts +0 -31
- package/src/runtime/isolatedRuntime.ts +0 -572
- package/src/runtime/schemaCompiler.ts +0 -228
- package/src/runtime/simpleRuntime.ts +0 -201
- package/src/runtime/workflowExecutor.ts +0 -94
- package/src/security/dashboard.ts +0 -462
- package/src/security/hardening.ts +0 -560
- package/src/security/index.ts +0 -439
- package/src/security/monitor.ts +0 -490
- package/src/security/scanner.ts +0 -368
- package/src/security/score.ts +0 -1138
- package/src/security/threatDetector.ts +0 -481
- package/src/security/validation.ts +0 -365
- package/src/server/api/clientsRoute.ts +0 -92
- package/src/server/api/endpointsRoute.ts +0 -97
- package/src/server/api/graphql.ts +0 -284
- package/src/server/errors.ts +0 -38
- package/src/server/index.ts +0 -6
- package/src/server/kvStore.ts +0 -152
- package/src/server/runtimeSecurity.ts +0 -102
- package/src/server/types.ts +0 -60
- package/src/shared/index.ts +0 -7
- package/src/shared/types/agent.types.ts +0 -80
- package/src/shared/types/execution.types.ts +0 -45
- package/src/shared/types/index.ts +0 -7
- package/src/shared/types/schema.types.ts +0 -55
- package/src/shared/utils/index.ts +0 -5
- package/src/shared/utils/validation.ts +0 -100
- package/src/tenant/TenantManager.ts +0 -488
- package/src/tenant/index.ts +0 -101
- package/src/tenant/interfaces.ts +0 -231
- package/src/tenant/providerFactory.ts +0 -75
- package/src/tenant/providerRegistry.ts +0 -86
- package/src/tenant/providers/InMemoryTenantProvider.ts +0 -168
- package/src/types/executionContext.ts +0 -16
|
@@ -1,341 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Secure YAML Runtime Integration
|
|
3
|
-
* Integrates SecureYamlParser with IsolatedRuntimeManager for ultra-secure YAML processing
|
|
4
|
-
*/
|
|
5
|
-
import { SecureYamlParser } from "../parser/secure-yaml-parser";
|
|
6
|
-
import { IsolatedRuntimeManager } from "../runtime/isolatedRuntime";
|
|
7
|
-
import { SecurityScanner } from "../security/scanner";
|
|
8
|
-
import { performanceTargets, securityProfiles } from "../config";
|
|
9
|
-
|
|
10
|
-
export interface RuntimeYAMLConfig {
|
|
11
|
-
securityProfile?: string;
|
|
12
|
-
tenantId?: string;
|
|
13
|
-
timeout?: number;
|
|
14
|
-
memoryLimit?: number;
|
|
15
|
-
validateSecurity?: boolean;
|
|
16
|
-
auditEnabled?: boolean;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
export interface RuntimeYAMLResult {
|
|
20
|
-
success: boolean;
|
|
21
|
-
result?: any;
|
|
22
|
-
error?: Error;
|
|
23
|
-
executionTime: number;
|
|
24
|
-
memoryUsed: number;
|
|
25
|
-
securityScore?: number;
|
|
26
|
-
auditHash?: string;
|
|
27
|
-
tenantId?: string;
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
export class SecureYamlRuntime {
|
|
31
|
-
private readonly runtimeManager: IsolatedRuntimeManager;
|
|
32
|
-
private readonly securityScanner: SecurityScanner;
|
|
33
|
-
|
|
34
|
-
constructor(private runtimeManagerInstance: IsolatedRuntimeManager) {
|
|
35
|
-
this.runtimeManager = runtimeManagerInstance;
|
|
36
|
-
this.securityScanner = new SecurityScanner();
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
/**
|
|
40
|
-
* Parse YAML in isolated runtime environment
|
|
41
|
-
*/
|
|
42
|
-
public async parseYamlSecureRuntime(
|
|
43
|
-
yamlContent: string,
|
|
44
|
-
config: RuntimeYAMLConfig = {}
|
|
45
|
-
): Promise<RuntimeYAMLResult> {
|
|
46
|
-
const startTime = performance.now();
|
|
47
|
-
|
|
48
|
-
try {
|
|
49
|
-
// Validate input
|
|
50
|
-
this.validateInput(yamlContent);
|
|
51
|
-
|
|
52
|
-
// Security scan if enabled
|
|
53
|
-
if (config.validateSecurity !== false) {
|
|
54
|
-
const scanResult = await this.securityScanner.scan({
|
|
55
|
-
code: yamlContent,
|
|
56
|
-
executionId: `yaml-parse-${Date.now()}`,
|
|
57
|
-
});
|
|
58
|
-
|
|
59
|
-
if (!scanResult.secure) {
|
|
60
|
-
throw new Error(
|
|
61
|
-
`Security scan failed: ${scanResult.warnings.join(", ")}`
|
|
62
|
-
);
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
// Prepare execution code
|
|
67
|
-
const executionCode = this.buildYamlExecutionCode(yamlContent);
|
|
68
|
-
|
|
69
|
-
// Execute in isolated runtime
|
|
70
|
-
const executionResult = await this.runtimeManager.execute({
|
|
71
|
-
code: executionCode,
|
|
72
|
-
securityProfile: config.securityProfile || "ultra-secure",
|
|
73
|
-
timeout: config.timeout || 5000,
|
|
74
|
-
memoryLimit: config.memoryLimit || 2,
|
|
75
|
-
tenantId: config.tenantId,
|
|
76
|
-
scanForSecurity: config.validateSecurity,
|
|
77
|
-
});
|
|
78
|
-
|
|
79
|
-
const endTime = performance.now();
|
|
80
|
-
const totalTime = endTime - startTime;
|
|
81
|
-
|
|
82
|
-
// Validate performance targets
|
|
83
|
-
this.validatePerformanceTargets(totalTime, executionResult.memoryUsed);
|
|
84
|
-
|
|
85
|
-
const auditHash = this.generateAuditHash(
|
|
86
|
-
yamlContent,
|
|
87
|
-
executionResult,
|
|
88
|
-
config
|
|
89
|
-
);
|
|
90
|
-
|
|
91
|
-
return {
|
|
92
|
-
success: executionResult.success,
|
|
93
|
-
result: executionResult.result,
|
|
94
|
-
error: executionResult.error,
|
|
95
|
-
executionTime: totalTime,
|
|
96
|
-
memoryUsed: executionResult.memoryUsed,
|
|
97
|
-
securityScore: this.calculateSecurityScore(executionResult, config),
|
|
98
|
-
auditHash,
|
|
99
|
-
tenantId: config.tenantId,
|
|
100
|
-
};
|
|
101
|
-
} catch (error) {
|
|
102
|
-
const endTime = performance.now();
|
|
103
|
-
const totalTime = endTime - startTime;
|
|
104
|
-
|
|
105
|
-
return {
|
|
106
|
-
success: false,
|
|
107
|
-
error: error instanceof Error ? error : new Error(String(error)),
|
|
108
|
-
executionTime: totalTime,
|
|
109
|
-
memoryUsed: 0,
|
|
110
|
-
tenantId: config.tenantId,
|
|
111
|
-
};
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
/**
|
|
116
|
-
* Multi-tenant YAML processing with isolation
|
|
117
|
-
*/
|
|
118
|
-
public async parseYamlMultiTenant(
|
|
119
|
-
yamlContent: string,
|
|
120
|
-
tenantId: string,
|
|
121
|
-
config: RuntimeYAMLConfig = {}
|
|
122
|
-
): Promise<RuntimeYAMLResult> {
|
|
123
|
-
const tenantConfig = {
|
|
124
|
-
...config,
|
|
125
|
-
tenantId,
|
|
126
|
-
securityProfile: config.securityProfile || "tenant-isolated",
|
|
127
|
-
validateSecurity: config.validateSecurity !== false,
|
|
128
|
-
auditEnabled: config.auditEnabled !== false,
|
|
129
|
-
};
|
|
130
|
-
|
|
131
|
-
return this.parseYamlSecureRuntime(yamlContent, tenantConfig);
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
/**
|
|
135
|
-
* Batch process YAML for multiple tenants
|
|
136
|
-
*/
|
|
137
|
-
public async parseYamlBatch(
|
|
138
|
-
yamlContents: Array<{ content: string; tenantId: string }>,
|
|
139
|
-
config: RuntimeYAMLConfig = {}
|
|
140
|
-
): Promise<Map<string, RuntimeYAMLResult>> {
|
|
141
|
-
const results = new Map<string, RuntimeYAMLResult>();
|
|
142
|
-
|
|
143
|
-
// Process each tenant's YAML in isolated runtime
|
|
144
|
-
for (const { content, tenantId } of yamlContents) {
|
|
145
|
-
const result = await this.parseYamlMultiTenant(content, tenantId, config);
|
|
146
|
-
results.set(tenantId, result);
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
return results;
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
/**
|
|
153
|
-
* Test multi-tenant isolation
|
|
154
|
-
*/
|
|
155
|
-
public async testTenantIsolation(
|
|
156
|
-
tenantIds: string[]
|
|
157
|
-
): Promise<{ [tenantId: string]: boolean }> {
|
|
158
|
-
const results: { [tenantId: string]: boolean } = {};
|
|
159
|
-
|
|
160
|
-
for (const tenantId of tenantIds) {
|
|
161
|
-
try {
|
|
162
|
-
// Execute code that should trigger isolation violations if not properly isolated
|
|
163
|
-
const testCode = `
|
|
164
|
-
const memoryLeak = [];
|
|
165
|
-
for (let i = 0; i < 1000; i++) {
|
|
166
|
-
memoryLeak.push(new Array(10000).fill('${tenantId}'));
|
|
167
|
-
}
|
|
168
|
-
global.tenantData = '${tenantId}';
|
|
169
|
-
return global.tenantData;
|
|
170
|
-
`;
|
|
171
|
-
|
|
172
|
-
const executionResult = await this.runtimeManager.execute({
|
|
173
|
-
code: testCode,
|
|
174
|
-
tenantId,
|
|
175
|
-
securityProfile: "tenant-isolated",
|
|
176
|
-
timeout: 2000,
|
|
177
|
-
memoryLimit: 1,
|
|
178
|
-
});
|
|
179
|
-
|
|
180
|
-
results[tenantId] =
|
|
181
|
-
executionResult.success && executionResult.result === tenantId;
|
|
182
|
-
} catch (error) {
|
|
183
|
-
results[tenantId] = false;
|
|
184
|
-
}
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
return results;
|
|
188
|
-
}
|
|
189
|
-
|
|
190
|
-
/**
|
|
191
|
-
* Validate performance targets
|
|
192
|
-
*/
|
|
193
|
-
private validatePerformanceTargets(
|
|
194
|
-
executionTime: number,
|
|
195
|
-
memoryUsed: number
|
|
196
|
-
): void {
|
|
197
|
-
const timeTarget = performanceTargets.find(
|
|
198
|
-
(t) => t.metric === "executionTime"
|
|
199
|
-
);
|
|
200
|
-
const memoryTarget = performanceTargets.find(
|
|
201
|
-
(t) => t.metric === "memoryUsage"
|
|
202
|
-
);
|
|
203
|
-
|
|
204
|
-
if (timeTarget && executionTime > timeTarget.target) {
|
|
205
|
-
console.warn(
|
|
206
|
-
`[SecureYamlRuntime] Performance warning: execution time ${executionTime}ms exceeds target ${timeTarget.target}ms`
|
|
207
|
-
);
|
|
208
|
-
}
|
|
209
|
-
|
|
210
|
-
if (memoryTarget && memoryUsed > memoryTarget.target) {
|
|
211
|
-
console.warn(
|
|
212
|
-
`[SecureYamlRuntime] Performance warning: memory usage ${memoryUsed}MB exceeds target ${memoryTarget.target}MB`
|
|
213
|
-
);
|
|
214
|
-
}
|
|
215
|
-
}
|
|
216
|
-
|
|
217
|
-
/**
|
|
218
|
-
* Calculate security score
|
|
219
|
-
*/
|
|
220
|
-
private calculateSecurityScore(
|
|
221
|
-
executionResult: any,
|
|
222
|
-
config: RuntimeYAMLConfig
|
|
223
|
-
): number {
|
|
224
|
-
const profile = securityProfiles[config.securityProfile || "ultra-secure"];
|
|
225
|
-
|
|
226
|
-
let score = 9.5; // Base score
|
|
227
|
-
|
|
228
|
-
if (!executionResult.success) {
|
|
229
|
-
score -= 1.0;
|
|
230
|
-
}
|
|
231
|
-
|
|
232
|
-
if (config.tenantId) {
|
|
233
|
-
score += 0.5;
|
|
234
|
-
}
|
|
235
|
-
|
|
236
|
-
if (config.validateSecurity === false) {
|
|
237
|
-
score -= 1.5;
|
|
238
|
-
}
|
|
239
|
-
|
|
240
|
-
return Math.max(0, Math.min(10, score));
|
|
241
|
-
}
|
|
242
|
-
|
|
243
|
-
/**
|
|
244
|
-
* Validate input
|
|
245
|
-
*/
|
|
246
|
-
private validateInput(yamlContent: string): void {
|
|
247
|
-
if (typeof yamlContent !== "string") {
|
|
248
|
-
throw new Error("YAML content must be a string");
|
|
249
|
-
}
|
|
250
|
-
|
|
251
|
-
if (yamlContent.length === 0) {
|
|
252
|
-
throw new Error("YAML content cannot be empty");
|
|
253
|
-
}
|
|
254
|
-
|
|
255
|
-
if (yamlContent.length > 1024 * 1024) {
|
|
256
|
-
// 1MB max
|
|
257
|
-
throw new Error("YAML content exceeds maximum size limit (1MB)");
|
|
258
|
-
}
|
|
259
|
-
}
|
|
260
|
-
|
|
261
|
-
/**
|
|
262
|
-
* Build execution code for YAML parsing
|
|
263
|
-
*/
|
|
264
|
-
private buildYamlExecutionCode(yamlContent: string): string {
|
|
265
|
-
// Escape the YAML content to avoid injection attacks
|
|
266
|
-
const escapedYaml = JSON.stringify(yamlContent);
|
|
267
|
-
|
|
268
|
-
return `
|
|
269
|
-
// Secure YAML Parser implementation
|
|
270
|
-
class SecureYamlRuntime {
|
|
271
|
-
constructor() {
|
|
272
|
-
this.schema = 'FAILSAFE_SCHEMA';
|
|
273
|
-
this.allowedTypes = ['null', 'boolean', 'integer', 'float', 'string'];
|
|
274
|
-
}
|
|
275
|
-
|
|
276
|
-
parseSecure(yamlContent) {
|
|
277
|
-
// Simulate basic YAML parsing logic
|
|
278
|
-
const lines = yamlContent.split('\\n');
|
|
279
|
-
const result = {};
|
|
280
|
-
|
|
281
|
-
for (const line of lines) {
|
|
282
|
-
const trimmedLine = line.trim();
|
|
283
|
-
if (trimmedLine && !trimmedLine.startsWith('#')) {
|
|
284
|
-
const colonIndex = trimmedLine.indexOf(':');
|
|
285
|
-
if (colonIndex !== -1) {
|
|
286
|
-
const key = trimmedLine.substring(0, colonIndex).trim();
|
|
287
|
-
const value = trimmedLine.substring(colonIndex + 1).trim();
|
|
288
|
-
|
|
289
|
-
// Basic type conversion
|
|
290
|
-
if (value === 'null') {
|
|
291
|
-
result[key] = null;
|
|
292
|
-
} else if (value === 'true') {
|
|
293
|
-
result[key] = true;
|
|
294
|
-
} else if (value === 'false') {
|
|
295
|
-
result[key] = false;
|
|
296
|
-
} else if (!isNaN(parseFloat(value))) {
|
|
297
|
-
result[key] = parseFloat(value);
|
|
298
|
-
} else {
|
|
299
|
-
result[key] = value;
|
|
300
|
-
}
|
|
301
|
-
}
|
|
302
|
-
}
|
|
303
|
-
}
|
|
304
|
-
|
|
305
|
-
return result;
|
|
306
|
-
}
|
|
307
|
-
}
|
|
308
|
-
|
|
309
|
-
const runtime = new SecureYamlRuntime();
|
|
310
|
-
const yamlContent = ${escapedYaml};
|
|
311
|
-
return runtime.parseSecure(yamlContent);
|
|
312
|
-
`;
|
|
313
|
-
}
|
|
314
|
-
|
|
315
|
-
/**
|
|
316
|
-
* Generate audit hash
|
|
317
|
-
*/
|
|
318
|
-
private generateAuditHash(
|
|
319
|
-
yamlContent: string,
|
|
320
|
-
executionResult: any,
|
|
321
|
-
config: RuntimeYAMLConfig
|
|
322
|
-
): string {
|
|
323
|
-
const crypto = require("node:crypto");
|
|
324
|
-
const auditData = {
|
|
325
|
-
yamlHash: crypto.createHash("sha256").update(yamlContent).digest("hex"),
|
|
326
|
-
executionResult: executionResult.success,
|
|
327
|
-
securityProfile: config.securityProfile || "ultra-secure",
|
|
328
|
-
tenantId: config.tenantId,
|
|
329
|
-
timestamp: Date.now(),
|
|
330
|
-
executionTime: executionResult.executionTime,
|
|
331
|
-
memoryUsed: executionResult.memoryUsed,
|
|
332
|
-
};
|
|
333
|
-
|
|
334
|
-
return crypto
|
|
335
|
-
.createHash("sha256")
|
|
336
|
-
.update(JSON.stringify(auditData))
|
|
337
|
-
.digest("hex");
|
|
338
|
-
}
|
|
339
|
-
}
|
|
340
|
-
|
|
341
|
-
export default SecureYamlRuntime;
|
|
@@ -1,273 +0,0 @@
|
|
|
1
|
-
import { load, FAILSAFE_SCHEMA } from 'js-yaml';
|
|
2
|
-
import { AllowedYamlPrimitive, YAMLParserConfig } from '../config';
|
|
3
|
-
import { YAMLParseError, YAMLSecurityError } from '../errors';
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* Parser YAML seguro com FAILSAFE_SCHEMA e validações rigorosas
|
|
7
|
-
* Preloading de módulos críticos realizada no construtor
|
|
8
|
-
*/
|
|
9
|
-
export class SecureYamlParser {
|
|
10
|
-
private readonly config: YAMLParserConfig;
|
|
11
|
-
|
|
12
|
-
constructor(config: YAMLParserConfig = {}) {
|
|
13
|
-
this.config = this.validateAndMergeConfig(config);
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
/**
|
|
17
|
-
* Valida e merge configuração com padrões seguros
|
|
18
|
-
*/
|
|
19
|
-
private validateAndMergeConfig(userConfig: YAMLParserConfig): Required<YAMLParserConfig> {
|
|
20
|
-
const defaultConfig: Required<YAMLParserConfig> = {
|
|
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
|
-
|
|
35
|
-
// Merge com configurações do usuário, validando tipos
|
|
36
|
-
const merged = { ...defaultConfig, ...userConfig };
|
|
37
|
-
|
|
38
|
-
// Validar tipos permitidos contra FAILSAFE_SCHEMA
|
|
39
|
-
const invalidTypes = merged.allowedTypes.filter((type: AllowedYamlPrimitive) =>
|
|
40
|
-
!defaultConfig.allowedTypes.includes(type)
|
|
41
|
-
);
|
|
42
|
-
|
|
43
|
-
if (invalidTypes.length > 0) {
|
|
44
|
-
throw new YAMLSecurityError(
|
|
45
|
-
`Tipos não permitidos na FAILSAFE_SCHEMA: ${invalidTypes.join(', ')}`
|
|
46
|
-
);
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
return merged;
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
/**
|
|
53
|
-
* Parse YAML com segurança máxima usando FAILSAFE_SCHEMA
|
|
54
|
-
*/
|
|
55
|
-
parseSecure(yamlContent: string): any {
|
|
56
|
-
const startTime = performance.now();
|
|
57
|
-
|
|
58
|
-
try {
|
|
59
|
-
// Validar entrada
|
|
60
|
-
this.validateInput(yamlContent);
|
|
61
|
-
|
|
62
|
-
// Configurar opções de segurança para FAILSAFE_SCHEMA
|
|
63
|
-
const parseOptions = this.buildSecureOptions();
|
|
64
|
-
|
|
65
|
-
// Fazer parsing com FAILSAFE_SCHEMA
|
|
66
|
-
const result = load(yamlContent, parseOptions);
|
|
67
|
-
|
|
68
|
-
// Validar resultado
|
|
69
|
-
this.validateResult(result);
|
|
70
|
-
|
|
71
|
-
const endTime = performance.now();
|
|
72
|
-
const parseTime = endTime - startTime;
|
|
73
|
-
|
|
74
|
-
// Log performance se exceder target
|
|
75
|
-
const target = this.config.performanceTarget || 100;
|
|
76
|
-
if (parseTime > target) {
|
|
77
|
-
console.warn(`[SecureYamlParser] Performance warning: ${parseTime}ms > ${target}ms target`);
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
return result;
|
|
81
|
-
|
|
82
|
-
} catch (error) {
|
|
83
|
-
if (error instanceof Error && error.name === 'YAMLException') {
|
|
84
|
-
throw new YAMLParseError(`Erro ao fazer parse do YAML: ${error.message}`);
|
|
85
|
-
}
|
|
86
|
-
throw error;
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
/**
|
|
91
|
-
* Constrói opções de segurança para FAILSAFE_SCHEMA
|
|
92
|
-
*/
|
|
93
|
-
private buildSecureOptions(): any {
|
|
94
|
-
return {
|
|
95
|
-
schema: FAILSAFE_SCHEMA,
|
|
96
|
-
json: false, // Desabilitar JSON mode para maior segurança
|
|
97
|
-
onWarning: (warning: any) => {
|
|
98
|
-
console.warn(`[SecureYamlParser] WARN: ${warning}`);
|
|
99
|
-
},
|
|
100
|
-
maxDepth: this.config.maxDepth,
|
|
101
|
-
maxKeys: this.config.maxKeys,
|
|
102
|
-
strict: this.config.strictMode,
|
|
103
|
-
// Security hardening
|
|
104
|
-
filename: this.config.filename || 'secure-parser',
|
|
105
|
-
onError: (error: any) => {
|
|
106
|
-
throw new YAMLSecurityError(`Erro de segurança durante parsing: ${error.message}`);
|
|
107
|
-
}
|
|
108
|
-
};
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
/**
|
|
112
|
-
* Valida entrada antes do parsing
|
|
113
|
-
*/
|
|
114
|
-
private validateInput(input: string): void {
|
|
115
|
-
if (typeof input !== 'string') {
|
|
116
|
-
throw new YAMLParseError('Input deve ser uma string');
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
const maxStringLength = this.config.maxStringLength || 1048576; // Default 1MB
|
|
120
|
-
if (input.length > maxStringLength) {
|
|
121
|
-
throw new YAMLSecurityError(
|
|
122
|
-
`Tamanho do input (${input.length}) excede limite máximo (${maxStringLength})`
|
|
123
|
-
);
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
if (input.trim().length === 0) {
|
|
127
|
-
throw new YAMLParseError('Input vazio não é permitido');
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
// Validações UTF-8 básicas
|
|
131
|
-
if ((this.config.validateUTF8 ?? true) && !this.isValidUTF8(input)) {
|
|
132
|
-
throw new YAMLSecurityError('Input contém caracteres UTF-8 inválidos');
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
/**
|
|
137
|
-
* Valida resultado após parsing
|
|
138
|
-
*/
|
|
139
|
-
private validateResult(result: any): void {
|
|
140
|
-
// Validar profundidade máxima antes de serialização
|
|
141
|
-
const depth = this.getObjectDepth(result);
|
|
142
|
-
const maxDepth = this.config.maxDepth || 1000;
|
|
143
|
-
if (depth > maxDepth) {
|
|
144
|
-
throw new YAMLSecurityError(
|
|
145
|
-
`Profundidade do objeto (${depth}) excede limite máximo (${maxDepth})`
|
|
146
|
-
);
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
// Validar tipos permitidos
|
|
150
|
-
if (!this.isAllowedType(result)) {
|
|
151
|
-
const allowedTypes = this.config.allowedTypes || ['null', 'boolean', 'integer', 'float', 'string'];
|
|
152
|
-
throw new YAMLSecurityError(
|
|
153
|
-
'O resultado contém tipos não permitidos. Tipos permitidos: ' +
|
|
154
|
-
allowedTypes.join(', ')
|
|
155
|
-
);
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
// Validar tamanho total aproximado
|
|
159
|
-
const size = this.estimateObjectSize(result);
|
|
160
|
-
const maxValueSize = this.config.maxValueSize || 10485760; // Default 10MB
|
|
161
|
-
if (size > maxValueSize) {
|
|
162
|
-
throw new YAMLSecurityError(
|
|
163
|
-
`Tamanho do objeto (${size} bytes) excede limite máximo (${maxValueSize} bytes)`
|
|
164
|
-
);
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
/**
|
|
169
|
-
* Verifica se é UTF-8 válido
|
|
170
|
-
*/
|
|
171
|
-
private isValidUTF8(str: string): boolean {
|
|
172
|
-
try {
|
|
173
|
-
encodeURIComponent(str);
|
|
174
|
-
return true;
|
|
175
|
-
} catch {
|
|
176
|
-
return false;
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
/**
|
|
181
|
-
* Calcula profundidade do objeto
|
|
182
|
-
*/
|
|
183
|
-
private getObjectDepth(obj: any, currentDepth = 0): number {
|
|
184
|
-
if (obj === null || typeof obj !== 'object') {
|
|
185
|
-
return currentDepth;
|
|
186
|
-
}
|
|
187
|
-
|
|
188
|
-
if (Array.isArray(obj)) {
|
|
189
|
-
return obj.reduce((max, item) =>
|
|
190
|
-
Math.max(max as number, this.getObjectDepth(item, currentDepth + 1)), currentDepth + 1);
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
const values = Object.values(obj);
|
|
194
|
-
return values.reduce((max: number, value) =>
|
|
195
|
-
Math.max(max, this.getObjectDepth(value, currentDepth + 1)), currentDepth + 1);
|
|
196
|
-
}
|
|
197
|
-
|
|
198
|
-
/**
|
|
199
|
-
* Verifica se os tipos são permitidos
|
|
200
|
-
*/
|
|
201
|
-
private isAllowedType(obj: any): boolean {
|
|
202
|
-
const type = this.getType(obj);
|
|
203
|
-
|
|
204
|
-
// Verificar tipos básicos permitidos
|
|
205
|
-
const allowedTypes = this.config.allowedTypes || ['null', 'boolean', 'integer', 'float', 'string'];
|
|
206
|
-
if (!allowedTypes.includes(type as any)) {
|
|
207
|
-
return false;
|
|
208
|
-
}
|
|
209
|
-
|
|
210
|
-
// Recursivamente verificar objetos e arrays
|
|
211
|
-
if (typeof obj === 'object' && obj !== null) {
|
|
212
|
-
const values = Array.isArray(obj) ? obj : Object.values(obj);
|
|
213
|
-
return values.every(value => this.isAllowedType(value));
|
|
214
|
-
}
|
|
215
|
-
|
|
216
|
-
return true;
|
|
217
|
-
}
|
|
218
|
-
|
|
219
|
-
/**
|
|
220
|
-
* Estima tamanho do objeto em bytes
|
|
221
|
-
*/
|
|
222
|
-
private estimateObjectSize(obj: any): number {
|
|
223
|
-
return JSON.stringify(obj).length;
|
|
224
|
-
}
|
|
225
|
-
|
|
226
|
-
/**
|
|
227
|
-
* Obtém tipo completo do objeto
|
|
228
|
-
*/
|
|
229
|
-
private getType(obj: any): string {
|
|
230
|
-
if (obj === null) return 'null';
|
|
231
|
-
if (Array.isArray(obj)) return 'array';
|
|
232
|
-
if (typeof obj === 'object') return 'object';
|
|
233
|
-
if (typeof obj === 'number') {
|
|
234
|
-
return Number.isInteger(obj) ? 'integer' : 'float';
|
|
235
|
-
}
|
|
236
|
-
return typeof obj;
|
|
237
|
-
}
|
|
238
|
-
|
|
239
|
-
/**
|
|
240
|
-
* Parse assíncrono para lazy loading
|
|
241
|
-
*/
|
|
242
|
-
async parseSecureAsync(yamlContent: string): Promise<any> {
|
|
243
|
-
if (this.config.lazyLoading) {
|
|
244
|
-
// Lazy loading - criar Promise para carregar parser apenas quando necessário
|
|
245
|
-
return new Promise((resolve, reject) => {
|
|
246
|
-
setTimeout(() => {
|
|
247
|
-
try {
|
|
248
|
-
resolve(this.parseSecure(yamlContent));
|
|
249
|
-
} catch (error) {
|
|
250
|
-
reject(error);
|
|
251
|
-
}
|
|
252
|
-
}, 0);
|
|
253
|
-
});
|
|
254
|
-
} else {
|
|
255
|
-
return this.parseSecure(yamlContent);
|
|
256
|
-
}
|
|
257
|
-
}
|
|
258
|
-
}
|
|
259
|
-
|
|
260
|
-
/**
|
|
261
|
-
* Factory function para criar parser com configuração padrão segura
|
|
262
|
-
*/
|
|
263
|
-
export function createSecureYamlParser(config?: Partial<YAMLParserConfig>): SecureYamlParser {
|
|
264
|
-
return new SecureYamlParser(config);
|
|
265
|
-
}
|
|
266
|
-
|
|
267
|
-
/**
|
|
268
|
-
* Função utilitária para parse rápido com configuração padrão
|
|
269
|
-
*/
|
|
270
|
-
export function parseSecureYaml(yamlContent: string, config?: Partial<YAMLParserConfig>): any {
|
|
271
|
-
const parser = createSecureYamlParser(config);
|
|
272
|
-
return parser.parseSecure(yamlContent);
|
|
273
|
-
}
|