@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.d.mts
CHANGED
|
@@ -3,7 +3,7 @@ export { StatusCode, StatusMessage, statusCode, statusMessage } from './enums/in
|
|
|
3
3
|
export { LoggerConfig, createLogger, createMorganStream, logger, simpleLogger, stream } from './logger/index.mjs';
|
|
4
4
|
export { DbConnectionOptions, connectDB, disconnectDB, getConnectionStatus } from './db/index.mjs';
|
|
5
5
|
export { AuthRequest, BulkDeleteRequest, ColumnMeta, CrudConfig, JWTPayload, OrgRequest, PaginatedRequest, PaginatedResponse, PaginatedResult, PaginationMeta, ParsedQuery, SortConfig, SortOrder, authenticateApiKey, authenticateJWT, buildDeleteFilter, createBulkDeleteHandler, createCrudControllers, createPaginationMiddleware, extractOrganization, extractSchemaMeta, optionalAuthenticateJWT, parseBulkDelete, queryPagination, queryParser, requireOrganization } from './middleware/index.mjs';
|
|
6
|
-
export { FilterOptions, PackageCheckResult, PackageJson, PackageVersion, PaginationOptions, PaginationResult, buildFilter, buildPagination, buildPaginationMeta, checkPackageServer, formatPackageCheckResult, generateNcuCommand, omitFields, packageCheckServer, pickFields, printPackageCheckSummary, sanitizeDocument, sanitizeUser } from './utils/index.mjs';
|
|
6
|
+
export { FilterOptions, HealthConfig, HealthResponse, PackageCheckResult, PackageJson, PackageVersion, PaginationOptions, PaginationResult, buildFilter, buildPagination, buildPaginationMeta, checkPackageServer, createHealthHandler, createRootHandler, formatPackageCheckResult, generateHealthResponse, generateNcuCommand, omitFields, packageCheckServer, pickFields, printPackageCheckSummary, sanitizeDocument, sanitizeUser } from './utils/index.mjs';
|
|
7
7
|
export { AppConfig, AuthConfig, ConfigBuilder, CorsConfig, CorsOriginsConfig, 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, DatabaseConfig, EXYCONN_CORS_CONFIG, Environment, LogLevel, LoggingConfig, PERMISSIVE_CORS_CONFIG, RATE_LIMIT_CONFIG, RateLimitConfig, RateLimitResponse, RateLimitTier, RateLimitTierConfig, RateLimiterBuilder, RateLimiterConfig, STRICT_CORS_CONFIG, ServerConfig, buildConfig, corsOptions, createApiKeyGenerator, createApiRateLimiter, createBrandCorsOptions, createConfig, createCorsOptions, createDdosRateLimiter, createMultiBrandCorsOptions, createPrefixedKeyGenerator, createRateLimiter, createStandardRateLimiter, createStrictRateLimiter, createUserKeyGenerator, ddosProtectionLimiter, defaultKeyGenerator, getDatabaseOptions, isDevelopment, isProduction, isTest, rateLimiter, standardRateLimiter, strictRateLimiter } from './configs/index.mjs';
|
|
8
8
|
import 'express';
|
|
9
9
|
import 'winston';
|
package/dist/server/index.d.ts
CHANGED
|
@@ -3,7 +3,7 @@ export { StatusCode, StatusMessage, statusCode, statusMessage } from './enums/in
|
|
|
3
3
|
export { LoggerConfig, createLogger, createMorganStream, logger, simpleLogger, stream } from './logger/index.js';
|
|
4
4
|
export { DbConnectionOptions, connectDB, disconnectDB, getConnectionStatus } from './db/index.js';
|
|
5
5
|
export { AuthRequest, BulkDeleteRequest, ColumnMeta, CrudConfig, JWTPayload, OrgRequest, PaginatedRequest, PaginatedResponse, PaginatedResult, PaginationMeta, ParsedQuery, SortConfig, SortOrder, authenticateApiKey, authenticateJWT, buildDeleteFilter, createBulkDeleteHandler, createCrudControllers, createPaginationMiddleware, extractOrganization, extractSchemaMeta, optionalAuthenticateJWT, parseBulkDelete, queryPagination, queryParser, requireOrganization } from './middleware/index.js';
|
|
6
|
-
export { FilterOptions, PackageCheckResult, PackageJson, PackageVersion, PaginationOptions, PaginationResult, buildFilter, buildPagination, buildPaginationMeta, checkPackageServer, formatPackageCheckResult, generateNcuCommand, omitFields, packageCheckServer, pickFields, printPackageCheckSummary, sanitizeDocument, sanitizeUser } from './utils/index.js';
|
|
6
|
+
export { FilterOptions, HealthConfig, HealthResponse, PackageCheckResult, PackageJson, PackageVersion, PaginationOptions, PaginationResult, buildFilter, buildPagination, buildPaginationMeta, checkPackageServer, createHealthHandler, createRootHandler, formatPackageCheckResult, generateHealthResponse, generateNcuCommand, omitFields, packageCheckServer, pickFields, printPackageCheckSummary, sanitizeDocument, sanitizeUser } from './utils/index.js';
|
|
7
7
|
export { AppConfig, AuthConfig, ConfigBuilder, CorsConfig, CorsOriginsConfig, 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, DatabaseConfig, EXYCONN_CORS_CONFIG, Environment, LogLevel, LoggingConfig, PERMISSIVE_CORS_CONFIG, RATE_LIMIT_CONFIG, RateLimitConfig, RateLimitResponse, RateLimitTier, RateLimitTierConfig, RateLimiterBuilder, RateLimiterConfig, STRICT_CORS_CONFIG, ServerConfig, buildConfig, corsOptions, createApiKeyGenerator, createApiRateLimiter, createBrandCorsOptions, createConfig, createCorsOptions, createDdosRateLimiter, createMultiBrandCorsOptions, createPrefixedKeyGenerator, createRateLimiter, createStandardRateLimiter, createStrictRateLimiter, createUserKeyGenerator, ddosProtectionLimiter, defaultKeyGenerator, getDatabaseOptions, isDevelopment, isProduction, isTest, rateLimiter, standardRateLimiter, strictRateLimiter } from './configs/index.js';
|
|
8
8
|
import 'express';
|
|
9
9
|
import 'winston';
|
package/dist/server/index.js
CHANGED
|
@@ -2,19 +2,22 @@
|
|
|
2
2
|
|
|
3
3
|
var winston = require('winston');
|
|
4
4
|
var DailyRotateFile = require('winston-daily-rotate-file');
|
|
5
|
-
var
|
|
5
|
+
var path2 = require('path');
|
|
6
6
|
var mongoose = require('mongoose');
|
|
7
7
|
var jwt = require('jsonwebtoken');
|
|
8
8
|
var fs = require('fs');
|
|
9
|
+
var os = require('os');
|
|
9
10
|
var rateLimit = require('express-rate-limit');
|
|
10
11
|
|
|
11
12
|
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
12
13
|
|
|
13
14
|
var winston__default = /*#__PURE__*/_interopDefault(winston);
|
|
14
15
|
var DailyRotateFile__default = /*#__PURE__*/_interopDefault(DailyRotateFile);
|
|
15
|
-
var
|
|
16
|
+
var path2__default = /*#__PURE__*/_interopDefault(path2);
|
|
16
17
|
var mongoose__default = /*#__PURE__*/_interopDefault(mongoose);
|
|
17
18
|
var jwt__default = /*#__PURE__*/_interopDefault(jwt);
|
|
19
|
+
var fs__default = /*#__PURE__*/_interopDefault(fs);
|
|
20
|
+
var os__default = /*#__PURE__*/_interopDefault(os);
|
|
18
21
|
var rateLimit__default = /*#__PURE__*/_interopDefault(rateLimit);
|
|
19
22
|
|
|
20
23
|
// src/server/enums/status.ts
|
|
@@ -227,7 +230,7 @@ var createLogger = (config = {}) => {
|
|
|
227
230
|
}),
|
|
228
231
|
// Combined logs (all levels)
|
|
229
232
|
new DailyRotateFile__default.default({
|
|
230
|
-
filename:
|
|
233
|
+
filename: path2__default.default.join(finalConfig.logsDir, "combined-%DATE%.log"),
|
|
231
234
|
datePattern: "YYYY-MM-DD",
|
|
232
235
|
maxSize: finalConfig.maxSize,
|
|
233
236
|
maxFiles: finalConfig.maxFiles,
|
|
@@ -235,7 +238,7 @@ var createLogger = (config = {}) => {
|
|
|
235
238
|
}),
|
|
236
239
|
// Error logs only
|
|
237
240
|
new DailyRotateFile__default.default({
|
|
238
|
-
filename:
|
|
241
|
+
filename: path2__default.default.join(finalConfig.logsDir, "error-%DATE%.log"),
|
|
239
242
|
datePattern: "YYYY-MM-DD",
|
|
240
243
|
level: "error",
|
|
241
244
|
maxSize: finalConfig.maxSize,
|
|
@@ -1190,7 +1193,7 @@ async function loadPackageJson(source) {
|
|
|
1190
1193
|
}
|
|
1191
1194
|
return response.json();
|
|
1192
1195
|
}
|
|
1193
|
-
const filePath =
|
|
1196
|
+
const filePath = path2.resolve(source);
|
|
1194
1197
|
if (!fs.existsSync(filePath)) {
|
|
1195
1198
|
throw new Error(`File not found: ${filePath}`);
|
|
1196
1199
|
}
|
|
@@ -1344,6 +1347,150 @@ var packageCheckServer = {
|
|
|
1344
1347
|
generateNcuCommand,
|
|
1345
1348
|
print: printPackageCheckSummary
|
|
1346
1349
|
};
|
|
1350
|
+
var serverStartTime = Date.now();
|
|
1351
|
+
function getTimezoneOffset() {
|
|
1352
|
+
const offset = (/* @__PURE__ */ new Date()).getTimezoneOffset();
|
|
1353
|
+
const hours = Math.floor(Math.abs(offset) / 60);
|
|
1354
|
+
const minutes = Math.abs(offset) % 60;
|
|
1355
|
+
const sign = offset <= 0 ? "+" : "-";
|
|
1356
|
+
return `${sign}${hours.toString().padStart(2, "0")}:${minutes.toString().padStart(2, "0")}`;
|
|
1357
|
+
}
|
|
1358
|
+
function getTimezoneName() {
|
|
1359
|
+
try {
|
|
1360
|
+
return Intl.DateTimeFormat().resolvedOptions().timeZone;
|
|
1361
|
+
} catch {
|
|
1362
|
+
return "UTC";
|
|
1363
|
+
}
|
|
1364
|
+
}
|
|
1365
|
+
function getPackageInfo(criticalPackages = []) {
|
|
1366
|
+
try {
|
|
1367
|
+
const possiblePaths = [
|
|
1368
|
+
path2__default.default.join(process.cwd(), "package.json"),
|
|
1369
|
+
path2__default.default.join(__dirname, "..", "..", "..", "..", "package.json"),
|
|
1370
|
+
path2__default.default.join(__dirname, "..", "..", "package.json")
|
|
1371
|
+
];
|
|
1372
|
+
for (const pkgPath of possiblePaths) {
|
|
1373
|
+
if (fs__default.default.existsSync(pkgPath)) {
|
|
1374
|
+
const pkg = JSON.parse(fs__default.default.readFileSync(pkgPath, "utf-8"));
|
|
1375
|
+
const deps = pkg.dependencies || {};
|
|
1376
|
+
const devDeps = pkg.devDependencies || {};
|
|
1377
|
+
const total = Object.keys(deps).length + Object.keys(devDeps).length;
|
|
1378
|
+
const critical = {};
|
|
1379
|
+
for (const pkgName of criticalPackages) {
|
|
1380
|
+
if (deps[pkgName]) {
|
|
1381
|
+
critical[pkgName] = deps[pkgName].replace("^", "").replace("~", "");
|
|
1382
|
+
}
|
|
1383
|
+
}
|
|
1384
|
+
return { total, critical };
|
|
1385
|
+
}
|
|
1386
|
+
}
|
|
1387
|
+
} catch {
|
|
1388
|
+
}
|
|
1389
|
+
return { total: 0, critical: {} };
|
|
1390
|
+
}
|
|
1391
|
+
async function generateHealthResponse(config) {
|
|
1392
|
+
const startTime = Date.now();
|
|
1393
|
+
const now = /* @__PURE__ */ new Date();
|
|
1394
|
+
let dependencies = {};
|
|
1395
|
+
if (config.checkDependencies) {
|
|
1396
|
+
try {
|
|
1397
|
+
dependencies = await config.checkDependencies();
|
|
1398
|
+
} catch {
|
|
1399
|
+
dependencies = { error: "DOWN" };
|
|
1400
|
+
}
|
|
1401
|
+
}
|
|
1402
|
+
const hasDownDep = Object.values(dependencies).includes("DOWN");
|
|
1403
|
+
const status = hasDownDep ? "DEGRADED" : "UP";
|
|
1404
|
+
const defaultCriticalPackages = ["express", "mongoose", "cors", "dotenv"];
|
|
1405
|
+
const packageInfo = getPackageInfo(config.criticalPackages || defaultCriticalPackages);
|
|
1406
|
+
const totalMem = os__default.default.totalmem();
|
|
1407
|
+
const freeMem = os__default.default.freemem();
|
|
1408
|
+
const usedMem = totalMem - freeMem;
|
|
1409
|
+
const isProduction2 = process.env.NODE_ENV === "production";
|
|
1410
|
+
const serverUrl = isProduction2 ? `https://${config.domain}` : `http://localhost:${config.port}`;
|
|
1411
|
+
const response = {
|
|
1412
|
+
status,
|
|
1413
|
+
app: config.name,
|
|
1414
|
+
env: process.env.NODE_ENV || "development",
|
|
1415
|
+
version: config.version,
|
|
1416
|
+
urls: {
|
|
1417
|
+
...config.uiUrl && { ui: config.uiUrl },
|
|
1418
|
+
server: config.serverUrl || serverUrl,
|
|
1419
|
+
health: `${config.serverUrl || serverUrl}/health`
|
|
1420
|
+
},
|
|
1421
|
+
time: {
|
|
1422
|
+
serverTime: now.toISOString(),
|
|
1423
|
+
timezone: getTimezoneName(),
|
|
1424
|
+
offset: getTimezoneOffset(),
|
|
1425
|
+
epoch: Math.floor(now.getTime() / 1e3)
|
|
1426
|
+
},
|
|
1427
|
+
uptimeSec: Math.floor((Date.now() - serverStartTime) / 1e3),
|
|
1428
|
+
node: {
|
|
1429
|
+
version: process.version,
|
|
1430
|
+
platform: os__default.default.platform(),
|
|
1431
|
+
arch: os__default.default.arch()
|
|
1432
|
+
},
|
|
1433
|
+
system: {
|
|
1434
|
+
hostname: os__default.default.hostname(),
|
|
1435
|
+
memoryUsedMB: Math.round(usedMem / 1024 / 1024),
|
|
1436
|
+
memoryTotalMB: Math.round(totalMem / 1024 / 1024),
|
|
1437
|
+
memoryFreePercent: Math.round(freeMem / totalMem * 100),
|
|
1438
|
+
cpuLoad: os__default.default.loadavg().map((l) => Math.round(l * 100) / 100),
|
|
1439
|
+
cpuCount: os__default.default.cpus().length
|
|
1440
|
+
},
|
|
1441
|
+
packages: {
|
|
1442
|
+
appVersion: config.version,
|
|
1443
|
+
totalDependencies: packageInfo.total,
|
|
1444
|
+
critical: packageInfo.critical
|
|
1445
|
+
},
|
|
1446
|
+
dependencies,
|
|
1447
|
+
...config.infra && { infra: config.infra },
|
|
1448
|
+
responseTimeMs: Date.now() - startTime
|
|
1449
|
+
};
|
|
1450
|
+
return response;
|
|
1451
|
+
}
|
|
1452
|
+
function createHealthHandler(config) {
|
|
1453
|
+
return async (_req, res) => {
|
|
1454
|
+
try {
|
|
1455
|
+
const health = await generateHealthResponse(config);
|
|
1456
|
+
const statusCode2 = health.status === "UP" ? 200 : health.status === "DEGRADED" ? 200 : 503;
|
|
1457
|
+
res.status(statusCode2).json(health);
|
|
1458
|
+
} catch (error) {
|
|
1459
|
+
res.status(503).json({
|
|
1460
|
+
status: "DOWN",
|
|
1461
|
+
app: config.name,
|
|
1462
|
+
env: process.env.NODE_ENV || "development",
|
|
1463
|
+
version: config.version,
|
|
1464
|
+
error: error instanceof Error ? error.message : "Unknown error",
|
|
1465
|
+
time: {
|
|
1466
|
+
serverTime: (/* @__PURE__ */ new Date()).toISOString(),
|
|
1467
|
+
timezone: getTimezoneName(),
|
|
1468
|
+
offset: getTimezoneOffset(),
|
|
1469
|
+
epoch: Math.floor(Date.now() / 1e3)
|
|
1470
|
+
}
|
|
1471
|
+
});
|
|
1472
|
+
}
|
|
1473
|
+
};
|
|
1474
|
+
}
|
|
1475
|
+
function createRootHandler(config) {
|
|
1476
|
+
return async (_req, res) => {
|
|
1477
|
+
try {
|
|
1478
|
+
const health = await generateHealthResponse(config);
|
|
1479
|
+
res.json({
|
|
1480
|
+
message: `Welcome to ${config.name}`,
|
|
1481
|
+
description: config.description || `${config.name} API Server`,
|
|
1482
|
+
...config.endpoints && { endpoints: config.endpoints },
|
|
1483
|
+
...health
|
|
1484
|
+
});
|
|
1485
|
+
} catch (error) {
|
|
1486
|
+
res.status(503).json({
|
|
1487
|
+
status: "DOWN",
|
|
1488
|
+
app: config.name,
|
|
1489
|
+
error: error instanceof Error ? error.message : "Unknown error"
|
|
1490
|
+
});
|
|
1491
|
+
}
|
|
1492
|
+
};
|
|
1493
|
+
}
|
|
1347
1494
|
|
|
1348
1495
|
// src/server/configs/cors.config.ts
|
|
1349
1496
|
var DEFAULT_CORS_CONFIG = {
|
|
@@ -2041,12 +2188,14 @@ exports.createConfig = createConfig;
|
|
|
2041
2188
|
exports.createCorsOptions = createCorsOptions;
|
|
2042
2189
|
exports.createCrudControllers = createCrudControllers;
|
|
2043
2190
|
exports.createDdosRateLimiter = createDdosRateLimiter;
|
|
2191
|
+
exports.createHealthHandler = createHealthHandler;
|
|
2044
2192
|
exports.createLogger = createLogger;
|
|
2045
2193
|
exports.createMorganStream = createMorganStream;
|
|
2046
2194
|
exports.createMultiBrandCorsOptions = createMultiBrandCorsOptions;
|
|
2047
2195
|
exports.createPaginationMiddleware = createPaginationMiddleware;
|
|
2048
2196
|
exports.createPrefixedKeyGenerator = createPrefixedKeyGenerator;
|
|
2049
2197
|
exports.createRateLimiter = createRateLimiter;
|
|
2198
|
+
exports.createRootHandler = createRootHandler;
|
|
2050
2199
|
exports.createStandardRateLimiter = createStandardRateLimiter;
|
|
2051
2200
|
exports.createStrictRateLimiter = createStrictRateLimiter;
|
|
2052
2201
|
exports.createUserKeyGenerator = createUserKeyGenerator;
|
|
@@ -2060,6 +2209,7 @@ exports.extractOrganization = extractOrganization;
|
|
|
2060
2209
|
exports.extractSchemaMeta = extractSchemaMeta;
|
|
2061
2210
|
exports.forbiddenResponse = forbiddenResponse;
|
|
2062
2211
|
exports.formatPackageCheckResult = formatPackageCheckResult;
|
|
2212
|
+
exports.generateHealthResponse = generateHealthResponse;
|
|
2063
2213
|
exports.generateNcuCommand = generateNcuCommand;
|
|
2064
2214
|
exports.getConnectionStatus = getConnectionStatus;
|
|
2065
2215
|
exports.getDatabaseOptions = getDatabaseOptions;
|