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.
Files changed (54) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +836 -0
  3. package/dist/commands/account.d.ts +2 -0
  4. package/dist/commands/account.js +100 -0
  5. package/dist/commands/account.js.map +1 -0
  6. package/dist/commands/admin.d.ts +2 -0
  7. package/dist/commands/admin.js +42 -0
  8. package/dist/commands/admin.js.map +1 -0
  9. package/dist/commands/analytics.d.ts +2 -0
  10. package/dist/commands/analytics.js +136 -0
  11. package/dist/commands/analytics.js.map +1 -0
  12. package/dist/commands/contacts.d.ts +2 -0
  13. package/dist/commands/contacts.js +49 -0
  14. package/dist/commands/contacts.js.map +1 -0
  15. package/dist/commands/department.d.ts +2 -0
  16. package/dist/commands/department.js +60 -0
  17. package/dist/commands/department.js.map +1 -0
  18. package/dist/commands/diagnostics.d.ts +2 -0
  19. package/dist/commands/diagnostics.js +110 -0
  20. package/dist/commands/diagnostics.js.map +1 -0
  21. package/dist/commands/response.d.ts +2 -0
  22. package/dist/commands/response.js +241 -0
  23. package/dist/commands/response.js.map +1 -0
  24. package/dist/commands/sso.d.ts +2 -0
  25. package/dist/commands/sso.js +79 -0
  26. package/dist/commands/sso.js.map +1 -0
  27. package/dist/commands/survey.d.ts +2 -0
  28. package/dist/commands/survey.js +247 -0
  29. package/dist/commands/survey.js.map +1 -0
  30. package/dist/commands/tag.d.ts +2 -0
  31. package/dist/commands/tag.js +66 -0
  32. package/dist/commands/tag.js.map +1 -0
  33. package/dist/commands/user-system.d.ts +2 -0
  34. package/dist/commands/user-system.js +137 -0
  35. package/dist/commands/user-system.js.map +1 -0
  36. package/dist/index.d.ts +2 -0
  37. package/dist/index.js +67 -0
  38. package/dist/index.js.map +1 -0
  39. package/dist/lib/auth.d.ts +4 -0
  40. package/dist/lib/auth.js +9 -0
  41. package/dist/lib/auth.js.map +1 -0
  42. package/dist/lib/command-helpers.d.ts +25 -0
  43. package/dist/lib/command-helpers.js +64 -0
  44. package/dist/lib/command-helpers.js.map +1 -0
  45. package/dist/lib/errors.d.ts +14 -0
  46. package/dist/lib/errors.js +52 -0
  47. package/dist/lib/errors.js.map +1 -0
  48. package/dist/lib/output.d.ts +6 -0
  49. package/dist/lib/output.js +59 -0
  50. package/dist/lib/output.js.map +1 -0
  51. package/dist/lib/stdin.d.ts +10 -0
  52. package/dist/lib/stdin.js +51 -0
  53. package/dist/lib/stdin.js.map +1 -0
  54. package/package.json +43 -0
@@ -0,0 +1,2 @@
1
+ import { Command } from "commander";
2
+ export declare function registerAccountCommands(program: Command): void;
@@ -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,2 @@
1
+ import { Command } from "commander";
2
+ export declare function registerAdminCommands(program: Command): void;
@@ -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,2 @@
1
+ import { Command } from "commander";
2
+ export declare function registerAnalyticsCommands(program: Command): void;
@@ -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,2 @@
1
+ import { Command } from "commander";
2
+ export declare function registerContactsCommands(program: Command): void;
@@ -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,2 @@
1
+ import { Command } from "commander";
2
+ export declare function registerDepartmentCommands(program: Command): void;
@@ -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,2 @@
1
+ import { Command } from "commander";
2
+ export declare function registerDiagnosticCommands(program: Command): void;
@@ -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":"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"}
@@ -0,0 +1,2 @@
1
+ import { Command } from "commander";
2
+ export declare function registerResponseCommands(program: Command): void;