@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
JavaScript
/*
* 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.
*/
;
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;