huxy-server 1.0.5 → 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.
Files changed (2) hide show
  1. package/package.json +2 -2
  2. package/src/index.js +71 -70
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "huxy-server",
3
- "version": "1.0.5",
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.3",
39
+ "huxy-node-server": "^1.0.5",
40
40
  "jsonwebtoken": "^9.0.3"
41
41
  },
42
42
  "engines": {
package/src/index.js CHANGED
@@ -1,20 +1,20 @@
1
1
  import {
2
- startServer as W,
2
+ startServer as M,
3
3
  startStatic as L,
4
- logger as q,
5
- createLogger as ee,
6
- dateTime as te,
7
- localIPs as re,
8
- nodeArgs as se,
9
- getEnvConfig as oe,
10
- checkPort as ae,
11
- getDirName as ne,
12
- resolvePath as ie,
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 I} from 'http-proxy-middleware';
15
- import {dateTime as $} from 'huxy-node-server';
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 f = (r, e = {secret, ...opt}) => T.verify(r, secret, opt);
17
+ var m = (r, e = {secret, ...opt}) => T.verify(r, secret, opt);
18
18
  var x =
19
19
  (r = {}) =>
20
20
  (e, t, s) => {
@@ -25,7 +25,7 @@ var x =
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 = f(n, r);
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'
@@ -37,56 +37,58 @@ var x =
37
37
  : (e.log.warn({err: a, ip: e.ip}, '\u8BA4\u8BC1\u5931\u8D25: \u5185\u90E8\u670D\u52A1\u5668\u9519\u8BEF'), t.status(500).json({message: '\u5185\u90E8\u670D\u52A1\u5668\u9519\u8BEF'}));
38
38
  }
39
39
  };
40
- var v =
40
+ var H =
41
41
  ({whiteAuthKeys: r = [], whiteAuthPaths: e = [], config: t = {}}) =>
42
42
  (s, o, n) => {
43
43
  if (s.method === 'OPTIONS' || e.includes(s.path)) return n();
44
44
  let {authToken: a} = t;
45
45
  if (a === !1 || a === 'false') return n();
46
- let i = s.headers['x-huxy-auth'] || s.headers['x-api-key'];
46
+ let p = s.headers,
47
+ i = p['x-huxy-auth'] || p['x-api-key'] || p.authorization?.split('Bearer ')[1];
47
48
  if ((i && i === a) || r.includes(i)) return n();
48
- let {secret: c, expiresIn: l, algorithm: p, issuer: h} = t;
49
- x({secret: c, expiresIn: l, algorithm: p, issuer: h})(s, o, n);
49
+ let {secret: u, expiresIn: c, algorithm: l, issuer: h} = t;
50
+ x({secret: u, expiresIn: c, algorithm: l, issuer: h})(s, o, n);
50
51
  },
51
- y = v;
52
- var H = ['x-powered-by', 'server'],
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'],
53
55
  w = (r, e) => {
54
56
  let t = new Headers(r);
55
- return (headersToRemove.forEach(s => t.delete(s)), t.set('Host', e), t.set('User-Agent', 'IHUXY-API/1.0'), t);
57
+ return (v.forEach(s => t.delete(s)), t.set('Host', e), t.set('User-Agent', 'IHUXY-API/1.0'), t);
56
58
  },
57
59
  g = r => {
58
60
  let e = new Headers(r);
59
61
  return (
60
- H.forEach(t => e.delete(t)),
62
+ $.forEach(t => e.delete(t)),
61
63
  e.set('Access-Control-Allow-Origin', '*'),
62
64
  e.set('X-Content-Type-Options', 'nosniff'),
63
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')),
64
66
  e
65
67
  );
66
68
  };
67
- var R = r => Object.prototype.toString.call(r).slice(8, -1).toLowerCase(),
68
- E = r => (R(r) === 'object' ? [r] : Array.isArray(r) ? r : []),
69
- A = (r, e) => E(r).map(t => ((t.prefix = `${e}${t.prefix ?? `/${t.name}`}`.replace('//', '/')), t)),
70
- u = r => (Array.isArray(r) ? r : []).filter(Boolean),
71
- P = (r, e) => ['/', '/health', e, ...u(r)].map(t => `${e}${t}`.replace('//', '/'));
72
- var S = ({target: r = 'http://localhost:11434', prefix: e = '/api', ...t} = {}, s = !1) => ({
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) => ({
73
75
  target: r,
74
- pathRewrite: {[`^${e}`]: ''},
76
+ pathRewrite: e?.length > 1 ? {[`^${e}`]: ''} : void 0,
75
77
  changeOrigin: !0,
76
78
  selfHandleResponse: !1,
77
- onProxyReq: (o, n, a) => {
78
- !s && w(o.headers, r);
79
- },
80
- onProxyRes: (o, n, a) => {
81
- !s && g(o.headers);
82
- },
83
- onError: (o, n, a) => {
84
- (n.log.error({err: o}, '\u4EE3\u7406\u9519\u8BEF'), a.headersSent || a.status(502).json({error: '\u7F51\u5173\u9519\u8BEF'}));
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
+ },
85
87
  },
86
88
  ...t,
87
89
  }),
88
- k = (r, e) => {
89
- let t = {status: 'OK', message: `API \u670D\u52A1\u5668\u8FD0\u884C\u4E2D \u{1F449} ${e}`, timestamp: $(), uptime: process.uptime(), memoryUsage: process.memoryUsage()};
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()};
90
92
  (r.get(e, (s, o) => {
91
93
  o.status(200).json(t);
92
94
  }),
@@ -94,54 +96,53 @@ var S = ({target: r = 'http://localhost:11434', prefix: e = '/api', ...t} = {},
94
96
  o.status(200).json(t);
95
97
  }));
96
98
  },
97
- C = (r, e = {}, t) => {
98
- let {apiPrefix: s, proxys: o = [], whiteAuthKeys: n = [], whitePathList: a = [], preserve: i = !1} = e,
99
- c = A(o, s);
100
- if (!c.length) return;
101
- (t.info(`\u{1F4DD} API \u63A5\u53E3\u5730\u5740: http://${e.host}:${e.port}${s}`), k(r, s));
102
- let l = y({whiteAuthKeys: u(n), whitePathList: P(a, s), config: e});
103
- c.map(({prefix: p, target: h}) => {
104
- let j = S({prefix: p, target: h}, i);
105
- (r.use(p, l, I(j)), t.info(`\u2705 \u4EE3\u7406\u4E2D ${p} \u{1F449} ${h}`));
99
+ W = (r, e = {}, t) => {
100
+ let {apiPrefix: s = '/', proxys: o = [], whiteAuthKeys: n = [], whitePathList: a = [], preserve: p = !1} = e,
101
+ i = A(o, s);
102
+ if (!i.length) return;
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}`));
106
107
  });
107
108
  },
108
- d = C;
109
- var O = {
109
+ d = W;
110
+ var B = {
110
111
  port: parseInt(process.env.PORT || '8080', 10),
111
112
  host: process.env.HOST || 'localhost',
112
- apiPrefix: process.env.API_PREFIX || '/api',
113
+ apiPrefix: process.env.API_PREFIX || '/',
113
114
  authToken: !1,
114
115
  proxys: [],
115
116
  whitePathList: ['/health'],
116
117
  algorithm: 'HS256',
117
- secret: process.env.JWT_SECRET || 'ah.yiru@gmail.com',
118
+ secret: process.env.JWT_SECRET || 'hy123',
118
119
  expiresIn: process.env.JWT_EXPIRES_IN || '30d',
119
120
  issuer: process.env.JWT_ISSUER || 'huxyApp',
120
121
  },
121
- m = O;
122
- var M = (r, e) =>
123
- W({...m, ...r}, async (t, s, o, n) => {
122
+ f = B;
123
+ var U = (r, e) =>
124
+ M({...f, ...r}, async (t, s, o, n) => {
124
125
  (await e?.(t, s, o, n), d(s, t, n));
125
126
  }),
126
- he = M,
127
- le = (r, e) =>
128
- L({...m, ...r}, async (t, s, o, n) => {
127
+ he = U,
128
+ de = (r, e) =>
129
+ L({...f, ...r}, async (t, s, o, n) => {
129
130
  (await e?.(t, s, o, n), d(s, t, n));
130
131
  });
131
132
  export {
132
133
  d as appProxy,
133
- ae as checkPort,
134
- ee as createLogger,
135
- te as dateTime,
134
+ ie as checkPort,
135
+ re as createLogger,
136
+ se as dateTime,
136
137
  he as default,
137
- ne as getDirName,
138
- oe as getEnvConfig,
139
- re as localIPs,
140
- q as logger,
141
- se as nodeArgs,
142
- ie as resolvePath,
143
- M as startApp,
144
- W as startServer,
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,
145
146
  L as startStatic,
146
- le as startStaticApp,
147
+ de as startStaticApp,
147
148
  };