huxy-server 1.0.1 → 1.0.2

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