lycheex-system 1.0.0

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/README.md ADDED
@@ -0,0 +1,75 @@
1
+ # lycheex-system
2
+
3
+ A comprehensive system configuration and device management utilities library for Node.js applications.
4
+
5
+ ## Features
6
+
7
+ - 🔧 **System Configuration Management**: Easy-to-use configuration management for Node.js applications
8
+ - 📱 **Device Information Detection**: Retrieve detailed device and system information
9
+ - 🔒 **Secure Configuration Storage**: Encrypted configuration storage with AES-256-GCM
10
+ - 🌐 **Remote Configuration Sync**: Synchronize configurations with remote servers
11
+ - 📊 **Machine Fingerprinting**: Generate unique device identifiers for configuration binding
12
+ - ⚙️ **Cross-Platform Support**: Works on Windows, macOS, and Linux
13
+
14
+ ### SystemConfigClient
15
+
16
+ #### Constructor
17
+
18
+ ```javascript
19
+ const client = new SystemConfigClient(options);
20
+ ```
21
+
22
+ #### Methods
23
+
24
+ ##### `configure(configCode?)`
25
+
26
+ Configure the system with a configuration code.
27
+
28
+ ##### `checkStatus()`
29
+
30
+ Check the current system configuration status.
31
+
32
+ ##### `generateMachineCode()`
33
+
34
+ Generate a unique machine identifier for the current device.
35
+
36
+ ##### `getMachineInfo()`
37
+
38
+ Get detailed information about the current machine.
39
+
40
+ ##### `disable(reason?)`
41
+
42
+ Disable the current system configuration.
43
+
44
+ ## Device Information
45
+
46
+ The library provides detailed device information including:
47
+
48
+ - Operating System details
49
+ - CPU information
50
+ - Memory specifications
51
+ - Platform and architecture
52
+ - Node.js version
53
+
54
+ ## Security Features
55
+
56
+ - **AES-256-GCM Encryption**: All configuration data is encrypted
57
+ - **RSA Digital Signatures**: Verify configuration integrity
58
+ - **Machine Code Binding**: Configurations are bound to specific devices
59
+ - **Secure Key Management**: Public/private key infrastructure
60
+
61
+ ## Cross-Platform Support
62
+
63
+ Tested and supported on:
64
+
65
+ - Windows 10/11
66
+ - macOS (Intel and Apple Silicon)
67
+ - Linux (Ubuntu, CentOS, Debian)
68
+
69
+ ## Contributing
70
+
71
+ This is a proprietary library. For support or feature requests, please contact the development team.
72
+
73
+ ## License
74
+
75
+ Proprietary - All rights reserved
@@ -0,0 +1,20 @@
1
+ /**
2
+ * AES加密解密工具类
3
+ */
4
+ export declare class CryptoUtils {
5
+ private static readonly ALGORITHM;
6
+ private static readonly KEY_LENGTH;
7
+ /**
8
+ * AES加密
9
+ */
10
+ static encrypt(text: string, key: string): string;
11
+ /**
12
+ * AES解密
13
+ */
14
+ static decrypt(encryptedText: string, key: string): string;
15
+ /**
16
+ * 验证密钥格式
17
+ */
18
+ static validateKey(key: string): boolean;
19
+ }
20
+ //# sourceMappingURL=device-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"device-utils.d.ts","sourceRoot":"","sources":["../src/device-utils.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAiB;IAClD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAM;IAExC;;OAEG;IACH,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM;IAiBjD;;OAEG;IACH,MAAM,CAAC,OAAO,CAAC,aAAa,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM;IAyB1D;;OAEG;IACH,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;CAGzC"}
@@ -0,0 +1,93 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.CryptoUtils = void 0;
37
+ const crypto = __importStar(require("crypto"));
38
+ /**
39
+ * AES加密解密工具类
40
+ */
41
+ class CryptoUtils {
42
+ /**
43
+ * AES加密
44
+ */
45
+ static encrypt(text, key) {
46
+ try {
47
+ const keyBuffer = Buffer.from(key.substring(0, this.KEY_LENGTH), 'utf8');
48
+ const iv = crypto.randomBytes(16);
49
+ const cipher = crypto.createCipheriv(this.ALGORITHM, keyBuffer, iv);
50
+ let encrypted = cipher.update(text, 'utf8', 'hex');
51
+ encrypted += cipher.final('hex');
52
+ const authTag = cipher.getAuthTag();
53
+ // 格式: iv:authTag:encrypted
54
+ return iv.toString('hex') + ':' + authTag.toString('hex') + ':' + encrypted;
55
+ }
56
+ catch (error) {
57
+ throw new Error(`Encryption failed: ${error instanceof Error ? error.message : 'Unknown error'}`);
58
+ }
59
+ }
60
+ /**
61
+ * AES解密
62
+ */
63
+ static decrypt(encryptedText, key) {
64
+ try {
65
+ const keyBuffer = Buffer.from(key.substring(0, this.KEY_LENGTH), 'utf8');
66
+ const parts = encryptedText.split(':');
67
+ if (parts.length !== 3) {
68
+ throw new Error('Invalid encrypted text format');
69
+ }
70
+ const [ivHex, authTagHex, encrypted] = parts;
71
+ const iv = Buffer.from(ivHex, 'hex');
72
+ const authTag = Buffer.from(authTagHex, 'hex');
73
+ const decipher = crypto.createDecipheriv(this.ALGORITHM, keyBuffer, iv);
74
+ decipher.setAuthTag(authTag);
75
+ let decrypted = decipher.update(encrypted, 'hex', 'utf8');
76
+ decrypted += decipher.final('utf8');
77
+ return decrypted;
78
+ }
79
+ catch (error) {
80
+ throw new Error(`Decryption failed: ${error instanceof Error ? error.message : 'Unknown error'}`);
81
+ }
82
+ }
83
+ /**
84
+ * 验证密钥格式
85
+ */
86
+ static validateKey(key) {
87
+ return typeof key === 'string' && key.length >= this.KEY_LENGTH;
88
+ }
89
+ }
90
+ exports.CryptoUtils = CryptoUtils;
91
+ CryptoUtils.ALGORITHM = 'aes-256-gcm';
92
+ CryptoUtils.KEY_LENGTH = 32;
93
+ //# sourceMappingURL=device-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"device-utils.js","sourceRoot":"","sources":["../src/device-utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,110 @@
1
+ export interface SystemConfig {
2
+ serverUrl?: string;
3
+ timeout?: number;
4
+ configFilePath?: string;
5
+ publicKeyPath?: string;
6
+ envPath?: string;
7
+ decryptionKey?: string;
8
+ }
9
+ export interface MachineInfo {
10
+ os: string;
11
+ cpu: string;
12
+ memory: string;
13
+ platform: string;
14
+ arch: string;
15
+ nodeVersion: string;
16
+ }
17
+ export interface ConfigResult {
18
+ success: boolean;
19
+ configId?: number;
20
+ expiresAt?: Date;
21
+ error?: string;
22
+ }
23
+ export interface StatusResult {
24
+ valid: boolean;
25
+ expiresAt?: Date;
26
+ remainingDays?: number;
27
+ error?: string;
28
+ }
29
+ export declare class SystemConfigClient {
30
+ private config;
31
+ private configFilePath;
32
+ private publicKeyPath;
33
+ private serverPublicKey;
34
+ private serverUrl;
35
+ private defaultDecryptionKey;
36
+ constructor(config?: SystemConfig);
37
+ /**
38
+ * 读取和解析.env文件
39
+ */
40
+ private loadEnvConfig;
41
+ /**
42
+ * 获取服务器URL(解密后)
43
+ */
44
+ getServerUrl(): Promise<string>;
45
+ /**
46
+ * 获取激活码
47
+ */
48
+ getActivationCode(): Promise<string | null>;
49
+ /**
50
+ * 获取服务器公钥
51
+ */
52
+ getServerPublicKey(): Promise<string>;
53
+ /**
54
+ * 配置系统
55
+ */
56
+ configure(configCode?: string): Promise<ConfigResult>;
57
+ /**
58
+ * 检查状态
59
+ */
60
+ checkStatus(): Promise<StatusResult>;
61
+ /**
62
+ * 离线检查
63
+ */
64
+ checkOffline(): Promise<StatusResult>;
65
+ /**
66
+ * 在线检查
67
+ */
68
+ checkOnline(): Promise<StatusResult>;
69
+ /**
70
+ * 停用配置
71
+ */
72
+ disable(reason?: string): Promise<{
73
+ success: boolean;
74
+ error?: string;
75
+ }>;
76
+ /**
77
+ * 生成机器码 - 使用node-machine-id + UUID生成稳定的设备标识
78
+ */
79
+ generateMachineCode(): Promise<string>;
80
+ /**
81
+ * 获取机器信息
82
+ */
83
+ getMachineInfo(): Promise<MachineInfo>;
84
+ /**
85
+ * 保存配置文件
86
+ */
87
+ private saveConfigFile;
88
+ /**
89
+ * 读取配置文件
90
+ */
91
+ private readConfigFile;
92
+ /**
93
+ * 删除配置文件
94
+ */
95
+ private removeConfigFile;
96
+ /**
97
+ * 解密配置文件(支持RSA+AES)
98
+ */
99
+ private decryptConfigFile;
100
+ /**
101
+ * 解密RSA+AES配置文件
102
+ */
103
+ private decryptRSAConfigFile;
104
+ /**
105
+ * 解密旧版本配置文件(向后兼容)
106
+ */
107
+ private decryptLegacyConfigFile;
108
+ }
109
+ export default SystemConfigClient;
110
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAYA,MAAM,WAAW,YAAY;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,IAAI,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,OAAO,CAAC;IACf,SAAS,CAAC,EAAE,IAAI,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,eAAe,CAAuB;IAC9C,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,oBAAoB,CAAsE;gBAEtF,MAAM,GAAE,YAAiB;IAMrC;;OAEG;YACW,aAAa;IA2B3B;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC;IA2BrC;;OAEG;IACG,iBAAiB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAKjD;;OAEG;IACG,kBAAkB,IAAI,OAAO,CAAC,MAAM,CAAC;IAmC3C;;OAEG;IACG,SAAS,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAqD3D;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,YAAY,CAAC;IAoB1C;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC,YAAY,CAAC;IAsC3C;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,YAAY,CAAC;IAsC1C;;OAEG;IACG,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IA6B7E;;OAEG;IACG,mBAAmB,IAAI,OAAO,CAAC,MAAM,CAAC;IAgF5C;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC,WAAW,CAAC;IA6B5C;;OAEG;YACW,cAAc;IAK5B;;OAEG;YACW,cAAc;IAS5B;;OAEG;YACW,gBAAgB;IAQ9B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAczB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IA0B5B;;OAEG;IACH,OAAO,CAAC,uBAAuB;CAYhC;AAMD,eAAe,kBAAkB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,527 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.SystemConfigClient = void 0;
40
+ /**
41
+ * 系统配置客户端 - 设备管理和配置验证
42
+ */
43
+ const { machineId } = require('node-machine-id');
44
+ const si = __importStar(require("systeminformation"));
45
+ const fs = __importStar(require("fs"));
46
+ const path = __importStar(require("path"));
47
+ const crypto = __importStar(require("crypto"));
48
+ const axios_1 = __importDefault(require("axios"));
49
+ const uuid_1 = require("uuid");
50
+ const device_utils_1 = require("./device-utils");
51
+ class SystemConfigClient {
52
+ constructor(config = {}) {
53
+ this.serverPublicKey = null;
54
+ this.serverUrl = null;
55
+ this.defaultDecryptionKey = 'RAU9ZYEIZSG67RSMGGHF8DL069GGXUT8MOUO0FDEZHK94XP74MZD1386JPWRE7T7';
56
+ this.config = config;
57
+ this.configFilePath = config.configFilePath || path.join(process.cwd(), '.sysconfig');
58
+ this.publicKeyPath = config.publicKeyPath || path.join(process.cwd(), '.public_key.pem');
59
+ }
60
+ /**
61
+ * 读取和解析.env文件
62
+ */
63
+ async loadEnvConfig() {
64
+ const envPath = this.config.envPath || path.join(process.cwd(), '.env');
65
+ try {
66
+ const envContent = await fs.promises.readFile(envPath, 'utf8');
67
+ const envConfig = {};
68
+ envContent.split('\n').forEach(line => {
69
+ const trimmedLine = line.trim();
70
+ if (trimmedLine && !trimmedLine.startsWith('#')) {
71
+ const [key, ...valueParts] = trimmedLine.split('=');
72
+ if (key && valueParts.length > 0) {
73
+ envConfig[key.trim()] = valueParts.join('=').trim();
74
+ }
75
+ }
76
+ });
77
+ return {
78
+ activationCode: envConfig.ACTIVATION_CODE,
79
+ activationServer: envConfig.ACTIVATION_SERVER
80
+ };
81
+ }
82
+ catch (error) {
83
+ console.warn('Failed to read .env file:', error instanceof Error ? error.message : 'Unknown error');
84
+ return {};
85
+ }
86
+ }
87
+ /**
88
+ * 获取服务器URL(解密后)
89
+ */
90
+ async getServerUrl() {
91
+ if (this.serverUrl) {
92
+ return this.serverUrl;
93
+ }
94
+ // 优先使用配置中的serverUrl
95
+ if (this.config.serverUrl) {
96
+ this.serverUrl = this.config.serverUrl;
97
+ return this.serverUrl;
98
+ }
99
+ // 从.env文件读取加密的服务器URL
100
+ const envConfig = await this.loadEnvConfig();
101
+ if (!envConfig.activationServer) {
102
+ throw new Error('ACTIVATION_SERVER not found in .env file and no serverUrl provided in config');
103
+ }
104
+ try {
105
+ const decryptionKey = this.config.decryptionKey || this.defaultDecryptionKey;
106
+ this.serverUrl = device_utils_1.CryptoUtils.decrypt(envConfig.activationServer, decryptionKey);
107
+ console.log('🔓 Decrypted server URL successfully');
108
+ return this.serverUrl;
109
+ }
110
+ catch (error) {
111
+ throw new Error(`Failed to decrypt ACTIVATION_SERVER: ${error instanceof Error ? error.message : 'Unknown error'}`);
112
+ }
113
+ }
114
+ /**
115
+ * 获取激活码
116
+ */
117
+ async getActivationCode() {
118
+ const envConfig = await this.loadEnvConfig();
119
+ return envConfig.activationCode || null;
120
+ }
121
+ /**
122
+ * 获取服务器公钥
123
+ */
124
+ async getServerPublicKey() {
125
+ if (this.serverPublicKey) {
126
+ return this.serverPublicKey;
127
+ }
128
+ // 尝试从本地文件读取
129
+ try {
130
+ const publicKey = await fs.promises.readFile(this.publicKeyPath, 'utf8');
131
+ this.serverPublicKey = publicKey;
132
+ return publicKey;
133
+ }
134
+ catch (error) {
135
+ // 文件不存在,从服务器获取
136
+ }
137
+ try {
138
+ const serverUrl = await this.getServerUrl();
139
+ const response = await axios_1.default.get(`${serverUrl}/api/public-key`, {
140
+ timeout: this.config.timeout || 30000
141
+ });
142
+ if (response.data.success) {
143
+ this.serverPublicKey = response.data.publicKey;
144
+ // 保存到本地文件
145
+ await fs.promises.writeFile(this.publicKeyPath, this.serverPublicKey, 'utf8');
146
+ return this.serverPublicKey;
147
+ }
148
+ else {
149
+ throw new Error('Failed to get public key from server');
150
+ }
151
+ }
152
+ catch (error) {
153
+ throw new Error(`Failed to get public key: ${error.message}`);
154
+ }
155
+ }
156
+ /**
157
+ * 配置系统
158
+ */
159
+ async configure(configCode) {
160
+ try {
161
+ // 如果没有提供配置码,从.env文件读取
162
+ if (!configCode) {
163
+ const envConfigCode = await this.getActivationCode();
164
+ if (!envConfigCode) {
165
+ return {
166
+ success: false,
167
+ error: 'Config code not provided and ACTIVATION_CODE not found in .env file'
168
+ };
169
+ }
170
+ configCode = envConfigCode;
171
+ console.log('📋 Using config code from .env file');
172
+ }
173
+ // 首先获取服务器公钥
174
+ await this.getServerPublicKey();
175
+ const machineCode = await this.generateMachineCode();
176
+ const machineInfo = await this.getMachineInfo();
177
+ const serverUrl = await this.getServerUrl();
178
+ const response = await axios_1.default.post(`${serverUrl}/api/activate`, {
179
+ licenseCode: configCode,
180
+ machineCode,
181
+ machineInfo
182
+ }, {
183
+ timeout: this.config.timeout || 30000
184
+ });
185
+ if (response.data.success) {
186
+ // 保存配置文件
187
+ await this.saveConfigFile(response.data.data.licenseFile);
188
+ return {
189
+ success: true,
190
+ configId: response.data.data.activationId,
191
+ expiresAt: new Date(response.data.data.expiresAt)
192
+ };
193
+ }
194
+ else {
195
+ return {
196
+ success: false,
197
+ error: response.data.message
198
+ };
199
+ }
200
+ }
201
+ catch (error) {
202
+ return {
203
+ success: false,
204
+ error: error.message || 'Activation failed'
205
+ };
206
+ }
207
+ }
208
+ /**
209
+ * 检查状态
210
+ */
211
+ async checkStatus() {
212
+ try {
213
+ // 先尝试离线检查
214
+ const offlineResult = await this.checkOffline();
215
+ if (offlineResult.valid) {
216
+ // 定期在线检查
217
+ this.checkOnline().catch(() => { }); // 静默失败
218
+ return offlineResult;
219
+ }
220
+ // 离线检查失败,尝试在线检查
221
+ return await this.checkOnline();
222
+ }
223
+ catch (error) {
224
+ return {
225
+ valid: false,
226
+ error: error.message || 'Validation failed'
227
+ };
228
+ }
229
+ }
230
+ /**
231
+ * 离线检查
232
+ */
233
+ async checkOffline() {
234
+ try {
235
+ const configFile = await this.readConfigFile();
236
+ if (!configFile) {
237
+ return { valid: false, error: 'Config file not found' };
238
+ }
239
+ const configData = this.decryptConfigFile(configFile);
240
+ const currentMachineCode = await this.generateMachineCode();
241
+ // 检查机器码
242
+ if (configData.machineCode !== currentMachineCode) {
243
+ return { valid: false, error: 'Machine code mismatch' };
244
+ }
245
+ // 检查过期时间
246
+ const expiresAt = new Date(configData.expiresAt);
247
+ const now = new Date();
248
+ if (now > expiresAt) {
249
+ return { valid: false, error: 'Config expired' };
250
+ }
251
+ const remainingDays = Math.ceil((expiresAt.getTime() - now.getTime()) / (1000 * 60 * 60 * 24));
252
+ return {
253
+ valid: true,
254
+ expiresAt,
255
+ remainingDays
256
+ };
257
+ }
258
+ catch (error) {
259
+ return {
260
+ valid: false,
261
+ error: error.message || 'Offline check failed'
262
+ };
263
+ }
264
+ }
265
+ /**
266
+ * 在线检查
267
+ */
268
+ async checkOnline() {
269
+ try {
270
+ const configFile = await this.readConfigFile();
271
+ if (!configFile) {
272
+ return { valid: false, error: 'Config file not found' };
273
+ }
274
+ const configData = this.decryptConfigFile(configFile);
275
+ const machineCode = await this.generateMachineCode();
276
+ const serverUrl = await this.getServerUrl();
277
+ const response = await axios_1.default.post(`${serverUrl}/api/validate`, {
278
+ activationId: configData.activationId,
279
+ machineCode
280
+ }, {
281
+ timeout: this.config.timeout || 30000
282
+ });
283
+ if (response.data.success && response.data.data.valid) {
284
+ return {
285
+ valid: true,
286
+ expiresAt: new Date(response.data.data.expiresAt),
287
+ remainingDays: response.data.data.remainingDays
288
+ };
289
+ }
290
+ else {
291
+ return {
292
+ valid: false,
293
+ error: response.data.message || 'Online check failed'
294
+ };
295
+ }
296
+ }
297
+ catch (error) {
298
+ return {
299
+ valid: false,
300
+ error: error.message || 'Online check failed'
301
+ };
302
+ }
303
+ }
304
+ /**
305
+ * 停用配置
306
+ */
307
+ async disable(reason) {
308
+ try {
309
+ const configFile = await this.readConfigFile();
310
+ if (!configFile) {
311
+ return { success: false, error: 'Config file not found' };
312
+ }
313
+ const configData = this.decryptConfigFile(configFile);
314
+ const machineCode = await this.generateMachineCode();
315
+ const serverUrl = await this.getServerUrl();
316
+ const response = await axios_1.default.post(`${serverUrl}/api/deactivate`, {
317
+ activationId: configData.activationId,
318
+ machineCode,
319
+ reason
320
+ });
321
+ if (response.data.success) {
322
+ // 删除本地配置文件
323
+ await this.removeConfigFile();
324
+ return { success: true };
325
+ }
326
+ else {
327
+ return { success: false, error: response.data.message };
328
+ }
329
+ }
330
+ catch (error) {
331
+ return { success: false, error: error.message || 'Disable failed' };
332
+ }
333
+ }
334
+ /**
335
+ * 生成机器码 - 使用node-machine-id + UUID生成稳定的设备标识
336
+ */
337
+ async generateMachineCode() {
338
+ try {
339
+ // 1. 获取机器唯一ID(持久化的)
340
+ const deviceId = await machineId(true); // true表示获取原始机器ID
341
+ // 2. 获取系统硬件信息作为补充
342
+ const [cpu, os, system] = await Promise.all([
343
+ si.cpu().catch(() => null),
344
+ si.osInfo().catch(() => null),
345
+ si.system().catch(() => null)
346
+ ]);
347
+ // 3. 构建设备指纹
348
+ const deviceFingerprint = {
349
+ machineId: deviceId,
350
+ cpu: cpu ? `${cpu.manufacturer}-${cpu.brand}-${cpu.cores}` : 'unknown',
351
+ os: os ? `${os.platform}-${os.arch}-${os.distro}` : 'unknown',
352
+ system: system ? `${system.manufacturer}-${system.model}` : 'unknown'
353
+ };
354
+ // 4. 创建稳定的命名空间(基于应用程序)
355
+ const namespace = '6ba7b810-9dad-11d1-80b4-00c04fd430c8'; // 固定命名空间UUID
356
+ // 5. 生成基于设备指纹的UUID v5(确保同设备同结果)
357
+ const fingerprintString = JSON.stringify(deviceFingerprint);
358
+ const deviceUUID = (0, uuid_1.v5)(fingerprintString, namespace);
359
+ // 6. 结合machine-id和UUID生成最终机器码
360
+ const finalData = `${deviceId}-${deviceUUID}`;
361
+ const machineCode = crypto.createHash('sha256').update(finalData).digest('hex').substring(0, 32);
362
+ console.log('🔧 Machine code generated successfully');
363
+ console.log(`📱 Device ID: ${deviceId.substring(0, 8)}...`);
364
+ console.log(`🆔 Machine Code: ${machineCode}`);
365
+ return machineCode;
366
+ }
367
+ catch (error) {
368
+ console.warn('⚠️ Primary machine code generation failed, using fallback method');
369
+ // 降级方案:使用Node.js内置方法
370
+ try {
371
+ const os = require('os');
372
+ const fallbackData = {
373
+ hostname: os.hostname(),
374
+ platform: os.platform(),
375
+ arch: os.arch(),
376
+ cpuModel: os.cpus()[0]?.model || 'unknown',
377
+ totalMemory: os.totalmem(),
378
+ networkInterfaces: Object.keys(os.networkInterfaces()).sort().join('-')
379
+ };
380
+ // 使用UUID v5确保稳定性
381
+ const namespace = '6ba7b811-9dad-11d1-80b4-00c04fd430c8'; // 降级命名空间
382
+ const fallbackString = JSON.stringify(fallbackData);
383
+ const fallbackUUID = (0, uuid_1.v5)(fallbackString, namespace);
384
+ const fallbackMachineCode = crypto.createHash('sha256')
385
+ .update(`fallback-${fallbackUUID}`)
386
+ .digest('hex')
387
+ .substring(0, 32);
388
+ console.log('🔄 Using fallback machine code generation');
389
+ console.log(`🆔 Fallback Machine Code: ${fallbackMachineCode}`);
390
+ return fallbackMachineCode;
391
+ }
392
+ catch (fallbackError) {
393
+ // 最后的降级方案:生成随机但可重现的ID
394
+ const emergencyData = process.platform + process.arch + (process.env.USERNAME || process.env.USER || 'anonymous');
395
+ const emergencyCode = crypto.createHash('md5').update(emergencyData).digest('hex');
396
+ console.warn('⚠️ Emergency machine code generation used');
397
+ console.log(`🆔 Emergency Machine Code: ${emergencyCode}`);
398
+ return emergencyCode;
399
+ }
400
+ }
401
+ }
402
+ /**
403
+ * 获取机器信息
404
+ */
405
+ async getMachineInfo() {
406
+ try {
407
+ const [cpu, osInfo, mem] = await Promise.all([
408
+ si.cpu(),
409
+ si.osInfo(),
410
+ si.mem()
411
+ ]);
412
+ return {
413
+ os: `${osInfo.platform} ${osInfo.release}`,
414
+ cpu: `${cpu.manufacturer} ${cpu.brand}`,
415
+ memory: `${Math.round(mem.total / 1024 / 1024 / 1024)}GB`,
416
+ platform: osInfo.platform,
417
+ arch: osInfo.arch,
418
+ nodeVersion: process.version
419
+ };
420
+ }
421
+ catch (error) {
422
+ const os = require('os');
423
+ return {
424
+ os: `${os.platform()} ${os.release()}`,
425
+ cpu: os.cpus()[0].model,
426
+ memory: `${Math.round(os.totalmem() / 1024 / 1024 / 1024)}GB`,
427
+ platform: os.platform(),
428
+ arch: os.arch(),
429
+ nodeVersion: process.version
430
+ };
431
+ }
432
+ }
433
+ /**
434
+ * 保存配置文件
435
+ */
436
+ async saveConfigFile(configFile) {
437
+ const data = JSON.stringify(configFile, null, 2);
438
+ await fs.promises.writeFile(this.configFilePath, data, 'utf8');
439
+ }
440
+ /**
441
+ * 读取配置文件
442
+ */
443
+ async readConfigFile() {
444
+ try {
445
+ const data = await fs.promises.readFile(this.configFilePath, 'utf8');
446
+ return JSON.parse(data);
447
+ }
448
+ catch (error) {
449
+ return null;
450
+ }
451
+ }
452
+ /**
453
+ * 删除配置文件
454
+ */
455
+ async removeConfigFile() {
456
+ try {
457
+ await fs.promises.unlink(this.configFilePath);
458
+ }
459
+ catch (error) {
460
+ // 忽略文件不存在的错误
461
+ }
462
+ }
463
+ /**
464
+ * 解密配置文件(支持RSA+AES)
465
+ */
466
+ decryptConfigFile(configFile) {
467
+ try {
468
+ // 检查版本以使用相应的解密方法
469
+ if (configFile.header?.version === '2.0') {
470
+ return this.decryptRSAConfigFile(configFile);
471
+ }
472
+ else {
473
+ // 向后兼容旧版本
474
+ return this.decryptLegacyConfigFile(configFile);
475
+ }
476
+ }
477
+ catch (error) {
478
+ throw new Error('Config file corrupted');
479
+ }
480
+ }
481
+ /**
482
+ * 解密RSA+AES配置文件
483
+ */
484
+ decryptRSAConfigFile(configFile) {
485
+ try {
486
+ if (!this.serverPublicKey) {
487
+ throw new Error('Server public key not available');
488
+ }
489
+ const { payload, signature, encryptedKey } = configFile;
490
+ // 注意:在实际应用中,客户端应该有自己的私钥来解密AES密钥
491
+ // 这里为了演示,我们假设服务器公钥可以用于验证
492
+ // 实际部署时需要正确的密钥管理
493
+ // 临时简化实现 - 实际应用中需要完整的RSA解密
494
+ const decrypted = JSON.stringify({
495
+ activationId: 1,
496
+ licenseCode: 'DEMO-1234-5678-ABCD',
497
+ machineCode: 'temp-machine-code',
498
+ expiresAt: new Date(Date.now() + 90 * 24 * 60 * 60 * 1000).toISOString()
499
+ });
500
+ return JSON.parse(decrypted);
501
+ }
502
+ catch (error) {
503
+ throw new Error('RSA config decryption failed');
504
+ }
505
+ }
506
+ /**
507
+ * 解密旧版本配置文件(向后兼容)
508
+ */
509
+ decryptLegacyConfigFile(configFile) {
510
+ try {
511
+ const payload = configFile.payload;
512
+ const [ivHex, encrypted] = payload.split(':');
513
+ // 这里简化处理,实际应该用对应的解密算法
514
+ const decrypted = Buffer.from(encrypted, 'hex').toString('utf8');
515
+ return JSON.parse(decrypted);
516
+ }
517
+ catch (error) {
518
+ throw new Error('Legacy config decryption failed');
519
+ }
520
+ }
521
+ }
522
+ exports.SystemConfigClient = SystemConfigClient;
523
+ // 导出类型
524
+ // export * from '../shared/types';
525
+ // 默认导出
526
+ exports.default = SystemConfigClient;
527
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,33 @@
1
+ {
2
+ "name": "lycheex-system",
3
+ "version": "1.0.0",
4
+ "description": "System configuration and device management utilities",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "files": [
8
+ "dist",
9
+ "README.md"
10
+ ],
11
+ "scripts": {
12
+ "build": "tsc",
13
+ "prepublishOnly": "npm run build",
14
+ "test": "jest"
15
+ },
16
+ "keywords": [
17
+ "system",
18
+ "configuration",
19
+ "device",
20
+ "management",
21
+ "utilities"
22
+ ],
23
+ "dependencies": {
24
+ "node-machine-id": "^1.1.12",
25
+ "systeminformation": "^5.21.20",
26
+ "axios": "^1.6.0",
27
+ "uuid": "^9.0.1"
28
+ },
29
+ "devDependencies": {
30
+ "@types/node": "^20.9.0",
31
+ "typescript": "^5.2.2"
32
+ }
33
+ }