lz-nframe 1.0.1 → 1.0.3

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.
@@ -11,7 +11,7 @@
11
11
 
12
12
  获取配置时的顺序:【动态配置】->【本地配置】->【默认配置】
13
13
  *******************************************************************************/
14
- import { NestedKeyOf, ValueAtPath } from './NType';
14
+ import { NestedKeyOf, ValueAtPath } from './NType.js';
15
15
  export default class NConfigsMgr<T extends object> {
16
16
  get configs(): T;
17
17
  private defaultConfigs;
@@ -0,0 +1,55 @@
1
+ /*******************************************************************************
2
+ 文件: NCrypto.ts
3
+ 创建: 2026年05月10日
4
+ 作者: 老张
5
+ 描述:
6
+ 常用编码与摘要工具:Base64、RC4 流密码、MD5/SHA1/SHA256。
7
+ 说明:RC4 已过时,仅建议用于兼容旧协议;新系统请使用现代 AEAD 算法。
8
+ *******************************************************************************/
9
+ /// <reference types="node" resolution-mode="require"/>
10
+ /** 可参与编码或摘要的二进制或文本输入(文本按 UTF-8 编码为字节) */
11
+ export type NCryptoInput = string | Buffer | Uint8Array;
12
+ export default class NCrypto {
13
+ /**
14
+ * 将数据编码为 Base64 字符串。
15
+ */
16
+ static base64Encode(data: NCryptoInput): string;
17
+ /**
18
+ * 将 Base64 字符串解码。
19
+ * @param asUtf8 为 true 时返回 UTF-8 文本;默认返回 Buffer 便于承载任意二进制。
20
+ */
21
+ static base64Decode(b64: string): Buffer;
22
+ static base64Decode(b64: string, asUtf8: true): string;
23
+ /**
24
+ * RC4 加密(流密码:与解密使用同一变换)。
25
+ */
26
+ static rc4Encrypt(data: NCryptoInput, key: NCryptoInput): Buffer;
27
+ /**
28
+ * RC4 解密(与加密相同,满足对称语义)。
29
+ */
30
+ static rc4Decrypt(data: NCryptoInput, key: NCryptoInput): Buffer;
31
+ /**
32
+ * MD5 摘要,返回小写十六进制字符串。
33
+ */
34
+ static md5(data: NCryptoInput): string;
35
+ /**
36
+ * SHA-1 摘要,返回小写十六进制字符串。
37
+ */
38
+ static sha1(data: NCryptoInput): string;
39
+ /**
40
+ * SHA-256 摘要,返回小写十六进制字符串。
41
+ */
42
+ static sha256(data: NCryptoInput): string;
43
+ /**
44
+ * 统一将输入转为 Buffer:字符串按 UTF-8,Buffer/Uint8Array 原样拷贝视图。
45
+ */
46
+ private static toBuffer;
47
+ /**
48
+ * 纯算法 RC4:KSA 初始化 S 盒,PRGA 生成密钥流并与数据异或。
49
+ */
50
+ private static rc4Transform;
51
+ /**
52
+ * Node crypto 摘要,输出 hex。
53
+ */
54
+ private static hashHex;
55
+ }
package/lib/NCrypto.js ADDED
@@ -0,0 +1,108 @@
1
+ /*******************************************************************************
2
+ 文件: NCrypto.ts
3
+ 创建: 2026年05月10日
4
+ 作者: 老张
5
+ 描述:
6
+ 常用编码与摘要工具:Base64、RC4 流密码、MD5/SHA1/SHA256。
7
+ 说明:RC4 已过时,仅建议用于兼容旧协议;新系统请使用现代 AEAD 算法。
8
+ *******************************************************************************/
9
+ import { createHash } from 'node:crypto';
10
+ export default class NCrypto {
11
+ /**
12
+ * 将数据编码为 Base64 字符串。
13
+ */
14
+ static base64Encode(data) {
15
+ return NCrypto.toBuffer(data).toString('base64');
16
+ }
17
+ static base64Decode(b64, asUtf8) {
18
+ const buf = Buffer.from(b64, 'base64');
19
+ if (asUtf8 === true) {
20
+ return buf.toString('utf8');
21
+ }
22
+ return buf;
23
+ }
24
+ /**
25
+ * RC4 加密(流密码:与解密使用同一变换)。
26
+ */
27
+ static rc4Encrypt(data, key) {
28
+ const dataBuf = NCrypto.toBuffer(data);
29
+ const keyBuf = NCrypto.toBuffer(key);
30
+ if (keyBuf.length === 0) {
31
+ throw new Error('RC4 密钥长度不能为 0');
32
+ }
33
+ return NCrypto.rc4Transform(dataBuf, keyBuf);
34
+ }
35
+ /**
36
+ * RC4 解密(与加密相同,满足对称语义)。
37
+ */
38
+ static rc4Decrypt(data, key) {
39
+ return NCrypto.rc4Encrypt(data, key);
40
+ }
41
+ /**
42
+ * MD5 摘要,返回小写十六进制字符串。
43
+ */
44
+ static md5(data) {
45
+ return NCrypto.hashHex('md5', data);
46
+ }
47
+ /**
48
+ * SHA-1 摘要,返回小写十六进制字符串。
49
+ */
50
+ static sha1(data) {
51
+ return NCrypto.hashHex('sha1', data);
52
+ }
53
+ /**
54
+ * SHA-256 摘要,返回小写十六进制字符串。
55
+ */
56
+ static sha256(data) {
57
+ return NCrypto.hashHex('sha256', data);
58
+ }
59
+ /**
60
+ * 统一将输入转为 Buffer:字符串按 UTF-8,Buffer/Uint8Array 原样拷贝视图。
61
+ */
62
+ static toBuffer(data) {
63
+ if (typeof data === 'string') {
64
+ return Buffer.from(data, 'utf8');
65
+ }
66
+ if (Buffer.isBuffer(data)) {
67
+ return data;
68
+ }
69
+ return Buffer.from(data);
70
+ }
71
+ /**
72
+ * 纯算法 RC4:KSA 初始化 S 盒,PRGA 生成密钥流并与数据异或。
73
+ */
74
+ static rc4Transform(data, key) {
75
+ const s = new Uint8Array(256);
76
+ for (let i = 0; i < 256; i++) {
77
+ s[i] = i;
78
+ }
79
+ let j = 0;
80
+ for (let i = 0; i < 256; i++) {
81
+ j = (j + s[i] + key[i % key.length]) % 256;
82
+ const si = s[i];
83
+ s[i] = s[j];
84
+ s[j] = si;
85
+ }
86
+ let i = 0;
87
+ j = 0;
88
+ const out = Buffer.alloc(data.length);
89
+ for (let k = 0; k < data.length; k++) {
90
+ i = (i + 1) % 256;
91
+ j = (j + s[i]) % 256;
92
+ const si = s[i];
93
+ s[i] = s[j];
94
+ s[j] = si;
95
+ const t = (s[i] + s[j]) % 256;
96
+ out[k] = data[k] ^ s[t];
97
+ }
98
+ return out;
99
+ }
100
+ /**
101
+ * Node crypto 摘要,输出 hex。
102
+ */
103
+ static hashHex(algorithm, data) {
104
+ const buf = NCrypto.toBuffer(data);
105
+ // 使用 Uint8Array 视图满足当前 @types/node 下 Hash.update 对 BinaryLike 的推导
106
+ return createHash(algorithm).update(new Uint8Array(buf)).digest('hex');
107
+ }
108
+ }
package/lib/NWSClient.js CHANGED
@@ -22,7 +22,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
22
22
  };
23
23
  import { EventEmitter } from 'events';
24
24
  import WebSocket from 'ws';
25
- import { NWSSocket } from './NWSSocket';
25
+ import { NWSSocket } from './NWSSocket.js';
26
26
  class NWSClient extends EventEmitter {
27
27
  get connected() {
28
28
  return this._connected;
@@ -14,7 +14,7 @@ websocket事件:
14
14
  /// <reference types="node" resolution-mode="require"/>
15
15
  /// <reference types="node" resolution-mode="require"/>
16
16
  import { EventEmitter } from 'events';
17
- import { NWSSocket } from './NWSSocket';
17
+ import { NWSSocket } from './NWSSocket.js';
18
18
  export default class NWSServer extends EventEmitter {
19
19
  static EventError: string;
20
20
  static EventServiceStarted: string;
package/lib/NWSServer.js CHANGED
@@ -12,9 +12,9 @@ websocket事件:
12
12
  ✦onmessage 接收到消息
13
13
  *******************************************************************************/
14
14
  import { EventEmitter } from 'events';
15
- import WebSocket from 'ws'; // 1. 替换导入
16
- import { NWSSocket } from './NWSSocket';
17
- import NHttpClient from './NHttpClient';
15
+ import WebSocket, { WebSocketServer } from 'ws';
16
+ import { NWSSocket } from './NWSSocket.js';
17
+ import NHttpClient from './NHttpClient.js';
18
18
  class NWSServer extends EventEmitter {
19
19
  constructor(params) {
20
20
  super();
@@ -28,7 +28,7 @@ class NWSServer extends EventEmitter {
28
28
  this.wsServer.close();
29
29
  this.wsServer = null;
30
30
  }
31
- this.wsServer = new WebSocket.Server({
31
+ this.wsServer = new WebSocketServer({
32
32
  port,
33
33
  host,
34
34
  WebSocket: NWSSocket,
@@ -83,8 +83,8 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
83
83
  });
84
84
  };
85
85
  import { EventEmitter } from 'events';
86
- import NWSClient from './NWSClient';
87
- import NWSServer from './NWSServer';
86
+ import NWSClient from './NWSClient.js';
87
+ import NWSServer from './NWSServer.js';
88
88
  class NWSServiceHub extends EventEmitter {
89
89
  constructor(options) {
90
90
  super();
@@ -24,7 +24,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
24
24
  });
25
25
  };
26
26
  import { EventEmitter } from 'events';
27
- import NWSClient from './NWSClient';
27
+ import NWSClient from './NWSClient.js';
28
28
  /** 与 NWSUserMgrJ 配套的 JSON WebSocket 客户端 */
29
29
  class NWSUserClientJ extends EventEmitter {
30
30
  /** 是否已与服务器建立 WebSocket(不代表已完成 _si_ 验证) */
@@ -28,7 +28,7 @@ TODO 复用http服务端口,https://blog.csdn.net/qq_44856695/article/details/
28
28
  *******************************************************************************/
29
29
  /// <reference types="node" resolution-mode="require"/>
30
30
  import { EventEmitter } from 'events';
31
- import NWSServer from './NWSServer';
31
+ import NWSServer from './NWSServer.js';
32
32
  /** 基于NWSServer的实时联网用户管理,通信格式使用json */
33
33
  export default class NWSUserMgrJ extends EventEmitter {
34
34
  /** 用户掉线,已考虑超时问题,如果设置超时非0,则socket掉线会等候用户重连,重连成功不认定掉线 */
@@ -27,7 +27,7 @@
27
27
  TODO 复用http服务端口,https://blog.csdn.net/qq_44856695/article/details/120250286
28
28
  *******************************************************************************/
29
29
  import { EventEmitter } from 'events';
30
- import NWSServer from './NWSServer';
30
+ import NWSServer from './NWSServer.js';
31
31
  import NUtils from 'lz-nutils';
32
32
  /** 基于NWSServer的实时联网用户管理,通信格式使用json */
33
33
  class NWSUserMgrJ extends EventEmitter {
package/lib/index.d.ts ADDED
@@ -0,0 +1,24 @@
1
+ /*******************************************************************************
2
+ 文件: index.ts
3
+ 描述:
4
+ 包聚合导出:发布后可通过 import from 'lz-nframe' 引用下列公开 API;
5
+ 仍支持子路径 import 'lz-nframe/lib/xxx.js'(见 package.json exports)。
6
+ *******************************************************************************/
7
+ export { default as NApp } from './NApp.js';
8
+ export { default as NConfigsMgr } from './NConfigsMgr.js';
9
+ export { default as NHttpClient } from './NHttpClient.js';
10
+ export type { ApiResult } from './NHttpClient.js';
11
+ export { default as NSimpleHttpServer, ContentType } from './NSimpleHttpServer.js';
12
+ export type { SimplePage } from './NSimpleHttpServer.js';
13
+ export { NWSSocket } from './NWSSocket.js';
14
+ export { default as NWSClient } from './NWSClient.js';
15
+ export { default as NWSServer } from './NWSServer.js';
16
+ export { default as NWSServiceHub } from './NWSServiceHub.js';
17
+ export type { NWSServiceHubOptions, NWSServicePeerConfig } from './NWSServiceHub.js';
18
+ export { default as NWSUserClientJ } from './NWSUserClientJ.js';
19
+ export { default as NWSUserMgrJ } from './NWSUserMgrJ.js';
20
+ export type { NestedKeyOf, PlainType, PlainValue, ValueAtPath } from './NType.js';
21
+ export { default as NCrypto } from './NCrypto.js';
22
+ export type { NCryptoInput } from './NCrypto.js';
23
+ /** 与旧版 main 指向 NApp.js 一致:默认导出仍为 NApp */
24
+ export { default } from './NApp.js';
package/lib/index.js ADDED
@@ -0,0 +1,19 @@
1
+ /*******************************************************************************
2
+ 文件: index.ts
3
+ 描述:
4
+ 包聚合导出:发布后可通过 import from 'lz-nframe' 引用下列公开 API;
5
+ 仍支持子路径 import 'lz-nframe/lib/xxx.js'(见 package.json exports)。
6
+ *******************************************************************************/
7
+ export { default as NApp } from './NApp.js';
8
+ export { default as NConfigsMgr } from './NConfigsMgr.js';
9
+ export { default as NHttpClient } from './NHttpClient.js';
10
+ export { default as NSimpleHttpServer, ContentType } from './NSimpleHttpServer.js';
11
+ export { NWSSocket } from './NWSSocket.js';
12
+ export { default as NWSClient } from './NWSClient.js';
13
+ export { default as NWSServer } from './NWSServer.js';
14
+ export { default as NWSServiceHub } from './NWSServiceHub.js';
15
+ export { default as NWSUserClientJ } from './NWSUserClientJ.js';
16
+ export { default as NWSUserMgrJ } from './NWSUserMgrJ.js';
17
+ export { default as NCrypto } from './NCrypto.js';
18
+ /** 与旧版 main 指向 NApp.js 一致:默认导出仍为 NApp */
19
+ export { default } from './NApp.js';
package/package.json CHANGED
@@ -1,13 +1,22 @@
1
1
  {
2
2
  "name": "lz-nframe",
3
- "version": "1.0.1",
3
+ "version": "1.0.3",
4
4
  "description": "",
5
5
  "type": "module",
6
- "main": "./lib/NApp.js",
6
+ "main": "./lib/index.js",
7
+ "types": "./lib/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./lib/index.d.ts",
11
+ "import": "./lib/index.js",
12
+ "default": "./lib/index.js"
13
+ },
14
+ "./lib/*": "./lib/*"
15
+ },
7
16
  "scripts": {
8
17
  "build": "tsc",
9
- "test": "node --import tsx --test test/NConfigsMgr.test.ts test/NHttpClient.test.ts test/NWSClient.test.ts test/NWSUserClientJ.test.ts test/NWSServiceHub.test.ts",
10
- "test:watch": "node --import tsx --test --watch test/NConfigsMgr.test.ts test/NHttpClient.test.ts test/NWSClient.test.ts test/NWSUserClientJ.test.ts test/NWSServiceHub.test.ts"
18
+ "test": "node --import tsx --test test/NConfigsMgr.test.ts test/NHttpClient.test.ts test/NWSClient.test.ts test/NWSUserClientJ.test.ts test/NWSServiceHub.test.ts test/NCrypto.test.ts",
19
+ "test:watch": "node --import tsx --test --watch test/NConfigsMgr.test.ts test/NHttpClient.test.ts test/NWSClient.test.ts test/NWSUserClientJ.test.ts test/NWSServiceHub.test.ts test/NCrypto.test.ts"
11
20
  },
12
21
  "author": "",
13
22
  "license": "ISC",