UNPKG

qerrors

Version:

Intelligent error handling middleware with AI-powered analysis, environment validation, caching, and production-ready logging. Provides OpenAI-based error suggestions, queue management, retry mechanisms, and comprehensive configuration options for Node.js

70 lines (53 loc) 3.52 kB
'use strict'; //(enable strict mode for defaults module) /** * Configuration defaults for qerrors module * * These defaults represent carefully balanced values for production use. Each setting * has been chosen based on practical testing and common deployment scenarios. * * Design rationale: * - Conservative defaults prevent resource exhaustion while allowing customization * - String values maintain consistency with environment variable parsing * - Values scale appropriately for both development and production environments * - OpenAI integration defaults balance API cost with functionality */ const defaults = { //default environment variable values for all qerrors configuration options QERRORS_CONCURRENCY: '5', //max concurrent analyses QERRORS_CACHE_LIMIT: '50', //LRU cache size QERRORS_CACHE_TTL: '86400', //seconds each cache entry remains valid //(new default ttl) QERRORS_QUEUE_LIMIT: '100', //max waiting analyses before rejecting //(new env default) QERRORS_SAFE_THRESHOLD: '1000', //upper limit for concurrency and queue //(new config default) QERRORS_RETRY_ATTEMPTS: '2', //number of API retries //(renamed env var and updated default) QERRORS_RETRY_BASE_MS: '100', //base delay for retries //(renamed env var and updated default) QERRORS_RETRY_MAX_MS: '2000', //cap wait time for exponential backoff //(new env default) QERRORS_TIMEOUT: '10000', //axios request timeout in ms QERRORS_MAX_SOCKETS: '50', //max sockets per http/https agent QERRORS_MAX_FREE_SOCKETS: '256', //max idle sockets per agent //(new env default) QERRORS_MAX_TOKENS: '2048', //max tokens for openai responses //(new env default) QERRORS_OPENAI_URL: 'https://api.openai.com/v1/chat/completions', //endpoint used for analysis //(new openai url default) QERRORS_LOG_MAXSIZE: String(1024 * 1024), //log file size in bytes QERRORS_LOG_MAXFILES: '5', //number of rotated log files QERRORS_LOG_MAX_DAYS: '0', //days to retain rotated logs //(0 disables time rotation) QERRORS_VERBOSE: 'false', //default off so unset env won't spam console QERRORS_LOG_DIR: 'logs', //directory for rotated logs QERRORS_DISABLE_FILE_LOGS: '', //flag to disable file transports when set QERRORS_SERVICE_NAME: 'qerrors', //service identifier for logger //(new default) QERRORS_LOG_LEVEL: 'info', //logger output severity default QERRORS_METRIC_INTERVAL_MS: '30000' //interval for queue metrics in ms //(new default) }; module.exports = defaults; //export defaults for external use function getEnv(name) { //return env var or default when undefined return process.env[name] !== undefined ? process.env[name] : defaults[name]; } module.exports.getEnv = getEnv; //expose getEnv helper function safeRun(name, fn, fallback, info) { //utility wrapper for try/catch //(added helper) try { return fn(); } catch (err) { console.error(`${name} failed`, info); return fallback; } //(log and fall back) } module.exports.safeRun = safeRun; //export safeRun for env utils //(make accessible) function getInt(name, min = 1) { //parse env integer with minimum enforcement const int = parseInt(getEnv(name), 10); //attempt parse const defaultVal = typeof defaults[name] === 'number' ? defaults[name] : parseInt(defaults[name], 10); //(handle numeric defaults safely) const val = Number.isNaN(int) ? defaultVal : int; //default when NaN return val >= min ? val : min; //enforce allowed minimum } module.exports.getInt = getInt; //export helper for qerrors usage //(central helper)