wjx-cli 0.1.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/LICENSE +21 -0
- package/README.md +836 -0
- package/dist/commands/account.d.ts +2 -0
- package/dist/commands/account.js +100 -0
- package/dist/commands/account.js.map +1 -0
- package/dist/commands/admin.d.ts +2 -0
- package/dist/commands/admin.js +42 -0
- package/dist/commands/admin.js.map +1 -0
- package/dist/commands/analytics.d.ts +2 -0
- package/dist/commands/analytics.js +136 -0
- package/dist/commands/analytics.js.map +1 -0
- package/dist/commands/contacts.d.ts +2 -0
- package/dist/commands/contacts.js +49 -0
- package/dist/commands/contacts.js.map +1 -0
- package/dist/commands/department.d.ts +2 -0
- package/dist/commands/department.js +60 -0
- package/dist/commands/department.js.map +1 -0
- package/dist/commands/diagnostics.d.ts +2 -0
- package/dist/commands/diagnostics.js +110 -0
- package/dist/commands/diagnostics.js.map +1 -0
- package/dist/commands/response.d.ts +2 -0
- package/dist/commands/response.js +241 -0
- package/dist/commands/response.js.map +1 -0
- package/dist/commands/sso.d.ts +2 -0
- package/dist/commands/sso.js +79 -0
- package/dist/commands/sso.js.map +1 -0
- package/dist/commands/survey.d.ts +2 -0
- package/dist/commands/survey.js +247 -0
- package/dist/commands/survey.js.map +1 -0
- package/dist/commands/tag.d.ts +2 -0
- package/dist/commands/tag.js +66 -0
- package/dist/commands/tag.js.map +1 -0
- package/dist/commands/user-system.d.ts +2 -0
- package/dist/commands/user-system.js +137 -0
- package/dist/commands/user-system.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +67 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/auth.d.ts +4 -0
- package/dist/lib/auth.js +9 -0
- package/dist/lib/auth.js.map +1 -0
- package/dist/lib/command-helpers.d.ts +25 -0
- package/dist/lib/command-helpers.js +64 -0
- package/dist/lib/command-helpers.js.map +1 -0
- package/dist/lib/errors.d.ts +14 -0
- package/dist/lib/errors.js +52 -0
- package/dist/lib/errors.js.map +1 -0
- package/dist/lib/output.d.ts +6 -0
- package/dist/lib/output.js +59 -0
- package/dist/lib/output.js.map +1 -0
- package/dist/lib/stdin.d.ts +10 -0
- package/dist/lib/stdin.js +51 -0
- package/dist/lib/stdin.js.map +1 -0
- package/package.json +43 -0
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { querySubAccounts, addSubAccount, modifySubAccount, deleteSubAccount, restoreSubAccount, } from "wjx-api-sdk";
|
|
2
|
+
import { executeCommand, strictInt, requireField } from "../lib/command-helpers.js";
|
|
3
|
+
export function registerAccountCommands(program) {
|
|
4
|
+
const account = program.command("account").description("子账号管理");
|
|
5
|
+
// --- list ---
|
|
6
|
+
account
|
|
7
|
+
.command("list")
|
|
8
|
+
.description("查询子账号")
|
|
9
|
+
.option("--subuser <s>", "子账号用户名")
|
|
10
|
+
.option("--name_like <s>", "名称模糊搜索")
|
|
11
|
+
.option("--role <n>", "角色", strictInt)
|
|
12
|
+
.option("--group <n>", "分组", strictInt)
|
|
13
|
+
.option("--page_index <n>", "页码", strictInt)
|
|
14
|
+
.option("--page_size <n>", "每页数量", strictInt)
|
|
15
|
+
.option("--mobile <s>", "手机号")
|
|
16
|
+
.action(async (_opts, cmd) => {
|
|
17
|
+
await executeCommand(program, cmd, querySubAccounts, (m) => ({
|
|
18
|
+
subuser: m.subuser,
|
|
19
|
+
name_like: m.name_like,
|
|
20
|
+
role: m.role,
|
|
21
|
+
group: m.group,
|
|
22
|
+
page_index: m.page_index,
|
|
23
|
+
page_size: m.page_size,
|
|
24
|
+
mobile: m.mobile,
|
|
25
|
+
}));
|
|
26
|
+
});
|
|
27
|
+
// --- add ---
|
|
28
|
+
account
|
|
29
|
+
.command("add")
|
|
30
|
+
.description("添加子账号")
|
|
31
|
+
.option("--subuser <s>", "子账号用户名")
|
|
32
|
+
.option("--password <s>", "密码")
|
|
33
|
+
.option("--mobile <s>", "手机号")
|
|
34
|
+
.option("--email <s>", "邮箱")
|
|
35
|
+
.option("--role <n>", "角色", strictInt)
|
|
36
|
+
.option("--group <n>", "分组", strictInt)
|
|
37
|
+
.action(async (_opts, cmd) => {
|
|
38
|
+
await executeCommand(program, cmd, addSubAccount, (m) => {
|
|
39
|
+
requireField(m, "subuser");
|
|
40
|
+
return {
|
|
41
|
+
subuser: m.subuser,
|
|
42
|
+
password: m.password,
|
|
43
|
+
mobile: m.mobile,
|
|
44
|
+
email: m.email,
|
|
45
|
+
role: m.role,
|
|
46
|
+
group: m.group,
|
|
47
|
+
};
|
|
48
|
+
});
|
|
49
|
+
});
|
|
50
|
+
// --- modify ---
|
|
51
|
+
account
|
|
52
|
+
.command("modify")
|
|
53
|
+
.description("修改子账号")
|
|
54
|
+
.option("--subuser <s>", "子账号用户名")
|
|
55
|
+
.option("--mobile <s>", "手机号")
|
|
56
|
+
.option("--email <s>", "邮箱")
|
|
57
|
+
.option("--role <n>", "角色", strictInt)
|
|
58
|
+
.option("--group <n>", "分组", strictInt)
|
|
59
|
+
.action(async (_opts, cmd) => {
|
|
60
|
+
await executeCommand(program, cmd, modifySubAccount, (m) => {
|
|
61
|
+
requireField(m, "subuser");
|
|
62
|
+
return {
|
|
63
|
+
subuser: m.subuser,
|
|
64
|
+
mobile: m.mobile,
|
|
65
|
+
email: m.email,
|
|
66
|
+
role: m.role,
|
|
67
|
+
group: m.group,
|
|
68
|
+
};
|
|
69
|
+
});
|
|
70
|
+
});
|
|
71
|
+
// --- delete ---
|
|
72
|
+
account
|
|
73
|
+
.command("delete")
|
|
74
|
+
.description("删除子账号")
|
|
75
|
+
.option("--subuser <s>", "子账号用户名")
|
|
76
|
+
.action(async (_opts, cmd) => {
|
|
77
|
+
await executeCommand(program, cmd, deleteSubAccount, (m) => {
|
|
78
|
+
requireField(m, "subuser");
|
|
79
|
+
return { subuser: m.subuser };
|
|
80
|
+
});
|
|
81
|
+
});
|
|
82
|
+
// --- restore ---
|
|
83
|
+
account
|
|
84
|
+
.command("restore")
|
|
85
|
+
.description("恢复子账号")
|
|
86
|
+
.option("--subuser <s>", "子账号用户名")
|
|
87
|
+
.option("--mobile <s>", "手机号")
|
|
88
|
+
.option("--email <s>", "邮箱")
|
|
89
|
+
.action(async (_opts, cmd) => {
|
|
90
|
+
await executeCommand(program, cmd, restoreSubAccount, (m) => {
|
|
91
|
+
requireField(m, "subuser");
|
|
92
|
+
return {
|
|
93
|
+
subuser: m.subuser,
|
|
94
|
+
mobile: m.mobile,
|
|
95
|
+
email: m.email,
|
|
96
|
+
};
|
|
97
|
+
});
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=account.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"account.js","sourceRoot":"","sources":["../../src/commands/account.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { addAdmin, deleteAdmin, restoreAdmin, } from "wjx-api-sdk";
|
|
2
|
+
import { executeCommand, requireField } from "../lib/command-helpers.js";
|
|
3
|
+
export function registerAdminCommands(program) {
|
|
4
|
+
const admin = program.command("admin").description("管理员管理");
|
|
5
|
+
// --- add ---
|
|
6
|
+
admin
|
|
7
|
+
.command("add")
|
|
8
|
+
.description("添加管理员")
|
|
9
|
+
.option("--users <json>", "管理员JSON数组")
|
|
10
|
+
.option("--corpid <s>", "企业ID")
|
|
11
|
+
.action(async (_opts, cmd) => {
|
|
12
|
+
await executeCommand(program, cmd, addAdmin, (m) => {
|
|
13
|
+
requireField(m, "users");
|
|
14
|
+
return { users: m.users, corpid: m.corpid };
|
|
15
|
+
});
|
|
16
|
+
});
|
|
17
|
+
// --- delete ---
|
|
18
|
+
admin
|
|
19
|
+
.command("delete")
|
|
20
|
+
.description("删除管理员")
|
|
21
|
+
.option("--uids <s>", "用户ID列表(逗号分隔)")
|
|
22
|
+
.option("--corpid <s>", "企业ID")
|
|
23
|
+
.action(async (_opts, cmd) => {
|
|
24
|
+
await executeCommand(program, cmd, deleteAdmin, (m) => {
|
|
25
|
+
requireField(m, "uids");
|
|
26
|
+
return { uids: m.uids, corpid: m.corpid };
|
|
27
|
+
});
|
|
28
|
+
});
|
|
29
|
+
// --- restore ---
|
|
30
|
+
admin
|
|
31
|
+
.command("restore")
|
|
32
|
+
.description("恢复管理员")
|
|
33
|
+
.option("--uids <s>", "用户ID列表(逗号分隔)")
|
|
34
|
+
.option("--corpid <s>", "企业ID")
|
|
35
|
+
.action(async (_opts, cmd) => {
|
|
36
|
+
await executeCommand(program, cmd, restoreAdmin, (m) => {
|
|
37
|
+
requireField(m, "uids");
|
|
38
|
+
return { uids: m.uids, corpid: m.corpid };
|
|
39
|
+
});
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=admin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin.js","sourceRoot":"","sources":["../../src/commands/admin.ts"],"names":[],"mappings":"AACA,OAAO,EACL,QAAQ,EACR,WAAW,EACX,YAAY,GACb,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAEzE,MAAM,UAAU,qBAAqB,CAAC,OAAgB;IACpD,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IAE5D,cAAc;IACd,KAAK;SACF,OAAO,CAAC,KAAK,CAAC;SACd,WAAW,CAAC,OAAO,CAAC;SACpB,MAAM,CAAC,gBAAgB,EAAE,WAAW,CAAC;SACrC,MAAM,CAAC,cAAc,EAAE,MAAM,CAAC;SAC9B,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;QAC3B,MAAM,cAAc,CAAC,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE;YACjD,YAAY,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;YACzB,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;QAC9C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEL,iBAAiB;IACjB,KAAK;SACF,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,OAAO,CAAC;SACpB,MAAM,CAAC,YAAY,EAAE,cAAc,CAAC;SACpC,MAAM,CAAC,cAAc,EAAE,MAAM,CAAC;SAC9B,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;QAC3B,MAAM,cAAc,CAAC,OAAO,EAAE,GAAG,EAAE,WAAW,EAAE,CAAC,CAAC,EAAE,EAAE;YACpD,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;YACxB,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;QAC5C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEL,kBAAkB;IAClB,KAAK;SACF,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,OAAO,CAAC;SACpB,MAAM,CAAC,YAAY,EAAE,cAAc,CAAC;SACpC,MAAM,CAAC,cAAc,EAAE,MAAM,CAAC;SAC9B,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;QAC3B,MAAM,cAAc,CAAC,OAAO,EAAE,GAAG,EAAE,YAAY,EAAE,CAAC,CAAC,EAAE,EAAE;YACrD,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;YACxB,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;QAC5C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
import { decodeResponses, calculateNps, calculateCsat, detectAnomalies, compareMetrics, decodePushPayload, } from "wjx-api-sdk";
|
|
2
|
+
import { formatOutput } from "../lib/output.js";
|
|
3
|
+
import { CliError, handleError } from "../lib/errors.js";
|
|
4
|
+
import { mergeStdinWithOpts } from "../lib/stdin.js";
|
|
5
|
+
import { requireField } from "../lib/command-helpers.js";
|
|
6
|
+
/**
|
|
7
|
+
* Helper to get merged opts from stdin or CLI.
|
|
8
|
+
*/
|
|
9
|
+
function getMerged(cmd) {
|
|
10
|
+
const stdinData = cmd.__stdinData;
|
|
11
|
+
if (stdinData && Object.keys(stdinData).length > 0) {
|
|
12
|
+
return mergeStdinWithOpts(stdinData, cmd);
|
|
13
|
+
}
|
|
14
|
+
return { ...cmd.opts() };
|
|
15
|
+
}
|
|
16
|
+
export function registerAnalyticsCommands(program) {
|
|
17
|
+
const analytics = program.command("analytics").description("数据分析");
|
|
18
|
+
// --- decode ---
|
|
19
|
+
analytics
|
|
20
|
+
.command("decode")
|
|
21
|
+
.description("解码答卷提交数据")
|
|
22
|
+
.option("--submitdata <s>", "提交数据字符串")
|
|
23
|
+
.action(async (_opts, cmd) => {
|
|
24
|
+
try {
|
|
25
|
+
const m = getMerged(cmd);
|
|
26
|
+
requireField(m, "submitdata");
|
|
27
|
+
const result = decodeResponses(m.submitdata);
|
|
28
|
+
formatOutput(result, program.opts());
|
|
29
|
+
}
|
|
30
|
+
catch (e) {
|
|
31
|
+
handleError(e);
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
// --- nps ---
|
|
35
|
+
analytics
|
|
36
|
+
.command("nps")
|
|
37
|
+
.description("计算NPS分数")
|
|
38
|
+
.option("--scores <json>", "评分JSON数组")
|
|
39
|
+
.action(async (_opts, cmd) => {
|
|
40
|
+
try {
|
|
41
|
+
const m = getMerged(cmd);
|
|
42
|
+
requireField(m, "scores");
|
|
43
|
+
const scores = JSON.parse(m.scores);
|
|
44
|
+
if (!Array.isArray(scores)) {
|
|
45
|
+
throw new CliError("INPUT_ERROR", "--scores must be a JSON array of numbers");
|
|
46
|
+
}
|
|
47
|
+
const result = calculateNps(scores);
|
|
48
|
+
formatOutput(result, program.opts());
|
|
49
|
+
}
|
|
50
|
+
catch (e) {
|
|
51
|
+
handleError(e);
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
// --- csat ---
|
|
55
|
+
analytics
|
|
56
|
+
.command("csat")
|
|
57
|
+
.description("计算CSAT分数")
|
|
58
|
+
.option("--scores <json>", "评分JSON数组")
|
|
59
|
+
.option("--scale <s>", "量表类型: 5-point 或 7-point", "5-point")
|
|
60
|
+
.action(async (_opts, cmd) => {
|
|
61
|
+
try {
|
|
62
|
+
const m = getMerged(cmd);
|
|
63
|
+
requireField(m, "scores");
|
|
64
|
+
const scores = JSON.parse(m.scores);
|
|
65
|
+
if (!Array.isArray(scores)) {
|
|
66
|
+
throw new CliError("INPUT_ERROR", "--scores must be a JSON array of numbers");
|
|
67
|
+
}
|
|
68
|
+
const result = calculateCsat(scores, m.scale);
|
|
69
|
+
formatOutput(result, program.opts());
|
|
70
|
+
}
|
|
71
|
+
catch (e) {
|
|
72
|
+
handleError(e);
|
|
73
|
+
}
|
|
74
|
+
});
|
|
75
|
+
// --- anomalies ---
|
|
76
|
+
analytics
|
|
77
|
+
.command("anomalies")
|
|
78
|
+
.description("检测异常答卷")
|
|
79
|
+
.option("--responses <json>", "答卷数据JSON数组")
|
|
80
|
+
.action(async (_opts, cmd) => {
|
|
81
|
+
try {
|
|
82
|
+
const m = getMerged(cmd);
|
|
83
|
+
requireField(m, "responses");
|
|
84
|
+
const responses = JSON.parse(m.responses);
|
|
85
|
+
if (!Array.isArray(responses)) {
|
|
86
|
+
throw new CliError("INPUT_ERROR", "--responses must be a JSON array");
|
|
87
|
+
}
|
|
88
|
+
const result = detectAnomalies(responses);
|
|
89
|
+
formatOutput(result, program.opts());
|
|
90
|
+
}
|
|
91
|
+
catch (e) {
|
|
92
|
+
handleError(e);
|
|
93
|
+
}
|
|
94
|
+
});
|
|
95
|
+
// --- compare ---
|
|
96
|
+
analytics
|
|
97
|
+
.command("compare")
|
|
98
|
+
.description("对比两组指标")
|
|
99
|
+
.option("--set_a <json>", "指标集A JSON对象")
|
|
100
|
+
.option("--set_b <json>", "指标集B JSON对象")
|
|
101
|
+
.action(async (_opts, cmd) => {
|
|
102
|
+
try {
|
|
103
|
+
const m = getMerged(cmd);
|
|
104
|
+
requireField(m, "set_a");
|
|
105
|
+
requireField(m, "set_b");
|
|
106
|
+
const setA = JSON.parse(m.set_a);
|
|
107
|
+
const setB = JSON.parse(m.set_b);
|
|
108
|
+
const result = compareMetrics(setA, setB);
|
|
109
|
+
formatOutput(result, program.opts());
|
|
110
|
+
}
|
|
111
|
+
catch (e) {
|
|
112
|
+
handleError(e);
|
|
113
|
+
}
|
|
114
|
+
});
|
|
115
|
+
// --- decode-push ---
|
|
116
|
+
analytics
|
|
117
|
+
.command("decode-push")
|
|
118
|
+
.description("解码推送回调数据")
|
|
119
|
+
.option("--payload <s>", "加密数据")
|
|
120
|
+
.option("--app_key <s>", "AppKey")
|
|
121
|
+
.option("--signature <s>", "签名")
|
|
122
|
+
.option("--raw_body <s>", "原始请求体")
|
|
123
|
+
.action(async (_opts, cmd) => {
|
|
124
|
+
try {
|
|
125
|
+
const m = getMerged(cmd);
|
|
126
|
+
requireField(m, "payload");
|
|
127
|
+
requireField(m, "app_key");
|
|
128
|
+
const result = decodePushPayload(m.payload, m.app_key, m.signature, m.raw_body);
|
|
129
|
+
formatOutput(result, program.opts());
|
|
130
|
+
}
|
|
131
|
+
catch (e) {
|
|
132
|
+
handleError(e);
|
|
133
|
+
}
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
//# sourceMappingURL=analytics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analytics.js","sourceRoot":"","sources":["../../src/commands/analytics.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { queryContacts, addContacts, deleteContacts, } from "wjx-api-sdk";
|
|
2
|
+
import { executeCommand, requireField } from "../lib/command-helpers.js";
|
|
3
|
+
export function registerContactsCommands(program) {
|
|
4
|
+
const contacts = program.command("contacts").description("通讯录管理");
|
|
5
|
+
// --- query ---
|
|
6
|
+
contacts
|
|
7
|
+
.command("query")
|
|
8
|
+
.description("查询联系人")
|
|
9
|
+
.option("--uid <s>", "用户ID")
|
|
10
|
+
.option("--corpid <s>", "企业ID")
|
|
11
|
+
.action(async (_opts, cmd) => {
|
|
12
|
+
await executeCommand(program, cmd, queryContacts, (m) => {
|
|
13
|
+
requireField(m, "uid");
|
|
14
|
+
return { uid: m.uid, corpid: m.corpid };
|
|
15
|
+
});
|
|
16
|
+
});
|
|
17
|
+
// --- add ---
|
|
18
|
+
contacts
|
|
19
|
+
.command("add")
|
|
20
|
+
.description("添加联系人")
|
|
21
|
+
.option("--users <json>", "用户JSON数组")
|
|
22
|
+
.option("--corpid <s>", "企业ID")
|
|
23
|
+
.option("--auto_create_udept", "自动创建部门")
|
|
24
|
+
.option("--auto_create_tag", "自动创建标签")
|
|
25
|
+
.action(async (_opts, cmd) => {
|
|
26
|
+
await executeCommand(program, cmd, addContacts, (m) => {
|
|
27
|
+
requireField(m, "users");
|
|
28
|
+
return {
|
|
29
|
+
users: m.users,
|
|
30
|
+
corpid: m.corpid,
|
|
31
|
+
auto_create_udept: m.auto_create_udept,
|
|
32
|
+
auto_create_tag: m.auto_create_tag,
|
|
33
|
+
};
|
|
34
|
+
});
|
|
35
|
+
});
|
|
36
|
+
// --- delete ---
|
|
37
|
+
contacts
|
|
38
|
+
.command("delete")
|
|
39
|
+
.description("删除联系人")
|
|
40
|
+
.option("--uids <s>", "用户ID列表(逗号分隔)")
|
|
41
|
+
.option("--corpid <s>", "企业ID")
|
|
42
|
+
.action(async (_opts, cmd) => {
|
|
43
|
+
await executeCommand(program, cmd, deleteContacts, (m) => {
|
|
44
|
+
requireField(m, "uids");
|
|
45
|
+
return { uids: m.uids, corpid: m.corpid };
|
|
46
|
+
});
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=contacts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contacts.js","sourceRoot":"","sources":["../../src/commands/contacts.ts"],"names":[],"mappings":"AACA,OAAO,EACL,aAAa,EACb,WAAW,EACX,cAAc,GACf,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAEzE,MAAM,UAAU,wBAAwB,CAAC,OAAgB;IACvD,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IAElE,gBAAgB;IAChB,QAAQ;SACL,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,OAAO,CAAC;SACpB,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC;SAC3B,MAAM,CAAC,cAAc,EAAE,MAAM,CAAC;SAC9B,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;QAC3B,MAAM,cAAc,CAAC,OAAO,EAAE,GAAG,EAAE,aAAa,EAAE,CAAC,CAAC,EAAE,EAAE;YACtD,YAAY,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;YACvB,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;QAC1C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEL,cAAc;IACd,QAAQ;SACL,OAAO,CAAC,KAAK,CAAC;SACd,WAAW,CAAC,OAAO,CAAC;SACpB,MAAM,CAAC,gBAAgB,EAAE,UAAU,CAAC;SACpC,MAAM,CAAC,cAAc,EAAE,MAAM,CAAC;SAC9B,MAAM,CAAC,qBAAqB,EAAE,QAAQ,CAAC;SACvC,MAAM,CAAC,mBAAmB,EAAE,QAAQ,CAAC;SACrC,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;QAC3B,MAAM,cAAc,CAAC,OAAO,EAAE,GAAG,EAAE,WAAW,EAAE,CAAC,CAAC,EAAE,EAAE;YACpD,YAAY,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;YACzB,OAAO;gBACL,KAAK,EAAE,CAAC,CAAC,KAAK;gBACd,MAAM,EAAE,CAAC,CAAC,MAAM;gBAChB,iBAAiB,EAAE,CAAC,CAAC,iBAAiB;gBACtC,eAAe,EAAE,CAAC,CAAC,eAAe;aACnC,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEL,iBAAiB;IACjB,QAAQ;SACL,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,OAAO,CAAC;SACpB,MAAM,CAAC,YAAY,EAAE,cAAc,CAAC;SACpC,MAAM,CAAC,cAAc,EAAE,MAAM,CAAC;SAC9B,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;QAC3B,MAAM,cAAc,CAAC,OAAO,EAAE,GAAG,EAAE,cAAc,EAAE,CAAC,CAAC,EAAE,EAAE;YACvD,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;YACxB,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;QAC5C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { listDepartments, addDepartment, modifyDepartment, deleteDepartment, } from "wjx-api-sdk";
|
|
2
|
+
import { executeCommand, requireField } from "../lib/command-helpers.js";
|
|
3
|
+
export function registerDepartmentCommands(program) {
|
|
4
|
+
const department = program.command("department").description("部门管理");
|
|
5
|
+
// --- list ---
|
|
6
|
+
department
|
|
7
|
+
.command("list")
|
|
8
|
+
.description("列出部门")
|
|
9
|
+
.option("--corpid <s>", "企业ID")
|
|
10
|
+
.action(async (_opts, cmd) => {
|
|
11
|
+
await executeCommand(program, cmd, listDepartments, (m) => ({
|
|
12
|
+
corpid: m.corpid,
|
|
13
|
+
}));
|
|
14
|
+
});
|
|
15
|
+
// --- add ---
|
|
16
|
+
department
|
|
17
|
+
.command("add")
|
|
18
|
+
.description("添加部门")
|
|
19
|
+
.option("--depts <json>", "部门路径JSON数组")
|
|
20
|
+
.option("--corpid <s>", "企业ID")
|
|
21
|
+
.action(async (_opts, cmd) => {
|
|
22
|
+
await executeCommand(program, cmd, addDepartment, (m) => {
|
|
23
|
+
requireField(m, "depts");
|
|
24
|
+
return { depts: m.depts, corpid: m.corpid };
|
|
25
|
+
});
|
|
26
|
+
});
|
|
27
|
+
// --- modify ---
|
|
28
|
+
department
|
|
29
|
+
.command("modify")
|
|
30
|
+
.description("修改部门")
|
|
31
|
+
.option("--depts <json>", "部门对象JSON数组")
|
|
32
|
+
.option("--corpid <s>", "企业ID")
|
|
33
|
+
.action(async (_opts, cmd) => {
|
|
34
|
+
await executeCommand(program, cmd, modifyDepartment, (m) => {
|
|
35
|
+
requireField(m, "depts");
|
|
36
|
+
return { depts: m.depts, corpid: m.corpid };
|
|
37
|
+
});
|
|
38
|
+
});
|
|
39
|
+
// --- delete ---
|
|
40
|
+
department
|
|
41
|
+
.command("delete")
|
|
42
|
+
.description("删除部门")
|
|
43
|
+
.option("--type <s>", "类型: 1=按ID, 2=按名称")
|
|
44
|
+
.option("--depts <json>", "部门标识JSON数组")
|
|
45
|
+
.option("--corpid <s>", "企业ID")
|
|
46
|
+
.option("--del_child", "删除子部门")
|
|
47
|
+
.action(async (_opts, cmd) => {
|
|
48
|
+
await executeCommand(program, cmd, deleteDepartment, (m) => {
|
|
49
|
+
requireField(m, "type");
|
|
50
|
+
requireField(m, "depts");
|
|
51
|
+
return {
|
|
52
|
+
type: m.type,
|
|
53
|
+
depts: m.depts,
|
|
54
|
+
corpid: m.corpid,
|
|
55
|
+
del_child: m.del_child,
|
|
56
|
+
};
|
|
57
|
+
});
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=department.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"department.js","sourceRoot":"","sources":["../../src/commands/department.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import { listSurveys } from "wjx-api-sdk";
|
|
2
|
+
import { getCredentials } from "../lib/auth.js";
|
|
3
|
+
import { formatOutput } from "../lib/output.js";
|
|
4
|
+
import { handleError } from "../lib/errors.js";
|
|
5
|
+
export function registerDiagnosticCommands(program) {
|
|
6
|
+
// --- whoami ---
|
|
7
|
+
program
|
|
8
|
+
.command("whoami")
|
|
9
|
+
.description("验证 Token 并显示账号信息")
|
|
10
|
+
.action(async () => {
|
|
11
|
+
try {
|
|
12
|
+
const creds = getCredentials(program.opts());
|
|
13
|
+
const result = await listSurveys({ page_index: 1, page_size: 1 }, creds);
|
|
14
|
+
if (result.result === false) {
|
|
15
|
+
// Token invalid or API error
|
|
16
|
+
formatOutput({ authenticated: false, error: result.errormsg || "Token 无效" }, program.opts());
|
|
17
|
+
process.exit(1);
|
|
18
|
+
}
|
|
19
|
+
// Extract useful info from the response
|
|
20
|
+
const data = result;
|
|
21
|
+
formatOutput({
|
|
22
|
+
authenticated: true,
|
|
23
|
+
total_surveys: data.total ?? data.Total ?? null,
|
|
24
|
+
}, program.opts());
|
|
25
|
+
}
|
|
26
|
+
catch (e) {
|
|
27
|
+
handleError(e);
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
// --- doctor ---
|
|
31
|
+
program
|
|
32
|
+
.command("doctor")
|
|
33
|
+
.description("环境诊断(Token、网络、SDK 版本)")
|
|
34
|
+
.action(async () => {
|
|
35
|
+
try {
|
|
36
|
+
const checks = [];
|
|
37
|
+
// 1. Node version
|
|
38
|
+
const nodeVersion = process.version;
|
|
39
|
+
const major = parseInt(nodeVersion.slice(1), 10);
|
|
40
|
+
checks.push({
|
|
41
|
+
check: "Node.js",
|
|
42
|
+
status: major >= 20 ? "ok" : "warn",
|
|
43
|
+
detail: `${nodeVersion}${major < 20 ? " (建议 >= 20)" : ""}`,
|
|
44
|
+
});
|
|
45
|
+
// 2. WJX_TOKEN set?
|
|
46
|
+
const token = program.opts().token || process.env.WJX_TOKEN;
|
|
47
|
+
checks.push({
|
|
48
|
+
check: "WJX_TOKEN",
|
|
49
|
+
status: token ? "ok" : "fail",
|
|
50
|
+
detail: token ? `已设置 (${token.slice(0, 8)}...)` : "未设置",
|
|
51
|
+
});
|
|
52
|
+
// 3. WJX_BASE_URL
|
|
53
|
+
const baseUrl = process.env.WJX_BASE_URL || "https://www.wjx.cn";
|
|
54
|
+
checks.push({
|
|
55
|
+
check: "WJX_BASE_URL",
|
|
56
|
+
status: "ok",
|
|
57
|
+
detail: baseUrl,
|
|
58
|
+
});
|
|
59
|
+
// 4. API connectivity
|
|
60
|
+
if (token) {
|
|
61
|
+
try {
|
|
62
|
+
const creds = { token };
|
|
63
|
+
const result = await listSurveys({ page_index: 1, page_size: 1 }, creds);
|
|
64
|
+
if (result.result === false) {
|
|
65
|
+
checks.push({
|
|
66
|
+
check: "API 连接",
|
|
67
|
+
status: "fail",
|
|
68
|
+
detail: result.errormsg || "API 请求失败",
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
checks.push({
|
|
73
|
+
check: "API 连接",
|
|
74
|
+
status: "ok",
|
|
75
|
+
detail: "正常",
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
catch (err) {
|
|
80
|
+
checks.push({
|
|
81
|
+
check: "API 连接",
|
|
82
|
+
status: "fail",
|
|
83
|
+
detail: err instanceof Error ? err.message : String(err),
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
checks.push({
|
|
89
|
+
check: "API 连接",
|
|
90
|
+
status: "skip",
|
|
91
|
+
detail: "Token 未设置,跳过",
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
// 5. SDK version
|
|
95
|
+
checks.push({
|
|
96
|
+
check: "wjx-api-sdk",
|
|
97
|
+
status: "ok",
|
|
98
|
+
detail: "v1.0.0",
|
|
99
|
+
});
|
|
100
|
+
const allOk = checks.every((c) => c.status === "ok" || c.status === "skip");
|
|
101
|
+
formatOutput({ ok: allOk, checks }, program.opts());
|
|
102
|
+
if (!allOk)
|
|
103
|
+
process.exit(1);
|
|
104
|
+
}
|
|
105
|
+
catch (e) {
|
|
106
|
+
handleError(e);
|
|
107
|
+
}
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=diagnostics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diagnostics.js","sourceRoot":"","sources":["../../src/commands/diagnostics.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,MAAM,UAAU,0BAA0B,CAAC,OAAgB;IACzD,iBAAiB;IACjB,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,kBAAkB,CAAC;SAC/B,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,cAAc,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;YAC7C,MAAM,MAAM,GAAG,MAAM,WAAW,CAC9B,EAAE,UAAU,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,EAC/B,KAAK,CACN,CAAC;YAEF,IAAI,MAAM,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;gBAC5B,6BAA6B;gBAC7B,YAAY,CAAC,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,QAAQ,IAAI,UAAU,EAAE,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;gBAC7F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YAED,wCAAwC;YACxC,MAAM,IAAI,GAAG,MAA4C,CAAC;YAC1D,YAAY,CAAC;gBACX,aAAa,EAAE,IAAI;gBACnB,aAAa,EAAE,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI;aAChD,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QACrB,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,WAAW,CAAC,CAAC,CAAC,CAAC;QACjB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,iBAAiB;IACjB,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,uBAAuB,CAAC;SACpC,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,IAAI,CAAC;YACH,MAAM,MAAM,GAA6D,EAAE,CAAC;YAE5E,kBAAkB;YAClB,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC;YACpC,MAAM,KAAK,GAAG,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACjD,MAAM,CAAC,IAAI,CAAC;gBACV,KAAK,EAAE,SAAS;gBAChB,MAAM,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM;gBACnC,MAAM,EAAE,GAAG,WAAW,GAAG,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,EAAE;aAC3D,CAAC,CAAC;YAEH,oBAAoB;YACpB,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC;YAC5D,MAAM,CAAC,IAAI,CAAC;gBACV,KAAK,EAAE,WAAW;gBAClB,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM;gBAC7B,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,QAAQ,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK;aACxD,CAAC,CAAC;YAEH,kBAAkB;YAClB,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,oBAAoB,CAAC;YACjE,MAAM,CAAC,IAAI,CAAC;gBACV,KAAK,EAAE,cAAc;gBACrB,MAAM,EAAE,IAAI;gBACZ,MAAM,EAAE,OAAO;aAChB,CAAC,CAAC;YAEH,sBAAsB;YACtB,IAAI,KAAK,EAAE,CAAC;gBACV,IAAI,CAAC;oBACH,MAAM,KAAK,GAAG,EAAE,KAAK,EAAE,CAAC;oBACxB,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;oBACzE,IAAI,MAAM,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;wBAC5B,MAAM,CAAC,IAAI,CAAC;4BACV,KAAK,EAAE,QAAQ;4BACf,MAAM,EAAE,MAAM;4BACd,MAAM,EAAE,MAAM,CAAC,QAAQ,IAAI,UAAU;yBACtC,CAAC,CAAC;oBACL,CAAC;yBAAM,CAAC;wBACN,MAAM,CAAC,IAAI,CAAC;4BACV,KAAK,EAAE,QAAQ;4BACf,MAAM,EAAE,IAAI;4BACZ,MAAM,EAAE,IAAI;yBACb,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,MAAM,CAAC,IAAI,CAAC;wBACV,KAAK,EAAE,QAAQ;wBACf,MAAM,EAAE,MAAM;wBACd,MAAM,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;qBACzD,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,IAAI,CAAC;oBACV,KAAK,EAAE,QAAQ;oBACf,MAAM,EAAE,MAAM;oBACd,MAAM,EAAE,cAAc;iBACvB,CAAC,CAAC;YACL,CAAC;YAED,iBAAiB;YACjB,MAAM,CAAC,IAAI,CAAC;gBACV,KAAK,EAAE,aAAa;gBACpB,MAAM,EAAE,IAAI;gBACZ,MAAM,EAAE,QAAQ;aACjB,CAAC,CAAC;YAEH,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,IAAI,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC;YAC5E,YAAY,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;YAEpD,IAAI,CAAC,KAAK;gBAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC9B,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,WAAW,CAAC,CAAC,CAAC,CAAC;QACjB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
|