huxy-server 1.0.6 → 1.0.7
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/package.json +2 -2
- package/src/index.js +72 -72
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "huxy-server",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.7",
|
|
4
4
|
"description": "一个精炼、高性能的 Express.js 服务器模板,为现代 Node.js 应用程序设计,提供灵活的功能和最佳实践。",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"module": "./src/index.js",
|
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
},
|
|
37
37
|
"dependencies": {
|
|
38
38
|
"http-proxy-middleware": "^3.0.5",
|
|
39
|
-
"huxy-node-server": "^1.0.
|
|
39
|
+
"huxy-node-server": "^1.0.5",
|
|
40
40
|
"jsonwebtoken": "^9.0.3"
|
|
41
41
|
},
|
|
42
42
|
"engines": {
|
package/src/index.js
CHANGED
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
import {
|
|
2
|
-
startServer as
|
|
2
|
+
startServer as M,
|
|
3
3
|
startStatic as L,
|
|
4
|
-
logger as
|
|
5
|
-
createLogger as
|
|
6
|
-
dateTime as
|
|
7
|
-
localIPs as
|
|
8
|
-
nodeArgs as
|
|
9
|
-
getEnvConfig as
|
|
10
|
-
checkPort as
|
|
11
|
-
getDirName as
|
|
12
|
-
resolvePath as
|
|
4
|
+
logger as te,
|
|
5
|
+
createLogger as re,
|
|
6
|
+
dateTime as se,
|
|
7
|
+
localIPs as oe,
|
|
8
|
+
nodeArgs as ae,
|
|
9
|
+
getEnvConfig as ne,
|
|
10
|
+
checkPort as ie,
|
|
11
|
+
getDirName as pe,
|
|
12
|
+
resolvePath as ce,
|
|
13
13
|
} from 'huxy-node-server';
|
|
14
|
-
import {createProxyMiddleware as E} from 'http-proxy-middleware';
|
|
15
|
-
import {dateTime as
|
|
14
|
+
import {createProxyMiddleware as E, fixRequestBody as S} from 'http-proxy-middleware';
|
|
15
|
+
import {dateTime as C} from 'huxy-node-server';
|
|
16
16
|
import T from 'jsonwebtoken';
|
|
17
|
-
var
|
|
18
|
-
var
|
|
17
|
+
var m = (r, e = {secret, ...opt}) => T.verify(r, secret, opt);
|
|
18
|
+
var x =
|
|
19
19
|
(r = {}) =>
|
|
20
20
|
(e, t, s) => {
|
|
21
21
|
let o = e.headers.authorization;
|
|
@@ -25,7 +25,7 @@ var y =
|
|
|
25
25
|
let n = o.split(' ')[1];
|
|
26
26
|
if (!n) return (e.log.warn('\u8BA4\u8BC1\u5931\u8D25: \u8BBF\u95EE\u4EE4\u724C\u7F3A\u5931'), t.status(401).json({message: '\u8BBF\u95EE\u4EE4\u724C\u7F3A\u5931'}));
|
|
27
27
|
try {
|
|
28
|
-
let a =
|
|
28
|
+
let a = m(n, r);
|
|
29
29
|
(e.log.info(a, '\u8BA4\u8BC1\u6210\u529F'), (e.user = a), s());
|
|
30
30
|
} catch (a) {
|
|
31
31
|
return a.name === 'TokenExpiredError'
|
|
@@ -46,48 +46,49 @@ var H =
|
|
|
46
46
|
let p = s.headers,
|
|
47
47
|
i = p['x-huxy-auth'] || p['x-api-key'] || p.authorization?.split('Bearer ')[1];
|
|
48
48
|
if ((i && i === a) || r.includes(i)) return n();
|
|
49
|
-
let {secret:
|
|
50
|
-
|
|
49
|
+
let {secret: u, expiresIn: c, algorithm: l, issuer: h} = t;
|
|
50
|
+
x({secret: u, expiresIn: c, algorithm: l, issuer: h})(s, o, n);
|
|
51
51
|
},
|
|
52
|
-
|
|
53
|
-
var v = ['x-
|
|
54
|
-
|
|
52
|
+
y = H;
|
|
53
|
+
var v = ['origin', 'referer', 'x-forwarded-for', 'x-real-ip', 'cf-connecting-ip', 'cf-ipcountry', 'cf-ray', 'x-huxy-auth'],
|
|
54
|
+
$ = ['x-powered-by', 'server'],
|
|
55
|
+
w = (r, e) => {
|
|
55
56
|
let t = new Headers(r);
|
|
56
|
-
return (
|
|
57
|
+
return (v.forEach(s => t.delete(s)), t.set('Host', e), t.set('User-Agent', 'IHUXY-API/1.0'), t);
|
|
57
58
|
},
|
|
58
|
-
|
|
59
|
+
g = r => {
|
|
59
60
|
let e = new Headers(r);
|
|
60
61
|
return (
|
|
61
|
-
|
|
62
|
+
$.forEach(t => e.delete(t)),
|
|
62
63
|
e.set('Access-Control-Allow-Origin', '*'),
|
|
63
64
|
e.set('X-Content-Type-Options', 'nosniff'),
|
|
64
65
|
e.get('content-type')?.includes('text/event-stream') && ((e['Cache-Control'] = 'no-cache, no-transform'), (e.Connection = 'keep-alive'), (e['X-Accel-Buffering'] = 'no')),
|
|
65
66
|
e
|
|
66
67
|
);
|
|
67
68
|
};
|
|
68
|
-
var
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
j = (r, e) => ['/', '/health', e, ...
|
|
73
|
-
var
|
|
69
|
+
var I = r => Object.prototype.toString.call(r).slice(8, -1).toLowerCase(),
|
|
70
|
+
R = r => (I(r) === 'object' ? [r] : Array.isArray(r) ? r : []),
|
|
71
|
+
A = (r, e) => R(r).map(t => ((t.prefix = `${e}${(t.prefix ?? t.name) ? `/${t.name}` : ''}`.replace('//', '/')), t)),
|
|
72
|
+
P = r => (Array.isArray(r) ? r : []).filter(Boolean),
|
|
73
|
+
j = (r, e) => [...new Set(['/', '/health', e, ...(Array.isArray(r) ? r : [])])].filter(Boolean).map(t => `${e}${t}`.replace('//', '/'));
|
|
74
|
+
var k = ({target: r = 'http://', prefix: e, ...t} = {}, s = !1) => ({
|
|
74
75
|
target: r,
|
|
75
|
-
pathRewrite: {[`^${e}`]: ''},
|
|
76
|
+
pathRewrite: e?.length > 1 ? {[`^${e}`]: ''} : void 0,
|
|
76
77
|
changeOrigin: !0,
|
|
77
78
|
selfHandleResponse: !1,
|
|
78
|
-
|
|
79
|
-
!s &&
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
79
|
+
on: {
|
|
80
|
+
proxyReq: (o, n, a) => (!s && w(o.headers, r), S(o, n, a)),
|
|
81
|
+
proxyRes: (o, n, a) => {
|
|
82
|
+
!s && g(o.headers);
|
|
83
|
+
},
|
|
84
|
+
error: (o, n, a) => {
|
|
85
|
+
(n.log.error({err: o}, '\u4EE3\u7406\u9519\u8BEF'), a.headersSent || a.status(502).json({error: '\u7F51\u5173\u9519\u8BEF'}));
|
|
86
|
+
},
|
|
86
87
|
},
|
|
87
88
|
...t,
|
|
88
89
|
}),
|
|
89
|
-
|
|
90
|
-
let t = {status: 'OK', message: `API \u670D\u52A1\u5668\u8FD0\u884C\u4E2D \u{1F449} ${e}`, timestamp:
|
|
90
|
+
O = (r, e) => {
|
|
91
|
+
let t = {status: 'OK', message: `API \u670D\u52A1\u5668\u8FD0\u884C\u4E2D \u{1F449} ${e}`, timestamp: C(), uptime: process.uptime(), memoryUsage: process.memoryUsage()};
|
|
91
92
|
(r.get(e, (s, o) => {
|
|
92
93
|
o.status(200).json(t);
|
|
93
94
|
}),
|
|
@@ -95,22 +96,21 @@ var S = ({target: r = 'http://localhost:11434', prefix: e = '/api', ...t} = {},
|
|
|
95
96
|
o.status(200).json(t);
|
|
96
97
|
}));
|
|
97
98
|
},
|
|
98
|
-
|
|
99
|
-
let {apiPrefix: s, proxys: o = [], whiteAuthKeys: n = [], whitePathList: a = [], preserve: p = !1} = e,
|
|
100
|
-
i =
|
|
99
|
+
W = (r, e = {}, t) => {
|
|
100
|
+
let {apiPrefix: s = '/', proxys: o = [], whiteAuthKeys: n = [], whitePathList: a = [], preserve: p = !1} = e,
|
|
101
|
+
i = A(o, s);
|
|
101
102
|
if (!i.length) return;
|
|
102
|
-
(t.info(`\u{1F4DD} API \u63A5\u53E3\u5730\u5740: ${e.protocol}://${e.host}:${e.port}${s}`),
|
|
103
|
-
let
|
|
104
|
-
i.map(({prefix: c, target: l}) => {
|
|
105
|
-
|
|
106
|
-
(r.use(c, h, E(u)), t.info(`\u2705 \u4EE3\u7406\u4E2D ${c} \u{1F449} ${l}`));
|
|
103
|
+
(t.info(`\u{1F4DD} API \u63A5\u53E3\u5730\u5740: ${e.protocol}://${e.host}:${e.port}${s}`), O(r, s));
|
|
104
|
+
let u = y({whiteAuthKeys: P(n), whitePathList: j(a, s), config: e});
|
|
105
|
+
i.map(({prefix: c, target: l, ...h}) => {
|
|
106
|
+
(r.use(c, u, E(k({prefix: c, target: l, ...h}, p))), t.info(`\u2705 \u4EE3\u7406\u4E2D ${c} \u{1F449} ${l}`));
|
|
107
107
|
});
|
|
108
108
|
},
|
|
109
|
-
|
|
110
|
-
var
|
|
109
|
+
d = W;
|
|
110
|
+
var B = {
|
|
111
111
|
port: parseInt(process.env.PORT || '8080', 10),
|
|
112
112
|
host: process.env.HOST || 'localhost',
|
|
113
|
-
apiPrefix: process.env.API_PREFIX || '/
|
|
113
|
+
apiPrefix: process.env.API_PREFIX || '/',
|
|
114
114
|
authToken: !1,
|
|
115
115
|
proxys: [],
|
|
116
116
|
whitePathList: ['/health'],
|
|
@@ -119,30 +119,30 @@ var O = {
|
|
|
119
119
|
expiresIn: process.env.JWT_EXPIRES_IN || '30d',
|
|
120
120
|
issuer: process.env.JWT_ISSUER || 'huxyApp',
|
|
121
121
|
},
|
|
122
|
-
f =
|
|
123
|
-
var
|
|
124
|
-
|
|
125
|
-
(await e?.(t, s, o, n),
|
|
122
|
+
f = B;
|
|
123
|
+
var U = (r, e) =>
|
|
124
|
+
M({...f, ...r}, async (t, s, o, n) => {
|
|
125
|
+
(await e?.(t, s, o, n), d(s, t, n));
|
|
126
126
|
}),
|
|
127
|
-
|
|
128
|
-
|
|
127
|
+
he = U,
|
|
128
|
+
de = (r, e) =>
|
|
129
129
|
L({...f, ...r}, async (t, s, o, n) => {
|
|
130
|
-
(await e?.(t, s, o, n),
|
|
130
|
+
(await e?.(t, s, o, n), d(s, t, n));
|
|
131
131
|
});
|
|
132
132
|
export {
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
133
|
+
d as appProxy,
|
|
134
|
+
ie as checkPort,
|
|
135
|
+
re as createLogger,
|
|
136
|
+
se as dateTime,
|
|
137
|
+
he as default,
|
|
138
|
+
pe as getDirName,
|
|
139
|
+
ne as getEnvConfig,
|
|
140
|
+
oe as localIPs,
|
|
141
|
+
te as logger,
|
|
142
|
+
ae as nodeArgs,
|
|
143
|
+
ce as resolvePath,
|
|
144
|
+
U as startApp,
|
|
145
|
+
M as startServer,
|
|
146
146
|
L as startStatic,
|
|
147
|
-
|
|
147
|
+
de as startStaticApp,
|
|
148
148
|
};
|