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.

144 lines (140 loc) 6.4 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. */ import { Env } from '@catbee/utils/env'; import { uuid } from '@catbee/utils/id'; import { deepClone, deepObjMerge } from '@catbee/utils/object'; var __defProp = Object.defineProperty; var __name = (target, value) => __defProp(target, "name", { value, configurable: true }); var defaultServerConfig = { port: Env.getNumber("SERVER_PORT", 0) || Env.getNumber("PORT", 3e3), host: Env.get("SERVER_HOST", "") || Env.get("HOST", "0.0.0.0"), cors: Env.getBoolean("SERVER_CORS_ENABLE", false) ? {} : false, helmet: Env.getBoolean("SERVER_HELMET_ENABLE", false) ? {} : false, compression: Env.getBoolean("SERVER_COMPRESSION_ENABLE", false) ? {} : false, bodyParser: { json: { limit: Env.get("SERVER_BODY_PARSER_JSON_LIMIT", "1mb") }, urlencoded: { extended: true, limit: Env.get("SERVER_BODY_PARSER_URLENCODED_LIMIT", "1mb") } }, cookieParser: Env.getBoolean("SERVER_COOKIE_PARSER_ENABLE", false) ? {} : false, isMicroservice: Env.getBoolean("SERVER_IS_MICROSERVICE", false), appName: Env.get("SERVER_APP_NAME", Env.get("npm_package_name", "catbee_server")), globalHeaders: Env.getJSON("SERVER_GLOBAL_HEADERS", {}), rateLimit: { enable: Env.getBoolean("SERVER_RATE_LIMIT_ENABLE", false), windowMs: Env.getDuration("SERVER_RATE_LIMIT_WINDOW_MS", 15 * 60 * 1e3), max: Env.getNumber("SERVER_RATE_LIMIT_MAX", 100), message: Env.get("SERVER_RATE_LIMIT_MESSAGE", "Too many requests, please try again later."), standardHeaders: Env.getBoolean("SERVER_RATE_LIMIT_STANDARD_HEADERS", true), legacyHeaders: Env.getBoolean("SERVER_RATE_LIMIT_LEGACY_HEADERS", false) }, requestLogging: { enable: Env.getBoolean("SERVER_REQUEST_LOGGING_ENABLE", 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.getBoolean("SERVER_REQUEST_LOGGING_SKIP_NOT_FOUND_ROUTES", true) }, trustProxy: Env.getBoolean("SERVER_TRUST_PROXY_ENABLE", false), openApi: { enable: Env.getBoolean("SERVER_OPENAPI_ENABLE", false), mountPath: Env.get("SERVER_OPENAPI_MOUNT_PATH", "/docs"), verbose: Env.getBoolean("SERVER_OPENAPI_VERBOSE", false), withGlobalPrefix: Env.getBoolean("SERVER_OPENAPI_WITH_GLOBAL_PREFIX", false) }, healthCheck: { path: Env.get("SERVER_HEALTH_CHECK_PATH", "/healthz"), detailed: Env.getBoolean("SERVER_HEALTH_CHECK_DETAILED_OUTPUT", true), withGlobalPrefix: Env.getBoolean("SERVER_HEALTH_CHECK_WITH_GLOBAL_PREFIX", false) }, requestTimeout: Env.getDuration("SERVER_REQUEST_TIMEOUT_MS", 0), responseTime: { enable: Env.getBoolean("SERVER_RESPONSE_TIME_ENABLE", false), addHeader: Env.getBoolean("SERVER_RESPONSE_TIME_ADD_HEADER", true), logOnComplete: Env.getBoolean("SERVER_RESPONSE_TIME_LOG_ON_COMPLETE", false) }, requestId: { headerName: Env.get("SERVER_REQUEST_ID_HEADER_NAME", "x-request-id"), exposeHeader: Env.getBoolean("SERVER_REQUEST_ID_EXPOSE_HEADER", true), generator: /* @__PURE__ */ __name(() => uuid(), "generator") }, metrics: { enable: Env.getBoolean("SERVER_METRICS_ENABLE", false), path: Env.get("SERVER_METRICS_PATH", "/metrics"), withGlobalPrefix: Env.getBoolean("SERVER_METRICS_WITH_GLOBAL_PREFIX", false) }, serviceVersion: { enable: Env.getBoolean("SERVER_SERVICE_VERSION_ENABLE", false), headerName: Env.get("SERVER_SERVICE_VERSION_HEADER_NAME", "x-service-version"), version: Env.get("${npm_package_version}", "0.0.0") }, skipHealthzChecksValidation: Env.getBoolean("SERVER_SKIP_HEALTHZ_CHECKS_VALIDATION", false) }; var defaultCatbeeConfig = { logger: { level: Env.get("LOGGER_LEVEL", Env.isDev() || Env.isTest() ? "debug" : "info"), name: Env.get("LOGGER_NAME", Env.get("npm_package_name", "@catbee/utils")), pretty: Env.getBoolean("LOGGER_PRETTY", false), colorize: Env.getBoolean("LOGGER_PRETTY_COLORIZE", true), singleLine: Env.getBoolean("LOGGER_PRETTY_SINGLE_LINE", false), dir: Env.getPath("LOGGER_DIR", "", { mustExist: false }) }, cache: { defaultTtl: Env.getNumber("CACHE_DEFAULT_TTL_SECONDS", 3600) * 1e3 }, server: defaultServerConfig }; var _config = deepClone(defaultCatbeeConfig); function getCatbeeGlobalConfig() { return deepClone(_config); } __name(getCatbeeGlobalConfig, "getCatbeeGlobalConfig"); var getConfig = getCatbeeGlobalConfig; function setCatbeeGlobalConfig(value) { _config = deepObjMerge(_config, value); } __name(setCatbeeGlobalConfig, "setCatbeeGlobalConfig"); var setConfig = setCatbeeGlobalConfig; function setCatbeeServerGlobalConfig(value) { _config.server = deepObjMerge(_config.server, value); } __name(setCatbeeServerGlobalConfig, "setCatbeeServerGlobalConfig"); function getCatbeeServerGlobalConfig() { return getCatbeeGlobalConfig().server; } __name(getCatbeeServerGlobalConfig, "getCatbeeServerGlobalConfig"); export { getCatbeeGlobalConfig, getCatbeeServerGlobalConfig, getConfig, setCatbeeGlobalConfig, setCatbeeServerGlobalConfig, setConfig };