UNPKG

@catbee/utils

Version:

A modular, production-grade utility toolkit for Node.js and TypeScript, designed for robust, scalable applications (including Express-based services). All utilities are tree-shakable and can be imported independently.

151 lines (146 loc) 6.8 kB
/* * The MIT License * * Copyright (c) 2026 Catbee Technologies. https://catbee.in/license * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in all * copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ 'use strict'; var env = require('@catbee/utils/env'); var id = require('@catbee/utils/id'); var object = require('@catbee/utils/object'); var __defProp = Object.defineProperty; var __name = (target, value) => __defProp(target, "name", { value, configurable: true }); var defaultServerConfig = { port: env.Env.getNumber("SERVER_PORT", 0) || env.Env.getNumber("PORT", 3e3), host: env.Env.get("SERVER_HOST", "") || env.Env.get("HOST", "0.0.0.0"), cors: env.Env.getBoolean("SERVER_CORS_ENABLE", false) ? {} : false, helmet: env.Env.getBoolean("SERVER_HELMET_ENABLE", false) ? {} : false, compression: env.Env.getBoolean("SERVER_COMPRESSION_ENABLE", false) ? {} : false, bodyParser: { json: { limit: env.Env.get("SERVER_BODY_PARSER_JSON_LIMIT", "1mb") }, urlencoded: { extended: true, limit: env.Env.get("SERVER_BODY_PARSER_URLENCODED_LIMIT", "1mb") } }, cookieParser: env.Env.getBoolean("SERVER_COOKIE_PARSER_ENABLE", false) ? {} : false, isMicroservice: env.Env.getBoolean("SERVER_IS_MICROSERVICE", false), appName: env.Env.get("SERVER_APP_NAME", env.Env.get("npm_package_name", "catbee_server")), globalHeaders: env.Env.getJSON("SERVER_GLOBAL_HEADERS", {}), rateLimit: { enable: env.Env.getBoolean("SERVER_RATE_LIMIT_ENABLE", false), windowMs: env.Env.getDuration("SERVER_RATE_LIMIT_WINDOW_MS", 15 * 60 * 1e3), max: env.Env.getNumber("SERVER_RATE_LIMIT_MAX", 100), message: env.Env.get("SERVER_RATE_LIMIT_MESSAGE", "Too many requests, please try again later."), standardHeaders: env.Env.getBoolean("SERVER_RATE_LIMIT_STANDARD_HEADERS", true), legacyHeaders: env.Env.getBoolean("SERVER_RATE_LIMIT_LEGACY_HEADERS", false) }, requestLogging: { enable: env.Env.getBoolean("SERVER_REQUEST_LOGGING_ENABLE", env.Env.isDev()), ignorePaths: /* @__PURE__ */ __name((req, _res) => { const skipPaths = [ "/healthz", "/favicon.ico", "/metrics", "/docs", "/.well-known" ]; return skipPaths.some((path) => req.path.startsWith(path)); }, "ignorePaths"), skipNotFoundRoutes: env.Env.getBoolean("SERVER_REQUEST_LOGGING_SKIP_NOT_FOUND_ROUTES", true) }, trustProxy: env.Env.getBoolean("SERVER_TRUST_PROXY_ENABLE", false), openApi: { enable: env.Env.getBoolean("SERVER_OPENAPI_ENABLE", false), mountPath: env.Env.get("SERVER_OPENAPI_MOUNT_PATH", "/docs"), verbose: env.Env.getBoolean("SERVER_OPENAPI_VERBOSE", false), withGlobalPrefix: env.Env.getBoolean("SERVER_OPENAPI_WITH_GLOBAL_PREFIX", false) }, healthCheck: { path: env.Env.get("SERVER_HEALTH_CHECK_PATH", "/healthz"), detailed: env.Env.getBoolean("SERVER_HEALTH_CHECK_DETAILED_OUTPUT", true), withGlobalPrefix: env.Env.getBoolean("SERVER_HEALTH_CHECK_WITH_GLOBAL_PREFIX", false) }, requestTimeout: env.Env.getDuration("SERVER_REQUEST_TIMEOUT_MS", 0), responseTime: { enable: env.Env.getBoolean("SERVER_RESPONSE_TIME_ENABLE", false), addHeader: env.Env.getBoolean("SERVER_RESPONSE_TIME_ADD_HEADER", true), logOnComplete: env.Env.getBoolean("SERVER_RESPONSE_TIME_LOG_ON_COMPLETE", false) }, requestId: { headerName: env.Env.get("SERVER_REQUEST_ID_HEADER_NAME", "x-request-id"), exposeHeader: env.Env.getBoolean("SERVER_REQUEST_ID_EXPOSE_HEADER", true), generator: /* @__PURE__ */ __name(() => id.uuid(), "generator") }, metrics: { enable: env.Env.getBoolean("SERVER_METRICS_ENABLE", false), path: env.Env.get("SERVER_METRICS_PATH", "/metrics"), withGlobalPrefix: env.Env.getBoolean("SERVER_METRICS_WITH_GLOBAL_PREFIX", false) }, serviceVersion: { enable: env.Env.getBoolean("SERVER_SERVICE_VERSION_ENABLE", false), headerName: env.Env.get("SERVER_SERVICE_VERSION_HEADER_NAME", "x-service-version"), version: env.Env.get("${npm_package_version}", "0.0.0") }, skipHealthzChecksValidation: env.Env.getBoolean("SERVER_SKIP_HEALTHZ_CHECKS_VALIDATION", false) }; var defaultCatbeeConfig = { logger: { level: env.Env.get("LOGGER_LEVEL", env.Env.isDev() || env.Env.isTest() ? "debug" : "info"), name: env.Env.get("LOGGER_NAME", env.Env.get("npm_package_name", "@catbee/utils")), pretty: env.Env.getBoolean("LOGGER_PRETTY", false), colorize: env.Env.getBoolean("LOGGER_PRETTY_COLORIZE", true), singleLine: env.Env.getBoolean("LOGGER_PRETTY_SINGLE_LINE", false), dir: env.Env.getPath("LOGGER_DIR", "", { mustExist: false }) }, cache: { defaultTtl: env.Env.getNumber("CACHE_DEFAULT_TTL_SECONDS", 3600) * 1e3 }, server: defaultServerConfig }; var _config = object.deepClone(defaultCatbeeConfig); function getCatbeeGlobalConfig() { return object.deepClone(_config); } __name(getCatbeeGlobalConfig, "getCatbeeGlobalConfig"); var getConfig = getCatbeeGlobalConfig; function setCatbeeGlobalConfig(value) { _config = object.deepObjMerge(_config, value); } __name(setCatbeeGlobalConfig, "setCatbeeGlobalConfig"); var setConfig = setCatbeeGlobalConfig; function setCatbeeServerGlobalConfig(value) { _config.server = object.deepObjMerge(_config.server, value); } __name(setCatbeeServerGlobalConfig, "setCatbeeServerGlobalConfig"); function getCatbeeServerGlobalConfig() { return getCatbeeGlobalConfig().server; } __name(getCatbeeServerGlobalConfig, "getCatbeeServerGlobalConfig"); exports.getCatbeeGlobalConfig = getCatbeeGlobalConfig; exports.getCatbeeServerGlobalConfig = getCatbeeServerGlobalConfig; exports.getConfig = getConfig; exports.setCatbeeGlobalConfig = setCatbeeGlobalConfig; exports.setCatbeeServerGlobalConfig = setCatbeeServerGlobalConfig; exports.setConfig = setConfig;