@dollhousemcp/mcp-server 1.5.2 → 1.6.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 +56 -0
- package/README.md +494 -111
- package/data/agents/code-reviewer.md +8 -1
- package/data/agents/research-assistant.md +8 -1
- package/data/agents/task-manager.md +8 -1
- package/data/ensembles/business-advisor.md +8 -1
- package/data/ensembles/creative-studio.md +8 -1
- package/data/ensembles/development-team.md +8 -1
- package/data/ensembles/security-analysis-team.md +8 -1
- package/data/memories/conversation-history.md +8 -1
- package/data/memories/learning-progress.md +8 -1
- package/data/memories/project-context.md +8 -1
- package/data/personas/business-consultant.md +8 -1
- package/data/personas/creative-writer.md +8 -1
- package/data/personas/debug-detective.md +8 -1
- package/data/personas/eli5-explainer.md +8 -1
- package/data/personas/security-analyst.md +8 -1
- package/data/personas/technical-analyst.md +8 -1
- package/data/skills/code-review.md +8 -1
- package/data/skills/creative-writing.md +8 -1
- package/data/skills/data-analysis.md +8 -1
- package/data/skills/penetration-testing.md +8 -1
- package/data/skills/research.md +8 -1
- package/data/skills/threat-modeling.md +8 -1
- package/data/skills/translation.md +8 -1
- package/data/templates/code-documentation.md +8 -1
- package/data/templates/email-professional.md +8 -1
- package/data/templates/meeting-notes.md +8 -1
- package/data/templates/penetration-test-report.md +8 -1
- package/data/templates/project-brief.md +8 -1
- package/data/templates/report-executive.md +8 -1
- package/data/templates/security-vulnerability-report.md +8 -1
- package/data/templates/threat-assessment-report.md +8 -1
- package/dist/auth/GitHubAuthManager.d.ts +6 -1
- package/dist/auth/GitHubAuthManager.d.ts.map +1 -1
- package/dist/auth/GitHubAuthManager.js +45 -18
- package/dist/benchmarks/IndexPerformanceBenchmark.d.ts +98 -0
- package/dist/benchmarks/IndexPerformanceBenchmark.d.ts.map +1 -0
- package/dist/benchmarks/IndexPerformanceBenchmark.js +531 -0
- package/dist/cache/CollectionCache.d.ts.map +1 -1
- package/dist/cache/CollectionCache.js +13 -3
- package/dist/cache/CollectionIndexCache.d.ts +77 -0
- package/dist/cache/CollectionIndexCache.d.ts.map +1 -0
- package/dist/cache/CollectionIndexCache.js +349 -0
- package/dist/cache/LRUCache.d.ts +93 -0
- package/dist/cache/LRUCache.d.ts.map +1 -0
- package/dist/cache/LRUCache.js +299 -0
- package/dist/cache/index.d.ts +1 -0
- package/dist/cache/index.d.ts.map +1 -1
- package/dist/cache/index.js +2 -1
- package/dist/collection/CollectionBrowser.d.ts +21 -1
- package/dist/collection/CollectionBrowser.d.ts.map +1 -1
- package/dist/collection/CollectionBrowser.js +130 -10
- package/dist/collection/CollectionIndexManager.d.ts +151 -0
- package/dist/collection/CollectionIndexManager.d.ts.map +1 -0
- package/dist/collection/CollectionIndexManager.js +499 -0
- package/dist/collection/CollectionSearch.d.ts +55 -0
- package/dist/collection/CollectionSearch.d.ts.map +1 -1
- package/dist/collection/CollectionSearch.js +338 -13
- package/dist/collection/CollectionSeeder.d.ts.map +1 -1
- package/dist/collection/CollectionSeeder.js +38 -1
- package/dist/collection/ElementInstaller.d.ts +31 -0
- package/dist/collection/ElementInstaller.d.ts.map +1 -1
- package/dist/collection/ElementInstaller.js +77 -15
- package/dist/collection/PersonaSubmitter.d.ts +1 -1
- package/dist/collection/PersonaSubmitter.d.ts.map +1 -1
- package/dist/collection/PersonaSubmitter.js +2 -2
- package/dist/collection/index.d.ts +1 -0
- package/dist/collection/index.d.ts.map +1 -1
- package/dist/collection/index.js +2 -1
- package/dist/config/ConfigManager.d.ts +78 -0
- package/dist/config/ConfigManager.d.ts.map +1 -0
- package/dist/config/ConfigManager.js +216 -0
- package/dist/config/element-types.d.ts +135 -0
- package/dist/config/element-types.d.ts.map +1 -0
- package/dist/config/element-types.js +108 -0
- package/dist/config/index.d.ts +2 -0
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +3 -1
- package/dist/config/portfolio-constants.d.ts +83 -0
- package/dist/config/portfolio-constants.d.ts.map +1 -0
- package/dist/config/portfolio-constants.js +99 -0
- package/dist/elements/BaseElement.d.ts +14 -2
- package/dist/elements/BaseElement.d.ts.map +1 -1
- package/dist/elements/BaseElement.js +88 -6
- package/dist/elements/agents/Agent.d.ts +10 -1
- package/dist/elements/agents/Agent.d.ts.map +1 -1
- package/dist/elements/agents/Agent.js +66 -19
- package/dist/elements/agents/AgentManager.d.ts +2 -0
- package/dist/elements/agents/AgentManager.d.ts.map +1 -1
- package/dist/elements/agents/AgentManager.js +12 -10
- package/dist/elements/skills/Skill.d.ts +10 -1
- package/dist/elements/skills/Skill.d.ts.map +1 -1
- package/dist/elements/skills/Skill.js +40 -3
- package/dist/elements/skills/SkillManager.d.ts +1 -0
- package/dist/elements/skills/SkillManager.d.ts.map +1 -1
- package/dist/elements/skills/SkillManager.js +10 -4
- package/dist/elements/templates/Template.d.ts +10 -1
- package/dist/elements/templates/Template.d.ts.map +1 -1
- package/dist/elements/templates/Template.js +35 -18
- package/dist/elements/templates/TemplateManager.d.ts +1 -1
- package/dist/elements/templates/TemplateManager.d.ts.map +1 -1
- package/dist/elements/templates/TemplateManager.js +6 -5
- package/dist/generated/version.d.ts +2 -2
- package/dist/generated/version.js +3 -3
- package/dist/index.barrel.d.ts +1 -2
- package/dist/index.barrel.d.ts.map +1 -1
- package/dist/index.barrel.js +2 -4
- package/dist/index.d.ts +143 -25
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1883 -310
- package/dist/persona/PersonaElement.d.ts +10 -0
- package/dist/persona/PersonaElement.d.ts.map +1 -1
- package/dist/persona/PersonaElement.js +55 -32
- package/dist/persona/PersonaElementManager.d.ts.map +1 -1
- package/dist/persona/PersonaElementManager.js +13 -11
- package/dist/persona/PersonaLoader.d.ts.map +1 -1
- package/dist/persona/PersonaLoader.js +8 -2
- package/dist/persona/export-import/PersonaImporter.d.ts.map +1 -1
- package/dist/persona/export-import/PersonaImporter.js +24 -5
- package/dist/persona/export-import/PersonaSharer.d.ts +21 -0
- package/dist/persona/export-import/PersonaSharer.d.ts.map +1 -1
- package/dist/persona/export-import/PersonaSharer.js +198 -22
- package/dist/portfolio/DefaultElementProvider.d.ts +90 -0
- package/dist/portfolio/DefaultElementProvider.d.ts.map +1 -1
- package/dist/portfolio/DefaultElementProvider.js +499 -7
- package/dist/portfolio/GitHubPortfolioIndexer.d.ts +129 -0
- package/dist/portfolio/GitHubPortfolioIndexer.d.ts.map +1 -0
- package/dist/portfolio/GitHubPortfolioIndexer.js +475 -0
- package/dist/portfolio/MigrationManager.d.ts.map +1 -1
- package/dist/portfolio/MigrationManager.js +136 -3
- package/dist/portfolio/PortfolioIndexManager.d.ts +130 -0
- package/dist/portfolio/PortfolioIndexManager.d.ts.map +1 -0
- package/dist/portfolio/PortfolioIndexManager.js +478 -0
- package/dist/portfolio/PortfolioManager.d.ts +5 -0
- package/dist/portfolio/PortfolioManager.d.ts.map +1 -1
- package/dist/portfolio/PortfolioManager.js +61 -20
- package/dist/portfolio/PortfolioRepoManager.d.ts +75 -0
- package/dist/portfolio/PortfolioRepoManager.d.ts.map +1 -0
- package/dist/portfolio/PortfolioRepoManager.js +337 -0
- package/dist/portfolio/UnifiedIndexManager.d.ts +388 -0
- package/dist/portfolio/UnifiedIndexManager.d.ts.map +1 -0
- package/dist/portfolio/UnifiedIndexManager.js +1434 -0
- package/dist/portfolio/index.d.ts +15 -0
- package/dist/portfolio/index.d.ts.map +1 -0
- package/dist/portfolio/index.js +15 -0
- package/dist/portfolio/types.d.ts +7 -0
- package/dist/portfolio/types.d.ts.map +1 -1
- package/dist/portfolio/types.js +6 -1
- package/dist/security/InputValidator.d.ts.map +1 -1
- package/dist/security/InputValidator.js +50 -48
- package/dist/security/audit/SecurityAuditor.d.ts.map +1 -1
- package/dist/security/audit/SecurityAuditor.js +17 -9
- package/dist/security/audit/config/suppressions.d.ts.map +1 -1
- package/dist/security/audit/config/suppressions.js +19 -3
- package/dist/security/contentValidator.d.ts +2 -0
- package/dist/security/contentValidator.d.ts.map +1 -1
- package/dist/security/contentValidator.js +115 -4
- package/dist/security/secureYamlParser.d.ts +1 -0
- package/dist/security/secureYamlParser.d.ts.map +1 -1
- package/dist/security/secureYamlParser.js +29 -7
- package/dist/security/securityMonitor.d.ts +1 -1
- package/dist/security/securityMonitor.d.ts.map +1 -1
- package/dist/security/securityMonitor.js +1 -1
- package/dist/security/tokenManager.d.ts +1 -1
- package/dist/security/tokenManager.d.ts.map +1 -1
- package/dist/security/tokenManager.js +30 -10
- package/dist/server/ServerSetup.d.ts +22 -2
- package/dist/server/ServerSetup.d.ts.map +1 -1
- package/dist/server/ServerSetup.js +77 -12
- package/dist/server/tools/AuthTools.d.ts.map +1 -1
- package/dist/server/tools/AuthTools.js +33 -1
- package/dist/server/tools/BuildInfoTools.d.ts +25 -0
- package/dist/server/tools/BuildInfoTools.d.ts.map +1 -0
- package/dist/server/tools/BuildInfoTools.js +36 -0
- package/dist/server/tools/CollectionTools.d.ts.map +1 -1
- package/dist/server/tools/CollectionTools.js +55 -46
- package/dist/server/tools/ConfigTools.d.ts.map +1 -1
- package/dist/server/tools/ConfigTools.js +29 -1
- package/dist/server/tools/PersonaTools.d.ts +4 -2
- package/dist/server/tools/PersonaTools.d.ts.map +1 -1
- package/dist/server/tools/PersonaTools.js +5 -152
- package/dist/server/tools/PortfolioTools.d.ts +12 -0
- package/dist/server/tools/PortfolioTools.d.ts.map +1 -0
- package/dist/server/tools/PortfolioTools.js +221 -0
- package/dist/server/tools/index.d.ts +3 -1
- package/dist/server/tools/index.d.ts.map +1 -1
- package/dist/server/tools/index.js +4 -2
- package/dist/server/types.d.ts +40 -5
- package/dist/server/types.d.ts.map +1 -1
- package/dist/server/types.js +1 -1
- package/dist/services/BuildInfoService.d.ts +84 -0
- package/dist/services/BuildInfoService.d.ts.map +1 -0
- package/dist/services/BuildInfoService.js +271 -0
- package/dist/tools/portfolio/PortfolioElementAdapter.d.ts +54 -0
- package/dist/tools/portfolio/PortfolioElementAdapter.d.ts.map +1 -0
- package/dist/tools/portfolio/PortfolioElementAdapter.js +229 -0
- package/dist/tools/portfolio/submitToPortfolioTool.d.ts +164 -0
- package/dist/tools/portfolio/submitToPortfolioTool.d.ts.map +1 -0
- package/dist/tools/portfolio/submitToPortfolioTool.js +1523 -0
- package/dist/tools/portfolio/types.d.ts +41 -0
- package/dist/tools/portfolio/types.d.ts.map +1 -0
- package/dist/tools/portfolio/types.js +15 -0
- package/dist/types/collection.d.ts +51 -0
- package/dist/types/collection.d.ts.map +1 -1
- package/dist/types/collection.js +1 -1
- package/dist/utils/EarlyTerminationSearch.d.ts +41 -0
- package/dist/utils/EarlyTerminationSearch.d.ts.map +1 -0
- package/dist/utils/EarlyTerminationSearch.js +164 -0
- package/dist/utils/ErrorHandler.d.ts +86 -0
- package/dist/utils/ErrorHandler.d.ts.map +1 -0
- package/dist/utils/ErrorHandler.js +201 -0
- package/dist/utils/FileDiscoveryUtil.d.ts +53 -0
- package/dist/utils/FileDiscoveryUtil.d.ts.map +1 -0
- package/dist/utils/FileDiscoveryUtil.js +169 -0
- package/dist/utils/GitHubRateLimiter.d.ts +88 -0
- package/dist/utils/GitHubRateLimiter.d.ts.map +1 -0
- package/dist/utils/GitHubRateLimiter.js +315 -0
- package/dist/utils/PerformanceMonitor.d.ts +134 -0
- package/dist/utils/PerformanceMonitor.d.ts.map +1 -0
- package/dist/utils/PerformanceMonitor.js +347 -0
- package/dist/utils/RateLimiter.d.ts.map +1 -0
- package/dist/utils/RateLimiter.js +172 -0
- package/dist/utils/SecureDownloader.d.ts +241 -0
- package/dist/utils/SecureDownloader.d.ts.map +1 -0
- package/dist/utils/SecureDownloader.js +759 -0
- package/dist/utils/ToolCache.d.ts +82 -0
- package/dist/utils/ToolCache.d.ts.map +1 -0
- package/dist/utils/ToolCache.js +196 -0
- package/dist/utils/errorCodes.d.ts +136 -0
- package/dist/utils/errorCodes.d.ts.map +1 -0
- package/dist/utils/errorCodes.js +87 -0
- package/dist/utils/index.d.ts +3 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +4 -1
- package/dist/utils/installation.d.ts +1 -1
- package/dist/utils/installation.d.ts.map +1 -1
- package/dist/utils/installation.js +9 -8
- package/dist/utils/searchUtils.d.ts +31 -0
- package/dist/utils/searchUtils.d.ts.map +1 -1
- package/dist/utils/searchUtils.js +62 -1
- package/package.json +17 -7
- package/dist/config/updateConfig.d.ts +0 -84
- package/dist/config/updateConfig.d.ts.map +0 -1
- package/dist/config/updateConfig.js +0 -148
- package/dist/server/tools/UpdateTools.d.ts +0 -10
- package/dist/server/tools/UpdateTools.d.ts.map +0 -1
- package/dist/server/tools/UpdateTools.js +0 -85
- package/dist/update/BackupManager.d.ts +0 -63
- package/dist/update/BackupManager.d.ts.map +0 -1
- package/dist/update/BackupManager.js +0 -370
- package/dist/update/DependencyChecker.d.ts +0 -41
- package/dist/update/DependencyChecker.d.ts.map +0 -1
- package/dist/update/DependencyChecker.js +0 -132
- package/dist/update/RateLimiter.d.ts.map +0 -1
- package/dist/update/RateLimiter.js +0 -172
- package/dist/update/SignatureVerifier.d.ts +0 -71
- package/dist/update/SignatureVerifier.d.ts.map +0 -1
- package/dist/update/SignatureVerifier.js +0 -214
- package/dist/update/UpdateChecker.d.ts +0 -132
- package/dist/update/UpdateChecker.d.ts.map +0 -1
- package/dist/update/UpdateChecker.js +0 -506
- package/dist/update/UpdateManager.d.ts +0 -60
- package/dist/update/UpdateManager.d.ts.map +0 -1
- package/dist/update/UpdateManager.js +0 -730
- package/dist/update/VersionManager.d.ts +0 -31
- package/dist/update/VersionManager.d.ts.map +0 -1
- package/dist/update/VersionManager.js +0 -181
- package/dist/update/index.d.ts +0 -9
- package/dist/update/index.d.ts.map +0 -1
- package/dist/update/index.js +0 -9
- /package/dist/{update → utils}/RateLimiter.d.ts +0 -0
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SecureDownloader - Reusable utility for safe content downloads
|
|
3
|
+
*
|
|
4
|
+
* Implements the validate-before-write pattern with comprehensive security features:
|
|
5
|
+
* - Content validation hooks (customizable validators)
|
|
6
|
+
* - Atomic file operations with temp files
|
|
7
|
+
* - Guaranteed cleanup on failure
|
|
8
|
+
* - Memory-efficient streaming for large files
|
|
9
|
+
* - Size limits to prevent DoS attacks
|
|
10
|
+
* - Path validation to prevent traversal
|
|
11
|
+
* - Timeout handling for network operations
|
|
12
|
+
* - Content type validation
|
|
13
|
+
*
|
|
14
|
+
* Usage Examples:
|
|
15
|
+
*
|
|
16
|
+
* // Basic download with validation
|
|
17
|
+
* const downloader = new SecureDownloader();
|
|
18
|
+
* await downloader.downloadToFile(
|
|
19
|
+
* 'https://example.com/file.md',
|
|
20
|
+
* './downloads/file.md',
|
|
21
|
+
* {
|
|
22
|
+
* validator: async (content) => ({
|
|
23
|
+
* isValid: !content.includes('malicious'),
|
|
24
|
+
* errorMessage: content.includes('malicious') ? 'Malicious content detected' : undefined
|
|
25
|
+
* }),
|
|
26
|
+
* maxSize: 1024 * 1024, // 1MB limit
|
|
27
|
+
* timeout: 30000 // 30 second timeout
|
|
28
|
+
* }
|
|
29
|
+
* );
|
|
30
|
+
*
|
|
31
|
+
* // Download to memory with validation
|
|
32
|
+
* const content = await downloader.downloadToMemory(
|
|
33
|
+
* 'https://example.com/data.json',
|
|
34
|
+
* {
|
|
35
|
+
* validator: async (content) => {
|
|
36
|
+
* try {
|
|
37
|
+
* JSON.parse(content);
|
|
38
|
+
* return { isValid: true };
|
|
39
|
+
* } catch {
|
|
40
|
+
* return { isValid: false, errorMessage: 'Invalid JSON format' };
|
|
41
|
+
* }
|
|
42
|
+
* }
|
|
43
|
+
* }
|
|
44
|
+
* );
|
|
45
|
+
*
|
|
46
|
+
* // Streaming download for large files
|
|
47
|
+
* await downloader.downloadStream(
|
|
48
|
+
* 'https://example.com/large-file.zip',
|
|
49
|
+
* './downloads/large-file.zip',
|
|
50
|
+
* {
|
|
51
|
+
* streamValidator: (chunk) => !chunk.includes(Buffer.from('VIRUS')),
|
|
52
|
+
* maxSize: 100 * 1024 * 1024, // 100MB limit
|
|
53
|
+
* timeout: 300000 // 5 minute timeout
|
|
54
|
+
* }
|
|
55
|
+
* );
|
|
56
|
+
*/
|
|
57
|
+
/**
|
|
58
|
+
* Result of content validation
|
|
59
|
+
*/
|
|
60
|
+
export interface ValidationResult {
|
|
61
|
+
/** Whether the content is valid and safe */
|
|
62
|
+
isValid: boolean;
|
|
63
|
+
/** Error message if validation failed */
|
|
64
|
+
errorMessage?: string;
|
|
65
|
+
/** Severity of any detected issues */
|
|
66
|
+
severity?: 'low' | 'medium' | 'high' | 'critical';
|
|
67
|
+
/** Additional metadata about validation */
|
|
68
|
+
metadata?: Record<string, any>;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Content validator function type
|
|
72
|
+
*/
|
|
73
|
+
export type ContentValidatorFunction = (content: string) => Promise<ValidationResult>;
|
|
74
|
+
/**
|
|
75
|
+
* Stream chunk validator function type
|
|
76
|
+
*/
|
|
77
|
+
export type StreamValidator = (chunk: Uint8Array) => boolean;
|
|
78
|
+
/**
|
|
79
|
+
* Options for download operations
|
|
80
|
+
*/
|
|
81
|
+
export interface DownloadOptions {
|
|
82
|
+
/** Custom content validator function */
|
|
83
|
+
validator?: ContentValidatorFunction;
|
|
84
|
+
/** Maximum file size in bytes (default: SECURITY_LIMITS.MAX_FILE_SIZE) */
|
|
85
|
+
maxSize?: number;
|
|
86
|
+
/** Network timeout in milliseconds (default: 30000) */
|
|
87
|
+
timeout?: number;
|
|
88
|
+
/** Whether to use atomic file operations (default: true) */
|
|
89
|
+
atomic?: boolean;
|
|
90
|
+
/** Expected content type (for validation) */
|
|
91
|
+
expectedContentType?: string;
|
|
92
|
+
/** Custom HTTP headers */
|
|
93
|
+
headers?: Record<string, string>;
|
|
94
|
+
/** Expected SHA-256 checksum for integrity validation */
|
|
95
|
+
expectedChecksum?: string;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Options for streaming downloads
|
|
99
|
+
*/
|
|
100
|
+
export interface StreamDownloadOptions {
|
|
101
|
+
/** Chunk-level validator for streaming validation */
|
|
102
|
+
streamValidator?: StreamValidator;
|
|
103
|
+
/** Maximum file size in bytes (default: SECURITY_LIMITS.MAX_FILE_SIZE) */
|
|
104
|
+
maxSize?: number;
|
|
105
|
+
/** Network timeout in milliseconds (default: 30000) */
|
|
106
|
+
timeout?: number;
|
|
107
|
+
/** Custom HTTP headers */
|
|
108
|
+
headers?: Record<string, string>;
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Custom error types for different failure scenarios
|
|
112
|
+
*/
|
|
113
|
+
export declare class DownloadError extends Error {
|
|
114
|
+
readonly code: string;
|
|
115
|
+
readonly originalError?: Error | undefined;
|
|
116
|
+
constructor(message: string, code: string, originalError?: Error | undefined);
|
|
117
|
+
static networkError(message: string, originalError?: Error): DownloadError;
|
|
118
|
+
static validationError(message: string): DownloadError;
|
|
119
|
+
static securityError(message: string): DownloadError;
|
|
120
|
+
static timeoutError(message: string): DownloadError;
|
|
121
|
+
static filesystemError(message: string, originalError?: Error): DownloadError;
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* SecureDownloader - Implements validate-before-write pattern for safe downloads
|
|
125
|
+
*
|
|
126
|
+
* Key Security Features:
|
|
127
|
+
* 1. VALIDATE-BEFORE-WRITE: All content validation occurs before any disk operations
|
|
128
|
+
* 2. ATOMIC OPERATIONS: Uses temporary files with atomic rename to prevent corruption
|
|
129
|
+
* 3. GUARANTEED CLEANUP: Automatic cleanup of temporary files on any failure
|
|
130
|
+
* 4. SIZE LIMITS: Prevents DoS attacks through large file downloads
|
|
131
|
+
* 5. PATH VALIDATION: Prevents directory traversal attacks
|
|
132
|
+
* 6. TIMEOUT PROTECTION: Prevents hanging network operations
|
|
133
|
+
* 7. CONTENT VALIDATION: Extensible validation system for different content types
|
|
134
|
+
*/
|
|
135
|
+
export declare class SecureDownloader {
|
|
136
|
+
private readonly defaultTimeout;
|
|
137
|
+
private readonly defaultMaxSize;
|
|
138
|
+
private readonly tempDir;
|
|
139
|
+
private readonly globalRateLimiter;
|
|
140
|
+
private readonly urlRateLimiters;
|
|
141
|
+
constructor(options?: {
|
|
142
|
+
defaultTimeout?: number;
|
|
143
|
+
defaultMaxSize?: number;
|
|
144
|
+
tempDir?: string;
|
|
145
|
+
rateLimitOptions?: {
|
|
146
|
+
maxRequestsPerUrl?: number;
|
|
147
|
+
maxGlobalRequests?: number;
|
|
148
|
+
windowMs?: number;
|
|
149
|
+
};
|
|
150
|
+
});
|
|
151
|
+
/**
|
|
152
|
+
* Download content to a file with validation
|
|
153
|
+
*
|
|
154
|
+
* SECURITY: Implements validate-before-write pattern:
|
|
155
|
+
* 1. Download content to memory
|
|
156
|
+
* 2. Validate all content
|
|
157
|
+
* 3. Only then write to disk atomically
|
|
158
|
+
*
|
|
159
|
+
* @param url - URL to download from
|
|
160
|
+
* @param destinationPath - Local file path to save to
|
|
161
|
+
* @param options - Download and validation options
|
|
162
|
+
*/
|
|
163
|
+
downloadToFile(url: string, destinationPath: string, options?: DownloadOptions): Promise<void>;
|
|
164
|
+
/**
|
|
165
|
+
* Download content to memory with validation
|
|
166
|
+
*
|
|
167
|
+
* @param url - URL to download from
|
|
168
|
+
* @param options - Download and validation options
|
|
169
|
+
* @returns Validated content as string
|
|
170
|
+
*/
|
|
171
|
+
downloadToMemory(url: string, options?: DownloadOptions): Promise<string>;
|
|
172
|
+
/**
|
|
173
|
+
* Download large files using streaming with chunk-level validation
|
|
174
|
+
*
|
|
175
|
+
* @param url - URL to download from
|
|
176
|
+
* @param destinationPath - Local file path to save to
|
|
177
|
+
* @param options - Streaming download options
|
|
178
|
+
*/
|
|
179
|
+
downloadStream(url: string, destinationPath: string, options?: StreamDownloadOptions): Promise<void>;
|
|
180
|
+
/**
|
|
181
|
+
* Validate URL format and security with Unicode normalization
|
|
182
|
+
*/
|
|
183
|
+
private validateUrl;
|
|
184
|
+
/**
|
|
185
|
+
* Validate destination path for security
|
|
186
|
+
*/
|
|
187
|
+
private validateDestinationPath;
|
|
188
|
+
/**
|
|
189
|
+
* Fetch content with size and timeout limits
|
|
190
|
+
*/
|
|
191
|
+
private fetchWithLimits;
|
|
192
|
+
/**
|
|
193
|
+
* Validate content type if specified
|
|
194
|
+
*/
|
|
195
|
+
private validateContentType;
|
|
196
|
+
/**
|
|
197
|
+
* Atomic file write using FileLockManager
|
|
198
|
+
*/
|
|
199
|
+
private atomicWriteFile;
|
|
200
|
+
/**
|
|
201
|
+
* Direct file write (non-atomic, for when atomic is disabled)
|
|
202
|
+
*/
|
|
203
|
+
private directWriteFile;
|
|
204
|
+
/**
|
|
205
|
+
* Generate temporary file path for atomic operations
|
|
206
|
+
*/
|
|
207
|
+
private getTempFilePath;
|
|
208
|
+
/**
|
|
209
|
+
* Check rate limits for downloads
|
|
210
|
+
*/
|
|
211
|
+
private checkRateLimit;
|
|
212
|
+
/**
|
|
213
|
+
* Validate content checksum for integrity verification
|
|
214
|
+
*/
|
|
215
|
+
private validateChecksum;
|
|
216
|
+
/**
|
|
217
|
+
* Create a content validator that combines multiple validators
|
|
218
|
+
*/
|
|
219
|
+
static combineValidators(...validators: ContentValidatorFunction[]): ContentValidatorFunction;
|
|
220
|
+
/**
|
|
221
|
+
* Create a content validator for JSON content
|
|
222
|
+
*/
|
|
223
|
+
static jsonValidator(): ContentValidatorFunction;
|
|
224
|
+
/**
|
|
225
|
+
* Create a content validator for YAML content
|
|
226
|
+
*/
|
|
227
|
+
static yamlValidator(): ContentValidatorFunction;
|
|
228
|
+
/**
|
|
229
|
+
* Create a content validator for markdown content
|
|
230
|
+
*/
|
|
231
|
+
static markdownValidator(): ContentValidatorFunction;
|
|
232
|
+
/**
|
|
233
|
+
* Create a content validator with size limits
|
|
234
|
+
*/
|
|
235
|
+
static sizeValidator(maxSize: number): ContentValidatorFunction;
|
|
236
|
+
/**
|
|
237
|
+
* Create a content validator that checks for forbidden patterns
|
|
238
|
+
*/
|
|
239
|
+
static patternValidator(forbiddenPatterns: RegExp[], errorMessage?: string): ContentValidatorFunction;
|
|
240
|
+
}
|
|
241
|
+
//# sourceMappingURL=SecureDownloader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SecureDownloader.d.ts","sourceRoot":"","sources":["../../src/utils/SecureDownloader.ts"],"names":[],"mappings":"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"}
|