@exyconn/common 2.3.3 → 2.3.5
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.
- package/dist/client/http/index.d.mts +66 -3
- package/dist/client/http/index.d.ts +66 -3
- package/dist/client/http/index.js +101 -6
- package/dist/client/http/index.js.map +1 -1
- package/dist/client/http/index.mjs +90 -7
- package/dist/client/http/index.mjs.map +1 -1
- package/dist/client/index.d.mts +1 -1
- package/dist/client/index.d.ts +1 -1
- package/dist/client/index.js +101 -6
- package/dist/client/index.js.map +1 -1
- package/dist/client/index.mjs +90 -7
- package/dist/client/index.mjs.map +1 -1
- package/dist/{index-Ckhm_HaX.d.mts → index-B8O4iu6q.d.mts} +7 -2
- package/dist/{index-CF0D8PGE.d.ts → index-CdbQ8YPt.d.ts} +14 -2
- package/dist/{index-br6POSyA.d.ts → index-MpV0UNTq.d.ts} +7 -2
- package/dist/{index-BZf42T3R.d.mts → index-guYdqefq.d.mts} +14 -2
- package/dist/index.d.mts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +262 -17
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +259 -16
- package/dist/index.mjs.map +1 -1
- package/dist/server/index.d.mts +1 -1
- package/dist/server/index.d.ts +1 -1
- package/dist/server/index.js +155 -5
- package/dist/server/index.js.map +1 -1
- package/dist/server/index.mjs +150 -5
- package/dist/server/index.mjs.map +1 -1
- package/dist/server/utils/index.d.mts +99 -1
- package/dist/server/utils/index.d.ts +99 -1
- package/dist/server/utils/index.js +154 -0
- package/dist/server/utils/index.js.map +1 -1
- package/dist/server/utils/index.mjs +148 -3
- package/dist/server/utils/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/server/index.mjs
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import winston from 'winston';
|
|
2
2
|
import DailyRotateFile from 'winston-daily-rotate-file';
|
|
3
|
-
import
|
|
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:
|
|
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:
|
|
228
|
+
filename: path2.join(finalConfig.logsDir, "error-%DATE%.log"),
|
|
228
229
|
datePattern: "YYYY-MM-DD",
|
|
229
230
|
level: "error",
|
|
230
231
|
maxSize: finalConfig.maxSize,
|
|
@@ -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 = {
|
|
@@ -1994,6 +2139,6 @@ var getDatabaseOptions = (config) => {
|
|
|
1994
2139
|
};
|
|
1995
2140
|
};
|
|
1996
2141
|
|
|
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 };
|
|
2142
|
+
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
2143
|
//# sourceMappingURL=index.mjs.map
|
|
1999
2144
|
//# sourceMappingURL=index.mjs.map
|