@exyconn/common 2.3.4 → 2.3.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/dist/client/http/index.js +1 -3
  2. package/dist/client/http/index.js.map +1 -1
  3. package/dist/client/http/index.mjs +1 -3
  4. package/dist/client/http/index.mjs.map +1 -1
  5. package/dist/client/index.js +4 -4
  6. package/dist/client/index.js.map +1 -1
  7. package/dist/client/index.mjs +4 -4
  8. package/dist/client/index.mjs.map +1 -1
  9. package/dist/client/logger/index.js +3 -1
  10. package/dist/client/logger/index.js.map +1 -1
  11. package/dist/client/logger/index.mjs +3 -1
  12. package/dist/client/logger/index.mjs.map +1 -1
  13. package/dist/client/utils/index.js +3 -3
  14. package/dist/client/utils/index.js.map +1 -1
  15. package/dist/client/utils/index.mjs +3 -3
  16. package/dist/client/utils/index.mjs.map +1 -1
  17. package/dist/{index-Ckhm_HaX.d.mts → index-B8O4iu6q.d.mts} +7 -2
  18. package/dist/{index-br6POSyA.d.ts → index-MpV0UNTq.d.ts} +7 -2
  19. package/dist/index.d.mts +1 -1
  20. package/dist/index.d.ts +1 -1
  21. package/dist/index.js +171 -18
  22. package/dist/index.js.map +1 -1
  23. package/dist/index.mjs +168 -17
  24. package/dist/index.mjs.map +1 -1
  25. package/dist/server/configs/index.js +3 -0
  26. package/dist/server/configs/index.js.map +1 -1
  27. package/dist/server/configs/index.mjs +3 -0
  28. package/dist/server/configs/index.mjs.map +1 -1
  29. package/dist/server/index.d.mts +1 -1
  30. package/dist/server/index.d.ts +1 -1
  31. package/dist/server/index.js +161 -8
  32. package/dist/server/index.js.map +1 -1
  33. package/dist/server/index.mjs +156 -8
  34. package/dist/server/index.mjs.map +1 -1
  35. package/dist/server/middleware/index.js +3 -3
  36. package/dist/server/middleware/index.js.map +1 -1
  37. package/dist/server/middleware/index.mjs +3 -3
  38. package/dist/server/middleware/index.mjs.map +1 -1
  39. package/dist/server/utils/index.d.mts +99 -1
  40. package/dist/server/utils/index.d.ts +99 -1
  41. package/dist/server/utils/index.js +154 -0
  42. package/dist/server/utils/index.js.map +1 -1
  43. package/dist/server/utils/index.mjs +148 -3
  44. package/dist/server/utils/index.mjs.map +1 -1
  45. package/package.json +25 -25
@@ -1,9 +1,10 @@
1
1
  import winston from 'winston';
2
2
  import DailyRotateFile from 'winston-daily-rotate-file';
3
- import path, { resolve } from 'path';
3
+ import path2, { resolve } from 'path';
4
4
  import mongoose, { Types } from 'mongoose';
5
5
  import jwt from 'jsonwebtoken';
6
- import { existsSync, readFileSync } from 'fs';
6
+ import fs, { existsSync, readFileSync } from 'fs';
7
+ import os from 'os';
7
8
  import rateLimit from 'express-rate-limit';
8
9
 
9
10
  // src/server/enums/status.ts
@@ -216,7 +217,7 @@ var createLogger = (config = {}) => {
216
217
  }),
217
218
  // Combined logs (all levels)
218
219
  new DailyRotateFile({
219
- filename: path.join(finalConfig.logsDir, "combined-%DATE%.log"),
220
+ filename: path2.join(finalConfig.logsDir, "combined-%DATE%.log"),
220
221
  datePattern: "YYYY-MM-DD",
221
222
  maxSize: finalConfig.maxSize,
222
223
  maxFiles: finalConfig.maxFiles,
@@ -224,7 +225,7 @@ var createLogger = (config = {}) => {
224
225
  }),
225
226
  // Error logs only
226
227
  new DailyRotateFile({
227
- filename: path.join(finalConfig.logsDir, "error-%DATE%.log"),
228
+ filename: path2.join(finalConfig.logsDir, "error-%DATE%.log"),
228
229
  datePattern: "YYYY-MM-DD",
229
230
  level: "error",
230
231
  maxSize: finalConfig.maxSize,
@@ -685,7 +686,7 @@ function createCrudControllers(config) {
685
686
  };
686
687
  const getById = async (req, res, _next) => {
687
688
  try {
688
- const { id } = req.params;
689
+ const id = req.params.id;
689
690
  if (!id || !Types.ObjectId.isValid(id)) {
690
691
  badRequestResponse(res, "Invalid ID format");
691
692
  return;
@@ -760,7 +761,7 @@ function createCrudControllers(config) {
760
761
  };
761
762
  const update = async (req, res, _next) => {
762
763
  try {
763
- const { id } = req.params;
764
+ const id = req.params.id;
764
765
  if (!id || !Types.ObjectId.isValid(id)) {
765
766
  badRequestResponse(res, "Invalid ID format");
766
767
  return;
@@ -804,7 +805,7 @@ function createCrudControllers(config) {
804
805
  };
805
806
  const deleteOne = async (req, res, _next) => {
806
807
  try {
807
- const { id } = req.params;
808
+ const id = req.params.id;
808
809
  if (!id || !Types.ObjectId.isValid(id)) {
809
810
  badRequestResponse(res, "Invalid ID format");
810
811
  return;
@@ -1333,6 +1334,150 @@ var packageCheckServer = {
1333
1334
  generateNcuCommand,
1334
1335
  print: printPackageCheckSummary
1335
1336
  };
1337
+ var serverStartTime = Date.now();
1338
+ function getTimezoneOffset() {
1339
+ const offset = (/* @__PURE__ */ new Date()).getTimezoneOffset();
1340
+ const hours = Math.floor(Math.abs(offset) / 60);
1341
+ const minutes = Math.abs(offset) % 60;
1342
+ const sign = offset <= 0 ? "+" : "-";
1343
+ return `${sign}${hours.toString().padStart(2, "0")}:${minutes.toString().padStart(2, "0")}`;
1344
+ }
1345
+ function getTimezoneName() {
1346
+ try {
1347
+ return Intl.DateTimeFormat().resolvedOptions().timeZone;
1348
+ } catch {
1349
+ return "UTC";
1350
+ }
1351
+ }
1352
+ function getPackageInfo(criticalPackages = []) {
1353
+ try {
1354
+ const possiblePaths = [
1355
+ path2.join(process.cwd(), "package.json"),
1356
+ path2.join(__dirname, "..", "..", "..", "..", "package.json"),
1357
+ path2.join(__dirname, "..", "..", "package.json")
1358
+ ];
1359
+ for (const pkgPath of possiblePaths) {
1360
+ if (fs.existsSync(pkgPath)) {
1361
+ const pkg = JSON.parse(fs.readFileSync(pkgPath, "utf-8"));
1362
+ const deps = pkg.dependencies || {};
1363
+ const devDeps = pkg.devDependencies || {};
1364
+ const total = Object.keys(deps).length + Object.keys(devDeps).length;
1365
+ const critical = {};
1366
+ for (const pkgName of criticalPackages) {
1367
+ if (deps[pkgName]) {
1368
+ critical[pkgName] = deps[pkgName].replace("^", "").replace("~", "");
1369
+ }
1370
+ }
1371
+ return { total, critical };
1372
+ }
1373
+ }
1374
+ } catch {
1375
+ }
1376
+ return { total: 0, critical: {} };
1377
+ }
1378
+ async function generateHealthResponse(config) {
1379
+ const startTime = Date.now();
1380
+ const now = /* @__PURE__ */ new Date();
1381
+ let dependencies = {};
1382
+ if (config.checkDependencies) {
1383
+ try {
1384
+ dependencies = await config.checkDependencies();
1385
+ } catch {
1386
+ dependencies = { error: "DOWN" };
1387
+ }
1388
+ }
1389
+ const hasDownDep = Object.values(dependencies).includes("DOWN");
1390
+ const status = hasDownDep ? "DEGRADED" : "UP";
1391
+ const defaultCriticalPackages = ["express", "mongoose", "cors", "dotenv"];
1392
+ const packageInfo = getPackageInfo(config.criticalPackages || defaultCriticalPackages);
1393
+ const totalMem = os.totalmem();
1394
+ const freeMem = os.freemem();
1395
+ const usedMem = totalMem - freeMem;
1396
+ const isProduction2 = process.env.NODE_ENV === "production";
1397
+ const serverUrl = isProduction2 ? `https://${config.domain}` : `http://localhost:${config.port}`;
1398
+ const response = {
1399
+ status,
1400
+ app: config.name,
1401
+ env: process.env.NODE_ENV || "development",
1402
+ version: config.version,
1403
+ urls: {
1404
+ ...config.uiUrl && { ui: config.uiUrl },
1405
+ server: config.serverUrl || serverUrl,
1406
+ health: `${config.serverUrl || serverUrl}/health`
1407
+ },
1408
+ time: {
1409
+ serverTime: now.toISOString(),
1410
+ timezone: getTimezoneName(),
1411
+ offset: getTimezoneOffset(),
1412
+ epoch: Math.floor(now.getTime() / 1e3)
1413
+ },
1414
+ uptimeSec: Math.floor((Date.now() - serverStartTime) / 1e3),
1415
+ node: {
1416
+ version: process.version,
1417
+ platform: os.platform(),
1418
+ arch: os.arch()
1419
+ },
1420
+ system: {
1421
+ hostname: os.hostname(),
1422
+ memoryUsedMB: Math.round(usedMem / 1024 / 1024),
1423
+ memoryTotalMB: Math.round(totalMem / 1024 / 1024),
1424
+ memoryFreePercent: Math.round(freeMem / totalMem * 100),
1425
+ cpuLoad: os.loadavg().map((l) => Math.round(l * 100) / 100),
1426
+ cpuCount: os.cpus().length
1427
+ },
1428
+ packages: {
1429
+ appVersion: config.version,
1430
+ totalDependencies: packageInfo.total,
1431
+ critical: packageInfo.critical
1432
+ },
1433
+ dependencies,
1434
+ ...config.infra && { infra: config.infra },
1435
+ responseTimeMs: Date.now() - startTime
1436
+ };
1437
+ return response;
1438
+ }
1439
+ function createHealthHandler(config) {
1440
+ return async (_req, res) => {
1441
+ try {
1442
+ const health = await generateHealthResponse(config);
1443
+ const statusCode2 = health.status === "UP" ? 200 : health.status === "DEGRADED" ? 200 : 503;
1444
+ res.status(statusCode2).json(health);
1445
+ } catch (error) {
1446
+ res.status(503).json({
1447
+ status: "DOWN",
1448
+ app: config.name,
1449
+ env: process.env.NODE_ENV || "development",
1450
+ version: config.version,
1451
+ error: error instanceof Error ? error.message : "Unknown error",
1452
+ time: {
1453
+ serverTime: (/* @__PURE__ */ new Date()).toISOString(),
1454
+ timezone: getTimezoneName(),
1455
+ offset: getTimezoneOffset(),
1456
+ epoch: Math.floor(Date.now() / 1e3)
1457
+ }
1458
+ });
1459
+ }
1460
+ };
1461
+ }
1462
+ function createRootHandler(config) {
1463
+ return async (_req, res) => {
1464
+ try {
1465
+ const health = await generateHealthResponse(config);
1466
+ res.json({
1467
+ message: `Welcome to ${config.name}`,
1468
+ description: config.description || `${config.name} API Server`,
1469
+ ...config.endpoints && { endpoints: config.endpoints },
1470
+ ...health
1471
+ });
1472
+ } catch (error) {
1473
+ res.status(503).json({
1474
+ status: "DOWN",
1475
+ app: config.name,
1476
+ error: error instanceof Error ? error.message : "Unknown error"
1477
+ });
1478
+ }
1479
+ };
1480
+ }
1336
1481
 
1337
1482
  // src/server/configs/cors.config.ts
1338
1483
  var DEFAULT_CORS_CONFIG = {
@@ -1614,6 +1759,8 @@ var createApiRateLimiter = (config = {}, options = {}) => {
1614
1759
  });
1615
1760
  };
1616
1761
  var RateLimiterBuilder = class {
1762
+ config;
1763
+ options;
1617
1764
  constructor(preset = "STANDARD") {
1618
1765
  const presetConfig = DEFAULT_RATE_LIMIT_TIERS[preset];
1619
1766
  this.config = {
@@ -1815,6 +1962,7 @@ function deepMerge(target, source) {
1815
1962
  return result;
1816
1963
  }
1817
1964
  var ConfigBuilder = class {
1965
+ config;
1818
1966
  constructor() {
1819
1967
  this.config = {
1820
1968
  server: { ...DEFAULT_SERVER_CONFIG },
@@ -1994,6 +2142,6 @@ var getDatabaseOptions = (config) => {
1994
2142
  };
1995
2143
  };
1996
2144
 
1997
- export { ConfigBuilder, DEFAULT_AUTH_CONFIG, DEFAULT_CORS_CONFIG, DEFAULT_CORS_ORIGINS, DEFAULT_DATABASE_CONFIG, DEFAULT_LOGGING_CONFIG, DEFAULT_RATE_LIMIT_CONFIG, DEFAULT_RATE_LIMIT_TIERS, DEFAULT_SERVER_CONFIG, EXYCONN_CORS_CONFIG, PERMISSIVE_CORS_CONFIG, RATE_LIMIT_CONFIG, RateLimiterBuilder, STRICT_CORS_CONFIG, StatusCode, StatusMessage, authenticateApiKey, authenticateJWT, badRequestResponse, buildConfig, buildDeleteFilter, buildFilter, buildPagination, buildPaginationMeta, checkPackageServer, conflictResponse, connectDB, corsOptions, createApiKeyGenerator, createApiRateLimiter, createBrandCorsOptions, createBulkDeleteHandler, createConfig, createCorsOptions, createCrudControllers, createDdosRateLimiter, createLogger, createMorganStream, createMultiBrandCorsOptions, createPaginationMiddleware, createPrefixedKeyGenerator, createRateLimiter, createStandardRateLimiter, createStrictRateLimiter, createUserKeyGenerator, createdResponse, ddosProtectionLimiter, defaultKeyGenerator, disconnectDB, errorResponse, extractColumns, extractOrganization, extractSchemaMeta, forbiddenResponse, formatPackageCheckResult, generateNcuCommand, getConnectionStatus, getDatabaseOptions, isDevelopment, isProduction, isTest, logger, noContentResponse, notFoundResponse, omitFields, optionalAuthenticateJWT, packageCheckServer, parseBulkDelete, pickFields, printPackageCheckSummary, queryPagination, queryParser, rateLimitResponse, rateLimiter, requireOrganization, sanitizeDocument, sanitizeUser, simpleLogger, standardRateLimiter, statusCode, statusMessage, stream, strictRateLimiter, successResponse, successResponseArr, unauthorizedResponse, validationErrorResponse };
2145
+ export { ConfigBuilder, DEFAULT_AUTH_CONFIG, DEFAULT_CORS_CONFIG, DEFAULT_CORS_ORIGINS, DEFAULT_DATABASE_CONFIG, DEFAULT_LOGGING_CONFIG, DEFAULT_RATE_LIMIT_CONFIG, DEFAULT_RATE_LIMIT_TIERS, DEFAULT_SERVER_CONFIG, EXYCONN_CORS_CONFIG, PERMISSIVE_CORS_CONFIG, RATE_LIMIT_CONFIG, RateLimiterBuilder, STRICT_CORS_CONFIG, StatusCode, StatusMessage, authenticateApiKey, authenticateJWT, badRequestResponse, buildConfig, buildDeleteFilter, buildFilter, buildPagination, buildPaginationMeta, checkPackageServer, conflictResponse, connectDB, corsOptions, createApiKeyGenerator, createApiRateLimiter, createBrandCorsOptions, createBulkDeleteHandler, createConfig, createCorsOptions, createCrudControllers, createDdosRateLimiter, createHealthHandler, createLogger, createMorganStream, createMultiBrandCorsOptions, createPaginationMiddleware, createPrefixedKeyGenerator, createRateLimiter, createRootHandler, createStandardRateLimiter, createStrictRateLimiter, createUserKeyGenerator, createdResponse, ddosProtectionLimiter, defaultKeyGenerator, disconnectDB, errorResponse, extractColumns, extractOrganization, extractSchemaMeta, forbiddenResponse, formatPackageCheckResult, generateHealthResponse, generateNcuCommand, getConnectionStatus, getDatabaseOptions, isDevelopment, isProduction, isTest, logger, noContentResponse, notFoundResponse, omitFields, optionalAuthenticateJWT, packageCheckServer, parseBulkDelete, pickFields, printPackageCheckSummary, queryPagination, queryParser, rateLimitResponse, rateLimiter, requireOrganization, sanitizeDocument, sanitizeUser, simpleLogger, standardRateLimiter, statusCode, statusMessage, stream, strictRateLimiter, successResponse, successResponseArr, unauthorizedResponse, validationErrorResponse };
1998
2146
  //# sourceMappingURL=index.mjs.map
1999
2147
  //# sourceMappingURL=index.mjs.map