hikvision-cli 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/dist/commands/binding.d.ts +6 -0
- package/dist/commands/binding.d.ts.map +1 -0
- package/dist/commands/binding.js +274 -0
- package/dist/commands/binding.js.map +1 -0
- package/dist/commands/card.d.ts +6 -0
- package/dist/commands/card.d.ts.map +1 -0
- package/dist/commands/card.js +259 -0
- package/dist/commands/card.js.map +1 -0
- package/dist/commands/group.d.ts +6 -0
- package/dist/commands/group.d.ts.map +1 -0
- package/dist/commands/group.js +87 -0
- package/dist/commands/group.js.map +1 -0
- package/dist/commands/org.d.ts +6 -0
- package/dist/commands/org.d.ts.map +1 -0
- package/dist/commands/org.js +248 -0
- package/dist/commands/org.js.map +1 -0
- package/dist/commands/person.d.ts +6 -0
- package/dist/commands/person.d.ts.map +1 -0
- package/dist/commands/person.js +563 -0
- package/dist/commands/person.js.map +1 -0
- package/dist/commands/service.d.ts +6 -0
- package/dist/commands/service.d.ts.map +1 -0
- package/dist/commands/service.js +153 -0
- package/dist/commands/service.js.map +1 -0
- package/dist/commands/sync.d.ts +6 -0
- package/dist/commands/sync.d.ts.map +1 -0
- package/dist/commands/sync.js +138 -0
- package/dist/commands/sync.js.map +1 -0
- package/dist/commands/system.d.ts +6 -0
- package/dist/commands/system.d.ts.map +1 -0
- package/dist/commands/system.js +167 -0
- package/dist/commands/system.js.map +1 -0
- package/dist/commands/vehicle.d.ts +12 -0
- package/dist/commands/vehicle.d.ts.map +1 -0
- package/dist/commands/vehicle.js +550 -0
- package/dist/commands/vehicle.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +94 -0
- package/dist/index.js.map +1 -0
- package/dist/services/hikvisionClient.d.ts +25 -0
- package/dist/services/hikvisionClient.d.ts.map +1 -0
- package/dist/services/hikvisionClient.js +59 -0
- package/dist/services/hikvisionClient.js.map +1 -0
- package/dist/utils/config.d.ts +66 -0
- package/dist/utils/config.d.ts.map +1 -0
- package/dist/utils/config.js +213 -0
- package/dist/utils/config.js.map +1 -0
- package/dist/utils/output.d.ts +42 -0
- package/dist/utils/output.d.ts.map +1 -0
- package/dist/utils/output.js +157 -0
- package/dist/utils/output.js.map +1 -0
- package/dist/utils/validation.d.ts +52 -0
- package/dist/utils/validation.d.ts.map +1 -0
- package/dist/utils/validation.js +171 -0
- package/dist/utils/validation.js.map +1 -0
- package/package.json +29 -0
- package/src/commands/binding.ts +305 -0
- package/src/commands/card.ts +238 -0
- package/src/commands/group.ts +91 -0
- package/src/commands/org.ts +228 -0
- package/src/commands/person.ts +596 -0
- package/src/commands/service.ts +174 -0
- package/src/commands/sync.ts +156 -0
- package/src/commands/system.ts +137 -0
- package/src/commands/vehicle.ts +572 -0
- package/src/index.ts +111 -0
- package/src/services/hikvisionClient.ts +74 -0
- package/src/types/cli-table3.d.ts +20 -0
- package/src/utils/config.ts +199 -0
- package/src/utils/output.ts +181 -0
- package/src/utils/validation.ts +160 -0
- package/tsconfig.json +19 -0
package/dist/index.js
ADDED
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
/**
|
|
4
|
+
* CLI 入口文件
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
const commander_1 = require("commander");
|
|
8
|
+
const config_1 = require("./utils/config");
|
|
9
|
+
const output_1 = require("./utils/output");
|
|
10
|
+
// 导入命令
|
|
11
|
+
const person_1 = require("./commands/person");
|
|
12
|
+
const card_1 = require("./commands/card");
|
|
13
|
+
const vehicle_1 = require("./commands/vehicle");
|
|
14
|
+
const group_1 = require("./commands/group");
|
|
15
|
+
const org_1 = require("./commands/org");
|
|
16
|
+
const sync_1 = require("./commands/sync");
|
|
17
|
+
const system_1 = require("./commands/system");
|
|
18
|
+
const service_1 = require("./commands/service");
|
|
19
|
+
const binding_1 = require("./commands/binding");
|
|
20
|
+
const program = new commander_1.Command();
|
|
21
|
+
// 设置版本和描述
|
|
22
|
+
program
|
|
23
|
+
.name('hikvision-cli')
|
|
24
|
+
.description('海康威视平台管理 CLI 工具')
|
|
25
|
+
.version('1.0.0');
|
|
26
|
+
// 全局选项(注意:已移除 -k/-s 选项以防止密钥泄露到 shell 历史)
|
|
27
|
+
program
|
|
28
|
+
.option('-h, --host <host>', '海康平台主机地址')
|
|
29
|
+
.option('-f, --format <format>', '输出格式 (table|json|yaml)', 'table')
|
|
30
|
+
.option('-v, --verbose', '详细输出');
|
|
31
|
+
// 配置命令
|
|
32
|
+
program
|
|
33
|
+
.command('config')
|
|
34
|
+
.description('管理 CLI 配置')
|
|
35
|
+
.command('show', { isDefault: true })
|
|
36
|
+
.description('显示当前配置(敏感信息已脱敏)')
|
|
37
|
+
.action(() => {
|
|
38
|
+
const cfg = config_1.config.get();
|
|
39
|
+
if (!cfg) {
|
|
40
|
+
console.log('⚠️ 未检测到配置');
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
// 输出时脱敏敏感信息
|
|
44
|
+
console.log(JSON.stringify(config_1.config.maskSensitive(cfg), null, 2));
|
|
45
|
+
});
|
|
46
|
+
program
|
|
47
|
+
.command('config set')
|
|
48
|
+
.description('设置配置项')
|
|
49
|
+
.argument('<key>', '配置键 (host|appKey|appSecret|outputFormat|pageSize|logLevel)')
|
|
50
|
+
.argument('<value>', '配置值')
|
|
51
|
+
.action((key, value) => {
|
|
52
|
+
config_1.config.update({ [key]: value });
|
|
53
|
+
(0, output_1.success)(`配置已更新: ${key} = ${value}`);
|
|
54
|
+
});
|
|
55
|
+
program
|
|
56
|
+
.command('config reset')
|
|
57
|
+
.description('重置为默认配置')
|
|
58
|
+
.action(() => {
|
|
59
|
+
config_1.config.reset();
|
|
60
|
+
(0, output_1.success)('配置已重置为默认值');
|
|
61
|
+
});
|
|
62
|
+
// 人员命令
|
|
63
|
+
program.addCommand(person_1.personCommands);
|
|
64
|
+
// 卡片命令
|
|
65
|
+
program.addCommand(card_1.cardCommands);
|
|
66
|
+
// 车辆命令
|
|
67
|
+
program.addCommand(vehicle_1.vehicleCommands);
|
|
68
|
+
// 分组命令
|
|
69
|
+
program.addCommand(group_1.groupCommands);
|
|
70
|
+
// 组织命令
|
|
71
|
+
program.addCommand(org_1.orgCommands);
|
|
72
|
+
// 同步命令
|
|
73
|
+
program.addCommand(sync_1.syncCommands);
|
|
74
|
+
// 系统命令
|
|
75
|
+
program.addCommand(system_1.systemCommands);
|
|
76
|
+
// 服务控制命令
|
|
77
|
+
program.addCommand(service_1.serviceCommands);
|
|
78
|
+
// 绑定管理命令
|
|
79
|
+
program.addCommand(binding_1.bindingCommands);
|
|
80
|
+
// 全局前置检查:确保已配置
|
|
81
|
+
function checkConfig() {
|
|
82
|
+
const command = process.argv[2];
|
|
83
|
+
if (command === 'config' || command === '--help' || command === '-h' || command === 'version' || command === '--version') {
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
if (!config_1.config.isConfigured()) {
|
|
87
|
+
config_1.ConfigManager.promptConfig();
|
|
88
|
+
process.exit(1);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
checkConfig();
|
|
92
|
+
// 解析命令行
|
|
93
|
+
program.parse();
|
|
94
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hikvision 客户端工厂
|
|
3
|
+
*
|
|
4
|
+
* 组合 NodeHttpClient 和 API 创建完整客户端
|
|
5
|
+
* 兼容 CLI 和 Server 使用
|
|
6
|
+
*/
|
|
7
|
+
import { NodeHttpClient } from 'hikvision-core-node';
|
|
8
|
+
import { GroupAPI } from 'hikvision-core-node';
|
|
9
|
+
import { PersonService } from 'hikvision-services';
|
|
10
|
+
import { CardService } from 'hikvision-services';
|
|
11
|
+
import { VehicleService } from 'hikvision-services';
|
|
12
|
+
import type { CLIConfig } from '../utils/config';
|
|
13
|
+
export interface HikvisionClientWrapper {
|
|
14
|
+
client: NodeHttpClient;
|
|
15
|
+
personService: PersonService;
|
|
16
|
+
cardService: CardService;
|
|
17
|
+
vehicleService: VehicleService;
|
|
18
|
+
groupService: GroupAPI;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* 创建 Hikvision 客户端实例(Node.js 版)
|
|
22
|
+
*/
|
|
23
|
+
export declare function createHikvisionClient(config: CLIConfig | null): HikvisionClientWrapper;
|
|
24
|
+
export type { HikvisionConfig } from 'hikvision-api-lib';
|
|
25
|
+
//# sourceMappingURL=hikvisionClient.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hikvisionClient.d.ts","sourceRoot":"","sources":["../../src/services/hikvisionClient.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAIrD,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEpD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,cAAc,CAAC;IACvB,aAAa,EAAE,aAAa,CAAC;IAC7B,WAAW,EAAE,WAAW,CAAC;IACzB,cAAc,EAAE,cAAc,CAAC;IAC/B,YAAY,EAAE,QAAQ,CAAC;CACxB;AAgBD;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,GAAG,sBAAsB,CA4BtF;AAED,YAAY,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Hikvision 客户端工厂
|
|
4
|
+
*
|
|
5
|
+
* 组合 NodeHttpClient 和 API 创建完整客户端
|
|
6
|
+
* 兼容 CLI 和 Server 使用
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.createHikvisionClient = createHikvisionClient;
|
|
10
|
+
const hikvision_core_node_1 = require("hikvision-core-node");
|
|
11
|
+
const hikvision_core_node_2 = require("hikvision-core-node");
|
|
12
|
+
const hikvision_core_node_3 = require("hikvision-core-node");
|
|
13
|
+
const hikvision_core_node_4 = require("hikvision-core-node");
|
|
14
|
+
const hikvision_core_node_5 = require("hikvision-core-node");
|
|
15
|
+
const hikvision_services_1 = require("hikvision-services");
|
|
16
|
+
const hikvision_services_2 = require("hikvision-services");
|
|
17
|
+
const hikvision_services_3 = require("hikvision-services");
|
|
18
|
+
/**
|
|
19
|
+
* 将 CLIConfig 转换为 HikvisionConfig
|
|
20
|
+
*/
|
|
21
|
+
function toHikvisionConfig(cfg) {
|
|
22
|
+
if (!cfg) {
|
|
23
|
+
throw new Error('配置无效,请先运行 hikvision-cli config set 进行配置');
|
|
24
|
+
}
|
|
25
|
+
return {
|
|
26
|
+
host: cfg.host,
|
|
27
|
+
appKey: cfg.appKey,
|
|
28
|
+
appSecret: cfg.appSecret,
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* 创建 Hikvision 客户端实例(Node.js 版)
|
|
33
|
+
*/
|
|
34
|
+
function createHikvisionClient(config) {
|
|
35
|
+
const hikConfig = toHikvisionConfig(config);
|
|
36
|
+
// 创建 NodeHttpClient
|
|
37
|
+
const httpClient = new hikvision_core_node_1.NodeHttpClient({
|
|
38
|
+
host: hikConfig.host,
|
|
39
|
+
appKey: hikConfig.appKey,
|
|
40
|
+
appSecret: hikConfig.appSecret,
|
|
41
|
+
});
|
|
42
|
+
// 创建 API 实例(注入 IHttpClient)
|
|
43
|
+
const personAPI = new hikvision_core_node_2.PersonAPI(httpClient);
|
|
44
|
+
const cardAPI = new hikvision_core_node_3.CardAPI(httpClient);
|
|
45
|
+
const vehicleAPI = new hikvision_core_node_4.VehicleAPI(httpClient);
|
|
46
|
+
const groupAPI = new hikvision_core_node_5.GroupAPI(httpClient);
|
|
47
|
+
// 创建 Service 实例(注入 API)
|
|
48
|
+
const personService = new hikvision_services_1.PersonService(personAPI);
|
|
49
|
+
const cardService = new hikvision_services_2.CardService(cardAPI);
|
|
50
|
+
const vehicleService = new hikvision_services_3.VehicleService(vehicleAPI);
|
|
51
|
+
return {
|
|
52
|
+
client: httpClient,
|
|
53
|
+
personService,
|
|
54
|
+
cardService,
|
|
55
|
+
vehicleService,
|
|
56
|
+
groupService: groupAPI,
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=hikvisionClient.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hikvisionClient.js","sourceRoot":"","sources":["../../src/services/hikvisionClient.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;AAsCH,sDA4BC;AAhED,6DAAqD;AACrD,6DAAgD;AAChD,6DAA8C;AAC9C,6DAAiD;AACjD,6DAA+C;AAC/C,2DAAmD;AACnD,2DAAiD;AACjD,2DAAoD;AAYpD;;GAEG;AACH,SAAS,iBAAiB,CAAC,GAAqB;IAC9C,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;IAC7D,CAAC;IACD,OAAO;QACL,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,SAAS,EAAE,GAAG,CAAC,SAAS;KACzB,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAgB,qBAAqB,CAAC,MAAwB;IAC5D,MAAM,SAAS,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAE5C,oBAAoB;IACpB,MAAM,UAAU,GAAG,IAAI,oCAAc,CAAC;QACpC,IAAI,EAAE,SAAS,CAAC,IAAI;QACpB,MAAM,EAAE,SAAS,CAAC,MAAM;QACxB,SAAS,EAAE,SAAS,CAAC,SAAS;KAC/B,CAAC,CAAC;IAEH,4BAA4B;IAC5B,MAAM,SAAS,GAAG,IAAI,+BAAS,CAAC,UAAU,CAAC,CAAC;IAC5C,MAAM,OAAO,GAAG,IAAI,6BAAO,CAAC,UAAU,CAAC,CAAC;IACxC,MAAM,UAAU,GAAG,IAAI,gCAAU,CAAC,UAAU,CAAC,CAAC;IAC9C,MAAM,QAAQ,GAAG,IAAI,8BAAQ,CAAC,UAAU,CAAC,CAAC;IAE1C,wBAAwB;IACxB,MAAM,aAAa,GAAG,IAAI,kCAAa,CAAC,SAAS,CAAC,CAAC;IACnD,MAAM,WAAW,GAAG,IAAI,gCAAW,CAAC,OAAO,CAAC,CAAC;IAC7C,MAAM,cAAc,GAAG,IAAI,mCAAc,CAAC,UAAU,CAAC,CAAC;IAEtD,OAAO;QACL,MAAM,EAAE,UAAU;QAClB,aAAa;QACb,WAAW;QACX,cAAc;QACd,YAAY,EAAE,QAAQ;KACvB,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI 配置管理
|
|
3
|
+
*
|
|
4
|
+
* 配置优先级(从高到低):
|
|
5
|
+
* 1. 环境变量(HIK_HOST, HIK_APP_KEY, HIK_APP_SECRET)
|
|
6
|
+
* 2. 项目配置文件(packages/server/config.json)
|
|
7
|
+
* 3. 用户配置文件(~/.hikvision-cli/config.json)
|
|
8
|
+
* 4. 默认值
|
|
9
|
+
*/
|
|
10
|
+
export interface CLIConfig {
|
|
11
|
+
host: string;
|
|
12
|
+
appKey: string;
|
|
13
|
+
appSecret: string;
|
|
14
|
+
outputFormat: 'table' | 'json' | 'yaml';
|
|
15
|
+
pageSize: number;
|
|
16
|
+
logLevel: 'debug' | 'info' | 'warn' | 'error';
|
|
17
|
+
}
|
|
18
|
+
export declare class ConfigManager {
|
|
19
|
+
private config;
|
|
20
|
+
constructor();
|
|
21
|
+
/**
|
|
22
|
+
* 加载配置:优先用户配置,其次环境变量
|
|
23
|
+
*/
|
|
24
|
+
private loadConfig;
|
|
25
|
+
/**
|
|
26
|
+
* 获取配置
|
|
27
|
+
* @returns 配置对象,如果未配置则返回 null
|
|
28
|
+
*/
|
|
29
|
+
get(): CLIConfig | null;
|
|
30
|
+
/**
|
|
31
|
+
* 检查是否已配置
|
|
32
|
+
*/
|
|
33
|
+
isConfigured(): boolean;
|
|
34
|
+
/**
|
|
35
|
+
* 更新配置
|
|
36
|
+
*/
|
|
37
|
+
update(updates: Partial<CLIConfig>): void;
|
|
38
|
+
/**
|
|
39
|
+
* 保存配置
|
|
40
|
+
*/
|
|
41
|
+
private saveConfig;
|
|
42
|
+
/**
|
|
43
|
+
* 重置配置(删除用户配置文件)
|
|
44
|
+
*/
|
|
45
|
+
reset(): void;
|
|
46
|
+
/**
|
|
47
|
+
* 获取配置路径
|
|
48
|
+
*/
|
|
49
|
+
static getConfigPath(): string;
|
|
50
|
+
/**
|
|
51
|
+
* 检查配置文件是否存在
|
|
52
|
+
*/
|
|
53
|
+
static hasConfigFile(): boolean;
|
|
54
|
+
/**
|
|
55
|
+
* 对配置中的敏感信息进行脱敏
|
|
56
|
+
* @param cfg 配置对象
|
|
57
|
+
* @returns 脱敏后的配置(不包含原始敏感数据)
|
|
58
|
+
*/
|
|
59
|
+
maskSensitive(cfg: CLIConfig): CLIConfig;
|
|
60
|
+
/**
|
|
61
|
+
* 提示用户进行配置
|
|
62
|
+
*/
|
|
63
|
+
static promptConfig(): void;
|
|
64
|
+
}
|
|
65
|
+
export declare const config: ConfigManager;
|
|
66
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;IACxC,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;CAC/C;AAaD,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAA0B;;IAMxC;;OAEG;IACH,OAAO,CAAC,UAAU;IAmDlB;;;OAGG;IACH,GAAG,IAAI,SAAS,GAAG,IAAI;IAIvB;;OAEG;IACH,YAAY,IAAI,OAAO;IAIvB;;OAEG;IACH,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,IAAI;IAQzC;;OAEG;IACH,OAAO,CAAC,UAAU;IAWlB;;OAEG;IACH,KAAK,IAAI,IAAI;IAWb;;OAEG;IACH,MAAM,CAAC,aAAa,IAAI,MAAM;IAI9B;;OAEG;IACH,MAAM,CAAC,aAAa,IAAI,OAAO;IAI/B;;;;OAIG;IACH,aAAa,CAAC,GAAG,EAAE,SAAS,GAAG,SAAS;IASxC;;OAEG;IACH,MAAM,CAAC,YAAY,IAAI,IAAI;CAe5B;AAGD,eAAO,MAAM,MAAM,eAAsB,CAAC"}
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* CLI 配置管理
|
|
4
|
+
*
|
|
5
|
+
* 配置优先级(从高到低):
|
|
6
|
+
* 1. 环境变量(HIK_HOST, HIK_APP_KEY, HIK_APP_SECRET)
|
|
7
|
+
* 2. 项目配置文件(packages/server/config.json)
|
|
8
|
+
* 3. 用户配置文件(~/.hikvision-cli/config.json)
|
|
9
|
+
* 4. 默认值
|
|
10
|
+
*/
|
|
11
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
12
|
+
if (k2 === undefined) k2 = k;
|
|
13
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
14
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
15
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
16
|
+
}
|
|
17
|
+
Object.defineProperty(o, k2, desc);
|
|
18
|
+
}) : (function(o, m, k, k2) {
|
|
19
|
+
if (k2 === undefined) k2 = k;
|
|
20
|
+
o[k2] = m[k];
|
|
21
|
+
}));
|
|
22
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
23
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
24
|
+
}) : function(o, v) {
|
|
25
|
+
o["default"] = v;
|
|
26
|
+
});
|
|
27
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
28
|
+
var ownKeys = function(o) {
|
|
29
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
30
|
+
var ar = [];
|
|
31
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
32
|
+
return ar;
|
|
33
|
+
};
|
|
34
|
+
return ownKeys(o);
|
|
35
|
+
};
|
|
36
|
+
return function (mod) {
|
|
37
|
+
if (mod && mod.__esModule) return mod;
|
|
38
|
+
var result = {};
|
|
39
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
40
|
+
__setModuleDefault(result, mod);
|
|
41
|
+
return result;
|
|
42
|
+
};
|
|
43
|
+
})();
|
|
44
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
45
|
+
exports.config = exports.ConfigManager = void 0;
|
|
46
|
+
const fs = __importStar(require("fs"));
|
|
47
|
+
const path = __importStar(require("path"));
|
|
48
|
+
const os = __importStar(require("os"));
|
|
49
|
+
// 非敏感默认值
|
|
50
|
+
const DEFAULT_CONFIG = {
|
|
51
|
+
host: '127.0.0.1:18443',
|
|
52
|
+
outputFormat: 'table',
|
|
53
|
+
pageSize: 20,
|
|
54
|
+
logLevel: 'info',
|
|
55
|
+
};
|
|
56
|
+
const CONFIG_DIR = path.join(os.homedir(), '.hikvision-cli');
|
|
57
|
+
const CONFIG_FILE = path.join(CONFIG_DIR, 'config.json');
|
|
58
|
+
class ConfigManager {
|
|
59
|
+
constructor() {
|
|
60
|
+
this.config = null;
|
|
61
|
+
this.config = this.loadConfig();
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* 加载配置:优先用户配置,其次环境变量
|
|
65
|
+
*/
|
|
66
|
+
loadConfig() {
|
|
67
|
+
// 1. 尝试加载用户配置文件
|
|
68
|
+
try {
|
|
69
|
+
if (fs.existsSync(CONFIG_FILE)) {
|
|
70
|
+
const content = fs.readFileSync(CONFIG_FILE, 'utf-8');
|
|
71
|
+
const userConfig = JSON.parse(content);
|
|
72
|
+
// 如果用户配置中包含敏感信息,直接使用
|
|
73
|
+
if (userConfig.appKey && userConfig.appSecret) {
|
|
74
|
+
return { ...DEFAULT_CONFIG, ...userConfig };
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
catch (error) {
|
|
79
|
+
console.warn('⚠️ 配置文件加载失败');
|
|
80
|
+
}
|
|
81
|
+
// 2. 尝试从环境变量读取
|
|
82
|
+
const host = process.env.HIK_HOST;
|
|
83
|
+
const appKey = process.env.HIK_APP_KEY;
|
|
84
|
+
const appSecret = process.env.HIK_APP_SECRET;
|
|
85
|
+
if (host && appKey && appSecret) {
|
|
86
|
+
return {
|
|
87
|
+
...DEFAULT_CONFIG,
|
|
88
|
+
host,
|
|
89
|
+
appKey,
|
|
90
|
+
appSecret,
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
// 3. 尝试从项目配置文件读取
|
|
94
|
+
const projectConfigPath = path.resolve(__dirname, '../../../../server/config.json');
|
|
95
|
+
if (fs.existsSync(projectConfigPath)) {
|
|
96
|
+
try {
|
|
97
|
+
const projectConfig = JSON.parse(fs.readFileSync(projectConfigPath, 'utf-8'));
|
|
98
|
+
if (projectConfig.hikvision?.host && projectConfig.hikvision?.appKey && projectConfig.hikvision?.appSecret) {
|
|
99
|
+
return {
|
|
100
|
+
...DEFAULT_CONFIG,
|
|
101
|
+
host: projectConfig.hikvision.host,
|
|
102
|
+
appKey: projectConfig.hikvision.appKey,
|
|
103
|
+
appSecret: projectConfig.hikvision.appSecret,
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
catch (e) {
|
|
108
|
+
console.warn('⚠️ 项目配置文件加载失败:', e);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
// 3. 配置缺失,返回 null 表示需要用户配置
|
|
112
|
+
return null;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* 获取配置
|
|
116
|
+
* @returns 配置对象,如果未配置则返回 null
|
|
117
|
+
*/
|
|
118
|
+
get() {
|
|
119
|
+
return this.config ? { ...this.config } : null;
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* 检查是否已配置
|
|
123
|
+
*/
|
|
124
|
+
isConfigured() {
|
|
125
|
+
return this.config !== null && !!this.config.appKey && !!this.config.appSecret;
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* 更新配置
|
|
129
|
+
*/
|
|
130
|
+
update(updates) {
|
|
131
|
+
if (!this.config) {
|
|
132
|
+
this.config = { ...DEFAULT_CONFIG };
|
|
133
|
+
}
|
|
134
|
+
this.config = { ...this.config, ...updates };
|
|
135
|
+
this.saveConfig();
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* 保存配置
|
|
139
|
+
*/
|
|
140
|
+
saveConfig() {
|
|
141
|
+
try {
|
|
142
|
+
if (!fs.existsSync(CONFIG_DIR)) {
|
|
143
|
+
fs.mkdirSync(CONFIG_DIR, { recursive: true });
|
|
144
|
+
}
|
|
145
|
+
fs.writeFileSync(CONFIG_FILE, JSON.stringify(this.config, null, 2));
|
|
146
|
+
}
|
|
147
|
+
catch (error) {
|
|
148
|
+
console.error('❌ 保存配置失败:', error);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* 重置配置(删除用户配置文件)
|
|
153
|
+
*/
|
|
154
|
+
reset() {
|
|
155
|
+
try {
|
|
156
|
+
if (fs.existsSync(CONFIG_FILE)) {
|
|
157
|
+
fs.unlinkSync(CONFIG_FILE);
|
|
158
|
+
}
|
|
159
|
+
this.config = null;
|
|
160
|
+
}
|
|
161
|
+
catch (error) {
|
|
162
|
+
console.error('❌ 重置配置失败:', error);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* 获取配置路径
|
|
167
|
+
*/
|
|
168
|
+
static getConfigPath() {
|
|
169
|
+
return CONFIG_FILE;
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* 检查配置文件是否存在
|
|
173
|
+
*/
|
|
174
|
+
static hasConfigFile() {
|
|
175
|
+
return fs.existsSync(CONFIG_FILE);
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* 对配置中的敏感信息进行脱敏
|
|
179
|
+
* @param cfg 配置对象
|
|
180
|
+
* @returns 脱敏后的配置(不包含原始敏感数据)
|
|
181
|
+
*/
|
|
182
|
+
maskSensitive(cfg) {
|
|
183
|
+
if (!cfg)
|
|
184
|
+
return cfg;
|
|
185
|
+
return {
|
|
186
|
+
...cfg,
|
|
187
|
+
appKey: cfg.appKey ? `***${cfg.appKey.slice(-4)}` : '',
|
|
188
|
+
appSecret: cfg.appSecret ? `***${cfg.appSecret.slice(-4)}` : '',
|
|
189
|
+
};
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* 提示用户进行配置
|
|
193
|
+
*/
|
|
194
|
+
static promptConfig() {
|
|
195
|
+
console.log('\n🔧 海康平台配置未设置,请进行配置:\n');
|
|
196
|
+
console.log('方法一:设置环境变量');
|
|
197
|
+
console.log(' export HIK_HOST=127.0.0.1:18443');
|
|
198
|
+
console.log(' export HIK_APP_KEY=你的AppKey');
|
|
199
|
+
console.log(' export HIK_APP_SECRET=你的AppSecret\n');
|
|
200
|
+
console.log('方法二:修改配置文件');
|
|
201
|
+
console.log(' 编辑 packages/server/config.json,添加 hikvision 配置:');
|
|
202
|
+
console.log(' { "hikvision": { "host": "127.0.0.1:18443", "appKey": "***", "appSecret": "***" } }\n');
|
|
203
|
+
console.log('方法三:使用 CLI 命令配置');
|
|
204
|
+
console.log(' hikvision-cli config set host 127.0.0.1:18443');
|
|
205
|
+
console.log(' hikvision-cli config set key 你的AppKey');
|
|
206
|
+
console.log(' hikvision-cli config set secret 你的AppSecret\n');
|
|
207
|
+
console.log('配置完成后重新运行命令。\n');
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
exports.ConfigManager = ConfigManager;
|
|
211
|
+
// 导出单例
|
|
212
|
+
exports.config = new ConfigManager();
|
|
213
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI 输出格式化
|
|
3
|
+
*/
|
|
4
|
+
export type OutputFormat = 'table' | 'json' | 'yaml';
|
|
5
|
+
export interface TableOptions {
|
|
6
|
+
title?: string;
|
|
7
|
+
columns?: string[];
|
|
8
|
+
rows?: any[][];
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* 格式化输出
|
|
12
|
+
*/
|
|
13
|
+
export declare function formatOutput(data: any, format?: OutputFormat): string;
|
|
14
|
+
/**
|
|
15
|
+
* 表格输出
|
|
16
|
+
*/
|
|
17
|
+
export declare function formatTable(data: any): string;
|
|
18
|
+
/**
|
|
19
|
+
* 成功消息
|
|
20
|
+
*/
|
|
21
|
+
export declare function success(message: string): void;
|
|
22
|
+
/**
|
|
23
|
+
* 错误消息
|
|
24
|
+
*/
|
|
25
|
+
export declare function error(message: string): void;
|
|
26
|
+
/**
|
|
27
|
+
* 警告消息
|
|
28
|
+
*/
|
|
29
|
+
export declare function warn(message: string): void;
|
|
30
|
+
/**
|
|
31
|
+
* 信息消息
|
|
32
|
+
*/
|
|
33
|
+
export declare function info(message: string): void;
|
|
34
|
+
/**
|
|
35
|
+
* 批量操作结果输出
|
|
36
|
+
*/
|
|
37
|
+
export declare function formatBatchResult(result: {
|
|
38
|
+
success: number;
|
|
39
|
+
failed: number;
|
|
40
|
+
details?: any[];
|
|
41
|
+
}): string;
|
|
42
|
+
//# sourceMappingURL=output.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../../src/utils/output.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;AAErD,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,IAAI,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC;CAChB;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE,YAAY,GAAG,MAAM,CAarE;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,GAAG,GAAG,MAAM,CAwE7C;AAuBD;;GAEG;AACH,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE7C;AAED;;GAEG;AACH,wBAAgB,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE3C;AAED;;GAEG;AACH,wBAAgB,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE1C;AAED;;GAEG;AACH,wBAAgB,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE1C;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,GAAG,EAAE,CAAA;CAAE,GAAG,MAAM,CAkBtG"}
|