🎩 You're Invited:Meet the Socket team at Black Hat in Las Vegas, August 3-6.RSVP
Sign In

huxy-node-server

Package Overview
Dependencies
Maintainers
1
Versions
25
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

huxy-node-server - npm Package Compare versions

Comparing version
1.1.3
to
1.1.4
+3
-3
package.json
{
"name": "huxy-node-server",
"version": "1.1.3",
"version": "1.1.4",
"description": "一个精炼、高性能的 Express.js 服务器模板,为现代 Node.js 应用程序设计,提供灵活的功能和最佳实践。",

@@ -39,7 +39,7 @@ "type": "module",

"cors": "^2.8.6",
"dotenv": "^17.2.3",
"dotenv": "^17.3.1",
"express": "^5.2.1",
"express-rate-limit": "^8.2.1",
"helmet": "^8.1.0",
"pino": "^10.3.0",
"pino": "^10.3.1",
"pino-http": "^11.0.0",

@@ -46,0 +46,0 @@ "pino-pretty": "^13.1.3"

@@ -13,3 +13,3 @@ import T from 'express';

f = t => {
let r = t ? 'https' : 'http',
let s = t ? 'https' : 'http',
o = H.networkInterfaces(),

@@ -20,8 +20,8 @@ e = [];

y = t => {
let r = t ?? process.argv.slice(2) ?? [],
let s = t ?? process.argv.slice(2) ?? [],
o = {};
return (
r.map(e => {
let [s, n] = e.split('=');
o[s] = n;
s.map(e => {
let [r, n] = e.split('=');
o[r] = n;
}),

@@ -45,18 +45,18 @@ o

},
j = (t, r, o) => {
let [e, s] = t.split('.');
e && s ? (o[e] || (o[e] = {}), (o[e][s] = r)) : (o[e] = r);
j = (t, s, o) => {
let [e, r] = t.split('.');
e && r ? (o[e] || (o[e] = {}), (o[e][r] = s)) : (o[e] = s);
},
G = t => {
let {connectSrc: r, ...o} = t;
if (!r) return o;
let {connectSrc: s, ...o} = t;
if (!s) return o;
(o.helmet.contentSecurityPolicy || (o.helmet.contentSecurityPolicy = {}), o.helmet.contentSecurityPolicy.directives || (o.helmet.contentSecurityPolicy.directives = {}));
let e = typeof r == 'string' ? r.split(',').map(s => s.trim()) : Array.isArray(r) ? r : [];
let e = typeof s == 'string' ? s.split(',').map(r => r.trim()) : Array.isArray(s) ? s : [];
return ((o.helmet.contentSecurityPolicy.directives.connectSrc = [...o.helmet.contentSecurityPolicy.directives.connectSrc, ...e]), o);
},
h = (t = {}, r = U) => {
h = (t = {}, s = U) => {
let {env: o} = process;
Object.keys(r).map(s => {
let n = o[s] ?? t[s];
n && j(r[s], n, t);
Object.keys(s).map(r => {
let n = o[r] ?? t[r];
n && j(s[r], n, t);
});

@@ -66,7 +66,7 @@ let e = {...t, ...y()};

},
g = (t, r = '127.0.0.1') =>
g = (t, s = '127.0.0.1') =>
new Promise(o => {
let e = k.createServer();
(e.once('error', s => {
(e.close(), o((s.code === 'EADDRINUSE', !1)));
(e.once('error', r => {
(e.close(), o((r.code === 'EADDRINUSE', !1)));
}),

@@ -76,9 +76,9 @@ e.once('listening', () => {

}),
e.listen(Number(t), r));
e.listen(Number(t), s));
}),
I = (t, r = {}, o) => {
let e = s => {
(o.warn(`\u6536\u5230 ${s} \u4FE1\u53F7, \u{1F6D1} \u6B63\u5728\u5173\u95ED\u670D\u52A1\u5668...`),
I = (t, s = {}, o) => {
let e = r => {
(o.warn(`\u6536\u5230 ${r} \u4FE1\u53F7, \u{1F6D1} \u6B63\u5728\u5173\u95ED\u670D\u52A1\u5668...`),
t.close(async () => {
(o.info('\u{1F44B} \u670D\u52A1\u5668\u5DF2\u5173\u95ED'), await r.shutdown?.(), process.exit(0));
(o.info('\u{1F44B} \u670D\u52A1\u5668\u5DF2\u5173\u95ED'), await s.shutdown?.(), process.exit(0));
}),

@@ -91,13 +91,13 @@ setTimeout(() => {

process.on('SIGINT', () => e('SIGINT')),
process.on('uncaughtException', s => {
(o.fatal(s, `\u{1F4A5} \u672A\u6355\u83B7\u7684\u5F02\u5E38: ${s.message}`), process.exit(1));
process.on('uncaughtException', r => {
(o.fatal(r, `\u{1F4A5} \u672A\u6355\u83B7\u7684\u5F02\u5E38: ${r.message}`), process.exit(1));
}),
process.on('unhandledRejection', (s, n) => {
(o.fatal({reason: s, promise: n}, '\u26A0\uFE0F \u672A\u5904\u7406\u7684 Promise \u62D2\u7EDD'), process.exit(1));
process.on('unhandledRejection', (r, n) => {
(o.fatal({reason: r, promise: n}, '\u26A0\uFE0F \u672A\u5904\u7406\u7684 Promise \u62D2\u7EDD'), process.exit(1));
}));
},
L = (t, {port: r, host: o = '0.0.0.0'} = {}) =>
new Promise((e, s) => {
L = (t, {port: s, host: o = '0.0.0.0'} = {}) =>
new Promise((e, r) => {
let n = c => {
(a(), s(c));
(a(), r(c));
},

@@ -110,17 +110,17 @@ i = () => {

};
(t.once('error', n), t.once('listening', i), t.listen(r, o));
(t.once('error', n), t.once('listening', i), t.listen(s, o));
}),
A = (t, r = 56) => {
A = (t, s = 56) => {
let o = t.length,
e = r - o,
s = ~~(e / 2);
return `${'-'.repeat(s)}${t}${'-'.repeat(e - s)}`;
e = s - o,
r = ~~(e / 2);
return `${'-'.repeat(r)}${t}${'-'.repeat(e - r)}`;
};
var F =
(t = {}) =>
async (r = 'huxy') => {
let {logLevel: o, transportOpt: e, ...s} = t,
async (s = 'huxy') => {
let {logLevel: o, transportOpt: e, ...r} = t,
n = (await import('pino')).default,
i = n({
name: r,
name: s,
level: o ?? 'info',

@@ -131,3 +131,3 @@ formatters: {level: a => ({level: a})},

transport: {target: 'pino-pretty', options: {colorize: !0, levelFirst: !0, ...e}, ignore: 'pid,hostname,level,time', translateTime: 'SYS:yyyy-mm-dd HH:MM:ss'},
...s,
...r,
});

@@ -137,55 +137,55 @@ return ((i.isPino = !0), i);

var v = F;
var $ = (t, r) => (o, e, s) => {
(r.error({message: 'Not Found', timestamp: l(), url: o.originalUrl, method: o.method, ip: o.ip, userAgent: o.get('User-Agent')}, '\u627E\u4E0D\u5230\u8DEF\u5F84'),
var $ = (t, s) => (o, e, r) => {
(s.error({message: 'Not Found', timestamp: l(), url: o.originalUrl, method: o.method, ip: o.ip, userAgent: o.get('User-Agent')}, '\u627E\u4E0D\u5230\u8DEF\u5F84'),
e.status(404).json({success: !1, status: 404, url: o.originalUrl, message: `\u8DEF\u7531 [${o.method} ${o.originalUrl}] \u4E0D\u5B58\u5728`, timestamp: l()}));
},
R = (t, r) => (o, e, s, n) => {
R = (t, s) => (o, e, r, n) => {
let i = o.status || 500,
a = o.message;
(r.error({message: a, timestamp: l(), stack: o.stack, url: e.originalUrl, method: e.method, ip: e.ip, userAgent: e.get('User-Agent')}, '\u670D\u52A1\u5668\u5185\u90E8\u9519\u8BEF'),
s.status(i).json({success: !1, message: (t.isDev, a), stack: t.isDev ? o.stack : void 0, timestamp: l()}));
(s.error({message: a, timestamp: l(), stack: o.stack, url: e.originalUrl, method: e.method, ip: e.ip, userAgent: e.get('User-Agent')}, '\u670D\u52A1\u5668\u5185\u90E8\u9519\u8BEF'),
r.status(i).json({success: !1, message: (t.isDev, a), stack: t.isDev ? o.stack : void 0, timestamp: l()}));
};
import {Router as V} from 'express';
var W = t => {
let r = V();
let s = V();
return (
r.use('/health', (o, e) => {
s.use('/health', (o, e) => {
e.status(200).json({status: 'OK', timestamp: l(), environment: t.nodeEnv, uptime: process.uptime(), memoryUsage: process.memoryUsage(), pid: process.pid});
}),
r.get('/', (o, e) => {
s.get('/', (o, e) => {
e.status(200).json({message: 'Node.js \u670D\u52A1\u5668\u8FD0\u884C\u4E2D', timestamp: l(), environment: t.nodeEnv});
}),
r
s
);
},
b = W;
var Y = async (t, r = {}, o) => {
if ((t.disable('x-powered-by'), t.set('trust proxy', r.trustProxy ?? 1), o.isPino)) {
var Y = async (t, s = {}, o) => {
if ((t.disable('x-powered-by'), t.set('trust proxy', s.trustProxy ?? 1), o.isPino)) {
let e = (await import('pino-http')).default;
t.use(e({logger: o, quietReqLogger: !0, autoLogging: !1, genReqId: !1}));
} else
t.use((e, s, n) => {
t.use((e, r, n) => {
e.log = o;
});
(t.use(Q()),
t.use(K(r.helmet)),
t.use(z(r.cors)),
t.use(r.apiPrefix, B({keyGenerator: e => X(e.ip) || e.headers['x-huxy-auth'] || e.headers['x-api-key'] || e.headers.authorization, ...r.rateLimit})),
t.use(K(s.helmet)),
t.use(z(s.cors)),
s.isStatic || t.use(s.apiPrefix, B({keyGenerator: e => X(e.ip) || e.headers['x-huxy-auth'] || e.headers['x-api-key'] || e.headers.authorization, ...s.rateLimit})),
t.use(T.json({limit: '20mb'})),
t.use(T.urlencoded({extended: !0, limit: '20mb'})));
},
Z = (t, r = {}, o) => {
(t.use(b(r)), t.use($(r, o)), t.use(R(r, o)));
Z = (t, s = {}, o) => {
(t.use(b(s)), t.use($(s, o)), t.use(R(s, o)));
},
q = async (t = {}, r) => {
q = async (t = {}, s) => {
let {logger: o, ...e} = h(t),
s = o ?? (await v(e.loggerConfig)('huxy')),
r = o ?? (await v(e.loggerConfig)('huxy')),
{port: n, ssl: i} = e;
(await g(n, e.host)) || ((e.port = Number(n) + 1), s.warn(`\u7AEF\u53E3 ${n} \u5DF2\u88AB\u5360\u7528\uFF0C\u73B0\u5728\u4F7F\u7528\u7AEF\u53E3 ${e.port}`));
(await g(n, e.host)) || ((e.port = Number(n) + 1), r.warn(`\u7AEF\u53E3 ${n} \u5DF2\u88AB\u5360\u7528\uFF0C\u73B0\u5728\u4F7F\u7528\u7AEF\u53E3 ${e.port}`));
let c = T();
await Y(c, e, s);
await Y(c, e, r);
let p;
(i
? (w(i) === 'object' ||
(s.error({ssl: {key: '/path/to/name.key', cert: '/path/to/name.pem'}}, '\u26A0\uFE0F \u8BF7\u8BBE\u7F6E\u6709\u6548 SSL \u6216\u8BBE\u7F6E {ssl: false}'), process.exit(1)),
(r.error({ssl: {key: '/path/to/name.key', cert: '/path/to/name.pem'}}, '\u26A0\uFE0F \u8BF7\u8BBE\u7F6E\u6709\u6548 SSL \u6216\u8BBE\u7F6E {ssl: false}'), process.exit(1)),
(e.protocol = 'https'),

@@ -197,14 +197,14 @@ (p = J.createServer(i, c)),

: (p = O(c)),
I(p, e, s));
I(p, e, r));
try {
await L(p, e);
} catch (m) {
(s.error({err: m}, '\u26A0\uFE0F \u670D\u52A1\u5668\u542F\u52A8\u5931\u8D25'), process.exit(1));
(r.error({err: m}, '\u26A0\uFE0F \u670D\u52A1\u5668\u542F\u52A8\u5931\u8D25'), process.exit(1));
}
try {
await r?.(e, c, p, s);
await s?.(e, c, p, r);
} catch (m) {
(s.error({err: m}, `\u274C \u56DE\u8C03\u51FD\u6570\u9519\u8BEF\uFF1A${m.message}`), process.exit(1));
(r.error({err: m}, `\u274C \u56DE\u8C03\u51FD\u6570\u9519\u8BEF\uFF1A${m.message}`), process.exit(1));
}
return (Z(c, e, s), {app: c, httpServer: p, config: e, logger: s});
return (Z(c, e, r), {app: c, httpServer: p, config: e, logger: r});
},

@@ -217,9 +217,9 @@ _ = q;

port: parseInt(process.env.PORT || '3000', 10),
host: process.env.HOST || '0.0.0.0',
host: process.env.HOST || 'localhost',
basepath: process.env.BASEPATH || '/',
apiPrefix: '/',
cors: {origin: process.env.CORS_ORIGIN?.split(',') || '*', credentials: !0},
cors: {origin: process.env.CORS_ORIGIN?.split(',') || '*'},
rateLimit: {
windowMs: parseInt(process.env.RATE_LIMIT_WINDOW_MS || '300000', 10),
limit: parseInt(process.env.RATE_LIMIT_MAX_REQUESTS || '500', 10),
limit: parseInt(process.env.RATE_LIMIT_MAX_REQUESTS || '150', 10),
message: {message: '\u8BF7\u6C42\u8FC7\u4E8E\u9891\u7E41\uFF0C\u8BF7\u7A0D\u540E\u518D\u8BD5'},

@@ -242,4 +242,4 @@ },

N = ee;
var te = (t, r, o) =>
_({...N, ...t}, async (e, s, n, i) => {
var te = (t, s, o) =>
_({...N, ...t}, async (e, r, n, i) => {
let {port: a, host: c, nodeEnv: p, basepath: m, appName: u = 'HuxyServer', protocol: d} = e;

@@ -255,3 +255,3 @@ if (!o) {

}
await r?.(e, s, n, i);
await s?.(e, r, n, i);
}),

@@ -261,11 +261,11 @@ x = te;

import {fileURLToPath as oe} from 'node:url';
import {dirname as re, resolve as se} from 'node:path';
var E = (t = import.meta.url) => re(oe(t)),
P = (...t) => se(E(), ...t),
import {dirname as se, resolve as re} from 'node:path';
var E = (t = import.meta.url) => se(oe(t)),
P = (...t) => re(E(), ...t),
C = P;
var ie = {port: 9e3, host: 'localhost', basepath: '/', buildPath: './build'},
var ie = {port: 9e3, host: 'localhost', basepath: '/', buildPath: './build', isStatic: !0},
ae = t => (t ? (t.endsWith('/') ? t : `${t}/`) : '/'),
ce = (t, r) =>
x({...ie, ...t}, async (o, e, s, n) => {
await r?.(o, e, s, n);
ce = (t, s) =>
x({...ie, ...t}, async (o, e, r, n) => {
await s?.(o, e, r, n);
let {basepath: i, buildPath: a} = o;

@@ -272,0 +272,0 @@ (i !== '/' &&