UNPKG

ssh-bridge-ai

Version:

AI-Powered SSH Tool with Bulletproof Connections & Enterprise Sandbox Security + Cursor-like Confirmation - Enable AI assistants to securely SSH into your servers with persistent sessions, keepalive, automatic recovery, sandbox command testing, and user c

185 lines (147 loc) 4.64 kB
/** * Application constants and configuration */ // Security constants const SECURITY = { // SSH key file permissions SSH_KEY_PERMISSIONS: 0o600, // Maximum password cache size MAX_PASSWORD_CACHE_SIZE: 100, // Password cache TTL (5 minutes) PASSWORD_CACHE_TTL: 5 * 60 * 1000, // Maximum failed connection attempts MAX_FAILED_ATTEMPTS: 3, // Connection timeout (30 seconds) CONNECTION_TIMEOUT: 30000, // Command execution timeout (5 minutes) COMMAND_TIMEOUT: 5 * 60 * 1000, // File transfer timeout (10 minutes) FILE_TRANSFER_TIMEOUT: 10 * 60 * 1000, }; // Network constants const NETWORK = { // Default SSH port DEFAULT_SSH_PORT: 22, // Default HTTP timeout HTTP_TIMEOUT: 10000, // Maximum redirects MAX_REDIRECTS: 5, // User agent USER_AGENT: 'SSHBridge/1.8.2', }; // File system constants const FILESYSTEM = { // Maximum file size for transfer (100MB) MAX_FILE_SIZE: 100 * 1024 * 1024, // Allowed file extensions for transfer ALLOWED_EXTENSIONS: [ '.txt', '.log', '.conf', '.config', '.yml', '.yaml', '.json', '.sh', '.bash', '.zsh', '.py', '.js', '.ts', '.md', '.rst', '.sql', '.csv', '.xml', '.html', '.css', '.scss', '.less' ], // Blocked file extensions (potentially dangerous) BLOCKED_EXTENSIONS: [ '.exe', '.bat', '.cmd', '.com', '.pif', '.scr', '.vbs', '.js', '.jar', '.war', '.ear', '.dll', '.so', '.dylib' ], // Maximum path length MAX_PATH_LENGTH: 4096, }; // Update constants const UPDATE = { // Update check intervals CRITICAL_UPDATE_INTERVAL: 2 * 60 * 60 * 1000, // 2 hours REGULAR_UPDATE_INTERVAL: 8 * 60 * 60 * 1000, // 8 hours FIRST_TIME_INTERVAL: 10 * 60 * 1000, // 10 minutes // Update notification display duration NOTIFICATION_DISPLAY_DURATION: 7 * 24 * 60 * 60 * 1000, // 7 days // Maximum update retry attempts MAX_UPDATE_RETRIES: 3, // Update rollback window (1 hour) ROLLBACK_WINDOW: 60 * 60 * 1000, }; // API constants const API = { // Rate limiting RATE_LIMIT_WINDOW: 60 * 1000, // 1 minute MAX_REQUESTS_PER_WINDOW: 100, // Retry configuration MAX_RETRIES: 3, RETRY_DELAY: 1000, // 1 second // Endpoints (configurable via environment) BASE_URL: process.env.SSHBRIDGE_API_URL || 'https://sshbridge-api.onrender.com', REGISTRY_URL: process.env.NPM_REGISTRY_URL || 'https://registry.npmjs.org', }; // Logging constants const LOGGING = { // Log levels LEVELS: { DEBUG: 'debug', INFO: 'info', WARN: 'warn', ERROR: 'error', }, // Default log level DEFAULT_LEVEL: 'info', // Log file rotation MAX_LOG_SIZE: 10 * 1024 * 1024, // 10MB MAX_LOG_FILES: 5, // Sensitive data patterns for redaction SENSITIVE_PATTERNS: [ /password\s*[:=]\s*\S+/gi, /key\s*[:=]\s*\S+/gi, /token\s*[:=]\s*\S+/gi, /secret\s*[:=]\s*\S+/gi, /api[_-]?key\s*[:=]\s*\S+/gi, /private[_-]?key\s*[:=]\s*\S+/gi, /ssh[_-]?key\s*[:=]\s*\S+/gi, ], }; // Error codes const ERROR_CODES = { // SSH errors SSH_CONNECTION_FAILED: 'SSH_CONNECTION_FAILED', SSH_AUTHENTICATION_FAILED: 'SSH_AUTHENTICATION_FAILED', SSH_KEY_INVALID: 'SSH_KEY_INVALID', SSH_KEY_PERMISSION_DENIED: 'SSH_KEY_PERMISSION_DENIED', // File system errors FILE_NOT_FOUND: 'FILE_NOT_FOUND', FILE_PERMISSION_DENIED: 'FILE_PERMISSION_DENIED', FILE_TOO_LARGE: 'FILE_TOO_LARGE', FILE_TYPE_BLOCKED: 'FILE_TYPE_BLOCKED', // Network errors NETWORK_TIMEOUT: 'NETWORK_TIMEOUT', NETWORK_UNREACHABLE: 'NETWORK_UNREACHABLE', RATE_LIMIT_EXCEEDED: 'RATE_LIMIT_EXCEEDED', // Security errors INVALID_INPUT: 'INVALID_INPUT', UNAUTHORIZED: 'UNAUTHORIZED', FORBIDDEN: 'FORBIDDEN', // Configuration errors CONFIG_INVALID: 'CONFIG_INVALID', CONFIG_MISSING: 'CONFIG_MISSING', // Update errors UPDATE_FAILED: 'UPDATE_FAILED', UPDATE_ROLLBACK_FAILED: 'UPDATE_ROLLBACK_FAILED', }; // Validation patterns const VALIDATION = { // Email regex (RFC 5322 compliant) EMAIL_REGEX: /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/, // Hostname regex HOSTNAME_REGEX: /^[a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(\.[a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/, // API key regex API_KEY_REGEX: /^[a-zA-Z0-9]{16,}$/, // Version regex (semver) VERSION_REGEX: /^(\d+)\.(\d+)\.(\d+)(?:-([0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*))?(?:\+([0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*))?$/, }; module.exports = { SECURITY, NETWORK, FILESYSTEM, UPDATE, API, LOGGING, ERROR_CODES, VALIDATION, };