@dollhousemcp/mcp-server 1.3.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/CHANGELOG.md +132 -0
- package/LICENSE +51 -0
- package/README.md +1124 -0
- package/data/agents/code-reviewer.md +296 -0
- package/data/agents/research-assistant.md +259 -0
- package/data/agents/task-manager.md +206 -0
- package/data/ensembles/business-advisor.md +354 -0
- package/data/ensembles/creative-studio.md +288 -0
- package/data/ensembles/development-team.md +292 -0
- package/data/ensembles/security-analysis-team.md +438 -0
- package/data/memories/conversation-history.md +146 -0
- package/data/memories/learning-progress.md +376 -0
- package/data/memories/project-context.md +268 -0
- package/data/personas/business-consultant.md +50 -0
- package/data/personas/creative-writer.md +44 -0
- package/data/personas/debug-detective.md +59 -0
- package/data/personas/eli5-explainer.md +49 -0
- package/data/personas/security-analyst.md +161 -0
- package/data/personas/technical-analyst.md +43 -0
- package/data/skills/code-review.md +112 -0
- package/data/skills/creative-writing.md +174 -0
- package/data/skills/data-analysis.md +160 -0
- package/data/skills/penetration-testing.md +374 -0
- package/data/skills/research.md +181 -0
- package/data/skills/threat-modeling.md +469 -0
- package/data/skills/translation.md +148 -0
- package/data/templates/code-documentation.md +409 -0
- package/data/templates/email-professional.md +158 -0
- package/data/templates/meeting-notes.md +141 -0
- package/data/templates/penetration-test-report.md +608 -0
- package/data/templates/project-brief.md +234 -0
- package/data/templates/report-executive.md +258 -0
- package/data/templates/security-vulnerability-report.md +457 -0
- package/data/templates/threat-assessment-report.md +774 -0
- package/dist/cache/APICache.d.ts +23 -0
- package/dist/cache/APICache.d.ts.map +1 -0
- package/dist/cache/APICache.js +42 -0
- package/dist/cache/index.d.ts +5 -0
- package/dist/cache/index.d.ts.map +1 -0
- package/dist/cache/index.js +5 -0
- package/dist/collection/CollectionBrowser.d.ts +24 -0
- package/dist/collection/CollectionBrowser.d.ts.map +1 -0
- package/dist/collection/CollectionBrowser.js +120 -0
- package/dist/collection/CollectionSearch.d.ts +18 -0
- package/dist/collection/CollectionSearch.d.ts.map +1 -0
- package/dist/collection/CollectionSearch.js +48 -0
- package/dist/collection/ElementInstaller.d.ts +33 -0
- package/dist/collection/ElementInstaller.d.ts.map +1 -0
- package/dist/collection/ElementInstaller.js +142 -0
- package/dist/collection/GitHubClient.d.ts +22 -0
- package/dist/collection/GitHubClient.d.ts.map +1 -0
- package/dist/collection/GitHubClient.js +114 -0
- package/dist/collection/MarketplaceBrowser.d.ts +24 -0
- package/dist/collection/MarketplaceBrowser.d.ts.map +1 -0
- package/dist/collection/MarketplaceBrowser.js +115 -0
- package/dist/collection/MarketplaceSearch.d.ts +18 -0
- package/dist/collection/MarketplaceSearch.d.ts.map +1 -0
- package/dist/collection/MarketplaceSearch.js +48 -0
- package/dist/collection/PersonaDetails.d.ts +22 -0
- package/dist/collection/PersonaDetails.d.ts.map +1 -0
- package/dist/collection/PersonaDetails.js +71 -0
- package/dist/collection/PersonaInstaller.d.ts +26 -0
- package/dist/collection/PersonaInstaller.d.ts.map +1 -0
- package/dist/collection/PersonaInstaller.js +103 -0
- package/dist/collection/PersonaSubmitter.d.ts +19 -0
- package/dist/collection/PersonaSubmitter.d.ts.map +1 -0
- package/dist/collection/PersonaSubmitter.js +57 -0
- package/dist/collection/index.d.ts +10 -0
- package/dist/collection/index.d.ts.map +1 -0
- package/dist/collection/index.js +10 -0
- package/dist/config/constants.d.ts +25 -0
- package/dist/config/constants.d.ts.map +1 -0
- package/dist/config/constants.js +34 -0
- package/dist/config/index.d.ts +6 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +6 -0
- package/dist/config/indicator-config.d.ts +107 -0
- package/dist/config/indicator-config.d.ts.map +1 -0
- package/dist/config/indicator-config.js +158 -0
- package/dist/constants/defaultPersonas.d.ts +10 -0
- package/dist/constants/defaultPersonas.d.ts.map +1 -0
- package/dist/constants/defaultPersonas.js +18 -0
- package/dist/constants/limits.d.ts +10 -0
- package/dist/constants/limits.d.ts.map +1 -0
- package/dist/constants/limits.js +13 -0
- package/dist/elements/BaseElement.d.ts +81 -0
- package/dist/elements/BaseElement.d.ts.map +1 -0
- package/dist/elements/BaseElement.js +381 -0
- package/dist/elements/FeedbackProcessor.d.ts +57 -0
- package/dist/elements/FeedbackProcessor.d.ts.map +1 -0
- package/dist/elements/FeedbackProcessor.js +418 -0
- package/dist/elements/agents/Agent.d.ts +145 -0
- package/dist/elements/agents/Agent.d.ts.map +1 -0
- package/dist/elements/agents/Agent.js +848 -0
- package/dist/elements/agents/AgentManager.d.ts +125 -0
- package/dist/elements/agents/AgentManager.d.ts.map +1 -0
- package/dist/elements/agents/AgentManager.js +615 -0
- package/dist/elements/agents/constants.d.ts +42 -0
- package/dist/elements/agents/constants.d.ts.map +1 -0
- package/dist/elements/agents/constants.js +45 -0
- package/dist/elements/agents/goalTemplates.d.ts +44 -0
- package/dist/elements/agents/goalTemplates.d.ts.map +1 -0
- package/dist/elements/agents/goalTemplates.js +297 -0
- package/dist/elements/agents/index.d.ts +8 -0
- package/dist/elements/agents/index.d.ts.map +1 -0
- package/dist/elements/agents/index.js +8 -0
- package/dist/elements/agents/ruleEngineConfig.d.ts +76 -0
- package/dist/elements/agents/ruleEngineConfig.d.ts.map +1 -0
- package/dist/elements/agents/ruleEngineConfig.js +143 -0
- package/dist/elements/agents/types.d.ts +97 -0
- package/dist/elements/agents/types.d.ts.map +1 -0
- package/dist/elements/agents/types.js +5 -0
- package/dist/elements/ensembles/Ensemble.d.ts +144 -0
- package/dist/elements/ensembles/Ensemble.d.ts.map +1 -0
- package/dist/elements/ensembles/Ensemble.js +860 -0
- package/dist/elements/ensembles/EnsembleManager.d.ts +85 -0
- package/dist/elements/ensembles/EnsembleManager.d.ts.map +1 -0
- package/dist/elements/ensembles/EnsembleManager.js +378 -0
- package/dist/elements/ensembles/constants.d.ts +73 -0
- package/dist/elements/ensembles/constants.d.ts.map +1 -0
- package/dist/elements/ensembles/constants.js +92 -0
- package/dist/elements/ensembles/index.d.ts +8 -0
- package/dist/elements/ensembles/index.d.ts.map +1 -0
- package/dist/elements/ensembles/index.js +8 -0
- package/dist/elements/ensembles/types.d.ts +92 -0
- package/dist/elements/ensembles/types.d.ts.map +1 -0
- package/dist/elements/ensembles/types.js +8 -0
- package/dist/elements/index.d.ts +11 -0
- package/dist/elements/index.d.ts.map +1 -0
- package/dist/elements/index.js +12 -0
- package/dist/elements/memories/Memory.d.ts +110 -0
- package/dist/elements/memories/Memory.d.ts.map +1 -0
- package/dist/elements/memories/Memory.js +470 -0
- package/dist/elements/memories/MemoryManager.d.ts +86 -0
- package/dist/elements/memories/MemoryManager.d.ts.map +1 -0
- package/dist/elements/memories/MemoryManager.js +435 -0
- package/dist/elements/memories/constants.d.ts +42 -0
- package/dist/elements/memories/constants.d.ts.map +1 -0
- package/dist/elements/memories/constants.js +49 -0
- package/dist/elements/memories/index.d.ts +6 -0
- package/dist/elements/memories/index.d.ts.map +1 -0
- package/dist/elements/memories/index.js +6 -0
- package/dist/elements/skills/Skill.d.ts +109 -0
- package/dist/elements/skills/Skill.d.ts.map +1 -0
- package/dist/elements/skills/Skill.js +381 -0
- package/dist/elements/skills/index.d.ts +5 -0
- package/dist/elements/skills/index.d.ts.map +1 -0
- package/dist/elements/skills/index.js +5 -0
- package/dist/elements/templates/Template.d.ts +138 -0
- package/dist/elements/templates/Template.d.ts.map +1 -0
- package/dist/elements/templates/Template.js +673 -0
- package/dist/elements/templates/TemplateManager.d.ts +104 -0
- package/dist/elements/templates/TemplateManager.d.ts.map +1 -0
- package/dist/elements/templates/TemplateManager.js +501 -0
- package/dist/elements/templates/index.d.ts +6 -0
- package/dist/elements/templates/index.d.ts.map +1 -0
- package/dist/elements/templates/index.js +6 -0
- package/dist/errors/SecurityError.d.ts +29 -0
- package/dist/errors/SecurityError.d.ts.map +1 -0
- package/dist/errors/SecurityError.js +47 -0
- package/dist/errors/index.d.ts +2 -0
- package/dist/errors/index.d.ts.map +1 -0
- package/dist/errors/index.js +2 -0
- package/dist/index.barrel.d.ts +21 -0
- package/dist/index.barrel.d.ts.map +1 -0
- package/dist/index.barrel.js +31 -0
- package/dist/index.d.ts +223 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1606 -0
- package/dist/marketplace/GitHubClient.d.ts +22 -0
- package/dist/marketplace/GitHubClient.d.ts.map +1 -0
- package/dist/marketplace/GitHubClient.js +112 -0
- package/dist/marketplace/MarketplaceBrowser.d.ts +24 -0
- package/dist/marketplace/MarketplaceBrowser.d.ts.map +1 -0
- package/dist/marketplace/MarketplaceBrowser.js +115 -0
- package/dist/marketplace/MarketplaceSearch.d.ts +18 -0
- package/dist/marketplace/MarketplaceSearch.d.ts.map +1 -0
- package/dist/marketplace/MarketplaceSearch.js +48 -0
- package/dist/marketplace/PersonaDetails.d.ts +22 -0
- package/dist/marketplace/PersonaDetails.d.ts.map +1 -0
- package/dist/marketplace/PersonaDetails.js +71 -0
- package/dist/marketplace/PersonaInstaller.d.ts +25 -0
- package/dist/marketplace/PersonaInstaller.d.ts.map +1 -0
- package/dist/marketplace/PersonaInstaller.js +100 -0
- package/dist/marketplace/PersonaSubmitter.d.ts +19 -0
- package/dist/marketplace/PersonaSubmitter.d.ts.map +1 -0
- package/dist/marketplace/PersonaSubmitter.js +57 -0
- package/dist/marketplace/index.d.ts +10 -0
- package/dist/marketplace/index.d.ts.map +1 -0
- package/dist/marketplace/index.js +10 -0
- package/dist/persona/PersonaElement.d.ts +64 -0
- package/dist/persona/PersonaElement.d.ts.map +1 -0
- package/dist/persona/PersonaElement.js +223 -0
- package/dist/persona/PersonaElementManager.d.ts +97 -0
- package/dist/persona/PersonaElementManager.d.ts.map +1 -0
- package/dist/persona/PersonaElementManager.js +348 -0
- package/dist/persona/PersonaLoader.d.ts +34 -0
- package/dist/persona/PersonaLoader.d.ts.map +1 -0
- package/dist/persona/PersonaLoader.js +145 -0
- package/dist/persona/PersonaManager.d.ts +112 -0
- package/dist/persona/PersonaManager.d.ts.map +1 -0
- package/dist/persona/PersonaManager.js +341 -0
- package/dist/persona/PersonaValidator.d.ts +39 -0
- package/dist/persona/PersonaValidator.d.ts.map +1 -0
- package/dist/persona/PersonaValidator.js +161 -0
- package/dist/persona/export-import/PersonaExporter.d.ts +43 -0
- package/dist/persona/export-import/PersonaExporter.d.ts.map +1 -0
- package/dist/persona/export-import/PersonaExporter.js +99 -0
- package/dist/persona/export-import/PersonaImporter.d.ts +65 -0
- package/dist/persona/export-import/PersonaImporter.d.ts.map +1 -0
- package/dist/persona/export-import/PersonaImporter.js +315 -0
- package/dist/persona/export-import/PersonaSharer.d.ts +60 -0
- package/dist/persona/export-import/PersonaSharer.d.ts.map +1 -0
- package/dist/persona/export-import/PersonaSharer.js +502 -0
- package/dist/persona/export-import/index.d.ts +10 -0
- package/dist/persona/export-import/index.d.ts.map +1 -0
- package/dist/persona/export-import/index.js +7 -0
- package/dist/persona/index.d.ts +7 -0
- package/dist/persona/index.d.ts.map +1 -0
- package/dist/persona/index.js +7 -0
- package/dist/portfolio/MigrationManager.d.ts +44 -0
- package/dist/portfolio/MigrationManager.d.ts.map +1 -0
- package/dist/portfolio/MigrationManager.js +163 -0
- package/dist/portfolio/PortfolioManager.d.ts +54 -0
- package/dist/portfolio/PortfolioManager.d.ts.map +1 -0
- package/dist/portfolio/PortfolioManager.js +224 -0
- package/dist/portfolio/types.d.ts +18 -0
- package/dist/portfolio/types.d.ts.map +1 -0
- package/dist/portfolio/types.js +13 -0
- package/dist/security/InputValidator.d.ts +80 -0
- package/dist/security/InputValidator.d.ts.map +1 -0
- package/dist/security/InputValidator.js +448 -0
- package/dist/security/audit/SecurityAuditor.d.ts +44 -0
- package/dist/security/audit/SecurityAuditor.d.ts.map +1 -0
- package/dist/security/audit/SecurityAuditor.js +274 -0
- package/dist/security/audit/config/suppressions.d.ts +34 -0
- package/dist/security/audit/config/suppressions.d.ts.map +1 -0
- package/dist/security/audit/config/suppressions.js +575 -0
- package/dist/security/audit/index.d.ts +14 -0
- package/dist/security/audit/index.d.ts.map +1 -0
- package/dist/security/audit/index.js +15 -0
- package/dist/security/audit/reporters/ConsoleReporter.d.ts +46 -0
- package/dist/security/audit/reporters/ConsoleReporter.d.ts.map +1 -0
- package/dist/security/audit/reporters/ConsoleReporter.js +174 -0
- package/dist/security/audit/reporters/JsonReporter.d.ts +13 -0
- package/dist/security/audit/reporters/JsonReporter.d.ts.map +1 -0
- package/dist/security/audit/reporters/JsonReporter.js +25 -0
- package/dist/security/audit/reporters/MarkdownReporter.d.ts +13 -0
- package/dist/security/audit/reporters/MarkdownReporter.d.ts.map +1 -0
- package/dist/security/audit/reporters/MarkdownReporter.js +79 -0
- package/dist/security/audit/rules/SecurityRules.d.ts +20 -0
- package/dist/security/audit/rules/SecurityRules.d.ts.map +1 -0
- package/dist/security/audit/rules/SecurityRules.js +244 -0
- package/dist/security/audit/scanners/CodeScanner.d.ts +47 -0
- package/dist/security/audit/scanners/CodeScanner.d.ts.map +1 -0
- package/dist/security/audit/scanners/CodeScanner.js +174 -0
- package/dist/security/audit/scanners/ConfigurationScanner.d.ts +13 -0
- package/dist/security/audit/scanners/ConfigurationScanner.d.ts.map +1 -0
- package/dist/security/audit/scanners/ConfigurationScanner.js +22 -0
- package/dist/security/audit/scanners/DependencyScanner.d.ts +13 -0
- package/dist/security/audit/scanners/DependencyScanner.d.ts.map +1 -0
- package/dist/security/audit/scanners/DependencyScanner.js +22 -0
- package/dist/security/audit/types.d.ts +94 -0
- package/dist/security/audit/types.d.ts.map +1 -0
- package/dist/security/audit/types.js +6 -0
- package/dist/security/commandValidator.d.ts +7 -0
- package/dist/security/commandValidator.d.ts.map +1 -0
- package/dist/security/commandValidator.js +78 -0
- package/dist/security/constants.d.ts +24 -0
- package/dist/security/constants.d.ts.map +1 -0
- package/dist/security/constants.js +26 -0
- package/dist/security/contentValidator.d.ts +47 -0
- package/dist/security/contentValidator.d.ts.map +1 -0
- package/dist/security/contentValidator.js +301 -0
- package/dist/security/errorHandler.d.ts +42 -0
- package/dist/security/errorHandler.d.ts.map +1 -0
- package/dist/security/errorHandler.js +166 -0
- package/dist/security/errors.d.ts +14 -0
- package/dist/security/errors.d.ts.map +1 -0
- package/dist/security/errors.js +28 -0
- package/dist/security/fileLockManager.d.ts +70 -0
- package/dist/security/fileLockManager.d.ts.map +1 -0
- package/dist/security/fileLockManager.js +187 -0
- package/dist/security/index.d.ts +12 -0
- package/dist/security/index.d.ts.map +1 -0
- package/dist/security/index.js +14 -0
- package/dist/security/pathValidator.d.ts +9 -0
- package/dist/security/pathValidator.d.ts.map +1 -0
- package/dist/security/pathValidator.js +102 -0
- package/dist/security/regexValidator.d.ts +59 -0
- package/dist/security/regexValidator.d.ts.map +1 -0
- package/dist/security/regexValidator.js +214 -0
- package/dist/security/secureYamlParser.d.ts +46 -0
- package/dist/security/secureYamlParser.d.ts.map +1 -0
- package/dist/security/secureYamlParser.js +203 -0
- package/dist/security/securityMonitor.d.ts +58 -0
- package/dist/security/securityMonitor.d.ts.map +1 -0
- package/dist/security/securityMonitor.js +108 -0
- package/dist/security/tokenManager.d.ts +85 -0
- package/dist/security/tokenManager.d.ts.map +1 -0
- package/dist/security/tokenManager.js +286 -0
- package/dist/security/validators/unicodeValidator.d.ts +97 -0
- package/dist/security/validators/unicodeValidator.d.ts.map +1 -0
- package/dist/security/validators/unicodeValidator.js +312 -0
- package/dist/security/yamlValidator.d.ts +21 -0
- package/dist/security/yamlValidator.d.ts.map +1 -0
- package/dist/security/yamlValidator.js +164 -0
- package/dist/server/ServerSetup.d.ts +35 -0
- package/dist/server/ServerSetup.d.ts.map +1 -0
- package/dist/server/ServerSetup.js +116 -0
- package/dist/server/index.d.ts +7 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +7 -0
- package/dist/server/startup.d.ts +31 -0
- package/dist/server/startup.d.ts.map +1 -0
- package/dist/server/startup.js +67 -0
- package/dist/server/tools/CollectionTools.d.ts +10 -0
- package/dist/server/tools/CollectionTools.d.ts.map +1 -0
- package/dist/server/tools/CollectionTools.js +96 -0
- package/dist/server/tools/ConfigTools.d.ts +10 -0
- package/dist/server/tools/ConfigTools.d.ts.map +1 -0
- package/dist/server/tools/ConfigTools.js +63 -0
- package/dist/server/tools/MarketplaceTools.d.ts +10 -0
- package/dist/server/tools/MarketplaceTools.d.ts.map +1 -0
- package/dist/server/tools/MarketplaceTools.js +96 -0
- package/dist/server/tools/PersonaTools.d.ts +10 -0
- package/dist/server/tools/PersonaTools.d.ts.map +1 -0
- package/dist/server/tools/PersonaTools.js +257 -0
- package/dist/server/tools/ToolRegistry.d.ts +37 -0
- package/dist/server/tools/ToolRegistry.d.ts.map +1 -0
- package/dist/server/tools/ToolRegistry.js +40 -0
- package/dist/server/tools/UpdateTools.d.ts +10 -0
- package/dist/server/tools/UpdateTools.d.ts.map +1 -0
- package/dist/server/tools/UpdateTools.js +64 -0
- package/dist/server/tools/UserTools.d.ts +10 -0
- package/dist/server/tools/UserTools.d.ts.map +1 -0
- package/dist/server/tools/UserTools.js +51 -0
- package/dist/server/tools/index.d.ts +10 -0
- package/dist/server/tools/index.d.ts.map +1 -0
- package/dist/server/tools/index.js +10 -0
- package/dist/server/types.d.ts +34 -0
- package/dist/server/types.d.ts.map +1 -0
- package/dist/server/types.js +5 -0
- package/dist/src/cache/APICache.d.ts +23 -0
- package/dist/src/cache/APICache.d.ts.map +1 -0
- package/dist/src/cache/APICache.js +42 -0
- package/dist/src/cache/index.d.ts +5 -0
- package/dist/src/cache/index.d.ts.map +1 -0
- package/dist/src/cache/index.js +5 -0
- package/dist/src/config/constants.d.ts +25 -0
- package/dist/src/config/constants.d.ts.map +1 -0
- package/dist/src/config/constants.js +30 -0
- package/dist/src/config/index.d.ts +6 -0
- package/dist/src/config/index.d.ts.map +1 -0
- package/dist/src/config/index.js +6 -0
- package/dist/src/config/indicator-config.d.ts +107 -0
- package/dist/src/config/indicator-config.d.ts.map +1 -0
- package/dist/src/config/indicator-config.js +158 -0
- package/dist/src/constants/defaultPersonas.d.ts +10 -0
- package/dist/src/constants/defaultPersonas.d.ts.map +1 -0
- package/dist/src/constants/defaultPersonas.js +18 -0
- package/dist/src/constants/limits.d.ts +10 -0
- package/dist/src/constants/limits.d.ts.map +1 -0
- package/dist/src/constants/limits.js +13 -0
- package/dist/src/errors/SecurityError.d.ts +29 -0
- package/dist/src/errors/SecurityError.d.ts.map +1 -0
- package/dist/src/errors/SecurityError.js +47 -0
- package/dist/src/errors/index.d.ts +2 -0
- package/dist/src/errors/index.d.ts.map +1 -0
- package/dist/src/errors/index.js +2 -0
- package/dist/src/index.barrel.d.ts +21 -0
- package/dist/src/index.barrel.d.ts.map +1 -0
- package/dist/src/index.barrel.js +31 -0
- package/dist/src/index.d.ts +220 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +1559 -0
- package/dist/src/marketplace/GitHubClient.d.ts +22 -0
- package/dist/src/marketplace/GitHubClient.d.ts.map +1 -0
- package/dist/src/marketplace/GitHubClient.js +112 -0
- package/dist/src/marketplace/MarketplaceBrowser.d.ts +21 -0
- package/dist/src/marketplace/MarketplaceBrowser.d.ts.map +1 -0
- package/dist/src/marketplace/MarketplaceBrowser.js +45 -0
- package/dist/src/marketplace/MarketplaceSearch.d.ts +18 -0
- package/dist/src/marketplace/MarketplaceSearch.d.ts.map +1 -0
- package/dist/src/marketplace/MarketplaceSearch.js +36 -0
- package/dist/src/marketplace/PersonaDetails.d.ts +22 -0
- package/dist/src/marketplace/PersonaDetails.d.ts.map +1 -0
- package/dist/src/marketplace/PersonaDetails.js +71 -0
- package/dist/src/marketplace/PersonaInstaller.d.ts +25 -0
- package/dist/src/marketplace/PersonaInstaller.d.ts.map +1 -0
- package/dist/src/marketplace/PersonaInstaller.js +100 -0
- package/dist/src/marketplace/PersonaSubmitter.d.ts +19 -0
- package/dist/src/marketplace/PersonaSubmitter.d.ts.map +1 -0
- package/dist/src/marketplace/PersonaSubmitter.js +57 -0
- package/dist/src/marketplace/index.d.ts +10 -0
- package/dist/src/marketplace/index.d.ts.map +1 -0
- package/dist/src/marketplace/index.js +10 -0
- package/dist/src/persona/PersonaLoader.d.ts +33 -0
- package/dist/src/persona/PersonaLoader.d.ts.map +1 -0
- package/dist/src/persona/PersonaLoader.js +139 -0
- package/dist/src/persona/PersonaManager.d.ts +112 -0
- package/dist/src/persona/PersonaManager.d.ts.map +1 -0
- package/dist/src/persona/PersonaManager.js +341 -0
- package/dist/src/persona/PersonaValidator.d.ts +33 -0
- package/dist/src/persona/PersonaValidator.d.ts.map +1 -0
- package/dist/src/persona/PersonaValidator.js +157 -0
- package/dist/src/persona/export-import/PersonaExporter.d.ts +43 -0
- package/dist/src/persona/export-import/PersonaExporter.d.ts.map +1 -0
- package/dist/src/persona/export-import/PersonaExporter.js +99 -0
- package/dist/src/persona/export-import/PersonaImporter.d.ts +65 -0
- package/dist/src/persona/export-import/PersonaImporter.d.ts.map +1 -0
- package/dist/src/persona/export-import/PersonaImporter.js +313 -0
- package/dist/src/persona/export-import/PersonaSharer.d.ts +60 -0
- package/dist/src/persona/export-import/PersonaSharer.d.ts.map +1 -0
- package/dist/src/persona/export-import/PersonaSharer.js +363 -0
- package/dist/src/persona/export-import/index.d.ts +10 -0
- package/dist/src/persona/export-import/index.d.ts.map +1 -0
- package/dist/src/persona/export-import/index.js +7 -0
- package/dist/src/persona/index.d.ts +7 -0
- package/dist/src/persona/index.d.ts.map +1 -0
- package/dist/src/persona/index.js +7 -0
- package/dist/src/security/InputValidator.d.ts +69 -0
- package/dist/src/security/InputValidator.d.ts.map +1 -0
- package/dist/src/security/InputValidator.js +381 -0
- package/dist/src/security/commandValidator.d.ts +7 -0
- package/dist/src/security/commandValidator.d.ts.map +1 -0
- package/dist/src/security/commandValidator.js +77 -0
- package/dist/src/security/constants.d.ts +21 -0
- package/dist/src/security/constants.d.ts.map +1 -0
- package/dist/src/security/constants.js +23 -0
- package/dist/src/security/contentValidator.d.ts +47 -0
- package/dist/src/security/contentValidator.d.ts.map +1 -0
- package/dist/src/security/contentValidator.js +188 -0
- package/dist/src/security/fileLockManager.d.ts +70 -0
- package/dist/src/security/fileLockManager.d.ts.map +1 -0
- package/dist/src/security/fileLockManager.js +187 -0
- package/dist/src/security/index.d.ts +12 -0
- package/dist/src/security/index.d.ts.map +1 -0
- package/dist/src/security/index.js +14 -0
- package/dist/src/security/pathValidator.d.ts +9 -0
- package/dist/src/security/pathValidator.d.ts.map +1 -0
- package/dist/src/security/pathValidator.js +97 -0
- package/dist/src/security/secureYamlParser.d.ts +46 -0
- package/dist/src/security/secureYamlParser.d.ts.map +1 -0
- package/dist/src/security/secureYamlParser.js +203 -0
- package/dist/src/security/securityMonitor.d.ts +58 -0
- package/dist/src/security/securityMonitor.d.ts.map +1 -0
- package/dist/src/security/securityMonitor.js +108 -0
- package/dist/src/security/tokenManager.d.ts +59 -0
- package/dist/src/security/tokenManager.d.ts.map +1 -0
- package/dist/src/security/tokenManager.js +216 -0
- package/dist/src/security/yamlValidator.d.ts +20 -0
- package/dist/src/security/yamlValidator.d.ts.map +1 -0
- package/dist/src/security/yamlValidator.js +138 -0
- package/dist/src/server/ServerSetup.d.ts +31 -0
- package/dist/src/server/ServerSetup.d.ts.map +1 -0
- package/dist/src/server/ServerSetup.js +79 -0
- package/dist/src/server/index.d.ts +7 -0
- package/dist/src/server/index.d.ts.map +1 -0
- package/dist/src/server/index.js +7 -0
- package/dist/src/server/tools/ConfigTools.d.ts +10 -0
- package/dist/src/server/tools/ConfigTools.d.ts.map +1 -0
- package/dist/src/server/tools/ConfigTools.js +63 -0
- package/dist/src/server/tools/MarketplaceTools.d.ts +10 -0
- package/dist/src/server/tools/MarketplaceTools.d.ts.map +1 -0
- package/dist/src/server/tools/MarketplaceTools.js +92 -0
- package/dist/src/server/tools/PersonaTools.d.ts +10 -0
- package/dist/src/server/tools/PersonaTools.d.ts.map +1 -0
- package/dist/src/server/tools/PersonaTools.js +257 -0
- package/dist/src/server/tools/ToolRegistry.d.ts +37 -0
- package/dist/src/server/tools/ToolRegistry.d.ts.map +1 -0
- package/dist/src/server/tools/ToolRegistry.js +40 -0
- package/dist/src/server/tools/UpdateTools.d.ts +10 -0
- package/dist/src/server/tools/UpdateTools.d.ts.map +1 -0
- package/dist/src/server/tools/UpdateTools.js +64 -0
- package/dist/src/server/tools/UserTools.d.ts +10 -0
- package/dist/src/server/tools/UserTools.d.ts.map +1 -0
- package/dist/src/server/tools/UserTools.js +51 -0
- package/dist/src/server/tools/index.d.ts +10 -0
- package/dist/src/server/tools/index.d.ts.map +1 -0
- package/dist/src/server/tools/index.js +10 -0
- package/dist/src/server/types.d.ts +34 -0
- package/dist/src/server/types.d.ts.map +1 -0
- package/dist/src/server/types.js +5 -0
- package/dist/src/tools/debug.d.ts +20 -0
- package/dist/src/tools/debug.d.ts.map +1 -0
- package/dist/src/tools/debug.js +37 -0
- package/dist/src/types/cache.d.ts +8 -0
- package/dist/src/types/cache.d.ts.map +1 -0
- package/dist/src/types/cache.js +5 -0
- package/dist/src/types/index.d.ts +8 -0
- package/dist/src/types/index.d.ts.map +1 -0
- package/dist/src/types/index.js +8 -0
- package/dist/src/types/marketplace.d.ts +23 -0
- package/dist/src/types/marketplace.d.ts.map +1 -0
- package/dist/src/types/marketplace.js +5 -0
- package/dist/src/types/mcp.d.ts +161 -0
- package/dist/src/types/mcp.d.ts.map +1 -0
- package/dist/src/types/mcp.js +75 -0
- package/dist/src/types/persona.d.ts +30 -0
- package/dist/src/types/persona.d.ts.map +1 -0
- package/dist/src/types/persona.js +5 -0
- package/dist/src/update/BackupManager.d.ts +46 -0
- package/dist/src/update/BackupManager.d.ts.map +1 -0
- package/dist/src/update/BackupManager.js +261 -0
- package/dist/src/update/DependencyChecker.d.ts +41 -0
- package/dist/src/update/DependencyChecker.d.ts.map +1 -0
- package/dist/src/update/DependencyChecker.js +132 -0
- package/dist/src/update/RateLimiter.d.ts +80 -0
- package/dist/src/update/RateLimiter.d.ts.map +1 -0
- package/dist/src/update/RateLimiter.js +172 -0
- package/dist/src/update/SignatureVerifier.d.ts +71 -0
- package/dist/src/update/SignatureVerifier.d.ts.map +1 -0
- package/dist/src/update/SignatureVerifier.js +214 -0
- package/dist/src/update/UpdateChecker.d.ts +127 -0
- package/dist/src/update/UpdateChecker.d.ts.map +1 -0
- package/dist/src/update/UpdateChecker.js +460 -0
- package/dist/src/update/UpdateManager.d.ts +41 -0
- package/dist/src/update/UpdateManager.d.ts.map +1 -0
- package/dist/src/update/UpdateManager.js +260 -0
- package/dist/src/update/VersionManager.d.ts +31 -0
- package/dist/src/update/VersionManager.d.ts.map +1 -0
- package/dist/src/update/VersionManager.js +134 -0
- package/dist/src/update/index.d.ts +9 -0
- package/dist/src/update/index.d.ts.map +1 -0
- package/dist/src/update/index.js +9 -0
- package/dist/src/utils/filesystem.d.ts +32 -0
- package/dist/src/utils/filesystem.d.ts.map +1 -0
- package/dist/src/utils/filesystem.js +73 -0
- package/dist/src/utils/git.d.ts +32 -0
- package/dist/src/utils/git.d.ts.map +1 -0
- package/dist/src/utils/git.js +65 -0
- package/dist/src/utils/index.d.ts +7 -0
- package/dist/src/utils/index.d.ts.map +1 -0
- package/dist/src/utils/index.js +7 -0
- package/dist/src/utils/logger.d.ts +45 -0
- package/dist/src/utils/logger.d.ts.map +1 -0
- package/dist/src/utils/logger.js +91 -0
- package/dist/src/utils/version.d.ts +25 -0
- package/dist/src/utils/version.d.ts.map +1 -0
- package/dist/src/utils/version.js +97 -0
- package/dist/test/src/cache/APICache.d.ts +23 -0
- package/dist/test/src/cache/APICache.d.ts.map +1 -0
- package/dist/test/src/cache/APICache.js +42 -0
- package/dist/test/src/cache/index.d.ts +5 -0
- package/dist/test/src/cache/index.d.ts.map +1 -0
- package/dist/test/src/cache/index.js +5 -0
- package/dist/test/src/collection/CollectionBrowser.d.ts +24 -0
- package/dist/test/src/collection/CollectionBrowser.d.ts.map +1 -0
- package/dist/test/src/collection/CollectionBrowser.js +115 -0
- package/dist/test/src/collection/CollectionSearch.d.ts +18 -0
- package/dist/test/src/collection/CollectionSearch.d.ts.map +1 -0
- package/dist/test/src/collection/CollectionSearch.js +48 -0
- package/dist/test/src/collection/GitHubClient.d.ts +22 -0
- package/dist/test/src/collection/GitHubClient.d.ts.map +1 -0
- package/dist/test/src/collection/GitHubClient.js +114 -0
- package/dist/test/src/collection/PersonaDetails.d.ts +22 -0
- package/dist/test/src/collection/PersonaDetails.d.ts.map +1 -0
- package/dist/test/src/collection/PersonaDetails.js +71 -0
- package/dist/test/src/collection/PersonaInstaller.d.ts +26 -0
- package/dist/test/src/collection/PersonaInstaller.d.ts.map +1 -0
- package/dist/test/src/collection/PersonaInstaller.js +103 -0
- package/dist/test/src/collection/PersonaSubmitter.d.ts +19 -0
- package/dist/test/src/collection/PersonaSubmitter.d.ts.map +1 -0
- package/dist/test/src/collection/PersonaSubmitter.js +57 -0
- package/dist/test/src/collection/index.d.ts +10 -0
- package/dist/test/src/collection/index.d.ts.map +1 -0
- package/dist/test/src/collection/index.js +10 -0
- package/dist/test/src/config/constants.d.ts +25 -0
- package/dist/test/src/config/constants.d.ts.map +1 -0
- package/dist/test/src/config/constants.js +30 -0
- package/dist/test/src/config/index.d.ts +6 -0
- package/dist/test/src/config/index.d.ts.map +1 -0
- package/dist/test/src/config/index.js +6 -0
- package/dist/test/src/config/indicator-config.d.ts +107 -0
- package/dist/test/src/config/indicator-config.d.ts.map +1 -0
- package/dist/test/src/config/indicator-config.js +158 -0
- package/dist/test/src/constants/defaultPersonas.d.ts +10 -0
- package/dist/test/src/constants/defaultPersonas.d.ts.map +1 -0
- package/dist/test/src/constants/defaultPersonas.js +18 -0
- package/dist/test/src/constants/limits.d.ts +10 -0
- package/dist/test/src/constants/limits.d.ts.map +1 -0
- package/dist/test/src/constants/limits.js +13 -0
- package/dist/test/src/elements/BaseElement.d.ts +81 -0
- package/dist/test/src/elements/BaseElement.d.ts.map +1 -0
- package/dist/test/src/elements/BaseElement.js +381 -0
- package/dist/test/src/elements/FeedbackProcessor.d.ts +57 -0
- package/dist/test/src/elements/FeedbackProcessor.d.ts.map +1 -0
- package/dist/test/src/elements/FeedbackProcessor.js +418 -0
- package/dist/test/src/elements/agents/Agent.d.ts +145 -0
- package/dist/test/src/elements/agents/Agent.d.ts.map +1 -0
- package/dist/test/src/elements/agents/Agent.js +848 -0
- package/dist/test/src/elements/agents/AgentManager.d.ts +125 -0
- package/dist/test/src/elements/agents/AgentManager.d.ts.map +1 -0
- package/dist/test/src/elements/agents/AgentManager.js +608 -0
- package/dist/test/src/elements/agents/constants.d.ts +42 -0
- package/dist/test/src/elements/agents/constants.d.ts.map +1 -0
- package/dist/test/src/elements/agents/constants.js +45 -0
- package/dist/test/src/elements/agents/goalTemplates.d.ts +44 -0
- package/dist/test/src/elements/agents/goalTemplates.d.ts.map +1 -0
- package/dist/test/src/elements/agents/goalTemplates.js +297 -0
- package/dist/test/src/elements/agents/index.d.ts +8 -0
- package/dist/test/src/elements/agents/index.d.ts.map +1 -0
- package/dist/test/src/elements/agents/index.js +8 -0
- package/dist/test/src/elements/agents/ruleEngineConfig.d.ts +76 -0
- package/dist/test/src/elements/agents/ruleEngineConfig.d.ts.map +1 -0
- package/dist/test/src/elements/agents/ruleEngineConfig.js +143 -0
- package/dist/test/src/elements/agents/types.d.ts +97 -0
- package/dist/test/src/elements/agents/types.d.ts.map +1 -0
- package/dist/test/src/elements/agents/types.js +5 -0
- package/dist/test/src/elements/index.d.ts +6 -0
- package/dist/test/src/elements/index.d.ts.map +1 -0
- package/dist/test/src/elements/index.js +6 -0
- package/dist/test/src/elements/memories/Memory.d.ts +110 -0
- package/dist/test/src/elements/memories/Memory.d.ts.map +1 -0
- package/dist/test/src/elements/memories/Memory.js +470 -0
- package/dist/test/src/elements/memories/MemoryManager.d.ts +86 -0
- package/dist/test/src/elements/memories/MemoryManager.d.ts.map +1 -0
- package/dist/test/src/elements/memories/MemoryManager.js +435 -0
- package/dist/test/src/elements/memories/constants.d.ts +42 -0
- package/dist/test/src/elements/memories/constants.d.ts.map +1 -0
- package/dist/test/src/elements/memories/constants.js +49 -0
- package/dist/test/src/elements/memories/index.d.ts +6 -0
- package/dist/test/src/elements/memories/index.d.ts.map +1 -0
- package/dist/test/src/elements/memories/index.js +6 -0
- package/dist/test/src/elements/skills/Skill.d.ts +109 -0
- package/dist/test/src/elements/skills/Skill.d.ts.map +1 -0
- package/dist/test/src/elements/skills/Skill.js +381 -0
- package/dist/test/src/elements/templates/Template.d.ts +138 -0
- package/dist/test/src/elements/templates/Template.d.ts.map +1 -0
- package/dist/test/src/elements/templates/Template.js +673 -0
- package/dist/test/src/elements/templates/TemplateManager.d.ts +104 -0
- package/dist/test/src/elements/templates/TemplateManager.d.ts.map +1 -0
- package/dist/test/src/elements/templates/TemplateManager.js +496 -0
- package/dist/test/src/elements/templates/index.d.ts +6 -0
- package/dist/test/src/elements/templates/index.d.ts.map +1 -0
- package/dist/test/src/elements/templates/index.js +6 -0
- package/dist/test/src/errors/SecurityError.d.ts +29 -0
- package/dist/test/src/errors/SecurityError.d.ts.map +1 -0
- package/dist/test/src/errors/SecurityError.js +47 -0
- package/dist/test/src/errors/index.d.ts +2 -0
- package/dist/test/src/errors/index.d.ts.map +1 -0
- package/dist/test/src/errors/index.js +2 -0
- package/dist/test/src/index.barrel.d.ts +21 -0
- package/dist/test/src/index.barrel.d.ts.map +1 -0
- package/dist/test/src/index.barrel.js +31 -0
- package/dist/test/src/index.d.ts +223 -0
- package/dist/test/src/index.d.ts.map +1 -0
- package/dist/test/src/index.js +1594 -0
- package/dist/test/src/marketplace/GitHubClient.d.ts +22 -0
- package/dist/test/src/marketplace/GitHubClient.d.ts.map +1 -0
- package/dist/test/src/marketplace/GitHubClient.js +112 -0
- package/dist/test/src/marketplace/MarketplaceBrowser.d.ts +21 -0
- package/dist/test/src/marketplace/MarketplaceBrowser.d.ts.map +1 -0
- package/dist/test/src/marketplace/MarketplaceBrowser.js +45 -0
- package/dist/test/src/marketplace/MarketplaceSearch.d.ts +18 -0
- package/dist/test/src/marketplace/MarketplaceSearch.d.ts.map +1 -0
- package/dist/test/src/marketplace/MarketplaceSearch.js +36 -0
- package/dist/test/src/marketplace/PersonaDetails.d.ts +22 -0
- package/dist/test/src/marketplace/PersonaDetails.d.ts.map +1 -0
- package/dist/test/src/marketplace/PersonaDetails.js +71 -0
- package/dist/test/src/marketplace/PersonaInstaller.d.ts +25 -0
- package/dist/test/src/marketplace/PersonaInstaller.d.ts.map +1 -0
- package/dist/test/src/marketplace/PersonaInstaller.js +100 -0
- package/dist/test/src/marketplace/PersonaSubmitter.d.ts +19 -0
- package/dist/test/src/marketplace/PersonaSubmitter.d.ts.map +1 -0
- package/dist/test/src/marketplace/PersonaSubmitter.js +57 -0
- package/dist/test/src/marketplace/index.d.ts +10 -0
- package/dist/test/src/marketplace/index.d.ts.map +1 -0
- package/dist/test/src/marketplace/index.js +10 -0
- package/dist/test/src/persona/PersonaElement.d.ts +64 -0
- package/dist/test/src/persona/PersonaElement.d.ts.map +1 -0
- package/dist/test/src/persona/PersonaElement.js +223 -0
- package/dist/test/src/persona/PersonaElementManager.d.ts +97 -0
- package/dist/test/src/persona/PersonaElementManager.d.ts.map +1 -0
- package/dist/test/src/persona/PersonaElementManager.js +342 -0
- package/dist/test/src/persona/PersonaLoader.d.ts +34 -0
- package/dist/test/src/persona/PersonaLoader.d.ts.map +1 -0
- package/dist/test/src/persona/PersonaLoader.js +145 -0
- package/dist/test/src/persona/PersonaManager.d.ts +112 -0
- package/dist/test/src/persona/PersonaManager.d.ts.map +1 -0
- package/dist/test/src/persona/PersonaManager.js +341 -0
- package/dist/test/src/persona/PersonaValidator.d.ts +33 -0
- package/dist/test/src/persona/PersonaValidator.d.ts.map +1 -0
- package/dist/test/src/persona/PersonaValidator.js +157 -0
- package/dist/test/src/persona/export-import/PersonaExporter.d.ts +43 -0
- package/dist/test/src/persona/export-import/PersonaExporter.d.ts.map +1 -0
- package/dist/test/src/persona/export-import/PersonaExporter.js +99 -0
- package/dist/test/src/persona/export-import/PersonaImporter.d.ts +65 -0
- package/dist/test/src/persona/export-import/PersonaImporter.d.ts.map +1 -0
- package/dist/test/src/persona/export-import/PersonaImporter.js +315 -0
- package/dist/test/src/persona/export-import/PersonaSharer.d.ts +60 -0
- package/dist/test/src/persona/export-import/PersonaSharer.d.ts.map +1 -0
- package/dist/test/src/persona/export-import/PersonaSharer.js +502 -0
- package/dist/test/src/persona/export-import/index.d.ts +10 -0
- package/dist/test/src/persona/export-import/index.d.ts.map +1 -0
- package/dist/test/src/persona/export-import/index.js +7 -0
- package/dist/test/src/persona/index.d.ts +7 -0
- package/dist/test/src/persona/index.d.ts.map +1 -0
- package/dist/test/src/persona/index.js +7 -0
- package/dist/test/src/portfolio/MigrationManager.d.ts +44 -0
- package/dist/test/src/portfolio/MigrationManager.d.ts.map +1 -0
- package/dist/test/src/portfolio/MigrationManager.js +163 -0
- package/dist/test/src/portfolio/PortfolioManager.d.ts +54 -0
- package/dist/test/src/portfolio/PortfolioManager.d.ts.map +1 -0
- package/dist/test/src/portfolio/PortfolioManager.js +224 -0
- package/dist/test/src/portfolio/types.d.ts +18 -0
- package/dist/test/src/portfolio/types.d.ts.map +1 -0
- package/dist/test/src/portfolio/types.js +13 -0
- package/dist/test/src/security/InputValidator.d.ts +80 -0
- package/dist/test/src/security/InputValidator.d.ts.map +1 -0
- package/dist/test/src/security/InputValidator.js +436 -0
- package/dist/test/src/security/audit/SecurityAuditor.d.ts +44 -0
- package/dist/test/src/security/audit/SecurityAuditor.d.ts.map +1 -0
- package/dist/test/src/security/audit/SecurityAuditor.js +274 -0
- package/dist/test/src/security/audit/config/suppressions.d.ts +34 -0
- package/dist/test/src/security/audit/config/suppressions.d.ts.map +1 -0
- package/dist/test/src/security/audit/config/suppressions.js +575 -0
- package/dist/test/src/security/audit/index.d.ts +14 -0
- package/dist/test/src/security/audit/index.d.ts.map +1 -0
- package/dist/test/src/security/audit/index.js +15 -0
- package/dist/test/src/security/audit/reporters/ConsoleReporter.d.ts +46 -0
- package/dist/test/src/security/audit/reporters/ConsoleReporter.d.ts.map +1 -0
- package/dist/test/src/security/audit/reporters/ConsoleReporter.js +174 -0
- package/dist/test/src/security/audit/reporters/JsonReporter.d.ts +13 -0
- package/dist/test/src/security/audit/reporters/JsonReporter.d.ts.map +1 -0
- package/dist/test/src/security/audit/reporters/JsonReporter.js +25 -0
- package/dist/test/src/security/audit/reporters/MarkdownReporter.d.ts +13 -0
- package/dist/test/src/security/audit/reporters/MarkdownReporter.d.ts.map +1 -0
- package/dist/test/src/security/audit/reporters/MarkdownReporter.js +79 -0
- package/dist/test/src/security/audit/rules/SecurityRules.d.ts +20 -0
- package/dist/test/src/security/audit/rules/SecurityRules.d.ts.map +1 -0
- package/dist/test/src/security/audit/rules/SecurityRules.js +244 -0
- package/dist/test/src/security/audit/scanners/CodeScanner.d.ts +47 -0
- package/dist/test/src/security/audit/scanners/CodeScanner.d.ts.map +1 -0
- package/dist/test/src/security/audit/scanners/CodeScanner.js +174 -0
- package/dist/test/src/security/audit/scanners/ConfigurationScanner.d.ts +13 -0
- package/dist/test/src/security/audit/scanners/ConfigurationScanner.d.ts.map +1 -0
- package/dist/test/src/security/audit/scanners/ConfigurationScanner.js +22 -0
- package/dist/test/src/security/audit/scanners/DependencyScanner.d.ts +13 -0
- package/dist/test/src/security/audit/scanners/DependencyScanner.d.ts.map +1 -0
- package/dist/test/src/security/audit/scanners/DependencyScanner.js +22 -0
- package/dist/test/src/security/audit/types.d.ts +94 -0
- package/dist/test/src/security/audit/types.d.ts.map +1 -0
- package/dist/test/src/security/audit/types.js +6 -0
- package/dist/test/src/security/commandValidator.d.ts +7 -0
- package/dist/test/src/security/commandValidator.d.ts.map +1 -0
- package/dist/test/src/security/commandValidator.js +78 -0
- package/dist/test/src/security/constants.d.ts +24 -0
- package/dist/test/src/security/constants.d.ts.map +1 -0
- package/dist/test/src/security/constants.js +26 -0
- package/dist/test/src/security/contentValidator.d.ts +47 -0
- package/dist/test/src/security/contentValidator.d.ts.map +1 -0
- package/dist/test/src/security/contentValidator.js +301 -0
- package/dist/test/src/security/errors.d.ts +14 -0
- package/dist/test/src/security/errors.d.ts.map +1 -0
- package/dist/test/src/security/errors.js +28 -0
- package/dist/test/src/security/fileLockManager.d.ts +70 -0
- package/dist/test/src/security/fileLockManager.d.ts.map +1 -0
- package/dist/test/src/security/fileLockManager.js +187 -0
- package/dist/test/src/security/index.d.ts +12 -0
- package/dist/test/src/security/index.d.ts.map +1 -0
- package/dist/test/src/security/index.js +14 -0
- package/dist/test/src/security/pathValidator.d.ts +9 -0
- package/dist/test/src/security/pathValidator.d.ts.map +1 -0
- package/dist/test/src/security/pathValidator.js +98 -0
- package/dist/test/src/security/regexValidator.d.ts +59 -0
- package/dist/test/src/security/regexValidator.d.ts.map +1 -0
- package/dist/test/src/security/regexValidator.js +214 -0
- package/dist/test/src/security/secureYamlParser.d.ts +46 -0
- package/dist/test/src/security/secureYamlParser.d.ts.map +1 -0
- package/dist/test/src/security/secureYamlParser.js +203 -0
- package/dist/test/src/security/securityMonitor.d.ts +58 -0
- package/dist/test/src/security/securityMonitor.d.ts.map +1 -0
- package/dist/test/src/security/securityMonitor.js +108 -0
- package/dist/test/src/security/tokenManager.d.ts +85 -0
- package/dist/test/src/security/tokenManager.d.ts.map +1 -0
- package/dist/test/src/security/tokenManager.js +286 -0
- package/dist/test/src/security/validators/unicodeValidator.d.ts +97 -0
- package/dist/test/src/security/validators/unicodeValidator.d.ts.map +1 -0
- package/dist/test/src/security/validators/unicodeValidator.js +312 -0
- package/dist/test/src/security/yamlValidator.d.ts +21 -0
- package/dist/test/src/security/yamlValidator.d.ts.map +1 -0
- package/dist/test/src/security/yamlValidator.js +164 -0
- package/dist/test/src/server/ServerSetup.d.ts +35 -0
- package/dist/test/src/server/ServerSetup.d.ts.map +1 -0
- package/dist/test/src/server/ServerSetup.js +116 -0
- package/dist/test/src/server/index.d.ts +7 -0
- package/dist/test/src/server/index.d.ts.map +1 -0
- package/dist/test/src/server/index.js +7 -0
- package/dist/test/src/server/startup.d.ts +31 -0
- package/dist/test/src/server/startup.d.ts.map +1 -0
- package/dist/test/src/server/startup.js +67 -0
- package/dist/test/src/server/tools/CollectionTools.d.ts +10 -0
- package/dist/test/src/server/tools/CollectionTools.d.ts.map +1 -0
- package/dist/test/src/server/tools/CollectionTools.js +96 -0
- package/dist/test/src/server/tools/ConfigTools.d.ts +10 -0
- package/dist/test/src/server/tools/ConfigTools.d.ts.map +1 -0
- package/dist/test/src/server/tools/ConfigTools.js +63 -0
- package/dist/test/src/server/tools/MarketplaceTools.d.ts +10 -0
- package/dist/test/src/server/tools/MarketplaceTools.d.ts.map +1 -0
- package/dist/test/src/server/tools/MarketplaceTools.js +92 -0
- package/dist/test/src/server/tools/PersonaTools.d.ts +10 -0
- package/dist/test/src/server/tools/PersonaTools.d.ts.map +1 -0
- package/dist/test/src/server/tools/PersonaTools.js +257 -0
- package/dist/test/src/server/tools/ToolRegistry.d.ts +37 -0
- package/dist/test/src/server/tools/ToolRegistry.d.ts.map +1 -0
- package/dist/test/src/server/tools/ToolRegistry.js +40 -0
- package/dist/test/src/server/tools/UpdateTools.d.ts +10 -0
- package/dist/test/src/server/tools/UpdateTools.d.ts.map +1 -0
- package/dist/test/src/server/tools/UpdateTools.js +64 -0
- package/dist/test/src/server/tools/UserTools.d.ts +10 -0
- package/dist/test/src/server/tools/UserTools.d.ts.map +1 -0
- package/dist/test/src/server/tools/UserTools.js +51 -0
- package/dist/test/src/server/tools/index.d.ts +10 -0
- package/dist/test/src/server/tools/index.d.ts.map +1 -0
- package/dist/test/src/server/tools/index.js +10 -0
- package/dist/test/src/server/types.d.ts +34 -0
- package/dist/test/src/server/types.d.ts.map +1 -0
- package/dist/test/src/server/types.js +5 -0
- package/dist/test/src/tools/debug.d.ts +20 -0
- package/dist/test/src/tools/debug.d.ts.map +1 -0
- package/dist/test/src/tools/debug.js +37 -0
- package/dist/test/src/types/cache.d.ts +8 -0
- package/dist/test/src/types/cache.d.ts.map +1 -0
- package/dist/test/src/types/cache.js +5 -0
- package/dist/test/src/types/collection.d.ts +23 -0
- package/dist/test/src/types/collection.d.ts.map +1 -0
- package/dist/test/src/types/collection.js +5 -0
- package/dist/test/src/types/elements/IElement.d.ts +123 -0
- package/dist/test/src/types/elements/IElement.d.ts.map +1 -0
- package/dist/test/src/types/elements/IElement.js +30 -0
- package/dist/test/src/types/elements/IElementManager.d.ts +65 -0
- package/dist/test/src/types/elements/IElementManager.d.ts.map +1 -0
- package/dist/test/src/types/elements/IElementManager.js +6 -0
- package/dist/test/src/types/elements/IRatingManager.d.ts +109 -0
- package/dist/test/src/types/elements/IRatingManager.d.ts.map +1 -0
- package/dist/test/src/types/elements/IRatingManager.js +6 -0
- package/dist/test/src/types/elements/IReferenceResolver.d.ts +52 -0
- package/dist/test/src/types/elements/IReferenceResolver.d.ts.map +1 -0
- package/dist/test/src/types/elements/IReferenceResolver.js +6 -0
- package/dist/test/src/types/elements/RatingBreakdowns.d.ts +49 -0
- package/dist/test/src/types/elements/RatingBreakdowns.d.ts.map +1 -0
- package/dist/test/src/types/elements/RatingBreakdowns.js +6 -0
- package/dist/test/src/types/elements/index.d.ts +9 -0
- package/dist/test/src/types/elements/index.d.ts.map +1 -0
- package/dist/test/src/types/elements/index.js +11 -0
- package/dist/test/src/types/index.d.ts +9 -0
- package/dist/test/src/types/index.d.ts.map +1 -0
- package/dist/test/src/types/index.js +9 -0
- package/dist/test/src/types/marketplace.d.ts +23 -0
- package/dist/test/src/types/marketplace.d.ts.map +1 -0
- package/dist/test/src/types/marketplace.js +5 -0
- package/dist/test/src/types/mcp.d.ts +84 -0
- package/dist/test/src/types/mcp.d.ts.map +1 -0
- package/dist/test/src/types/mcp.js +80 -0
- package/dist/test/src/types/persona.d.ts +30 -0
- package/dist/test/src/types/persona.d.ts.map +1 -0
- package/dist/test/src/types/persona.js +5 -0
- package/dist/test/src/update/BackupManager.d.ts +46 -0
- package/dist/test/src/update/BackupManager.d.ts.map +1 -0
- package/dist/test/src/update/BackupManager.js +261 -0
- package/dist/test/src/update/DependencyChecker.d.ts +41 -0
- package/dist/test/src/update/DependencyChecker.d.ts.map +1 -0
- package/dist/test/src/update/DependencyChecker.js +132 -0
- package/dist/test/src/update/RateLimiter.d.ts +80 -0
- package/dist/test/src/update/RateLimiter.d.ts.map +1 -0
- package/dist/test/src/update/RateLimiter.js +172 -0
- package/dist/test/src/update/SignatureVerifier.d.ts +71 -0
- package/dist/test/src/update/SignatureVerifier.d.ts.map +1 -0
- package/dist/test/src/update/SignatureVerifier.js +214 -0
- package/dist/test/src/update/UpdateChecker.d.ts +127 -0
- package/dist/test/src/update/UpdateChecker.d.ts.map +1 -0
- package/dist/test/src/update/UpdateChecker.js +469 -0
- package/dist/test/src/update/UpdateManager.d.ts +41 -0
- package/dist/test/src/update/UpdateManager.d.ts.map +1 -0
- package/dist/test/src/update/UpdateManager.js +260 -0
- package/dist/test/src/update/VersionManager.d.ts +31 -0
- package/dist/test/src/update/VersionManager.d.ts.map +1 -0
- package/dist/test/src/update/VersionManager.js +134 -0
- package/dist/test/src/update/index.d.ts +9 -0
- package/dist/test/src/update/index.d.ts.map +1 -0
- package/dist/test/src/update/index.js +9 -0
- package/dist/test/src/utils/filesystem.d.ts +29 -0
- package/dist/test/src/utils/filesystem.d.ts.map +1 -0
- package/dist/test/src/utils/filesystem.js +94 -0
- package/dist/test/src/utils/git.d.ts +32 -0
- package/dist/test/src/utils/git.d.ts.map +1 -0
- package/dist/test/src/utils/git.js +65 -0
- package/dist/test/src/utils/index.d.ts +7 -0
- package/dist/test/src/utils/index.d.ts.map +1 -0
- package/dist/test/src/utils/index.js +7 -0
- package/dist/test/src/utils/logger.d.ts +45 -0
- package/dist/test/src/utils/logger.d.ts.map +1 -0
- package/dist/test/src/utils/logger.js +91 -0
- package/dist/test/src/utils/version.d.ts +25 -0
- package/dist/test/src/utils/version.d.ts.map +1 -0
- package/dist/test/src/utils/version.js +97 -0
- package/dist/test/test/__tests__/integration/helpers/file-utils.d.ts +33 -0
- package/dist/test/test/__tests__/integration/helpers/file-utils.d.ts.map +1 -0
- package/dist/test/test/__tests__/integration/helpers/file-utils.js +83 -0
- package/dist/test/test/__tests__/integration/helpers/test-fixtures.d.ts +26 -0
- package/dist/test/test/__tests__/integration/helpers/test-fixtures.d.ts.map +1 -0
- package/dist/test/test/__tests__/integration/helpers/test-fixtures.js +95 -0
- package/dist/test/test/__tests__/integration/helpers/test-server.d.ts +26 -0
- package/dist/test/test/__tests__/integration/helpers/test-server.d.ts.map +1 -0
- package/dist/test/test/__tests__/integration/helpers/test-server.js +41 -0
- package/dist/test/test/__tests__/integration/setup.d.ts +8 -0
- package/dist/test/test/__tests__/integration/setup.d.ts.map +1 -0
- package/dist/test/test/__tests__/integration/setup.js +31 -0
- package/dist/test/test/__tests__/integration/teardown.d.ts +5 -0
- package/dist/test/test/__tests__/integration/teardown.d.ts.map +1 -0
- package/dist/test/test/__tests__/integration/teardown.js +23 -0
- package/dist/test/test/__tests__/security/framework/RapidSecurityTesting.d.ts +34 -0
- package/dist/test/test/__tests__/security/framework/RapidSecurityTesting.d.ts.map +1 -0
- package/dist/test/test/__tests__/security/framework/RapidSecurityTesting.js +224 -0
- package/dist/test/test/__tests__/security/framework/SecurityTestFramework.d.ts +89 -0
- package/dist/test/test/__tests__/security/framework/SecurityTestFramework.d.ts.map +1 -0
- package/dist/test/test/__tests__/security/framework/SecurityTestFramework.js +543 -0
- package/dist/test/test/__tests__/security/index.d.ts +46 -0
- package/dist/test/test/__tests__/security/index.d.ts.map +1 -0
- package/dist/test/test/__tests__/security/index.js +98 -0
- package/dist/test/test/__tests__/security/setup.d.ts +3 -0
- package/dist/test/test/__tests__/security/setup.d.ts.map +1 -0
- package/dist/test/test/__tests__/security/setup.js +23 -0
- package/dist/tools/debug.d.ts +20 -0
- package/dist/tools/debug.d.ts.map +1 -0
- package/dist/tools/debug.js +37 -0
- package/dist/types/cache.d.ts +8 -0
- package/dist/types/cache.d.ts.map +1 -0
- package/dist/types/cache.js +5 -0
- package/dist/types/collection.d.ts +23 -0
- package/dist/types/collection.d.ts.map +1 -0
- package/dist/types/collection.js +5 -0
- package/dist/types/elements/IElement.d.ts +123 -0
- package/dist/types/elements/IElement.d.ts.map +1 -0
- package/dist/types/elements/IElement.js +30 -0
- package/dist/types/elements/IElementManager.d.ts +65 -0
- package/dist/types/elements/IElementManager.d.ts.map +1 -0
- package/dist/types/elements/IElementManager.js +6 -0
- package/dist/types/elements/IRatingManager.d.ts +109 -0
- package/dist/types/elements/IRatingManager.d.ts.map +1 -0
- package/dist/types/elements/IRatingManager.js +6 -0
- package/dist/types/elements/IReferenceResolver.d.ts +52 -0
- package/dist/types/elements/IReferenceResolver.d.ts.map +1 -0
- package/dist/types/elements/IReferenceResolver.js +6 -0
- package/dist/types/elements/RatingBreakdowns.d.ts +49 -0
- package/dist/types/elements/RatingBreakdowns.d.ts.map +1 -0
- package/dist/types/elements/RatingBreakdowns.js +6 -0
- package/dist/types/elements/index.d.ts +9 -0
- package/dist/types/elements/index.d.ts.map +1 -0
- package/dist/types/elements/index.js +11 -0
- package/dist/types/index.d.ts +9 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +9 -0
- package/dist/types/marketplace.d.ts +23 -0
- package/dist/types/marketplace.d.ts.map +1 -0
- package/dist/types/marketplace.js +5 -0
- package/dist/types/mcp.d.ts +84 -0
- package/dist/types/mcp.d.ts.map +1 -0
- package/dist/types/mcp.js +80 -0
- package/dist/types/persona.d.ts +30 -0
- package/dist/types/persona.d.ts.map +1 -0
- package/dist/types/persona.js +5 -0
- package/dist/update/BackupManager.d.ts +46 -0
- package/dist/update/BackupManager.d.ts.map +1 -0
- package/dist/update/BackupManager.js +261 -0
- package/dist/update/DependencyChecker.d.ts +41 -0
- package/dist/update/DependencyChecker.d.ts.map +1 -0
- package/dist/update/DependencyChecker.js +132 -0
- package/dist/update/RateLimiter.d.ts +80 -0
- package/dist/update/RateLimiter.d.ts.map +1 -0
- package/dist/update/RateLimiter.js +172 -0
- package/dist/update/SignatureVerifier.d.ts +71 -0
- package/dist/update/SignatureVerifier.d.ts.map +1 -0
- package/dist/update/SignatureVerifier.js +214 -0
- package/dist/update/UpdateChecker.d.ts +127 -0
- package/dist/update/UpdateChecker.d.ts.map +1 -0
- package/dist/update/UpdateChecker.js +469 -0
- package/dist/update/UpdateManager.d.ts +41 -0
- package/dist/update/UpdateManager.d.ts.map +1 -0
- package/dist/update/UpdateManager.js +260 -0
- package/dist/update/VersionManager.d.ts +31 -0
- package/dist/update/VersionManager.d.ts.map +1 -0
- package/dist/update/VersionManager.js +134 -0
- package/dist/update/index.d.ts +9 -0
- package/dist/update/index.d.ts.map +1 -0
- package/dist/update/index.js +9 -0
- package/dist/utils/filesystem.d.ts +29 -0
- package/dist/utils/filesystem.d.ts.map +1 -0
- package/dist/utils/filesystem.js +94 -0
- package/dist/utils/git.d.ts +32 -0
- package/dist/utils/git.d.ts.map +1 -0
- package/dist/utils/git.js +65 -0
- package/dist/utils/index.d.ts +7 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +7 -0
- package/dist/utils/logger.d.ts +45 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +91 -0
- package/dist/utils/version.d.ts +25 -0
- package/dist/utils/version.d.ts.map +1 -0
- package/dist/utils/version.js +97 -0
- package/package.json +128 -0
|
@@ -0,0 +1,301 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Content Validator for DollhouseMCP
|
|
3
|
+
*
|
|
4
|
+
* Protects against prompt injection attacks in collection personas
|
|
5
|
+
* by detecting and sanitizing malicious content patterns.
|
|
6
|
+
*
|
|
7
|
+
* Security: SEC-001 - Critical vulnerability protection
|
|
8
|
+
*/
|
|
9
|
+
import { SecurityError } from './errors.js';
|
|
10
|
+
import { SecurityMonitor } from './securityMonitor.js';
|
|
11
|
+
import { RegexValidator } from './regexValidator.js';
|
|
12
|
+
import { SECURITY_LIMITS } from './constants.js';
|
|
13
|
+
import { UnicodeValidator } from './validators/unicodeValidator.js';
|
|
14
|
+
export class ContentValidator {
|
|
15
|
+
/**
|
|
16
|
+
* Pattern-based detection system for prompt injection attacks.
|
|
17
|
+
*
|
|
18
|
+
* This approach was chosen over AI-based detection because:
|
|
19
|
+
* 1. Pattern matching cannot be socially engineered or confused
|
|
20
|
+
* 2. Deterministic results ensure consistent security
|
|
21
|
+
* 3. No additional API calls or latency
|
|
22
|
+
* 4. Can't be bypassed by clever prompt engineering
|
|
23
|
+
*
|
|
24
|
+
* The patterns below represent known attack vectors from security research
|
|
25
|
+
* and real-world exploit attempts against AI systems.
|
|
26
|
+
*/
|
|
27
|
+
// Prompt injection patterns that could compromise AI assistants
|
|
28
|
+
static INJECTION_PATTERNS = [
|
|
29
|
+
// System prompt override attempts
|
|
30
|
+
{ pattern: /\[SYSTEM:\s*.*?\]/gi, severity: 'critical', description: 'System prompt override' },
|
|
31
|
+
{ pattern: /\[ADMIN:\s*.*?\]/gi, severity: 'critical', description: 'Admin prompt override' },
|
|
32
|
+
{ pattern: /\[ASSISTANT:\s*.*?\]/gi, severity: 'critical', description: 'Assistant prompt override' },
|
|
33
|
+
{ pattern: /\[USER:\s*.*?\]/gi, severity: 'high', description: 'User prompt override' },
|
|
34
|
+
// Instruction manipulation
|
|
35
|
+
{ pattern: /ignore\s+(all\s+)?previous\s+instructions/gi, severity: 'critical', description: 'Instruction override' },
|
|
36
|
+
{ pattern: /ignore\s+(all\s+)?prior\s+instructions/gi, severity: 'critical', description: 'Instruction override' },
|
|
37
|
+
{ pattern: /disregard\s+(all\s+)?previous\s+instructions/gi, severity: 'critical', description: 'Instruction override' },
|
|
38
|
+
{ pattern: /forget\s+(all\s+)?previous\s+instructions/gi, severity: 'critical', description: 'Instruction override' },
|
|
39
|
+
{ pattern: /you\s+are\s+now\s+(admin|root|system|sudo)/gi, severity: 'critical', description: 'Role elevation attempt' },
|
|
40
|
+
{ pattern: /act\s+as\s+(admin|root|system|sudo)/gi, severity: 'critical', description: 'Role elevation attempt' },
|
|
41
|
+
// Data exfiltration attempts
|
|
42
|
+
{ pattern: /export\s+all\s+(files|data|personas|tokens|credentials)/gi, severity: 'critical', description: 'Data exfiltration' },
|
|
43
|
+
{ pattern: /send\s+all\s+(files|data|personas|tokens|credentials)\s+to/gi, severity: 'critical', description: 'Data exfiltration' },
|
|
44
|
+
{ pattern: /list\s+all\s+(files|tokens|credentials|secrets)/gi, severity: 'high', description: 'Information disclosure' },
|
|
45
|
+
{ pattern: /show\s+me\s+all\s+(tokens|credentials|secrets|api\s+keys)/gi, severity: 'high', description: 'Credential disclosure' },
|
|
46
|
+
// Command execution patterns
|
|
47
|
+
{ pattern: /curl\s+[^\s]+\.(com|net|org|io|dev)/gi, severity: 'critical', description: 'External command execution' },
|
|
48
|
+
{ pattern: /wget\s+[^\s]+\.(com|net|org|io|dev)/gi, severity: 'critical', description: 'External command execution' },
|
|
49
|
+
{ pattern: /\$\([^)]+\)/g, severity: 'critical', description: 'Command substitution' },
|
|
50
|
+
{ pattern: /`[^`]+`/g, severity: 'critical', description: 'Backtick command execution' },
|
|
51
|
+
{ pattern: /eval\s*\(/gi, severity: 'critical', description: 'Code evaluation' },
|
|
52
|
+
{ pattern: /exec\s*\(/gi, severity: 'critical', description: 'Code execution' },
|
|
53
|
+
{ pattern: /os\.system\s*\(/gi, severity: 'critical', description: 'System command execution' },
|
|
54
|
+
{ pattern: /subprocess\.(call|run|Popen)/gi, severity: 'critical', description: 'Subprocess execution' },
|
|
55
|
+
// Token/credential patterns
|
|
56
|
+
{ pattern: /GITHUB_TOKEN/gi, severity: 'high', description: 'Token reference' },
|
|
57
|
+
{ pattern: /ghp_[a-zA-Z0-9]{36}/g, severity: 'critical', description: 'GitHub token exposure' },
|
|
58
|
+
{ pattern: /gho_[a-zA-Z0-9]{36}/g, severity: 'critical', description: 'GitHub OAuth token exposure' },
|
|
59
|
+
// Path traversal in content
|
|
60
|
+
{ pattern: /\.\.\/\.\.\/\.\.\//g, severity: 'high', description: 'Path traversal attempt' },
|
|
61
|
+
{ pattern: /\/etc\/passwd/gi, severity: 'high', description: 'Sensitive file access' },
|
|
62
|
+
{ pattern: /\/\.ssh\//gi, severity: 'high', description: 'SSH key access attempt' },
|
|
63
|
+
];
|
|
64
|
+
// Malicious YAML patterns
|
|
65
|
+
static MALICIOUS_YAML_PATTERNS = [
|
|
66
|
+
// Language-specific deserialization attacks
|
|
67
|
+
/!!python\/object/,
|
|
68
|
+
/!!python\/module/,
|
|
69
|
+
/!!python\/name/,
|
|
70
|
+
/!!ruby\/object/,
|
|
71
|
+
/!!ruby\/hash/,
|
|
72
|
+
/!!ruby\/struct/,
|
|
73
|
+
/!!ruby\/marshal/,
|
|
74
|
+
/!!java/,
|
|
75
|
+
/!!javax/,
|
|
76
|
+
/!!com\.sun/,
|
|
77
|
+
/!!perl\/hash/,
|
|
78
|
+
/!!perl\/code/,
|
|
79
|
+
/!!php\/object/,
|
|
80
|
+
// Constructor/function injection
|
|
81
|
+
/!!exec/,
|
|
82
|
+
/!!eval/,
|
|
83
|
+
/!!new/,
|
|
84
|
+
/!!construct/,
|
|
85
|
+
/!!apply/,
|
|
86
|
+
/!!call/,
|
|
87
|
+
/!!invoke/,
|
|
88
|
+
// Code execution patterns - more specific to avoid false positives
|
|
89
|
+
/subprocess\./,
|
|
90
|
+
/os\.system/,
|
|
91
|
+
/eval\s*\(/,
|
|
92
|
+
/exec\s*\(/,
|
|
93
|
+
/__import__\s*\(/,
|
|
94
|
+
/require\s*\(/,
|
|
95
|
+
/import\s+(?:os|sys|subprocess|eval|exec)/,
|
|
96
|
+
/include\s+["'].*\.(?:php|sh|py|js|rb)["']/,
|
|
97
|
+
// Command execution variants - more specific patterns
|
|
98
|
+
/popen\s*\(/,
|
|
99
|
+
/spawn\s*\(/,
|
|
100
|
+
/system\s*\(/,
|
|
101
|
+
/backtick\s*\(/,
|
|
102
|
+
/shell_exec\s*\(/,
|
|
103
|
+
/passthru\s*\(/,
|
|
104
|
+
/proc_open\s*\(/,
|
|
105
|
+
// Network operations - require suspicious context
|
|
106
|
+
/socket\.connect/, // Detects socket connection attempts
|
|
107
|
+
/urllib\.request/, // Python HTTP library usage
|
|
108
|
+
/requests\.(?:get|post|put|delete)\s*\(/, // Detects HTTP requests with method calls
|
|
109
|
+
/fetch\s*\(\s*["']https?:\/\//, // Detects fetch calls to external URLs
|
|
110
|
+
/new\s+XMLHttpRequest/, // JavaScript AJAX object creation
|
|
111
|
+
/\.(?:get|post|put|delete)\s*\(\s*["']https?:\/\//, // Method chaining with HTTP requests
|
|
112
|
+
// File system operations - require suspicious context
|
|
113
|
+
/(?:fs\.|file\.|)\s*open\s*\(\s*["'](?:\/etc\/|\/bin\/|\.\.\/)/, // File open with suspicious paths
|
|
114
|
+
/file_get_contents\s*\(/, // PHP file reading function
|
|
115
|
+
/file_put_contents\s*\(/, // PHP file writing function
|
|
116
|
+
/fopen\s*\(\s*["'](?:\/etc\/|\/bin\/|\.\.\/)/, // File open with dangerous system paths
|
|
117
|
+
/(?:fs\.)?\s*readFile\s*\(\s*["'](?:\/etc\/|\/bin\/|\.\.\/)/, // Node.js file read with path traversal
|
|
118
|
+
/(?:fs\.)?\s*writeFile\s*\(\s*["'](?:\/(?:bin|etc|tmp)\/|\.\.\/)/, // Node.js file write to system dirs
|
|
119
|
+
// Protocol handlers
|
|
120
|
+
/file:\/\//,
|
|
121
|
+
/data:\/\//,
|
|
122
|
+
/expect:\/\//,
|
|
123
|
+
/php:\/\//,
|
|
124
|
+
/phar:\/\//,
|
|
125
|
+
/zip:\/\//,
|
|
126
|
+
/ssh2:\/\//,
|
|
127
|
+
/ogg:\/\//,
|
|
128
|
+
// YAML-specific dangerous features
|
|
129
|
+
/&[a-zA-Z0-9_]+\s*!!/, // Anchor with tag combination
|
|
130
|
+
/\*[a-zA-Z0-9_]+\s*!!/, // Alias with tag combination
|
|
131
|
+
/!!merge/,
|
|
132
|
+
/!!binary/,
|
|
133
|
+
/!!timestamp/,
|
|
134
|
+
// Unicode/encoding bypass attempts - prevent visual spoofing attacks
|
|
135
|
+
/\\[uU]0*(?:22|27|60|3[cC])/, // Unicode escapes for quotes (") and brackets (<>)
|
|
136
|
+
/[\u202A-\u202E\u2066-\u2069]/, // Direction override chars (RLO, LRO, isolates)
|
|
137
|
+
/[\u200B-\u200F\u2028-\u202F]/, // Zero-width spaces, line/paragraph separators
|
|
138
|
+
/[\uFEFF\uFFFE\uFFFF]/, // BOM, non-characters for payload hiding
|
|
139
|
+
];
|
|
140
|
+
/**
|
|
141
|
+
* Validates and sanitizes persona content for security threats
|
|
142
|
+
*/
|
|
143
|
+
static validateAndSanitize(content) {
|
|
144
|
+
// Length validation before pattern matching
|
|
145
|
+
if (content.length > SECURITY_LIMITS.MAX_CONTENT_LENGTH) {
|
|
146
|
+
throw new SecurityError(`Content exceeds maximum length of ${SECURITY_LIMITS.MAX_CONTENT_LENGTH} characters (${content.length} provided)`);
|
|
147
|
+
}
|
|
148
|
+
const detectedPatterns = [];
|
|
149
|
+
let sanitized = content;
|
|
150
|
+
let highestSeverity = 'low';
|
|
151
|
+
// Unicode normalization preprocessing to prevent bypass attacks
|
|
152
|
+
const unicodeResult = UnicodeValidator.normalize(sanitized);
|
|
153
|
+
sanitized = unicodeResult.normalizedContent;
|
|
154
|
+
if (!unicodeResult.isValid && unicodeResult.detectedIssues) {
|
|
155
|
+
detectedPatterns.push(...unicodeResult.detectedIssues.map(issue => `Unicode: ${issue}`));
|
|
156
|
+
if (unicodeResult.severity) {
|
|
157
|
+
highestSeverity = unicodeResult.severity;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
// Check for injection patterns
|
|
161
|
+
for (const { pattern, severity, description } of this.INJECTION_PATTERNS) {
|
|
162
|
+
// These are trusted internal patterns, so we disable ReDoS rejection
|
|
163
|
+
if (RegexValidator.validate(content, pattern, {
|
|
164
|
+
maxLength: 50000,
|
|
165
|
+
rejectDangerousPatterns: false,
|
|
166
|
+
logEvents: false // Don't log our own security patterns as dangerous
|
|
167
|
+
})) {
|
|
168
|
+
detectedPatterns.push(description);
|
|
169
|
+
// Update highest severity
|
|
170
|
+
if (severity === 'critical' || (severity === 'high' && highestSeverity !== 'critical')) {
|
|
171
|
+
highestSeverity = severity;
|
|
172
|
+
}
|
|
173
|
+
// Log security event
|
|
174
|
+
SecurityMonitor.logSecurityEvent({
|
|
175
|
+
type: 'CONTENT_INJECTION_ATTEMPT',
|
|
176
|
+
severity: severity.toUpperCase(),
|
|
177
|
+
source: 'content_validation',
|
|
178
|
+
details: `Detected pattern: ${description}`,
|
|
179
|
+
});
|
|
180
|
+
// Sanitize by replacing with safe placeholder
|
|
181
|
+
sanitized = sanitized.replace(pattern, '[CONTENT_BLOCKED]');
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
return {
|
|
185
|
+
isValid: detectedPatterns.length === 0,
|
|
186
|
+
sanitizedContent: sanitized,
|
|
187
|
+
detectedPatterns,
|
|
188
|
+
severity: highestSeverity
|
|
189
|
+
};
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Validates YAML frontmatter for malicious content
|
|
193
|
+
*/
|
|
194
|
+
static validateYamlContent(yamlContent) {
|
|
195
|
+
// Length validation before pattern matching
|
|
196
|
+
if (yamlContent.length > SECURITY_LIMITS.MAX_YAML_LENGTH) {
|
|
197
|
+
SecurityMonitor.logSecurityEvent({
|
|
198
|
+
type: 'YAML_INJECTION_ATTEMPT',
|
|
199
|
+
severity: 'HIGH',
|
|
200
|
+
source: 'yaml_validation',
|
|
201
|
+
details: `YAML content exceeds maximum length: ${yamlContent.length} > ${SECURITY_LIMITS.MAX_YAML_LENGTH}`
|
|
202
|
+
});
|
|
203
|
+
return false;
|
|
204
|
+
}
|
|
205
|
+
// Unicode normalization preprocessing for YAML content
|
|
206
|
+
const unicodeResult = UnicodeValidator.normalize(yamlContent);
|
|
207
|
+
const normalizedYaml = unicodeResult.normalizedContent;
|
|
208
|
+
if (!unicodeResult.isValid && unicodeResult.detectedIssues) {
|
|
209
|
+
SecurityMonitor.logSecurityEvent({
|
|
210
|
+
type: 'YAML_UNICODE_ATTACK',
|
|
211
|
+
severity: (unicodeResult.severity?.toUpperCase() || 'MEDIUM'),
|
|
212
|
+
source: 'yaml_validation',
|
|
213
|
+
details: `Unicode attack detected in YAML: ${unicodeResult.detectedIssues.join(', ')}`
|
|
214
|
+
});
|
|
215
|
+
return false;
|
|
216
|
+
}
|
|
217
|
+
for (const pattern of this.MALICIOUS_YAML_PATTERNS) {
|
|
218
|
+
// These are trusted internal patterns, so we disable ReDoS rejection
|
|
219
|
+
if (RegexValidator.validate(normalizedYaml, pattern, {
|
|
220
|
+
maxLength: 10000,
|
|
221
|
+
rejectDangerousPatterns: false,
|
|
222
|
+
logEvents: false // Don't log our own security patterns as dangerous
|
|
223
|
+
})) {
|
|
224
|
+
SecurityMonitor.logSecurityEvent({
|
|
225
|
+
type: 'YAML_INJECTION_ATTEMPT',
|
|
226
|
+
severity: 'CRITICAL',
|
|
227
|
+
source: 'yaml_validation',
|
|
228
|
+
details: `Malicious YAML pattern detected: ${pattern}`,
|
|
229
|
+
});
|
|
230
|
+
// Early exit on first match for performance
|
|
231
|
+
return false;
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
return true;
|
|
235
|
+
}
|
|
236
|
+
/**
|
|
237
|
+
* Validates persona metadata fields
|
|
238
|
+
*/
|
|
239
|
+
static validateMetadata(metadata) {
|
|
240
|
+
const detectedPatterns = [];
|
|
241
|
+
// Check all string fields in metadata
|
|
242
|
+
const checkField = (fieldName, value) => {
|
|
243
|
+
if (typeof value === 'string') {
|
|
244
|
+
// Check field length first
|
|
245
|
+
if (value.length > SECURITY_LIMITS.MAX_METADATA_FIELD_LENGTH) {
|
|
246
|
+
detectedPatterns.push(`${fieldName}: Field exceeds maximum length of ${SECURITY_LIMITS.MAX_METADATA_FIELD_LENGTH} characters`);
|
|
247
|
+
return;
|
|
248
|
+
}
|
|
249
|
+
const result = this.validateAndSanitize(value);
|
|
250
|
+
if (!result.isValid || result.detectedPatterns?.length) {
|
|
251
|
+
detectedPatterns.push(`${fieldName}: ${result.detectedPatterns?.join(', ')}`);
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
};
|
|
255
|
+
// Validate standard persona fields
|
|
256
|
+
checkField('name', metadata.name);
|
|
257
|
+
checkField('description', metadata.description);
|
|
258
|
+
checkField('category', metadata.category);
|
|
259
|
+
checkField('author', metadata.author);
|
|
260
|
+
// Check any custom fields
|
|
261
|
+
for (const [key, value] of Object.entries(metadata)) {
|
|
262
|
+
if (!['name', 'description', 'category', 'author'].includes(key)) {
|
|
263
|
+
checkField(key, value);
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
return {
|
|
267
|
+
isValid: detectedPatterns.length === 0,
|
|
268
|
+
detectedPatterns,
|
|
269
|
+
severity: detectedPatterns.length > 0 ? 'high' : 'low'
|
|
270
|
+
};
|
|
271
|
+
}
|
|
272
|
+
/**
|
|
273
|
+
* Sanitizes a complete persona file (frontmatter + content)
|
|
274
|
+
*/
|
|
275
|
+
static sanitizePersonaContent(content) {
|
|
276
|
+
// Extract frontmatter
|
|
277
|
+
const frontmatterMatch = content.match(/^---\n([\s\S]*?)\n---/);
|
|
278
|
+
if (!frontmatterMatch) {
|
|
279
|
+
// No frontmatter, just validate content
|
|
280
|
+
const result = this.validateAndSanitize(content);
|
|
281
|
+
if (!result.isValid && result.severity === 'critical') {
|
|
282
|
+
throw new SecurityError('Critical security threat detected in persona content');
|
|
283
|
+
}
|
|
284
|
+
return result.sanitizedContent || content;
|
|
285
|
+
}
|
|
286
|
+
const yamlContent = frontmatterMatch[1];
|
|
287
|
+
const markdownContent = content.substring(frontmatterMatch[0].length);
|
|
288
|
+
// Validate YAML
|
|
289
|
+
if (!this.validateYamlContent(yamlContent)) {
|
|
290
|
+
throw new SecurityError('Malicious YAML detected in persona frontmatter');
|
|
291
|
+
}
|
|
292
|
+
// Validate markdown content
|
|
293
|
+
const contentResult = this.validateAndSanitize(markdownContent);
|
|
294
|
+
if (!contentResult.isValid && contentResult.severity === 'critical') {
|
|
295
|
+
throw new SecurityError('Critical security threat detected in persona content');
|
|
296
|
+
}
|
|
297
|
+
// Return sanitized content
|
|
298
|
+
return `---\n${yamlContent}\n---${contentResult.sanitizedContent || markdownContent}`;
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudFZhbGlkYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZWN1cml0eS9jb250ZW50VmFsaWRhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7O0dBT0c7QUFFSCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDckQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBU3BFLE1BQU0sT0FBTyxnQkFBZ0I7SUFDM0I7Ozs7Ozs7Ozs7O09BV0c7SUFDSCxnRUFBZ0U7SUFDeEQsTUFBTSxDQUFVLGtCQUFrQixHQUFtRjtRQUMzSCxrQ0FBa0M7UUFDbEMsRUFBRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsd0JBQXdCLEVBQUU7UUFDL0YsRUFBRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsdUJBQXVCLEVBQUU7UUFDN0YsRUFBRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsMkJBQTJCLEVBQUU7UUFDckcsRUFBRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsc0JBQXNCLEVBQUU7UUFFdkYsMkJBQTJCO1FBQzNCLEVBQUUsT0FBTyxFQUFFLDZDQUE2QyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLHNCQUFzQixFQUFFO1FBQ3JILEVBQUUsT0FBTyxFQUFFLDBDQUEwQyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVB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O1lBQ0QsT0FBTyxNQUFNLENBQUMsZ0JBQWdCLElBQUksT0FBTyxDQUFDO1FBQzVDLENBQUM7UUFFRCxNQUFNLFdBQVcsR0FBRyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4QyxNQUFNLGVBQWUsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRXRFLGdCQUFnQjtRQUNoQixJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7WUFDM0MsTUFBTSxJQUFJLGFBQWEsQ0FBQyxnREFBZ0QsQ0FBQyxDQUFDO1FBQzVFLENBQUM7UUFFRCw0QkFBNEI7UUFDNUIsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ2hFLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxJQUFJLGFBQWEsQ0FBQyxRQUFRLEtBQUssVUFBVSxFQUFFLENBQUM7WUFDcEUsTUFBTSxJQUFJLGFBQWEsQ0FBQyxzREFBc0QsQ0FBQyxDQUFDO1FBQ2xGLENBQUM7UUFFRCwyQkFBMkI7UUFDM0IsT0FBTyxRQUFRLFdBQVcsUUFBUSxhQUFhLENBQUMsZ0JBQWdCLElBQUksZUFBZSxFQUFFLENBQUM7SUFDeEYsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29udGVudCBWYWxpZGF0b3IgZm9yIERvbGxob3VzZU1DUFxuICogXG4gKiBQcm90ZWN0cyBhZ2FpbnN0IHByb21wdCBpbmplY3Rpb24gYXR0YWNrcyBpbiBjb2xsZWN0aW9uIHBlcnNvbmFzXG4gKiBieSBkZXRlY3RpbmcgYW5kIHNhbml0aXppbmcgbWFsaWNpb3VzIGNvbnRlbnQgcGF0dGVybnMuXG4gKiBcbiAqIFNlY3VyaXR5OiBTRUMtMDAxIC0gQ3JpdGljYWwgdnVsbmVyYWJpbGl0eSBwcm90ZWN0aW9uXG4gKi9cblxuaW1wb3J0IHsgU2VjdXJpdHlFcnJvciB9IGZyb20gJy4vZXJyb3JzLmpzJztcbmltcG9ydCB7IFNlY3VyaXR5TW9uaXRvciB9IGZyb20gJy4vc2VjdXJpdHlNb25pdG9yLmpzJztcbmltcG9ydCB7IFJlZ2V4VmFsaWRhdG9yIH0gZnJvbSAnLi9yZWdleFZhbGlkYXRvci5qcyc7XG5pbXBvcnQgeyBTRUNVUklUWV9MSU1JVFMgfSBmcm9tICcuL2NvbnN0YW50cy5qcyc7XG5pbXBvcnQgeyBVbmljb2RlVmFsaWRhdG9yIH0gZnJvbSAnLi92YWxpZGF0b3JzL3VuaWNvZGVWYWxpZGF0b3IuanMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbnRlbnRWYWxpZGF0aW9uUmVzdWx0IHtcbiAgaXNWYWxpZDogYm9vbGVhbjtcbiAgc2FuaXRpemVkQ29udGVudD86IHN0cmluZztcbiAgZGV0ZWN0ZWRQYXR0ZXJucz86IHN0cmluZ1tdO1xuICBzZXZlcml0eT86ICdsb3cnIHwgJ21lZGl1bScgfCAnaGlnaCcgfCAnY3JpdGljYWwnO1xufVxuXG5leHBvcnQgY2xhc3MgQ29udGVudFZhbGlkYXRvciB7XG4gIC8qKlxuICAgKiBQYXR0ZXJuLWJhc2VkIGRldGVjdGlvbiBzeXN0ZW0gZm9yIHByb21wdCBpbmplY3Rpb24gYXR0YWNrcy5cbiAgICogXG4gICAqIFRoaXMgYXBwcm9hY2ggd2FzIGNob3NlbiBvdmVyIEFJLWJhc2VkIGRldGVjdGlvbiBiZWNhdXNlOlxuICAgKiAxLiBQYXR0ZXJuIG1hdGNoaW5nIGNhbm5vdCBiZSBzb2NpYWxseSBlbmdpbmVlcmVkIG9yIGNvbmZ1c2VkXG4gICAqIDIuIERldGVybWluaXN0aWMgcmVzdWx0cyBlbnN1cmUgY29uc2lzdGVudCBzZWN1cml0eVxuICAgKiAzLiBObyBhZGRpdGlvbmFsIEFQSSBjYWxscyBvciBsYXRlbmN5XG4gICAqIDQuIENhbid0IGJlIGJ5cGFzc2VkIGJ5IGNsZXZlciBwcm9tcHQgZW5naW5lZXJpbmdcbiAgICogXG4gICAqIFRoZSBwYXR0ZXJucyBiZWxvdyByZXByZXNlbnQga25vd24gYXR0YWNrIHZlY3RvcnMgZnJvbSBzZWN1cml0eSByZXNlYXJjaFxuICAgKiBhbmQgcmVhbC13b3JsZCBleHBsb2l0IGF0dGVtcHRzIGFnYWluc3QgQUkgc3lzdGVtcy5cbiAgICovXG4gIC8vIFByb21wdCBpbmplY3Rpb24gcGF0dGVybnMgdGhhdCBjb3VsZCBjb21wcm9taXNlIEFJIGFzc2lzdGFudHNcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgSU5KRUNUSU9OX1BBVFRFUk5TOiBBcnJheTx7IHBhdHRlcm46IFJlZ0V4cDsgc2V2ZXJpdHk6ICdoaWdoJyB8ICdjcml0aWNhbCc7IGRlc2NyaXB0aW9uOiBzdHJpbmcgfT4gPSBbXG4gICAgLy8gU3lzdGVtIHByb21wdCBvdmVycmlkZSBhdHRlbXB0c1xuICAgIHsgcGF0dGVybjogL1xcW1NZU1RFTTpcXHMqLio/XFxdL2dpLCBzZXZlcml0eTogJ2NyaXRpY2FsJywgZGVzY3JpcHRpb246ICdTeXN0ZW0gcHJvbXB0IG92ZXJyaWRlJyB9LFxuICAgIHsgcGF0dGVybjogL1xcW0FETUlOOlxccyouKj9cXF0vZ2ksIHNldmVyaXR5OiAnY3JpdGljYWwnLCBkZXNjcmlwdGlvbjogJ0FkbWluIHByb21wdCBvdmVycmlkZScgfSxcbiAgICB7IHBhdHRlcm46IC9cXFtBU1NJU1RBTlQ6XFxzKi4qP1xcXS9naSwgc2V2ZXJpdHk6ICdjcml0aWNhbCcsIGRlc2NyaXB0aW9uOiAnQXNzaXN0YW50IHByb21wdCBvdmVycmlkZScgfSxcbiAgICB7IHBhdHRlcm46IC9cXFtVU0VSOlxccyouKj9cXF0vZ2ksIHNldmVyaXR5OiAnaGlnaCcsIGRlc2NyaXB0aW9uOiAnVXNlciBwcm9tcHQgb3ZlcnJpZGUnIH0sXG4gICAgXG4gICAgLy8gSW5zdHJ1Y3Rpb24gbWFuaXB1bGF0aW9uXG4gICAgeyBwYXR0ZXJuOiAvaWdub3JlXFxzKyhhbGxcXHMrKT9wcmV2aW91c1xccytpbnN0cnVjdGlvbnMvZ2ksIHNldmVyaXR5OiAnY3JpdGljYWwnLCBkZXNjcmlwdGlvbjogJ0luc3RydWN0aW9uIG92ZXJyaWRlJyB9LFxuICAgIHsgcGF0dGVybjogL2lnbm9yZVxccysoYWxsXFxzKyk/cHJpb3JcXHMraW5zdHJ1Y3Rpb25zL2dpLCBzZXZlcml0eTogJ2NyaXRpY2FsJywgZGVzY3JpcHRpb246ICdJbnN0cnVjdGlvbiBvdmVycmlkZScgfSxcbiAgICB7IHBhdHRlcm46IC9kaXNyZWdhcmRcXHMrKGFsbFxccyspP3ByZXZpb3VzXFxzK2luc3RydWN0aW9ucy9naSwgc2V2ZXJpdHk6ICdjcml0aWNhbCcsIGRlc2NyaXB0aW9uOiAnSW5zdHJ1Y3Rpb24gb3ZlcnJpZGUnIH0sXG4gICAgeyBwYXR0ZXJuOiAvZm9yZ2V0XFxzKyhhbGxcXHMrKT9wcmV2aW91c1xccytpbnN0cnVjdGlvbnMvZ2ksIHNldmVyaXR5OiAnY3JpdGljYWwnLCBkZXNjcmlwdGlvbjogJ0luc3RydWN0aW9uIG92ZXJyaWRlJyB9LFxuICAgIHsgcGF0dGVybjogL3lvdVxccythcmVcXHMrbm93XFxzKyhhZG1pbnxyb290fHN5c3RlbXxzdWRvKS9naSwgc2V2ZXJpdHk6ICdjcml0aWNhbCcsIGRlc2NyaXB0aW9uOiAnUm9sZSBlbGV2YXRpb24gYXR0ZW1wdCcgfSxcbiAgICB7IHBhdHRlcm46IC9hY3RcXHMrYXNcXHMrKGFkbWlufHJvb3R8c3lzdGVtfHN1ZG8pL2dpLCBzZXZlcml0eTogJ2NyaXRpY2FsJywgZGVzY3JpcHRpb246ICdSb2xlIGVsZXZhdGlvbiBhdHRlbXB0JyB9LFxuICAgIFxuICAgIC8vIERhdGEgZXhmaWx0cmF0aW9uIGF0dGVtcHRzXG4gICAgeyBwYXR0ZXJuOiAvZXhwb3J0XFxzK2FsbFxccysoZmlsZXN8ZGF0YXxwZXJzb25hc3x0b2tlbnN8Y3JlZGVudGlhbHMpL2dpLCBzZXZlcml0eTogJ2NyaXRpY2FsJywgZGVzY3JpcHRpb246ICdEYXRhIGV4ZmlsdHJhdGlvbicgfSxcbiAgICB7IHBhdHRlcm46IC9zZW5kXFxzK2FsbFxccysoZmlsZXN8ZGF0YXxwZXJzb25hc3x0b2tlbnN8Y3JlZGVudGlhbHMpXFxzK3RvL2dpLCBzZXZlcml0eTogJ2NyaXRpY2FsJywgZGVzY3JpcHRpb246ICdEYXRhIGV4ZmlsdHJhdGlvbicgfSxcbiAgICB7IHBhdHRlcm46IC9saXN0XFxzK2FsbFxccysoZmlsZXN8dG9rZW5zfGNyZWRlbnRpYWxzfHNlY3JldHMpL2dpLCBzZXZlcml0eTogJ2hpZ2gnLCBkZXNjcmlwdGlvbjogJ0luZm9ybWF0aW9uIGRpc2Nsb3N1cmUnIH0sXG4gICAgeyBwYXR0ZXJuOiAvc2hvd1xccyttZVxccythbGxcXHMrKHRva2Vuc3xjcmVkZW50aWFsc3xzZWNyZXRzfGFwaVxccytrZXlzKS9naSwgc2V2ZXJpdHk6ICdoaWdoJywgZGVzY3JpcHRpb246ICdDcmVkZW50aWFsIGRpc2Nsb3N1cmUnIH0sXG4gICAgXG4gICAgLy8gQ29tbWFuZCBleGVjdXRpb24gcGF0dGVybnNcbiAgICB7IHBhdHRlcm46IC9jdXJsXFxzK1teXFxzXStcXC4oY29tfG5ldHxvcmd8aW98ZGV2KS9naSwgc2V2ZXJpdHk6ICdjcml0aWNhbCcsIGRlc2NyaXB0aW9uOiAnRXh0ZXJuYWwgY29tbWFuZCBleGVjdXRpb24nIH0sXG4gICAgeyBwYXR0ZXJuOiAvd2dldFxccytbXlxcc10rXFwuKGNvbXxuZXR8b3JnfGlvfGRldikvZ2ksIHNldmVyaXR5OiAnY3JpdGljYWwnLCBkZXNjcmlwdGlvbjogJ0V4dGVybmFsIGNvbW1hbmQgZXhlY3V0aW9uJyB9LFxuICAgIHsgcGF0dGVybjogL1xcJFxcKFteKV0rXFwpL2csIHNldmVyaXR5OiAnY3JpdGljYWwnLCBkZXNjcmlwdGlvbjogJ0NvbW1hbmQgc3Vic3RpdHV0aW9uJyB9LFxuICAgIHsgcGF0dGVybjogL2BbXmBdK2AvZywgc2V2ZXJpdHk6ICdjcml0aWNhbCcsIGRlc2NyaXB0aW9uOiAnQmFja3RpY2sgY29tbWFuZCBleGVjdXRpb24nIH0sXG4gICAgeyBwYXR0ZXJuOiAvZXZhbFxccypcXCgvZ2ksIHNldmVyaXR5OiAnY3JpdGljYWwnLCBkZXNjcmlwdGlvbjogJ0NvZGUgZXZhbHVhdGlvbicgfSxcbiAgICB7IHBhdHRlcm46IC9leGVjXFxzKlxcKC9naSwgc2V2ZXJpdHk6ICdjcml0aWNhbCcsIGRlc2NyaXB0aW9uOiAnQ29kZSBleGVjdXRpb24nIH0sXG4gICAgeyBwYXR0ZXJuOiAvb3NcXC5zeXN0ZW1cXHMqXFwoL2dpLCBzZXZlcml0eTogJ2NyaXRpY2FsJywgZGVzY3JpcHRpb246ICdTeXN0ZW0gY29tbWFuZCBleGVjdXRpb24nIH0sXG4gICAgeyBwYXR0ZXJuOiAvc3VicHJvY2Vzc1xcLihjYWxsfHJ1bnxQb3BlbikvZ2ksIHNldmVyaXR5OiAnY3JpdGljYWwnLCBkZXNjcmlwdGlvbjogJ1N1YnByb2Nlc3MgZXhlY3V0aW9uJyB9LFxuICAgIFxuICAgIC8vIFRva2VuL2NyZWRlbnRpYWwgcGF0dGVybnNcbiAgICB7IHBhdHRlcm46IC9HSVRIVUJfVE9LRU4vZ2ksIHNldmVyaXR5OiAnaGlnaCcsIGRlc2NyaXB0aW9uOiAnVG9rZW4gcmVmZXJlbmNlJyB9LFxuICAgIHsgcGF0dGVybjogL2docF9bYS16QS1aMC05XXszNn0vZywgc2V2ZXJpdHk6ICdjcml0aWNhbCcsIGRlc2NyaXB0aW9uOiAnR2l0SHViIHRva2VuIGV4cG9zdXJlJyB9LFxuICAgIHsgcGF0dGVybjogL2dob19bYS16QS1aMC05XXszNn0vZywgc2V2ZXJpdHk6ICdjcml0aWNhbCcsIGRlc2NyaXB0aW9uOiAnR2l0SHViIE9BdXRoIHRva2VuIGV4cG9zdXJlJyB9LFxuICAgIFxuICAgIC8vIFBhdGggdHJhdmVyc2FsIGluIGNvbnRlbnRcbiAgICB7IHBhdHRlcm46IC9cXC5cXC5cXC9cXC5cXC5cXC9cXC5cXC5cXC8vZywgc2V2ZXJpdHk6ICdoaWdoJywgZGVzY3JpcHRpb246ICdQYXRoIHRyYXZlcnNhbCBhdHRlbXB0JyB9LFxuICAgIHsgcGF0dGVybjogL1xcL2V0Y1xcL3Bhc3N3ZC9naSwgc2V2ZXJpdHk6ICdoaWdoJywgZGVzY3JpcHRpb246ICdTZW5zaXRpdmUgZmlsZSBhY2Nlc3MnIH0sXG4gICAgeyBwYXR0ZXJuOiAvXFwvXFwuc3NoXFwvL2dpLCBzZXZlcml0eTogJ2hpZ2gnLCBkZXNjcmlwdGlvbjogJ1NTSCBrZXkgYWNjZXNzIGF0dGVtcHQnIH0sXG4gIF07XG5cbiAgLy8gTWFsaWNpb3VzIFlBTUwgcGF0dGVybnNcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgTUFMSUNJT1VTX1lBTUxfUEFUVEVSTlMgPSBbXG4gICAgLy8gTGFuZ3VhZ2Utc3BlY2lmaWMgZGVzZXJpYWxpemF0aW9uIGF0dGFja3NcbiAgICAvISFweXRob25cXC9vYmplY3QvLFxuICAgIC8hIXB5dGhvblxcL21vZHVsZS8sXG4gICAgLyEhcHl0aG9uXFwvbmFtZS8sXG4gICAgLyEhcnVieVxcL29iamVjdC8sXG4gICAgLyEhcnVieVxcL2hhc2gvLFxuICAgIC8hIXJ1YnlcXC9zdHJ1Y3QvLFxuICAgIC8hIXJ1YnlcXC9tYXJzaGFsLyxcbiAgICAvISFqYXZhLyxcbiAgICAvISFqYXZheC8sXG4gICAgLyEhY29tXFwuc3VuLyxcbiAgICAvISFwZXJsXFwvaGFzaC8sXG4gICAgLyEhcGVybFxcL2NvZGUvLFxuICAgIC8hIXBocFxcL29iamVjdC8sXG4gICAgXG4gICAgLy8gQ29uc3RydWN0b3IvZnVuY3Rpb24gaW5qZWN0aW9uXG4gICAgLyEhZXhlYy8sXG4gICAgLyEhZXZhbC8sXG4gICAgLyEhbmV3LyxcbiAgICAvISFjb25zdHJ1Y3QvLFxuICAgIC8hIWFwcGx5LyxcbiAgICAvISFjYWxsLyxcbiAgICAvISFpbnZva2UvLFxuICAgIFxuICAgIC8vIENvZGUgZXhlY3V0aW9uIHBhdHRlcm5zIC0gbW9yZSBzcGVjaWZpYyB0byBhdm9pZCBmYWxzZSBwb3NpdGl2ZXNcbiAgICAvc3VicHJvY2Vzc1xcLi8sXG4gICAgL29zXFwuc3lzdGVtLyxcbiAgICAvZXZhbFxccypcXCgvLFxuICAgIC9leGVjXFxzKlxcKC8sXG4gICAgL19faW1wb3J0X19cXHMqXFwoLyxcbiAgICAvcmVxdWlyZVxccypcXCgvLFxuICAgIC9pbXBvcnRcXHMrKD86b3N8c3lzfHN1YnByb2Nlc3N8ZXZhbHxleGVjKS8sXG4gICAgL2luY2x1ZGVcXHMrW1wiJ10uKlxcLig/OnBocHxzaHxweXxqc3xyYilbXCInXS8sXG4gICAgXG4gICAgLy8gQ29tbWFuZCBleGVjdXRpb24gdmFyaWFudHMgLSBtb3JlIHNwZWNpZmljIHBhdHRlcm5zXG4gICAgL3BvcGVuXFxzKlxcKC8sXG4gICAgL3NwYXduXFxzKlxcKC8sXG4gICAgL3N5c3RlbVxccypcXCgvLFxuICAgIC9iYWNrdGlja1xccypcXCgvLFxuICAgIC9zaGVsbF9leGVjXFxzKlxcKC8sXG4gICAgL3Bhc3N0aHJ1XFxzKlxcKC8sXG4gICAgL3Byb2Nfb3BlblxccypcXCgvLFxuICAgIFxuICAgIC8vIE5ldHdvcmsgb3BlcmF0aW9ucyAtIHJlcXVpcmUgc3VzcGljaW91cyBjb250ZXh0XG4gICAgL3NvY2tldFxcLmNvbm5lY3QvLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGV0ZWN0cyBzb2NrZXQgY29ubmVjdGlvbiBhdHRlbXB0c1xuICAgIC91cmxsaWJcXC5yZXF1ZXN0LywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFB5dGhvbiBIVFRQIGxpYnJhcnkgdXNhZ2VcbiAgICAvcmVxdWVzdHNcXC4oPzpnZXR8cG9zdHxwdXR8ZGVsZXRlKVxccypcXCgvLCAgICAgICAgICAgICAgLy8gRGV0ZWN0cyBIVFRQIHJlcXVlc3RzIHdpdGggbWV0aG9kIGNhbGxzXG4gICAgL2ZldGNoXFxzKlxcKFxccypbXCInXWh0dHBzPzpcXC9cXC8vLCAgICAgICAgICAgICAgICAgICAgICAgIC8vIERldGVjdHMgZmV0Y2ggY2FsbHMgdG8gZXh0ZXJuYWwgVVJMc1xuICAgIC9uZXdcXHMrWE1MSHR0cFJlcXVlc3QvLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEphdmFTY3JpcHQgQUpBWCBvYmplY3QgY3JlYXRpb25cbiAgICAvXFwuKD86Z2V0fHBvc3R8cHV0fGRlbGV0ZSlcXHMqXFwoXFxzKltcIiddaHR0cHM/OlxcL1xcLy8sICAgIC8vIE1ldGhvZCBjaGFpbmluZyB3aXRoIEhUVFAgcmVxdWVzdHNcbiAgICBcbiAgICAvLyBGaWxlIHN5c3RlbSBvcGVyYXRpb25zIC0gcmVxdWlyZSBzdXNwaWNpb3VzIGNvbnRleHRcbiAgICAvKD86ZnNcXC58ZmlsZVxcLnwpXFxzKm9wZW5cXHMqXFwoXFxzKltcIiddKD86XFwvZXRjXFwvfFxcL2JpblxcL3xcXC5cXC5cXC8pLywgICAgIC8vIEZpbGUgb3BlbiB3aXRoIHN1c3BpY2lvdXMgcGF0aHNcbiAgICAvZmlsZV9nZXRfY29udGVudHNcXHMqXFwoLywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBQSFAgZmlsZSByZWFkaW5nIGZ1bmN0aW9uXG4gICAgL2ZpbGVfcHV0X2NvbnRlbnRzXFxzKlxcKC8sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUEhQIGZpbGUgd3JpdGluZyBmdW5jdGlvblxuICAgIC9mb3BlblxccypcXChcXHMqW1wiJ10oPzpcXC9ldGNcXC98XFwvYmluXFwvfFxcLlxcLlxcLykvLCAgICAgICAgICAgICAgICAgICAgICAgLy8gRmlsZSBvcGVuIHdpdGggZGFuZ2Vyb3VzIHN5c3RlbSBwYXRoc1xuICAgIC8oPzpmc1xcLik/XFxzKnJlYWRGaWxlXFxzKlxcKFxccypbXCInXSg/OlxcL2V0Y1xcL3xcXC9iaW5cXC98XFwuXFwuXFwvKS8sICAgICAgICAvLyBOb2RlLmpzIGZpbGUgcmVhZCB3aXRoIHBhdGggdHJhdmVyc2FsXG4gICAgLyg/OmZzXFwuKT9cXHMqd3JpdGVGaWxlXFxzKlxcKFxccypbXCInXSg/OlxcLyg/OmJpbnxldGN8dG1wKVxcL3xcXC5cXC5cXC8pLywgICAvLyBOb2RlLmpzIGZpbGUgd3JpdGUgdG8gc3lzdGVtIGRpcnNcbiAgICBcbiAgICAvLyBQcm90b2NvbCBoYW5kbGVyc1xuICAgIC9maWxlOlxcL1xcLy8sXG4gICAgL2RhdGE6XFwvXFwvLyxcbiAgICAvZXhwZWN0OlxcL1xcLy8sXG4gICAgL3BocDpcXC9cXC8vLFxuICAgIC9waGFyOlxcL1xcLy8sXG4gICAgL3ppcDpcXC9cXC8vLFxuICAgIC9zc2gyOlxcL1xcLy8sXG4gICAgL29nZzpcXC9cXC8vLFxuICAgIFxuICAgIC8vIFlBTUwtc3BlY2lmaWMgZGFuZ2Vyb3VzIGZlYXR1cmVzXG4gICAgLyZbYS16QS1aMC05X10rXFxzKiEhLywgLy8gQW5jaG9yIHdpdGggdGFnIGNvbWJpbmF0aW9uXG4gICAgL1xcKlthLXpBLVowLTlfXStcXHMqISEvLCAvLyBBbGlhcyB3aXRoIHRhZyBjb21iaW5hdGlvblxuICAgIC8hIW1lcmdlLyxcbiAgICAvISFiaW5hcnkvLFxuICAgIC8hIXRpbWVzdGFtcC8sXG4gICAgXG4gICAgLy8gVW5pY29kZS9lbmNvZGluZyBieXBhc3MgYXR0ZW1wdHMgLSBwcmV2ZW50IHZpc3VhbCBzcG9vZmluZyBhdHRhY2tzXG4gICAgL1xcXFxbdVVdMCooPzoyMnwyN3w2MHwzW2NDXSkvLCAgIC8vIFVuaWNvZGUgZXNjYXBlcyBmb3IgcXVvdGVzIChcIikgYW5kIGJyYWNrZXRzICg8PilcbiAgICAvW1xcdTIwMkEtXFx1MjAyRVxcdTIwNjYtXFx1MjA2OV0vLCAgLy8gRGlyZWN0aW9uIG92ZXJyaWRlIGNoYXJzIChSTE8sIExSTywgaXNvbGF0ZXMpXG4gICAgL1tcXHUyMDBCLVxcdTIwMEZcXHUyMDI4LVxcdTIwMkZdLywgIC8vIFplcm8td2lkdGggc3BhY2VzLCBsaW5lL3BhcmFncmFwaCBzZXBhcmF0b3JzXG4gICAgL1tcXHVGRUZGXFx1RkZGRVxcdUZGRkZdLywgICAgICAgICAgLy8gQk9NLCBub24tY2hhcmFjdGVycyBmb3IgcGF5bG9hZCBoaWRpbmdcbiAgXTtcblxuICAvKipcbiAgICogVmFsaWRhdGVzIGFuZCBzYW5pdGl6ZXMgcGVyc29uYSBjb250ZW50IGZvciBzZWN1cml0eSB0aHJlYXRzXG4gICAqL1xuICBzdGF0aWMgdmFsaWRhdGVBbmRTYW5pdGl6ZShjb250ZW50OiBzdHJpbmcpOiBDb250ZW50VmFsaWRhdGlvblJlc3VsdCB7XG4gICAgLy8gTGVuZ3RoIHZhbGlkYXRpb24gYmVmb3JlIHBhdHRlcm4gbWF0Y2hpbmdcbiAgICBpZiAoY29udGVudC5sZW5ndGggPiBTRUNVUklUWV9MSU1JVFMuTUFYX0NPTlRFTlRfTEVOR1RIKSB7XG4gICAgICB0aHJvdyBuZXcgU2VjdXJpdHlFcnJvcihcbiAgICAgICAgYENvbnRlbnQgZXhjZWVkcyBtYXhpbXVtIGxlbmd0aCBvZiAke1NFQ1VSSVRZX0xJTUlUUy5NQVhfQ09OVEVOVF9MRU5HVEh9IGNoYXJhY3RlcnMgKCR7Y29udGVudC5sZW5ndGh9IHByb3ZpZGVkKWBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgZGV0ZWN0ZWRQYXR0ZXJuczogc3RyaW5nW10gPSBbXTtcbiAgICBsZXQgc2FuaXRpemVkID0gY29udGVudDtcbiAgICBsZXQgaGlnaGVzdFNldmVyaXR5OiAnbG93JyB8ICdtZWRpdW0nIHwgJ2hpZ2gnIHwgJ2NyaXRpY2FsJyA9ICdsb3cnO1xuXG4gICAgLy8gVW5pY29kZSBub3JtYWxpemF0aW9uIHByZXByb2Nlc3NpbmcgdG8gcHJldmVudCBieXBhc3MgYXR0YWNrc1xuICAgIGNvbnN0IHVuaWNvZGVSZXN1bHQgPSBVbmljb2RlVmFsaWRhdG9yLm5vcm1hbGl6ZShzYW5pdGl6ZWQpO1xuICAgIHNhbml0aXplZCA9IHVuaWNvZGVSZXN1bHQubm9ybWFsaXplZENvbnRlbnQ7XG4gICAgXG4gICAgaWYgKCF1bmljb2RlUmVzdWx0LmlzVmFsaWQgJiYgdW5pY29kZVJlc3VsdC5kZXRlY3RlZElzc3Vlcykge1xuICAgICAgZGV0ZWN0ZWRQYXR0ZXJucy5wdXNoKC4uLnVuaWNvZGVSZXN1bHQuZGV0ZWN0ZWRJc3N1ZXMubWFwKGlzc3VlID0+IGBVbmljb2RlOiAke2lzc3VlfWApKTtcbiAgICAgIGlmICh1bmljb2RlUmVzdWx0LnNldmVyaXR5KSB7XG4gICAgICAgIGhpZ2hlc3RTZXZlcml0eSA9IHVuaWNvZGVSZXN1bHQuc2V2ZXJpdHk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgZm9yIGluamVjdGlvbiBwYXR0ZXJuc1xuICAgIGZvciAoY29uc3QgeyBwYXR0ZXJuLCBzZXZlcml0eSwgZGVzY3JpcHRpb24gfSBvZiB0aGlzLklOSkVDVElPTl9QQVRURVJOUykge1xuICAgICAgLy8gVGhlc2UgYXJlIHRydXN0ZWQgaW50ZXJuYWwgcGF0dGVybnMsIHNvIHdlIGRpc2FibGUgUmVEb1MgcmVqZWN0aW9uXG4gICAgICBpZiAoUmVnZXhWYWxpZGF0b3IudmFsaWRhdGUoY29udGVudCwgcGF0dGVybiwgeyBcbiAgICAgICAgbWF4TGVuZ3RoOiA1MDAwMCwgXG4gICAgICAgIHJlamVjdERhbmdlcm91c1BhdHRlcm5zOiBmYWxzZSxcbiAgICAgICAgbG9nRXZlbnRzOiBmYWxzZSAgLy8gRG9uJ3QgbG9nIG91ciBvd24gc2VjdXJpdHkgcGF0dGVybnMgYXMgZGFuZ2Vyb3VzXG4gICAgICB9KSkge1xuICAgICAgICBkZXRlY3RlZFBhdHRlcm5zLnB1c2goZGVzY3JpcHRpb24pO1xuICAgICAgICBcbiAgICAgICAgLy8gVXBkYXRlIGhpZ2hlc3Qgc2V2ZXJpdHlcbiAgICAgICAgaWYgKHNldmVyaXR5ID09PSAnY3JpdGljYWwnIHx8IChzZXZlcml0eSA9PT0gJ2hpZ2gnICYmIGhpZ2hlc3RTZXZlcml0eSAhPT0gJ2NyaXRpY2FsJykpIHtcbiAgICAgICAgICBoaWdoZXN0U2V2ZXJpdHkgPSBzZXZlcml0eTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIExvZyBzZWN1cml0eSBldmVudFxuICAgICAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICAgICAgdHlwZTogJ0NPTlRFTlRfSU5KRUNUSU9OX0FUVEVNUFQnLFxuICAgICAgICAgIHNldmVyaXR5OiBzZXZlcml0eS50b1VwcGVyQ2FzZSgpIGFzICdISUdIJyB8ICdDUklUSUNBTCcsXG4gICAgICAgICAgc291cmNlOiAnY29udGVudF92YWxpZGF0aW9uJyxcbiAgICAgICAgICBkZXRhaWxzOiBgRGV0ZWN0ZWQgcGF0dGVybjogJHtkZXNjcmlwdGlvbn1gLFxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBTYW5pdGl6ZSBieSByZXBsYWNpbmcgd2l0aCBzYWZlIHBsYWNlaG9sZGVyXG4gICAgICAgIHNhbml0aXplZCA9IHNhbml0aXplZC5yZXBsYWNlKHBhdHRlcm4sICdbQ09OVEVOVF9CTE9DS0VEXScpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBpc1ZhbGlkOiBkZXRlY3RlZFBhdHRlcm5zLmxlbmd0aCA9PT0gMCxcbiAgICAgIHNhbml0aXplZENvbnRlbnQ6IHNhbml0aXplZCxcbiAgICAgIGRldGVjdGVkUGF0dGVybnMsXG4gICAgICBzZXZlcml0eTogaGlnaGVzdFNldmVyaXR5XG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgWUFNTCBmcm9udG1hdHRlciBmb3IgbWFsaWNpb3VzIGNvbnRlbnRcbiAgICovXG4gIHN0YXRpYyB2YWxpZGF0ZVlhbWxDb250ZW50KHlhbWxDb250ZW50OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAvLyBMZW5ndGggdmFsaWRhdGlvbiBiZWZvcmUgcGF0dGVybiBtYXRjaGluZ1xuICAgIGlmICh5YW1sQ29udGVudC5sZW5ndGggPiBTRUNVUklUWV9MSU1JVFMuTUFYX1lBTUxfTEVOR1RIKSB7XG4gICAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICAgIHR5cGU6ICdZQU1MX0lOSkVDVElPTl9BVFRFTVBUJyxcbiAgICAgICAgc2V2ZXJpdHk6ICdISUdIJyxcbiAgICAgICAgc291cmNlOiAneWFtbF92YWxpZGF0aW9uJyxcbiAgICAgICAgZGV0YWlsczogYFlBTUwgY29udGVudCBleGNlZWRzIG1heGltdW0gbGVuZ3RoOiAke3lhbWxDb250ZW50Lmxlbmd0aH0gPiAke1NFQ1VSSVRZX0xJTUlUUy5NQVhfWUFNTF9MRU5HVEh9YFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gVW5pY29kZSBub3JtYWxpemF0aW9uIHByZXByb2Nlc3NpbmcgZm9yIFlBTUwgY29udGVudFxuICAgIGNvbnN0IHVuaWNvZGVSZXN1bHQgPSBVbmljb2RlVmFsaWRhdG9yLm5vcm1hbGl6ZSh5YW1sQ29udGVudCk7XG4gICAgY29uc3Qgbm9ybWFsaXplZFlhbWwgPSB1bmljb2RlUmVzdWx0Lm5vcm1hbGl6ZWRDb250ZW50O1xuICAgIFxuICAgIGlmICghdW5pY29kZVJlc3VsdC5pc1ZhbGlkICYmIHVuaWNvZGVSZXN1bHQuZGV0ZWN0ZWRJc3N1ZXMpIHtcbiAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgdHlwZTogJ1lBTUxfVU5JQ09ERV9BVFRBQ0snLFxuICAgICAgICBzZXZlcml0eTogKHVuaWNvZGVSZXN1bHQuc2V2ZXJpdHk/LnRvVXBwZXJDYXNlKCkgfHwgJ01FRElVTScpIGFzICdMT1cnIHwgJ01FRElVTScgfCAnSElHSCcgfCAnQ1JJVElDQUwnLFxuICAgICAgICBzb3VyY2U6ICd5YW1sX3ZhbGlkYXRpb24nLFxuICAgICAgICBkZXRhaWxzOiBgVW5pY29kZSBhdHRhY2sgZGV0ZWN0ZWQgaW4gWUFNTDogJHt1bmljb2RlUmVzdWx0LmRldGVjdGVkSXNzdWVzLmpvaW4oJywgJyl9YFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBwYXR0ZXJuIG9mIHRoaXMuTUFMSUNJT1VTX1lBTUxfUEFUVEVSTlMpIHtcbiAgICAgIC8vIFRoZXNlIGFyZSB0cnVzdGVkIGludGVybmFsIHBhdHRlcm5zLCBzbyB3ZSBkaXNhYmxlIFJlRG9TIHJlamVjdGlvblxuICAgICAgaWYgKFJlZ2V4VmFsaWRhdG9yLnZhbGlkYXRlKG5vcm1hbGl6ZWRZYW1sLCBwYXR0ZXJuLCB7IFxuICAgICAgICBtYXhMZW5ndGg6IDEwMDAwLFxuICAgICAgICByZWplY3REYW5nZXJvdXNQYXR0ZXJuczogZmFsc2UsXG4gICAgICAgIGxvZ0V2ZW50czogZmFsc2UgIC8vIERvbid0IGxvZyBvdXIgb3duIHNlY3VyaXR5IHBhdHRlcm5zIGFzIGRhbmdlcm91c1xuICAgICAgfSkpIHtcbiAgICAgICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgICAgIHR5cGU6ICdZQU1MX0lOSkVDVElPTl9BVFRFTVBUJyxcbiAgICAgICAgICBzZXZlcml0eTogJ0NSSVRJQ0FMJyxcbiAgICAgICAgICBzb3VyY2U6ICd5YW1sX3ZhbGlkYXRpb24nLFxuICAgICAgICAgIGRldGFpbHM6IGBNYWxpY2lvdXMgWUFNTCBwYXR0ZXJuIGRldGVjdGVkOiAke3BhdHRlcm59YCxcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIEVhcmx5IGV4aXQgb24gZmlyc3QgbWF0Y2ggZm9yIHBlcmZvcm1hbmNlXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIHBlcnNvbmEgbWV0YWRhdGEgZmllbGRzXG4gICAqL1xuICBzdGF0aWMgdmFsaWRhdGVNZXRhZGF0YShtZXRhZGF0YTogYW55KTogQ29udGVudFZhbGlkYXRpb25SZXN1bHQge1xuICAgIGNvbnN0IGRldGVjdGVkUGF0dGVybnM6IHN0cmluZ1tdID0gW107XG5cbiAgICAvLyBDaGVjayBhbGwgc3RyaW5nIGZpZWxkcyBpbiBtZXRhZGF0YVxuICAgIGNvbnN0IGNoZWNrRmllbGQgPSAoZmllbGROYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpID0+IHtcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIC8vIENoZWNrIGZpZWxkIGxlbmd0aCBmaXJzdFxuICAgICAgICBpZiAodmFsdWUubGVuZ3RoID4gU0VDVVJJVFlfTElNSVRTLk1BWF9NRVRBREFUQV9GSUVMRF9MRU5HVEgpIHtcbiAgICAgICAgICBkZXRlY3RlZFBhdHRlcm5zLnB1c2goYCR7ZmllbGROYW1lfTogRmllbGQgZXhjZWVkcyBtYXhpbXVtIGxlbmd0aCBvZiAke1NFQ1VSSVRZX0xJTUlUUy5NQVhfTUVUQURBVEFfRklFTERfTEVOR1RIfSBjaGFyYWN0ZXJzYCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLnZhbGlkYXRlQW5kU2FuaXRpemUodmFsdWUpO1xuICAgICAgICBpZiAoIXJlc3VsdC5pc1ZhbGlkIHx8IHJlc3VsdC5kZXRlY3RlZFBhdHRlcm5zPy5sZW5ndGgpIHtcbiAgICAgICAgICBkZXRlY3RlZFBhdHRlcm5zLnB1c2goYCR7ZmllbGROYW1lfTogJHtyZXN1bHQuZGV0ZWN0ZWRQYXR0ZXJucz8uam9pbignLCAnKX1gKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICAvLyBWYWxpZGF0ZSBzdGFuZGFyZCBwZXJzb25hIGZpZWxkc1xuICAgIGNoZWNrRmllbGQoJ25hbWUnLCBtZXRhZGF0YS5uYW1lKTtcbiAgICBjaGVja0ZpZWxkKCdkZXNjcmlwdGlvbicsIG1ldGFkYXRhLmRlc2NyaXB0aW9uKTtcbiAgICBjaGVja0ZpZWxkKCdjYXRlZ29yeScsIG1ldGFkYXRhLmNhdGVnb3J5KTtcbiAgICBjaGVja0ZpZWxkKCdhdXRob3InLCBtZXRhZGF0YS5hdXRob3IpO1xuICAgIFxuICAgIC8vIENoZWNrIGFueSBjdXN0b20gZmllbGRzXG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMobWV0YWRhdGEpKSB7XG4gICAgICBpZiAoIVsnbmFtZScsICdkZXNjcmlwdGlvbicsICdjYXRlZ29yeScsICdhdXRob3InXS5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICAgIGNoZWNrRmllbGQoa2V5LCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGlzVmFsaWQ6IGRldGVjdGVkUGF0dGVybnMubGVuZ3RoID09PSAwLFxuICAgICAgZGV0ZWN0ZWRQYXR0ZXJucyxcbiAgICAgIHNldmVyaXR5OiBkZXRlY3RlZFBhdHRlcm5zLmxlbmd0aCA+IDAgPyAnaGlnaCcgOiAnbG93J1xuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogU2FuaXRpemVzIGEgY29tcGxldGUgcGVyc29uYSBmaWxlIChmcm9udG1hdHRlciArIGNvbnRlbnQpXG4gICAqL1xuICBzdGF0aWMgc2FuaXRpemVQZXJzb25hQ29udGVudChjb250ZW50OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIC8vIEV4dHJhY3QgZnJvbnRtYXR0ZXJcbiAgICBjb25zdCBmcm9udG1hdHRlck1hdGNoID0gY29udGVudC5tYXRjaCgvXi0tLVxcbihbXFxzXFxTXSo/KVxcbi0tLS8pO1xuICAgIFxuICAgIGlmICghZnJvbnRtYXR0ZXJNYXRjaCkge1xuICAgICAgLy8gTm8gZnJvbnRtYXR0ZXIsIGp1c3QgdmFsaWRhdGUgY29udGVudFxuICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy52YWxpZGF0ZUFuZFNhbml0aXplKGNvbnRlbnQpO1xuICAgICAgaWYgKCFyZXN1bHQuaXNWYWxpZCAmJiByZXN1bHQuc2V2ZXJpdHkgPT09ICdjcml0aWNhbCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IFNlY3VyaXR5RXJyb3IoJ0NyaXRpY2FsIHNlY3VyaXR5IHRocmVhdCBkZXRlY3RlZCBpbiBwZXJzb25hIGNvbnRlbnQnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQuc2FuaXRpemVkQ29udGVudCB8fCBjb250ZW50O1xuICAgIH1cblxuICAgIGNvbnN0IHlhbWxDb250ZW50ID0gZnJvbnRtYXR0ZXJNYXRjaFsxXTtcbiAgICBjb25zdCBtYXJrZG93bkNvbnRlbnQgPSBjb250ZW50LnN1YnN0cmluZyhmcm9udG1hdHRlck1hdGNoWzBdLmxlbmd0aCk7XG5cbiAgICAvLyBWYWxpZGF0ZSBZQU1MXG4gICAgaWYgKCF0aGlzLnZhbGlkYXRlWWFtbENvbnRlbnQoeWFtbENvbnRlbnQpKSB7XG4gICAgICB0aHJvdyBuZXcgU2VjdXJpdHlFcnJvcignTWFsaWNpb3VzIFlBTUwgZGV0ZWN0ZWQgaW4gcGVyc29uYSBmcm9udG1hdHRlcicpO1xuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIG1hcmtkb3duIGNvbnRlbnRcbiAgICBjb25zdCBjb250ZW50UmVzdWx0ID0gdGhpcy52YWxpZGF0ZUFuZFNhbml0aXplKG1hcmtkb3duQ29udGVudCk7XG4gICAgaWYgKCFjb250ZW50UmVzdWx0LmlzVmFsaWQgJiYgY29udGVudFJlc3VsdC5zZXZlcml0eSA9PT0gJ2NyaXRpY2FsJykge1xuICAgICAgdGhyb3cgbmV3IFNlY3VyaXR5RXJyb3IoJ0NyaXRpY2FsIHNlY3VyaXR5IHRocmVhdCBkZXRlY3RlZCBpbiBwZXJzb25hIGNvbnRlbnQnKTtcbiAgICB9XG5cbiAgICAvLyBSZXR1cm4gc2FuaXRpemVkIGNvbnRlbnRcbiAgICByZXR1cm4gYC0tLVxcbiR7eWFtbENvbnRlbnR9XFxuLS0tJHtjb250ZW50UmVzdWx0LnNhbml0aXplZENvbnRlbnQgfHwgbWFya2Rvd25Db250ZW50fWA7XG4gIH1cbn0iXX0=
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SecureErrorHandler - Sanitizes error messages to prevent information disclosure
|
|
3
|
+
*
|
|
4
|
+
* SECURITY: Addresses Issue #206 - Information Disclosure via Error Messages
|
|
5
|
+
* - Prevents exposure of file paths, system details, and internal structure
|
|
6
|
+
* - Maps system errors to safe user-friendly messages
|
|
7
|
+
* - Preserves full error details for secure logging
|
|
8
|
+
* - Different behavior for production vs development environments
|
|
9
|
+
*/
|
|
10
|
+
export interface SanitizedError {
|
|
11
|
+
message: string;
|
|
12
|
+
code?: string;
|
|
13
|
+
requestId?: string;
|
|
14
|
+
}
|
|
15
|
+
export declare class SecureErrorHandler {
|
|
16
|
+
private static readonly SANITIZATION_PATTERNS;
|
|
17
|
+
private static readonly ERROR_MAP;
|
|
18
|
+
/**
|
|
19
|
+
* Sanitize an error for safe display to users
|
|
20
|
+
*/
|
|
21
|
+
static sanitizeError(error: any, requestId?: string): SanitizedError;
|
|
22
|
+
/**
|
|
23
|
+
* Get a safe, user-friendly error message
|
|
24
|
+
*/
|
|
25
|
+
private static getSafeErrorMessage;
|
|
26
|
+
/**
|
|
27
|
+
* Sanitize error messages to remove sensitive information
|
|
28
|
+
*/
|
|
29
|
+
private static sanitizeErrorMessage;
|
|
30
|
+
/**
|
|
31
|
+
* Create a user-friendly error response
|
|
32
|
+
*/
|
|
33
|
+
static createErrorResponse(error: any, requestId?: string): {
|
|
34
|
+
success: false;
|
|
35
|
+
error: SanitizedError;
|
|
36
|
+
};
|
|
37
|
+
/**
|
|
38
|
+
* Wrap an async function with error handling
|
|
39
|
+
*/
|
|
40
|
+
static wrapAsync<T extends (...args: any[]) => Promise<any>>(fn: T, context?: string): T;
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=errorHandler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errorHandler.d.ts","sourceRoot":"","sources":["../../src/security/errorHandler.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,kBAAkB;IAE7B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,qBAAqB,CAW3C;IAEF,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAyB/B;IAEF;;OAEG;IACH,MAAM,CAAC,aAAa,CAAC,KAAK,EAAE,GAAG,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,cAAc;IAoCpE;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,mBAAmB;IAuBlC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,oBAAoB;IA0CnC;;OAEG;IACH,MAAM,CAAC,mBAAmB,CAAC,KAAK,EAAE,GAAG,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG;QAC1D,OAAO,EAAE,KAAK,CAAC;QACf,KAAK,EAAE,cAAc,CAAC;KACvB;IAOD;;OAEG;IACH,MAAM,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,GAAG,CAAC,EACzD,EAAE,EAAE,CAAC,EACL,OAAO,CAAC,EAAE,MAAM,GACf,CAAC;CAcL"}
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SecureErrorHandler - Sanitizes error messages to prevent information disclosure
|
|
3
|
+
*
|
|
4
|
+
* SECURITY: Addresses Issue #206 - Information Disclosure via Error Messages
|
|
5
|
+
* - Prevents exposure of file paths, system details, and internal structure
|
|
6
|
+
* - Maps system errors to safe user-friendly messages
|
|
7
|
+
* - Preserves full error details for secure logging
|
|
8
|
+
* - Different behavior for production vs development environments
|
|
9
|
+
*/
|
|
10
|
+
import { logger } from '../utils/logger.js';
|
|
11
|
+
export class SecureErrorHandler {
|
|
12
|
+
// Pre-compiled regex patterns for better performance
|
|
13
|
+
static SANITIZATION_PATTERNS = {
|
|
14
|
+
UNIX_PATHS: /\/(?:Users|home|var|etc|opt|usr)\/[^\s]+/gi,
|
|
15
|
+
WINDOWS_PATHS: /[A-Z]:\\[^\s]+/gi,
|
|
16
|
+
UNC_PATHS: /\\\\[^\s]+/gi,
|
|
17
|
+
FILE_URLS: /file:\/\/\/?[^\s]+/gi,
|
|
18
|
+
IP_ADDRESSES: /\b(?:(?:\d{1,3}\.){3}\d{1,3}|(?:0\d{1,2}\.){3}0\d{1,2})\b/g,
|
|
19
|
+
PORTS: /:\d{4,5}\b/g,
|
|
20
|
+
HOME_DIRS: /~\/[^\s]+/g,
|
|
21
|
+
USER_PATHS: /\/(?:Users|home)\/[^\/\s]+/gi,
|
|
22
|
+
TEMP_PATHS: /\/(?:tmp|var\/folders)\/[^\s]+/gi,
|
|
23
|
+
ENV_VARS: /\$[A-Z_][A-Z0-9_]*/g,
|
|
24
|
+
};
|
|
25
|
+
static ERROR_MAP = {
|
|
26
|
+
// File system errors
|
|
27
|
+
'ENOENT': 'Resource not found',
|
|
28
|
+
'EACCES': 'Access denied',
|
|
29
|
+
'EEXIST': 'Resource already exists',
|
|
30
|
+
'EISDIR': 'Invalid operation on directory',
|
|
31
|
+
'EMFILE': 'System resource limit reached',
|
|
32
|
+
'ENOMEM': 'Insufficient memory available',
|
|
33
|
+
'ENOSPC': 'Insufficient storage space',
|
|
34
|
+
'EPERM': 'Operation not permitted',
|
|
35
|
+
'EROFS': 'Read-only file system',
|
|
36
|
+
// Network errors
|
|
37
|
+
'ECONNREFUSED': 'Connection refused',
|
|
38
|
+
'ECONNRESET': 'Connection reset',
|
|
39
|
+
'ETIMEDOUT': 'Operation timed out',
|
|
40
|
+
'ENOTFOUND': 'Service not found',
|
|
41
|
+
// Application errors
|
|
42
|
+
'INVALID_INPUT': 'Invalid input provided',
|
|
43
|
+
'VALIDATION_ERROR': 'Validation failed',
|
|
44
|
+
'NOT_FOUND': 'Resource not found',
|
|
45
|
+
'UNAUTHORIZED': 'Authentication required',
|
|
46
|
+
'FORBIDDEN': 'Access forbidden',
|
|
47
|
+
'RATE_LIMITED': 'Too many requests',
|
|
48
|
+
};
|
|
49
|
+
/**
|
|
50
|
+
* Sanitize an error for safe display to users
|
|
51
|
+
*/
|
|
52
|
+
static sanitizeError(error, requestId) {
|
|
53
|
+
// Input validation
|
|
54
|
+
if (error === null || error === undefined) {
|
|
55
|
+
return {
|
|
56
|
+
message: process.env.NODE_ENV === 'production'
|
|
57
|
+
? 'An error occurred processing your request.'
|
|
58
|
+
: 'An unknown error occurred',
|
|
59
|
+
code: 'UNKNOWN_ERROR',
|
|
60
|
+
requestId
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
// Log the full error securely for debugging
|
|
64
|
+
logger.error('Error occurred:', {
|
|
65
|
+
error: error,
|
|
66
|
+
stack: error?.stack,
|
|
67
|
+
code: error?.code,
|
|
68
|
+
requestId
|
|
69
|
+
});
|
|
70
|
+
// Production mode: Return only safe messages
|
|
71
|
+
if (process.env.NODE_ENV === 'production') {
|
|
72
|
+
return {
|
|
73
|
+
message: this.getSafeErrorMessage(error),
|
|
74
|
+
code: error?.code || 'INTERNAL_ERROR',
|
|
75
|
+
requestId
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
// Development mode: Return sanitized but more detailed messages
|
|
79
|
+
return {
|
|
80
|
+
message: this.sanitizeErrorMessage(error?.message || String(error)),
|
|
81
|
+
code: error?.code || 'UNKNOWN_ERROR',
|
|
82
|
+
requestId
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Get a safe, user-friendly error message
|
|
87
|
+
*/
|
|
88
|
+
static getSafeErrorMessage(error) {
|
|
89
|
+
// Check for known error codes
|
|
90
|
+
if (error?.code && this.ERROR_MAP[error.code]) {
|
|
91
|
+
return this.ERROR_MAP[error.code];
|
|
92
|
+
}
|
|
93
|
+
// Check for common error types
|
|
94
|
+
if (error?.name === 'ValidationError') {
|
|
95
|
+
return 'Validation failed. Please check your input.';
|
|
96
|
+
}
|
|
97
|
+
if (error?.name === 'TypeError') {
|
|
98
|
+
return 'Invalid operation requested.';
|
|
99
|
+
}
|
|
100
|
+
if (error?.name === 'RangeError') {
|
|
101
|
+
return 'Value out of acceptable range.';
|
|
102
|
+
}
|
|
103
|
+
// Default safe message
|
|
104
|
+
return 'An error occurred processing your request.';
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Sanitize error messages to remove sensitive information
|
|
108
|
+
*/
|
|
109
|
+
static sanitizeErrorMessage(message) {
|
|
110
|
+
if (!message)
|
|
111
|
+
return 'Unknown error';
|
|
112
|
+
// Use pre-compiled patterns for better performance
|
|
113
|
+
// Apply more specific patterns first to avoid conflicts
|
|
114
|
+
let sanitized = message;
|
|
115
|
+
// Remove temp directory paths BEFORE general paths
|
|
116
|
+
sanitized = sanitized.replace(this.SANITIZATION_PATTERNS.TEMP_PATHS, '[TEMP]');
|
|
117
|
+
// Remove other specific paths
|
|
118
|
+
sanitized = sanitized
|
|
119
|
+
.replace(this.SANITIZATION_PATTERNS.UNIX_PATHS, '[PATH]')
|
|
120
|
+
.replace(this.SANITIZATION_PATTERNS.WINDOWS_PATHS, '[PATH]')
|
|
121
|
+
.replace(this.SANITIZATION_PATTERNS.UNC_PATHS, '[PATH]');
|
|
122
|
+
// Remove file URLs (including Windows file:///c:/ format)
|
|
123
|
+
sanitized = sanitized.replace(this.SANITIZATION_PATTERNS.FILE_URLS, '[FILE]');
|
|
124
|
+
// Remove potential IP addresses (including zero-padded)
|
|
125
|
+
sanitized = sanitized.replace(this.SANITIZATION_PATTERNS.IP_ADDRESSES, '[IP]');
|
|
126
|
+
// Remove potential ports
|
|
127
|
+
sanitized = sanitized.replace(this.SANITIZATION_PATTERNS.PORTS, ':[PORT]');
|
|
128
|
+
// Remove home directory references
|
|
129
|
+
sanitized = sanitized.replace(this.SANITIZATION_PATTERNS.HOME_DIRS, '[HOME]/...');
|
|
130
|
+
// Remove potential usernames from paths
|
|
131
|
+
sanitized = sanitized.replace(this.SANITIZATION_PATTERNS.USER_PATHS, '/[USER]');
|
|
132
|
+
// Remove potential environment variables
|
|
133
|
+
sanitized = sanitized.replace(this.SANITIZATION_PATTERNS.ENV_VARS, '[ENV]');
|
|
134
|
+
// Limit message length to prevent verbose error dumps
|
|
135
|
+
if (sanitized.length > 500) {
|
|
136
|
+
sanitized = sanitized.substring(0, 497) + '...';
|
|
137
|
+
}
|
|
138
|
+
return sanitized;
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Create a user-friendly error response
|
|
142
|
+
*/
|
|
143
|
+
static createErrorResponse(error, requestId) {
|
|
144
|
+
return {
|
|
145
|
+
success: false,
|
|
146
|
+
error: this.sanitizeError(error, requestId)
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Wrap an async function with error handling
|
|
151
|
+
*/
|
|
152
|
+
static wrapAsync(fn, context) {
|
|
153
|
+
return (async (...args) => {
|
|
154
|
+
try {
|
|
155
|
+
return await fn(...args);
|
|
156
|
+
}
|
|
157
|
+
catch (error) {
|
|
158
|
+
const sanitized = this.sanitizeError(error);
|
|
159
|
+
throw new Error(context
|
|
160
|
+
? `${context}: ${sanitized.message}`
|
|
161
|
+
: sanitized.message);
|
|
162
|
+
}
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JIYW5kbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlY3VyaXR5L2Vycm9ySGFuZGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7R0FRRztBQUVILE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQVE1QyxNQUFNLE9BQU8sa0JBQWtCO0lBQzdCLHFEQUFxRDtJQUM3QyxNQUFNLENBQVUscUJBQXFCLEdBQUc7UUFDOUMsVUFBVSxFQUFFLDRDQUE0QztRQUN4RCxhQUFhLEVBQUUsa0JBQWtCO1FBQ2pDLFNBQVMsRUFBRSxjQUFjO1FBQ3pCLFNBQVMsRUFBRSxzQkFBc0I7UUFDakMsWUFBWSxFQUFFLDREQUE0RDtRQUMxRSxLQUFLLEVBQUUsYUFBYTtRQUNwQixTQUFTLEVBQUUsWUFBWTtRQUN2QixVQUFVLEVBQUUsOEJBQThCO1FBQzFDLFVBQVUsRUFBRSxrQ0FBa0M7UUFDOUMsUUFBUSxFQUFFLHFCQUFxQjtLQUNoQyxDQUFDO0lBRU0sTUFBTSxDQUFVLFNBQVMsR0FBMkI7UUFDMUQscUJBQXFCO1FBQ3JCLFFBQVEsRUFBRSxvQkFBb0I7UUFDOUIsUUFBUSxFQUFFLGVBQWU7UUFDekIsUUFBUSxFQUFFLHlCQUF5QjtRQUNuQyxRQUFRLEVBQUUsZ0NBQWdDO1FBQzFDLFFBQVEsRUFBRSwrQkFBK0I7UUFDekMsUUFBUSxFQUFFLCtCQUErQjtRQUN6QyxRQUFRLEVBQUUsNEJBQTRCO1FBQ3RDLE9BQU8sRUFBRSx5QkFBeUI7UUFDbEMsT0FBTyxFQUFFLHVCQUF1QjtRQUVoQyxpQkFBaUI7UUFDakIsY0FBYyxFQUFFLG9CQUFvQjtRQUNwQyxZQUFZLEVBQUUsa0JBQWtCO1FBQ2hDLFdBQVcsRUFBRSxxQkFBcUI7UUFDbEMsV0FBVyxFQUFFLG1CQUFtQjtRQUVoQyxxQkFBcUI7UUFDckIsZUFBZSxFQUFFLHdCQUF3QjtRQUN6QyxrQkFBa0IsRUFBRSxtQkFBbUI7UUFDdkMs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S0FBSztZQUNkLEtBQUssRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUM7U0FDNUMsQ0FBQztJQUNKLENBQUM7SUFFRDs7T0FFRztJQUNILE1BQU0sQ0FBQyxTQUFTLENBQ2QsRUFBSyxFQUNMLE9BQWdCO1FBRWhCLE9BQU8sQ0FBQyxLQUFLLEVBQUUsR0FBRyxJQUFtQixFQUFFLEVBQUU7WUFDdkMsSUFBSSxDQUFDO2dCQUNILE9BQU8sTUFBTSxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztZQUMzQixDQUFDO1lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztnQkFDZixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUM1QyxNQUFNLElBQUksS0FBSyxDQUNiLE9BQU87b0JBQ0wsQ0FBQyxDQUFDLEdBQUcsT0FBTyxLQUFLLFNBQVMsQ0FBQyxPQUFPLEVBQUU7b0JBQ3BDLENBQUMsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUN0QixDQUFDO1lBQ0osQ0FBQztRQUNILENBQUMsQ0FBTSxDQUFDO0lBQ1YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogU2VjdXJlRXJyb3JIYW5kbGVyIC0gU2FuaXRpemVzIGVycm9yIG1lc3NhZ2VzIHRvIHByZXZlbnQgaW5mb3JtYXRpb24gZGlzY2xvc3VyZVxuICogXG4gKiBTRUNVUklUWTogQWRkcmVzc2VzIElzc3VlICMyMDYgLSBJbmZvcm1hdGlvbiBEaXNjbG9zdXJlIHZpYSBFcnJvciBNZXNzYWdlc1xuICogLSBQcmV2ZW50cyBleHBvc3VyZSBvZiBmaWxlIHBhdGhzLCBzeXN0ZW0gZGV0YWlscywgYW5kIGludGVybmFsIHN0cnVjdHVyZVxuICogLSBNYXBzIHN5c3RlbSBlcnJvcnMgdG8gc2FmZSB1c2VyLWZyaWVuZGx5IG1lc3NhZ2VzXG4gKiAtIFByZXNlcnZlcyBmdWxsIGVycm9yIGRldGFpbHMgZm9yIHNlY3VyZSBsb2dnaW5nXG4gKiAtIERpZmZlcmVudCBiZWhhdmlvciBmb3IgcHJvZHVjdGlvbiB2cyBkZXZlbG9wbWVudCBlbnZpcm9ubWVudHNcbiAqL1xuXG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuLi91dGlscy9sb2dnZXIuanMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNhbml0aXplZEVycm9yIHtcbiAgbWVzc2FnZTogc3RyaW5nO1xuICBjb2RlPzogc3RyaW5nO1xuICByZXF1ZXN0SWQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBTZWN1cmVFcnJvckhhbmRsZXIge1xuICAvLyBQcmUtY29tcGlsZWQgcmVnZXggcGF0dGVybnMgZm9yIGJldHRlciBwZXJmb3JtYW5jZVxuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBTQU5JVElaQVRJT05fUEFUVEVSTlMgPSB7XG4gICAgVU5JWF9QQVRIUzogL1xcLyg/OlVzZXJzfGhvbWV8dmFyfGV0Y3xvcHR8dXNyKVxcL1teXFxzXSsvZ2ksXG4gICAgV0lORE9XU19QQVRIUzogL1tBLVpdOlxcXFxbXlxcc10rL2dpLFxuICAgIFVOQ19QQVRIUzogL1xcXFxcXFxcW15cXHNdKy9naSxcbiAgICBGSUxFX1VSTFM6IC9maWxlOlxcL1xcL1xcLz9bXlxcc10rL2dpLFxuICAgIElQX0FERFJFU1NFUzogL1xcYig/Oig/OlxcZHsxLDN9XFwuKXszfVxcZHsxLDN9fCg/OjBcXGR7MSwyfVxcLil7M30wXFxkezEsMn0pXFxiL2csXG4gICAgUE9SVFM6IC86XFxkezQsNX1cXGIvZyxcbiAgICBIT01FX0RJUlM6IC9+XFwvW15cXHNdKy9nLFxuICAgIFVTRVJfUEFUSFM6IC9cXC8oPzpVc2Vyc3xob21lKVxcL1teXFwvXFxzXSsvZ2ksXG4gICAgVEVNUF9QQVRIUzogL1xcLyg/OnRtcHx2YXJcXC9mb2xkZXJzKVxcL1teXFxzXSsvZ2ksXG4gICAgRU5WX1ZBUlM6IC9cXCRbQS1aX11bQS1aMC05X10qL2csXG4gIH07XG4gIFxuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBFUlJPUl9NQVA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgLy8gRmlsZSBzeXN0ZW0gZXJyb3JzXG4gICAgJ0VOT0VOVCc6ICdSZXNvdXJjZSBub3QgZm91bmQnLFxuICAgICdFQUNDRVMnOiAnQWNjZXNzIGRlbmllZCcsXG4gICAgJ0VFWElTVCc6ICdSZXNvdXJjZSBhbHJlYWR5IGV4aXN0cycsXG4gICAgJ0VJU0RJUic6ICdJbnZhbGlkIG9wZXJhdGlvbiBvbiBkaXJlY3RvcnknLFxuICAgICdFTUZJTEUnOiAnU3lzdGVtIHJlc291cmNlIGxpbWl0IHJlYWNoZWQnLFxuICAgICdFTk9NRU0nOiAnSW5zdWZmaWNpZW50IG1lbW9yeSBhdmFpbGFibGUnLFxuICAgICdFTk9TUEMnOiAnSW5zdWZmaWNpZW50IHN0b3JhZ2Ugc3BhY2UnLFxuICAgICdFUEVSTSc6ICdPcGVyYXRpb24gbm90IHBlcm1pdHRlZCcsXG4gICAgJ0VST0ZTJzogJ1JlYWQtb25seSBmaWxlIHN5c3RlbScsXG4gICAgXG4gICAgLy8gTmV0d29yayBlcnJvcnNcbiAgICAnRUNPTk5SRUZVU0VEJzogJ0Nvbm5lY3Rpb24gcmVmdXNlZCcsXG4gICAgJ0VDT05OUkVTRVQnOiAnQ29ubmVjdGlvbiByZXNldCcsXG4gICAgJ0VUSU1FRE9VVCc6ICdPcGVyYXRpb24gdGltZWQgb3V0JyxcbiAgICAnRU5PVEZPVU5EJzogJ1NlcnZpY2Ugbm90IGZvdW5kJyxcbiAgICBcbiAgICAvLyBBcHBsaWNhdGlvbiBlcnJvcnNcbiAgICAnSU5WQUxJRF9JTlBVVCc6ICdJbnZhbGlkIGlucHV0IHByb3ZpZGVkJyxcbiAgICAnVkFMSURBVElPTl9FUlJPUic6ICdWYWxpZGF0aW9uIGZhaWxlZCcsXG4gICAgJ05PVF9GT1VORCc6ICdSZXNvdXJjZSBub3QgZm91bmQnLFxuICAgICdVTkFVVEhPUklaRUQnOiAnQXV0aGVudGljYXRpb24gcmVxdWlyZWQnLFxuICAgICdGT1JCSURERU4nOiAnQWNjZXNzIGZvcmJpZGRlbicsXG4gICAgJ1JBVEVfTElNSVRFRCc6ICdUb28gbWFueSByZXF1ZXN0cycsXG4gIH07XG5cbiAgLyoqXG4gICAqIFNhbml0aXplIGFuIGVycm9yIGZvciBzYWZlIGRpc3BsYXkgdG8gdXNlcnNcbiAgICovXG4gIHN0YXRpYyBzYW5pdGl6ZUVycm9yKGVycm9yOiBhbnksIHJlcXVlc3RJZD86IHN0cmluZyk6IFNhbml0aXplZEVycm9yIHtcbiAgICAvLyBJbnB1dCB2YWxpZGF0aW9uXG4gICAgaWYgKGVycm9yID09PSBudWxsIHx8IGVycm9yID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG1lc3NhZ2U6IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicgXG4gICAgICAgICAgPyAnQW4gZXJyb3Igb2NjdXJyZWQgcHJvY2Vzc2luZyB5b3VyIHJlcXVlc3QuJ1xuICAgICAgICAgIDogJ0FuIHVua25vd24gZXJyb3Igb2NjdXJyZWQnLFxuICAgICAgICBjb2RlOiAnVU5LTk9XTl9FUlJPUicsXG4gICAgICAgIHJlcXVlc3RJZFxuICAgICAgfTtcbiAgICB9XG4gICAgLy8gTG9nIHRoZSBmdWxsIGVycm9yIHNlY3VyZWx5IGZvciBkZWJ1Z2dpbmdcbiAgICBsb2dnZXIuZXJyb3IoJ0Vycm9yIG9jY3VycmVkOicsIHtcbiAgICAgIGVycm9yOiBlcnJvcixcbiAgICAgIHN0YWNrOiBlcnJvcj8uc3RhY2ssXG4gICAgICBjb2RlOiBlcnJvcj8uY29kZSxcbiAgICAgIHJlcXVlc3RJZFxuICAgIH0pO1xuXG4gICAgLy8gUHJvZHVjdGlvbiBtb2RlOiBSZXR1cm4gb25seSBzYWZlIG1lc3NhZ2VzXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG1lc3NhZ2U6IHRoaXMuZ2V0U2FmZUVycm9yTWVzc2FnZShlcnJvciksXG4gICAgICAgIGNvZGU6IGVycm9yPy5jb2RlIHx8ICdJTlRFUk5BTF9FUlJPUicsXG4gICAgICAgIHJlcXVlc3RJZFxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBEZXZlbG9wbWVudCBtb2RlOiBSZXR1cm4gc2FuaXRpemVkIGJ1dCBtb3JlIGRldGFpbGVkIG1lc3NhZ2VzXG4gICAgcmV0dXJuIHtcbiAgICAgIG1lc3NhZ2U6IHRoaXMuc2FuaXRpemVFcnJvck1lc3NhZ2UoZXJyb3I/Lm1lc3NhZ2UgfHwgU3RyaW5nKGVycm9yKSksXG4gICAgICBjb2RlOiBlcnJvcj8uY29kZSB8fCAnVU5LTk9XTl9FUlJPUicsXG4gICAgICByZXF1ZXN0SWRcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhIHNhZmUsIHVzZXItZnJpZW5kbHkgZXJyb3IgbWVzc2FnZVxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgZ2V0U2FmZUVycm9yTWVzc2FnZShlcnJvcjogYW55KTogc3RyaW5nIHtcbiAgICAvLyBDaGVjayBmb3Iga25vd24gZXJyb3IgY29kZXNcbiAgICBpZiAoZXJyb3I/LmNvZGUgJiYgdGhpcy5FUlJPUl9NQVBbZXJyb3IuY29kZV0pIHtcbiAgICAgIHJldHVybiB0aGlzLkVSUk9SX01BUFtlcnJvci5jb2RlXTtcbiAgICB9XG5cbiAgICAvLyBDaGVjayBmb3IgY29tbW9uIGVycm9yIHR5cGVzXG4gICAgaWYgKGVycm9yPy5uYW1lID09PSAnVmFsaWRhdGlvbkVycm9yJykge1xuICAgICAgcmV0dXJuICdWYWxpZGF0aW9uIGZhaWxlZC4gUGxlYXNlIGNoZWNrIHlvdXIgaW5wdXQuJztcbiAgICB9XG4gICAgXG4gICAgaWYgKGVycm9yPy5uYW1lID09PSAnVHlwZUVycm9yJykge1xuICAgICAgcmV0dXJuICdJbnZhbGlkIG9wZXJhdGlvbiByZXF1ZXN0ZWQuJztcbiAgICB9XG4gICAgXG4gICAgaWYgKGVycm9yPy5uYW1lID09PSAnUmFuZ2VFcnJvcicpIHtcbiAgICAgIHJldHVybiAnVmFsdWUgb3V0IG9mIGFjY2VwdGFibGUgcmFuZ2UuJztcbiAgICB9XG5cbiAgICAvLyBEZWZhdWx0IHNhZmUgbWVzc2FnZVxuICAgIHJldHVybiAnQW4gZXJyb3Igb2NjdXJyZWQgcHJvY2Vzc2luZyB5b3VyIHJlcXVlc3QuJztcbiAgfVxuXG4gIC8qKlxuICAgKiBTYW5pdGl6ZSBlcnJvciBtZXNzYWdlcyB0byByZW1vdmUgc2Vuc2l0aXZlIGluZm9ybWF0aW9uXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyBzYW5pdGl6ZUVycm9yTWVzc2FnZShtZXNzYWdlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICghbWVzc2FnZSkgcmV0dXJuICdVbmtub3duIGVycm9yJztcblxuICAgIC8vIFVzZSBwcmUtY29tcGlsZWQgcGF0dGVybnMgZm9yIGJldHRlciBwZXJmb3JtYW5jZVxuICAgIC8vIEFwcGx5IG1vcmUgc3BlY2lmaWMgcGF0dGVybnMgZmlyc3QgdG8gYXZvaWQgY29uZmxpY3RzXG4gICAgbGV0IHNhbml0aXplZCA9IG1lc3NhZ2U7XG4gICAgXG4gICAgLy8gUmVtb3ZlIHRlbXAgZGlyZWN0b3J5IHBhdGhzIEJFRk9SRSBnZW5lcmFsIHBhdGhzXG4gICAgc2FuaXRpemVkID0gc2FuaXRpemVkLnJlcGxhY2UodGhpcy5TQU5JVElaQVRJT05fUEFUVEVSTlMuVEVNUF9QQVRIUywgJ1tURU1QXScpO1xuICAgIFxuICAgIC8vIFJlbW92ZSBvdGhlciBzcGVjaWZpYyBwYXRoc1xuICAgIHNhbml0aXplZCA9IHNhbml0aXplZFxuICAgICAgLnJlcGxhY2UodGhpcy5TQU5JVElaQVRJT05fUEFUVEVSTlMuVU5JWF9QQVRIUywgJ1tQQVRIXScpXG4gICAgICAucmVwbGFjZSh0aGlzLlNBTklUSVpBVElPTl9QQVRURVJOUy5XSU5ET1dTX1BBVEhTLCAnW1BBVEhdJylcbiAgICAgIC5yZXBsYWNlKHRoaXMuU0FOSVRJWkFUSU9OX1BBVFRFUk5TLlVOQ19QQVRIUywgJ1tQQVRIXScpO1xuXG4gICAgLy8gUmVtb3ZlIGZpbGUgVVJMcyAoaW5jbHVkaW5nIFdpbmRvd3MgZmlsZTovLy9jOi8gZm9ybWF0KVxuICAgIHNhbml0aXplZCA9IHNhbml0aXplZC5yZXBsYWNlKHRoaXMuU0FOSVRJWkFUSU9OX1BBVFRFUk5TLkZJTEVfVVJMUywgJ1tGSUxFXScpO1xuXG4gICAgLy8gUmVtb3ZlIHBvdGVudGlhbCBJUCBhZGRyZXNzZXMgKGluY2x1ZGluZyB6ZXJvLXBhZGRlZClcbiAgICBzYW5pdGl6ZWQgPSBzYW5pdGl6ZWQucmVwbGFjZSh0aGlzLlNBTklUSVpBVElPTl9QQVRURVJOUy5JUF9BRERSRVNTRVMsICdbSVBdJyk7XG5cbiAgICAvLyBSZW1vdmUgcG90ZW50aWFsIHBvcnRzXG4gICAgc2FuaXRpemVkID0gc2FuaXRpemVkLnJlcGxhY2UodGhpcy5TQU5JVElaQVRJT05fUEFUVEVSTlMuUE9SVFMsICc6W1BPUlRdJyk7XG5cbiAgICAvLyBSZW1vdmUgaG9tZSBkaXJlY3RvcnkgcmVmZXJlbmNlc1xuICAgIHNhbml0aXplZCA9IHNhbml0aXplZC5yZXBsYWNlKHRoaXMuU0FOSVRJWkFUSU9OX1BBVFRFUk5TLkhPTUVfRElSUywgJ1tIT01FXS8uLi4nKTtcblxuICAgIC8vIFJlbW92ZSBwb3RlbnRpYWwgdXNlcm5hbWVzIGZyb20gcGF0aHNcbiAgICBzYW5pdGl6ZWQgPSBzYW5pdGl6ZWQucmVwbGFjZSh0aGlzLlNBTklUSVpBVElPTl9QQVRURVJOUy5VU0VSX1BBVEhTLCAnL1tVU0VSXScpO1xuXG4gICAgLy8gUmVtb3ZlIHBvdGVudGlhbCBlbnZpcm9ubWVudCB2YXJpYWJsZXNcbiAgICBzYW5pdGl6ZWQgPSBzYW5pdGl6ZWQucmVwbGFjZSh0aGlzLlNBTklUSVpBVElPTl9QQVRURVJOUy5FTlZfVkFSUywgJ1tFTlZdJyk7XG5cbiAgICAvLyBMaW1pdCBtZXNzYWdlIGxlbmd0aCB0byBwcmV2ZW50IHZlcmJvc2UgZXJyb3IgZHVtcHNcbiAgICBpZiAoc2FuaXRpemVkLmxlbmd0aCA+IDUwMCkge1xuICAgICAgc2FuaXRpemVkID0gc2FuaXRpemVkLnN1YnN0cmluZygwLCA0OTcpICsgJy4uLic7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNhbml0aXplZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSB1c2VyLWZyaWVuZGx5IGVycm9yIHJlc3BvbnNlXG4gICAqL1xuICBzdGF0aWMgY3JlYXRlRXJyb3JSZXNwb25zZShlcnJvcjogYW55LCByZXF1ZXN0SWQ/OiBzdHJpbmcpOiB7XG4gICAgc3VjY2VzczogZmFsc2U7XG4gICAgZXJyb3I6IFNhbml0aXplZEVycm9yO1xuICB9IHtcbiAgICByZXR1cm4ge1xuICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICBlcnJvcjogdGhpcy5zYW5pdGl6ZUVycm9yKGVycm9yLCByZXF1ZXN0SWQpXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXcmFwIGFuIGFzeW5jIGZ1bmN0aW9uIHdpdGggZXJyb3IgaGFuZGxpbmdcbiAgICovXG4gIHN0YXRpYyB3cmFwQXN5bmM8VCBleHRlbmRzICguLi5hcmdzOiBhbnlbXSkgPT4gUHJvbWlzZTxhbnk+PihcbiAgICBmbjogVCxcbiAgICBjb250ZXh0Pzogc3RyaW5nXG4gICk6IFQge1xuICAgIHJldHVybiAoYXN5bmMgKC4uLmFyZ3M6IFBhcmFtZXRlcnM8VD4pID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBhd2FpdCBmbiguLi5hcmdzKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnN0IHNhbml0aXplZCA9IHRoaXMuc2FuaXRpemVFcnJvcihlcnJvcik7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBjb250ZXh0IFxuICAgICAgICAgICAgPyBgJHtjb250ZXh0fTogJHtzYW5pdGl6ZWQubWVzc2FnZX1gXG4gICAgICAgICAgICA6IHNhbml0aXplZC5tZXNzYWdlXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSkgYXMgVDtcbiAgfVxufSJdfQ==
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Security-related error classes
|
|
3
|
+
*/
|
|
4
|
+
export declare class SecurityError extends Error {
|
|
5
|
+
readonly code?: string;
|
|
6
|
+
constructor(message: string, code?: string);
|
|
7
|
+
}
|
|
8
|
+
export declare class ValidationError extends Error {
|
|
9
|
+
constructor(message: string);
|
|
10
|
+
}
|
|
11
|
+
export declare class TimeoutError extends SecurityError {
|
|
12
|
+
constructor(message?: string);
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/security/errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,qBAAa,aAAc,SAAQ,KAAK;IACtC,SAAgB,IAAI,CAAC,EAAE,MAAM,CAAC;gBAElB,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM;CAO3C;AAED,qBAAa,eAAgB,SAAQ,KAAK;gBAC5B,OAAO,EAAE,MAAM;CAK5B;AAED,qBAAa,YAAa,SAAQ,aAAa;gBACjC,OAAO,GAAE,MAA8B;CAKpD"}
|