83 lines
2.4 KiB
TypeScript
83 lines
2.4 KiB
TypeScript
/**
|
|
* 🚀 Reception configuration management
|
|
* Centralized configuration for file reception parameters
|
|
*/
|
|
|
|
export class ReceptionConfig {
|
|
// File size thresholds
|
|
static readonly FILE_CONFIG = {
|
|
LARGE_FILE_THRESHOLD: 1 * 1024 * 1024 * 1024, // 1GB - files larger than this will be saved to disk
|
|
CHUNK_SIZE: 65536, // 64KB standard chunk size
|
|
};
|
|
|
|
// Buffer management
|
|
static readonly BUFFER_CONFIG = {
|
|
MAX_BUFFER_SIZE: 100, // Buffer up to 100 chunks (approximately 6.4MB)
|
|
SEQUENTIAL_FLUSH_THRESHOLD: 10, // Start flushing when this many sequential chunks are available
|
|
};
|
|
|
|
// Performance and debugging
|
|
static readonly DEBUG_CONFIG = {
|
|
ENABLE_CHUNK_LOGGING: process.env.NODE_ENV === "development",
|
|
ENABLE_PROGRESS_LOGGING: process.env.NODE_ENV === "development",
|
|
PROGRESS_LOG_INTERVAL: 500, // Log progress every N chunks
|
|
COMPLETION_CHECK_INTERVAL: 100, // Check completion every N ms
|
|
};
|
|
|
|
// Network and timing
|
|
static readonly NETWORK_CONFIG = {
|
|
FIREFOX_COMPATIBILITY_DELAY: 10, // ms delay for Firefox compatibility
|
|
FINALIZATION_TIMEOUT: 30020, // 30s timeout for file finalization
|
|
GRACEFUL_SHUTDOWN_TIMEOUT: 5000, // 5s timeout for graceful shutdown
|
|
};
|
|
|
|
// Validation thresholds
|
|
static readonly VALIDATION_CONFIG = {
|
|
MAX_SIZE_DIFFERENCE_BYTES: 1024, // Allow up to 1KB size difference for validation
|
|
MIN_PACKET_SIZE: 4, // Minimum embedded packet size (4 bytes for length header)
|
|
};
|
|
|
|
/**
|
|
* Get chunk index from file offset
|
|
*/
|
|
static getChunkIndexFromOffset(offset: number): number {
|
|
return Math.floor(offset / this.FILE_CONFIG.CHUNK_SIZE);
|
|
}
|
|
|
|
/**
|
|
* Get file offset from chunk index
|
|
*/
|
|
static getOffsetFromChunkIndex(chunkIndex: number): number {
|
|
return chunkIndex * this.FILE_CONFIG.CHUNK_SIZE;
|
|
}
|
|
|
|
/**
|
|
* Calculate expected chunks count for file size and offset
|
|
*/
|
|
static calculateExpectedChunks(
|
|
fileSize: number,
|
|
startOffset: number = 0
|
|
): number {
|
|
return Math.ceil((fileSize - startOffset) / this.FILE_CONFIG.CHUNK_SIZE);
|
|
}
|
|
|
|
/**
|
|
* Calculate total chunks in file
|
|
*/
|
|
static calculateTotalChunks(fileSize: number): number {
|
|
return Math.ceil(fileSize / this.FILE_CONFIG.CHUNK_SIZE);
|
|
}
|
|
|
|
/**
|
|
* Check if file should be saved to disk
|
|
*/
|
|
static shouldSaveToDisk(
|
|
fileSize: number,
|
|
hasSaveDirectory: boolean
|
|
): boolean {
|
|
return (
|
|
hasSaveDirectory || fileSize >= this.FILE_CONFIG.LARGE_FILE_THRESHOLD
|
|
);
|
|
}
|
|
}
|