wjx-cli 0.1.6 → 0.1.8
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 +41 -8
- package/dist/commands/completion.d.ts +2 -0
- package/dist/commands/completion.js +123 -0
- package/dist/commands/completion.js.map +1 -0
- package/dist/commands/diagnostics.js +1 -5
- package/dist/commands/diagnostics.js.map +1 -1
- package/dist/commands/init.js +2 -6
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/reference.d.ts +2 -0
- package/dist/commands/reference.js +379 -0
- package/dist/commands/reference.js.map +1 -0
- package/dist/commands/survey.js +74 -2
- package/dist/commands/survey.js.map +1 -1
- package/dist/index.js +19 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/command-helpers.d.ts +12 -1
- package/dist/lib/command-helpers.js +44 -3
- package/dist/lib/command-helpers.js.map +1 -1
- package/dist/lib/completions.d.ts +6 -0
- package/dist/lib/completions.js +49 -0
- package/dist/lib/completions.js.map +1 -0
- package/dist/lib/config.d.ts +5 -0
- package/dist/lib/config.js +5 -0
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/mask.d.ts +10 -0
- package/dist/lib/mask.js +19 -0
- package/dist/lib/mask.js.map +1 -0
- package/dist/lib/stdin.js +3 -6
- package/dist/lib/stdin.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
[](LICENSE)
|
|
6
6
|
[](https://nodejs.org/)
|
|
7
7
|
[](https://www.npmjs.com/package/wjx-cli)
|
|
8
|
-
[](__tests__/cli.test.mjs)
|
|
9
9
|
|
|
10
10
|
wjx-cli 是 [`wjx-ai-kit`](../) monorepo 的命令行入口,将 [wjx-api-sdk](../wjx-api-sdk/) 的 50+ 函数直接暴露为终端命令。设计目标:**让 AI Agent 和人类开发者都能用一行命令操作问卷星 OpenAPI**。
|
|
11
11
|
|
|
@@ -50,6 +50,8 @@ wjx-cli 是 [`wjx-ai-kit`](../) monorepo 的命令行入口,将 [wjx-api-sdk](
|
|
|
50
50
|
- **表格输出** — `--table` 切换为人类可读的 `console.table` 格式
|
|
51
51
|
- **56 个子命令** — 覆盖问卷、答卷、通讯录、部门、管理员、标签、用户体系、子账号、SSO、数据分析
|
|
52
52
|
- **9 个本地命令** — SSO URL 生成和 analytics 计算无需 API Key,离线可用
|
|
53
|
+
- **Shell 补全** — `wjx completion bash/zsh/fish` 生成自动补全脚本
|
|
54
|
+
- **Dry-run 预览** — `--dry-run` 预览 API 请求(URL/Headers/Body)不实��发送
|
|
53
55
|
- **基于 wjx-api-sdk** — 直接调用 SDK 函数,类型安全,行为与 API 一致
|
|
54
56
|
|
|
55
57
|
---
|
|
@@ -125,8 +127,9 @@ wjx-ai-kit/ # monorepo root
|
|
|
125
127
|
└── wjx-cli/ # ← 本项目
|
|
126
128
|
├── src/
|
|
127
129
|
│ ├── index.ts # Commander 入口 + 全局 preAction hook
|
|
128
|
-
│ ├── commands/ #
|
|
130
|
+
│ ├── commands/ # 13 个命令模块(每模块 1 个 register 函数)
|
|
129
131
|
│ │ ├── init.ts # wjx init 交互式配置向导
|
|
132
|
+
│ │ ├── completion.ts # wjx completion bash/zsh/fish
|
|
130
133
|
│ │ ├── survey.ts # 14 subcommands
|
|
131
134
|
│ │ ├── response.ts # 11 subcommands
|
|
132
135
|
│ │ ├── contacts.ts # 3 subcommands
|
|
@@ -140,13 +143,14 @@ wjx-ai-kit/ # monorepo root
|
|
|
140
143
|
│ │ └── diagnostics.ts # 2 subcommands(whoami + doctor)
|
|
141
144
|
│ └── lib/
|
|
142
145
|
│ ├── config.ts # ~/.wjxrc 配置文件读写 + applyConfigToEnv
|
|
143
|
-
│ ├── command-helpers.ts # executeCommand + strictInt + requireField
|
|
146
|
+
│ ├── command-helpers.ts # executeCommand + strictInt + requireField + dry-run
|
|
144
147
|
│ ├── auth.ts # API Key 获取(--api-key > env > config)
|
|
145
148
|
│ ├── output.ts # JSON / table 格式化
|
|
146
149
|
│ ├── errors.ts # CliError + exit code 路由
|
|
147
|
-
│
|
|
150
|
+
│ ├── stdin.ts # stdin JSON 读取 + source-aware merge
|
|
151
|
+
│ └── completions.ts # Shell 补全候选项生成
|
|
148
152
|
└── __tests__/
|
|
149
|
-
└── cli.test.mjs #
|
|
153
|
+
└── cli.test.mjs # 96 个端到端测试
|
|
150
154
|
```
|
|
151
155
|
|
|
152
156
|
**数据流:** `CLI args / stdin` → `Commander parse` → `executeCommand()` → `wjx-api-sdk function` → `stdout JSON / stderr error`
|
|
@@ -160,8 +164,8 @@ wjx-ai-kit/ # monorepo root
|
|
|
160
164
|
| `--api-key <apiKey>` | WJX API Key(或设置 `WJX_API_KEY` 环境变量) |
|
|
161
165
|
| `--json` | JSON 输出(默认) |
|
|
162
166
|
| `--table` | 表格输出(`console.table` 格式) |
|
|
163
|
-
| `--verbose` | 详细输出 |
|
|
164
167
|
| `--stdin` | 从 stdin 读取 JSON 参数(见 [stdin 管道输入](#stdin-管道输入)) |
|
|
168
|
+
| `--dry-run` | 预览 API 请求(不实际发送,输出到 stderr) |
|
|
165
169
|
| `--version` | 显示版本号 |
|
|
166
170
|
| `--help` | 显示帮助信息 |
|
|
167
171
|
|
|
@@ -550,6 +554,34 @@ wjx whoami # 验证 API Key 并显示账号信息
|
|
|
550
554
|
wjx doctor # 环境诊断(配置文件、Node 版本、API Key、API 连接、SDK 版本)
|
|
551
555
|
```
|
|
552
556
|
|
|
557
|
+
### Shell 补全
|
|
558
|
+
|
|
559
|
+
```bash
|
|
560
|
+
wjx completion bash # 输出 Bash 补全脚本
|
|
561
|
+
wjx completion zsh # 输出 Zsh 补全脚本
|
|
562
|
+
wjx completion fish # 输出 Fish 补全脚本
|
|
563
|
+
wjx completion install # 自动安装到 Shell 配置文件
|
|
564
|
+
|
|
565
|
+
# 手动安装示例(Bash)
|
|
566
|
+
eval "$(wjx completion bash)"
|
|
567
|
+
```
|
|
568
|
+
|
|
569
|
+
### Dry-run 预览
|
|
570
|
+
|
|
571
|
+
```bash
|
|
572
|
+
wjx survey list --dry-run --api-key your_key
|
|
573
|
+
# 输出到 stderr:
|
|
574
|
+
# {
|
|
575
|
+
# "dry_run": true,
|
|
576
|
+
# "request": {
|
|
577
|
+
# "method": "POST",
|
|
578
|
+
# "url": "https://www.wjx.cn/openapi/...",
|
|
579
|
+
# "headers": { "Authorization": "Bearer your****_key" },
|
|
580
|
+
# "body": "{...}"
|
|
581
|
+
# }
|
|
582
|
+
# }
|
|
583
|
+
```
|
|
584
|
+
|
|
553
585
|
---
|
|
554
586
|
|
|
555
587
|
## stdin 管道输入
|
|
@@ -774,11 +806,12 @@ WJX_API_KEY=xxx node dist/index.js survey list
|
|
|
774
806
|
```
|
|
775
807
|
src/
|
|
776
808
|
├── index.ts # 入口 + Commander program
|
|
777
|
-
├── commands/ #
|
|
809
|
+
├── commands/ # 13 个命令模块
|
|
778
810
|
│ └── *.ts # 每个文件导出 register*Commands(program)
|
|
779
811
|
└── lib/
|
|
780
812
|
├── config.ts # ~/.wjxrc 配置文件读写
|
|
781
|
-
├── command-helpers.ts # executeCommand / strictInt / requireField
|
|
813
|
+
├── command-helpers.ts # executeCommand / strictInt / requireField / dry-run
|
|
814
|
+
├── completions.ts # Shell 补全候选项生成
|
|
782
815
|
├── auth.ts # API Key 获取(--api-key > env > config)
|
|
783
816
|
├── output.ts # JSON / table 输出
|
|
784
817
|
├── errors.ts # CliError + 退出码路由
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import { homedir } from "node:os";
|
|
2
|
+
import { writeFileSync, readFileSync, existsSync } from "node:fs";
|
|
3
|
+
import { join } from "node:path";
|
|
4
|
+
import { CliError, handleError } from "../lib/errors.js";
|
|
5
|
+
const BASH_SCRIPT = `
|
|
6
|
+
_wjx_completions() {
|
|
7
|
+
local cur_word="\${COMP_WORDS[COMP_CWORD]}"
|
|
8
|
+
local line="\${COMP_LINE}"
|
|
9
|
+
local point="\${COMP_POINT}"
|
|
10
|
+
|
|
11
|
+
local candidates
|
|
12
|
+
candidates=$(wjx --get-completions "$point" "$line" 2>/dev/null)
|
|
13
|
+
|
|
14
|
+
COMPREPLY=($(compgen -W "$candidates" -- "$cur_word"))
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
complete -F _wjx_completions wjx
|
|
18
|
+
`.trim();
|
|
19
|
+
const ZSH_SCRIPT = `
|
|
20
|
+
_wjx_completions() {
|
|
21
|
+
local line="\${words[*]}"
|
|
22
|
+
local point="\${CURSOR}"
|
|
23
|
+
|
|
24
|
+
local candidates
|
|
25
|
+
candidates=("\${(@f)$(wjx --get-completions "$point" "$line" 2>/dev/null)}")
|
|
26
|
+
|
|
27
|
+
local -a completions
|
|
28
|
+
for c in "\${candidates[@]}"; do
|
|
29
|
+
[[ -n "$c" ]] && completions+=("$c")
|
|
30
|
+
done
|
|
31
|
+
_describe 'wjx' completions
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
compdef _wjx_completions wjx
|
|
35
|
+
`.trim();
|
|
36
|
+
const FISH_SCRIPT = `
|
|
37
|
+
complete -c wjx -f -a '(wjx --get-completions (commandline -C) (commandline) 2>/dev/null)'
|
|
38
|
+
`.trim();
|
|
39
|
+
const PROFILE_FILES = {
|
|
40
|
+
bash: ".bashrc",
|
|
41
|
+
zsh: ".zshrc",
|
|
42
|
+
fish: join(".config", "fish", "config.fish"),
|
|
43
|
+
};
|
|
44
|
+
const EVAL_LINES = {
|
|
45
|
+
bash: 'eval "$(wjx completion bash)"',
|
|
46
|
+
zsh: 'eval "$(wjx completion zsh)"',
|
|
47
|
+
fish: "wjx completion fish | source",
|
|
48
|
+
};
|
|
49
|
+
function detectShell() {
|
|
50
|
+
const shell = process.env.SHELL || "";
|
|
51
|
+
if (shell.includes("zsh"))
|
|
52
|
+
return "zsh";
|
|
53
|
+
if (shell.includes("bash"))
|
|
54
|
+
return "bash";
|
|
55
|
+
if (shell.includes("fish"))
|
|
56
|
+
return "fish";
|
|
57
|
+
return null;
|
|
58
|
+
}
|
|
59
|
+
export function registerCompletionCommands(program) {
|
|
60
|
+
const completion = program
|
|
61
|
+
.command("completion")
|
|
62
|
+
.description("生成 Shell 自动补全脚本");
|
|
63
|
+
completion
|
|
64
|
+
.command("bash")
|
|
65
|
+
.description("输出 Bash 补全脚本")
|
|
66
|
+
.action(() => {
|
|
67
|
+
console.log(BASH_SCRIPT);
|
|
68
|
+
});
|
|
69
|
+
completion
|
|
70
|
+
.command("zsh")
|
|
71
|
+
.description("输出 Zsh 补全脚本")
|
|
72
|
+
.action(() => {
|
|
73
|
+
console.log(ZSH_SCRIPT);
|
|
74
|
+
});
|
|
75
|
+
completion
|
|
76
|
+
.command("fish")
|
|
77
|
+
.description("输出 Fish 补全脚本")
|
|
78
|
+
.action(() => {
|
|
79
|
+
console.log(FISH_SCRIPT);
|
|
80
|
+
});
|
|
81
|
+
completion
|
|
82
|
+
.command("install")
|
|
83
|
+
.description("自动安装补全脚本到 Shell 配置文件")
|
|
84
|
+
.action(() => {
|
|
85
|
+
try {
|
|
86
|
+
const shell = detectShell();
|
|
87
|
+
if (!shell) {
|
|
88
|
+
throw new CliError("INPUT_ERROR", "无法检测 Shell 类型。请手动运行:\n" +
|
|
89
|
+
" Bash: eval \"$(wjx completion bash)\"\n" +
|
|
90
|
+
" Zsh: eval \"$(wjx completion zsh)\"\n" +
|
|
91
|
+
" Fish: wjx completion fish | source");
|
|
92
|
+
}
|
|
93
|
+
const profilePath = join(homedir(), PROFILE_FILES[shell]);
|
|
94
|
+
const evalLine = EVAL_LINES[shell];
|
|
95
|
+
const marker = "# wjx shell completions";
|
|
96
|
+
// Check for existing installation
|
|
97
|
+
try {
|
|
98
|
+
if (existsSync(profilePath)) {
|
|
99
|
+
const content = readFileSync(profilePath, "utf8");
|
|
100
|
+
if (content.includes(evalLine) || content.includes("wjx completion")) {
|
|
101
|
+
process.stderr.write(`补全脚本已安装在 ${profilePath}\n`);
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
catch {
|
|
107
|
+
// Profile unreadable — proceed to append
|
|
108
|
+
}
|
|
109
|
+
const isNew = !existsSync(profilePath);
|
|
110
|
+
const snippet = `\n${marker}\n${evalLine}\n`;
|
|
111
|
+
writeFileSync(profilePath, snippet, { flag: "a" });
|
|
112
|
+
if (isNew) {
|
|
113
|
+
process.stderr.write(`已创建新文件 ${profilePath}\n`);
|
|
114
|
+
}
|
|
115
|
+
process.stderr.write(`已添加到 ${profilePath}\n`);
|
|
116
|
+
process.stderr.write(`运行以下命令立即生效:\n source ${profilePath}\n`);
|
|
117
|
+
}
|
|
118
|
+
catch (e) {
|
|
119
|
+
handleError(e);
|
|
120
|
+
}
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
//# sourceMappingURL=completion.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"completion.js","sourceRoot":"","sources":["../../src/commands/completion.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,13 +4,9 @@ import { getCredentials } from "../lib/auth.js";
|
|
|
4
4
|
import { formatOutput } from "../lib/output.js";
|
|
5
5
|
import { handleError } from "../lib/errors.js";
|
|
6
6
|
import { loadConfig, CONFIG_PATH } from "../lib/config.js";
|
|
7
|
+
import { maskApiKey } from "../lib/mask.js";
|
|
7
8
|
const require = createRequire(import.meta.url);
|
|
8
9
|
const sdkPkg = require("wjx-api-sdk/package.json");
|
|
9
|
-
function maskApiKey(value) {
|
|
10
|
-
if (value.length <= 4)
|
|
11
|
-
return "****";
|
|
12
|
-
return value.slice(0, 4) + "****" + value.slice(-4);
|
|
13
|
-
}
|
|
14
10
|
export function registerDiagnosticCommands(program) {
|
|
15
11
|
// --- whoami ---
|
|
16
12
|
program
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diagnostics.js","sourceRoot":"","sources":["../../src/commands/diagnostics.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,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;AAC/C,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"diagnostics.js","sourceRoot":"","sources":["../../src/commands/diagnostics.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,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;AAC/C,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE5C,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,MAAM,GAAG,OAAO,CAAC,0BAA0B,CAAwB,CAAC;AAE1E,MAAM,UAAU,0BAA0B,CAAC,OAAgB;IACzD,iBAAiB;IACjB,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,mBAAmB,CAAC;SAChC,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,+BAA+B;gBAC/B,YAAY,CAAC,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,QAAQ,IAAI,WAAW,EAAE,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;gBAC9F,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,wBAAwB,CAAC;SACrC,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,IAAI,CAAC;YACH,MAAM,MAAM,GAA6D,EAAE,CAAC;YAE5E,iBAAiB;YACjB,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;YAC5B,MAAM,CAAC,IAAI,CAAC;gBACV,KAAK,EAAE,MAAM;gBACb,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM;gBAC9B,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,sBAAsB;aACtD,CAAC,CAAC;YAEH,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,sBAAsB;YACtB,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,MAAM,EAAE,MAAM,CAAC;YAClF,MAAM,CAAC,IAAI,CAAC;gBACV,KAAK,EAAE,aAAa;gBACpB,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM;gBAC9B,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK;aACvD,CAAC,CAAC;YAEH,iBAAiB;YACjB,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,MAAM,EAAE,MAAM,CAAC;YACzD,MAAM,CAAC,IAAI,CAAC;gBACV,KAAK,EAAE,aAAa;gBACpB,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM;gBAC9B,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,MAAM,GAAG,CAAC,CAAC,CAAC,cAAc;aACpD,CAAC,CAAC;YAEH,kBAAkB;YAClB,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,MAAM,EAAE,OAAO,IAAI,oBAAoB,CAAC;YACpF,MAAM,CAAC,IAAI,CAAC;gBACV,KAAK,EAAE,cAAc;gBACrB,MAAM,EAAE,IAAI;gBACZ,MAAM,EAAE,OAAO;aAChB,CAAC,CAAC;YAEH,sBAAsB;YACtB,IAAI,MAAM,EAAE,CAAC;gBACX,IAAI,CAAC;oBACH,MAAM,KAAK,GAAG,EAAE,MAAM,EAAE,CAAC;oBACzB,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,eAAe;iBACxB,CAAC,CAAC;YACL,CAAC;YAED,iBAAiB;YACjB,MAAM,CAAC,IAAI,CAAC;gBACV,KAAK,EAAE,aAAa;gBACpB,MAAM,EAAE,IAAI;gBACZ,MAAM,EAAE,IAAI,MAAM,CAAC,OAAO,EAAE;aAC7B,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,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC;YACnG,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"}
|
package/dist/commands/init.js
CHANGED
|
@@ -2,12 +2,8 @@ import { createInterface } from "node:readline/promises";
|
|
|
2
2
|
import { stdin, stderr } from "node:process";
|
|
3
3
|
import { listSurveys } from "wjx-api-sdk";
|
|
4
4
|
import { loadConfig, saveConfig, CONFIG_PATH } from "../lib/config.js";
|
|
5
|
+
import { maskApiKey } from "../lib/mask.js";
|
|
5
6
|
const DEFAULT_BASE_URL = "https://www.wjx.cn";
|
|
6
|
-
function mask(value) {
|
|
7
|
-
if (value.length <= 4)
|
|
8
|
-
return "****";
|
|
9
|
-
return value.slice(0, 4) + "****" + value.slice(-4);
|
|
10
|
-
}
|
|
11
7
|
export function registerInitCommands(program) {
|
|
12
8
|
program
|
|
13
9
|
.command("init")
|
|
@@ -24,7 +20,7 @@ export function registerInitCommands(program) {
|
|
|
24
20
|
// 1. API Key (required *)
|
|
25
21
|
let apiKey = "";
|
|
26
22
|
while (!apiKey) {
|
|
27
|
-
const hint = currentApiKey ? ` [${
|
|
23
|
+
const hint = currentApiKey ? ` [${maskApiKey(currentApiKey)}]` : "";
|
|
28
24
|
const input = await rl.question(`* WJX_API_KEY${hint}: `);
|
|
29
25
|
apiKey = input.trim() || currentApiKey;
|
|
30
26
|
if (!apiKey) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,379 @@
|
|
|
1
|
+
// ─── Inline reference data (extracted from MCP Server resources) ───
|
|
2
|
+
const TOPICS = {
|
|
3
|
+
"dsl": {
|
|
4
|
+
title: "DSL 文本语法参考",
|
|
5
|
+
content: `# DSL 文本语法
|
|
6
|
+
|
|
7
|
+
用于 \`wjx survey create-by-text --text "..."\` 的问卷 DSL 格式。
|
|
8
|
+
|
|
9
|
+
## 结构
|
|
10
|
+
|
|
11
|
+
第 1 行:问卷标题
|
|
12
|
+
第 2 行(可选):问卷描述
|
|
13
|
+
空行后:题目列表
|
|
14
|
+
|
|
15
|
+
## 题目格式
|
|
16
|
+
|
|
17
|
+
序号. 题目标题[类型标签]
|
|
18
|
+
A. 选项1
|
|
19
|
+
B. 选项2
|
|
20
|
+
...
|
|
21
|
+
|
|
22
|
+
## 支持的类型标签
|
|
23
|
+
|
|
24
|
+
[单选题] → q_type=3
|
|
25
|
+
[多选题] → q_type=4
|
|
26
|
+
[填空题] → q_type=5
|
|
27
|
+
[多项填空题] → q_type=6
|
|
28
|
+
[下拉题] → q_subtype=301
|
|
29
|
+
[量表题] → q_subtype=302
|
|
30
|
+
[评分单选题] → q_subtype=303
|
|
31
|
+
[情景题] → q_subtype=304
|
|
32
|
+
[判断题] → q_subtype=305
|
|
33
|
+
[评分多选题] → q_subtype=401
|
|
34
|
+
[排序题] → q_subtype=402
|
|
35
|
+
[商品题] → q_subtype=403
|
|
36
|
+
[多级下拉题] → q_subtype=501
|
|
37
|
+
[矩阵量表题] → q_subtype=701
|
|
38
|
+
[矩阵单选题] → q_subtype=702
|
|
39
|
+
[矩阵多选题] → q_subtype=703
|
|
40
|
+
[矩阵填空题] → q_subtype=704
|
|
41
|
+
[矩阵滑块题] → q_subtype=705
|
|
42
|
+
[矩阵评分题] → q_subtype=706
|
|
43
|
+
[矩阵数字题] → q_subtype=707
|
|
44
|
+
[矩阵表格题] → q_subtype=712
|
|
45
|
+
[文件上传题] → q_type=8
|
|
46
|
+
[绘图题] → q_subtype=801
|
|
47
|
+
[比重题] → q_type=9
|
|
48
|
+
[滑动条题] → q_type=10
|
|
49
|
+
[段落说明] → q_type=2
|
|
50
|
+
|
|
51
|
+
## 填空题占位符
|
|
52
|
+
|
|
53
|
+
使用 {_} 表示填空位置:
|
|
54
|
+
请输入姓名:{_}[填空题]
|
|
55
|
+
{_}是中国的首都[多项填空题]
|
|
56
|
+
|
|
57
|
+
## 量表题格式
|
|
58
|
+
|
|
59
|
+
选项格式:A. 最低标签 ~ 最高标签
|
|
60
|
+
|
|
61
|
+
## 矩阵题格式
|
|
62
|
+
|
|
63
|
+
选项为列标签,使用 [行] 标记行:
|
|
64
|
+
[行1标签]
|
|
65
|
+
[行2标签]
|
|
66
|
+
|
|
67
|
+
## 示例
|
|
68
|
+
|
|
69
|
+
英语考试
|
|
70
|
+
期末英语测试
|
|
71
|
+
|
|
72
|
+
1. What is the capital of France?[单选题]
|
|
73
|
+
A. London
|
|
74
|
+
B. Paris
|
|
75
|
+
C. Berlin
|
|
76
|
+
|
|
77
|
+
2. Select all prime numbers:[多选题]
|
|
78
|
+
A. 2
|
|
79
|
+
B. 4
|
|
80
|
+
C. 7
|
|
81
|
+
|
|
82
|
+
3. True or False: Earth is flat.[判断题]
|
|
83
|
+
A. 正确
|
|
84
|
+
B. 错误
|
|
85
|
+
|
|
86
|
+
4. The answer is {_}[填空题]
|
|
87
|
+
|
|
88
|
+
## 限制
|
|
89
|
+
|
|
90
|
+
DSL 不支持:逻辑跳转、验证规则、计分规则、随机化、自定义样式。
|
|
91
|
+
这些需要创建后通过 wjx survey update-settings 设置。`,
|
|
92
|
+
},
|
|
93
|
+
"question-types": {
|
|
94
|
+
title: "题型与问卷类型映射表",
|
|
95
|
+
content: `# 题型映射表 (q_type / q_subtype)
|
|
96
|
+
|
|
97
|
+
## 主类型
|
|
98
|
+
|
|
99
|
+
q_type=1 分页
|
|
100
|
+
q_type=2 段落说明
|
|
101
|
+
q_type=3 单选题
|
|
102
|
+
q_type=4 多选题
|
|
103
|
+
q_type=5 填空题
|
|
104
|
+
q_type=6 多项填空题
|
|
105
|
+
q_type=7 矩阵题
|
|
106
|
+
q_type=8 文件上传
|
|
107
|
+
q_type=9 比重题
|
|
108
|
+
q_type=10 滑动条题
|
|
109
|
+
|
|
110
|
+
## 单选子类型 (q_type=3)
|
|
111
|
+
|
|
112
|
+
q_subtype=3 标准单选
|
|
113
|
+
q_subtype=301 下拉框
|
|
114
|
+
q_subtype=302 量表
|
|
115
|
+
q_subtype=303 评分单选
|
|
116
|
+
q_subtype=304 情景题
|
|
117
|
+
q_subtype=305 判断题
|
|
118
|
+
|
|
119
|
+
## 多选子类型 (q_type=4)
|
|
120
|
+
|
|
121
|
+
q_subtype=4 标准多选
|
|
122
|
+
q_subtype=401 评分多选
|
|
123
|
+
q_subtype=402 排序题
|
|
124
|
+
q_subtype=403 商品题
|
|
125
|
+
|
|
126
|
+
## 填空子类型 (q_type=5)
|
|
127
|
+
|
|
128
|
+
q_subtype=5 标准填空
|
|
129
|
+
q_subtype=501 多级下拉
|
|
130
|
+
|
|
131
|
+
## 多项填空子类型 (q_type=6)
|
|
132
|
+
|
|
133
|
+
q_subtype=6 标准多项填空
|
|
134
|
+
q_subtype=601 考试填空
|
|
135
|
+
q_subtype=602 完形填空
|
|
136
|
+
|
|
137
|
+
## 矩阵子类型 (q_type=7)
|
|
138
|
+
|
|
139
|
+
q_subtype=7 矩阵通用
|
|
140
|
+
q_subtype=701 矩阵量表
|
|
141
|
+
q_subtype=702 矩阵单选
|
|
142
|
+
q_subtype=703 矩阵多选
|
|
143
|
+
q_subtype=704 矩阵填空
|
|
144
|
+
q_subtype=705 矩阵滑块
|
|
145
|
+
q_subtype=706 矩阵评分
|
|
146
|
+
q_subtype=707 矩阵数字
|
|
147
|
+
q_subtype=708 矩阵表格(下拉)
|
|
148
|
+
q_subtype=709 矩阵NPS
|
|
149
|
+
q_subtype=710 矩阵表格(填空)
|
|
150
|
+
q_subtype=711 矩阵表格(单选)
|
|
151
|
+
q_subtype=712 矩阵表格(通用)
|
|
152
|
+
|
|
153
|
+
## 文件上传子类型 (q_type=8)
|
|
154
|
+
|
|
155
|
+
q_subtype=8 文件上传
|
|
156
|
+
q_subtype=801 绘图
|
|
157
|
+
|
|
158
|
+
# 问卷类型 (atype)
|
|
159
|
+
|
|
160
|
+
atype=0 默认(调查问卷)
|
|
161
|
+
atype=1 调查问卷
|
|
162
|
+
atype=2 测评
|
|
163
|
+
atype=3 投票
|
|
164
|
+
atype=4 360度评估
|
|
165
|
+
atype=6 考试
|
|
166
|
+
atype=7 报名表单
|
|
167
|
+
atype=8 用户系统
|
|
168
|
+
atype=9 教学评估
|
|
169
|
+
atype=10 量表
|
|
170
|
+
atype=11 民主测评
|
|
171
|
+
|
|
172
|
+
# 问卷状态 (status)
|
|
173
|
+
|
|
174
|
+
status=0 未发布
|
|
175
|
+
status=1 已发布
|
|
176
|
+
status=2 已暂停
|
|
177
|
+
status=3 已删除
|
|
178
|
+
status=4 彻底删除
|
|
179
|
+
status=5 审核中
|
|
180
|
+
|
|
181
|
+
## 考试问卷注意事项
|
|
182
|
+
|
|
183
|
+
创建考试时使用 --type 6 (atype=6)。
|
|
184
|
+
考试支持评分单选(303)、评分多选(401)、判断题(305)等。`,
|
|
185
|
+
},
|
|
186
|
+
"survey": {
|
|
187
|
+
title: "survey 模块命令参考",
|
|
188
|
+
content: `# survey 模块命令参考
|
|
189
|
+
|
|
190
|
+
## wjx survey list
|
|
191
|
+
列出问卷列表。
|
|
192
|
+
--page <n> 页码(默认 1)
|
|
193
|
+
--page_size <n> 每页数量(默认 10)
|
|
194
|
+
--status <n> 状态筛选:0=未发布, 1=已发布, 2=暂停, 3=删除
|
|
195
|
+
--atype <n> 问卷类型:1=调查, 6=考试, 7=报名 等
|
|
196
|
+
--name_like <s> 名称模糊搜索
|
|
197
|
+
|
|
198
|
+
## wjx survey get
|
|
199
|
+
获取问卷详情(含题目和选项)。
|
|
200
|
+
--vid <n> 问卷ID(必填)
|
|
201
|
+
|
|
202
|
+
## wjx survey create
|
|
203
|
+
用 JSON 创建问卷。
|
|
204
|
+
--title <s> 问卷标题(必填)
|
|
205
|
+
--type <n> 问卷类型(默认 0)
|
|
206
|
+
--description <s> 问卷描述
|
|
207
|
+
--questions <json> 题目JSON数组(见 question-types 参考)
|
|
208
|
+
--source_vid <s> 复制源问卷ID(与 questions 互斥)
|
|
209
|
+
--publish 创建后立即发布
|
|
210
|
+
|
|
211
|
+
## wjx survey create-by-text (推荐)
|
|
212
|
+
用 DSL 文本创建问卷,无需手写 JSON。
|
|
213
|
+
--text <s> DSL 格式文本(见 dsl 参考)
|
|
214
|
+
--file <path> 从文件读取 DSL 文本
|
|
215
|
+
--type <n> 问卷类型:1=调查, 6=考试
|
|
216
|
+
--publish 创建后发布
|
|
217
|
+
--creater <s> 创建者子账号
|
|
218
|
+
|
|
219
|
+
## wjx survey delete
|
|
220
|
+
删除问卷。
|
|
221
|
+
--vid <n> 问卷ID(必填)
|
|
222
|
+
--username <s> 用户名(必填)
|
|
223
|
+
--completely 彻底删除(不可恢复)
|
|
224
|
+
|
|
225
|
+
## wjx survey status
|
|
226
|
+
更新问卷状态。
|
|
227
|
+
--vid <n> 问卷ID(必填)
|
|
228
|
+
--state <n> 目标状态:1=发布, 2=暂停, 3=删除
|
|
229
|
+
|
|
230
|
+
## wjx survey settings
|
|
231
|
+
获取问卷设置。
|
|
232
|
+
--vid <n> 问卷ID(必填)
|
|
233
|
+
|
|
234
|
+
## wjx survey update-settings
|
|
235
|
+
更新问卷设置。
|
|
236
|
+
--vid <n> 问卷ID(必填)
|
|
237
|
+
--api_setting <json> API设置
|
|
238
|
+
--after_submit_setting <json> 提交后设置
|
|
239
|
+
--msg_setting <json> 消息设置
|
|
240
|
+
--sojumpparm_setting <json> 参数设置
|
|
241
|
+
--time_setting <json> 时间设置
|
|
242
|
+
|
|
243
|
+
## wjx survey export-text
|
|
244
|
+
导出问卷为纯文本。
|
|
245
|
+
--vid <n> 问卷ID(必填)
|
|
246
|
+
--raw 输出纯文本(不包裹 JSON)
|
|
247
|
+
|
|
248
|
+
## wjx survey tags / tag-details / clear-bin / upload / url
|
|
249
|
+
详见 wjx survey <cmd> --help`,
|
|
250
|
+
},
|
|
251
|
+
"response": {
|
|
252
|
+
title: "response 模块命令参考",
|
|
253
|
+
content: `# response 模块命令参考
|
|
254
|
+
|
|
255
|
+
## wjx response count
|
|
256
|
+
获取问卷答题数量。
|
|
257
|
+
--vid <n> 问卷ID(必填)
|
|
258
|
+
|
|
259
|
+
## wjx response query
|
|
260
|
+
分页查询答卷数据。
|
|
261
|
+
--vid <n> 问卷ID(必填)
|
|
262
|
+
--page <n> 页码
|
|
263
|
+
--page_size <n> 每页数量(最大 200)
|
|
264
|
+
--begin_time <n> 开始时间(Unix 毫秒)
|
|
265
|
+
--end_time <n> 结束时间(Unix 毫秒)
|
|
266
|
+
--data_source <n> 来源筛选
|
|
267
|
+
|
|
268
|
+
## wjx response realtime
|
|
269
|
+
实时增量查询(用于轮询新数据)。
|
|
270
|
+
--vid <n> 问卷ID(必填)
|
|
271
|
+
--begin_jid <n> 起始 jid(上次查询最后一条的 jid)
|
|
272
|
+
--page_size <n> 每次返回条数
|
|
273
|
+
|
|
274
|
+
## wjx response download
|
|
275
|
+
下载答卷数据。
|
|
276
|
+
--vid <n> 问卷ID(必填)
|
|
277
|
+
|
|
278
|
+
## wjx response submit
|
|
279
|
+
提交一条答卷。
|
|
280
|
+
--vid <n> 问卷ID(必填)
|
|
281
|
+
--submitdata <s> 答题数据(必填,格式:题号$答案}题号$答案)
|
|
282
|
+
--inputcosttime <n> 答题耗时秒数(必填)
|
|
283
|
+
--submit_source <s> 来源标识
|
|
284
|
+
|
|
285
|
+
submitdata 编码规则:
|
|
286
|
+
} 分隔不同题目
|
|
287
|
+
$ 分隔题号与答案
|
|
288
|
+
| 分隔多选的多个选项
|
|
289
|
+
示例:"1$2}2$hello}3$1|3" = 第1题选B, 第2题填hello, 第3题选A和C
|
|
290
|
+
|
|
291
|
+
## wjx response modify
|
|
292
|
+
修改答卷数据。
|
|
293
|
+
--vid <n> 问卷ID(必填)
|
|
294
|
+
--jid <n> 答卷ID(必填)
|
|
295
|
+
--submitdata <s> 新答题数据
|
|
296
|
+
|
|
297
|
+
## wjx response clear
|
|
298
|
+
清空答卷数据。
|
|
299
|
+
--vid <n> 问卷ID(必填)
|
|
300
|
+
--username <s> 用户名(必填)
|
|
301
|
+
|
|
302
|
+
## wjx response report / files / winners / 360-report
|
|
303
|
+
详见 wjx response <cmd> --help`,
|
|
304
|
+
},
|
|
305
|
+
"analytics": {
|
|
306
|
+
title: "analytics 分析命令参考",
|
|
307
|
+
content: `# analytics 模块命令参考
|
|
308
|
+
|
|
309
|
+
所有 analytics 命令为本地计算,不需要 API Key。
|
|
310
|
+
|
|
311
|
+
## wjx analytics decode
|
|
312
|
+
解码答���数据。
|
|
313
|
+
--submitdata <s> 编码后的答题字符串(必填)
|
|
314
|
+
返回 { answers: [...], count: N }
|
|
315
|
+
|
|
316
|
+
## wjx analytics nps
|
|
317
|
+
计算 NPS(净推荐值)。
|
|
318
|
+
--scores <json> 评分数组,如 [9,10,7,3,8](必填)
|
|
319
|
+
评分范围 0-10:
|
|
320
|
+
9-10 = 推荐者(Promoter)
|
|
321
|
+
7-8 = 被动者(Passive)
|
|
322
|
+
0-6 = 贬损者(Detractor)
|
|
323
|
+
NPS = %推荐者 - %贬损者(范围 -100 ~ +100)
|
|
324
|
+
行业基准:>50 优秀, >70 卓越
|
|
325
|
+
|
|
326
|
+
## wjx analytics csat
|
|
327
|
+
计算 CSAT(客户满意度)。
|
|
328
|
+
--scores <json> 评分数组(必填)
|
|
329
|
+
--threshold <n> 满意阈值(默认 4)
|
|
330
|
+
CSAT = 评分>=阈值的比例 × 100
|
|
331
|
+
行业基准:>80% 良好, >90% 优秀
|
|
332
|
+
|
|
333
|
+
## wjx analytics anomalies
|
|
334
|
+
检测异常答卷。
|
|
335
|
+
--responses <json> 答卷数组 JSON(必填)
|
|
336
|
+
检测模式:答题时间过短、重复答案模式、直线填答
|
|
337
|
+
|
|
338
|
+
## wjx analytics compare
|
|
339
|
+
对比两组指标。
|
|
340
|
+
--set_a <json> A组指标 JSON(必填)
|
|
341
|
+
--set_b <json> B组指标 JSON(必填)
|
|
342
|
+
返回各指标的差异和变化百分比
|
|
343
|
+
|
|
344
|
+
## wjx analytics decode-push
|
|
345
|
+
解密数据推送载荷。
|
|
346
|
+
--payload <s> 加密的 payload(必填)
|
|
347
|
+
--key <s> AppKey / 解密密钥(必填)
|
|
348
|
+
加密方式:AES-128-CBC,密钥=MD5(appKey)前16位`,
|
|
349
|
+
},
|
|
350
|
+
"topics": {
|
|
351
|
+
title: "可用参考主题列表",
|
|
352
|
+
content: `# wjx reference 可用主题
|
|
353
|
+
|
|
354
|
+
dsl DSL 文本语法(create-by-text 用)
|
|
355
|
+
question-types 题型 / 问卷类型映射表
|
|
356
|
+
survey survey 模块全部命令参数
|
|
357
|
+
response response 模块全部命令参数
|
|
358
|
+
analytics analytics 本地分析命令`,
|
|
359
|
+
},
|
|
360
|
+
};
|
|
361
|
+
export function registerReferenceCommands(program) {
|
|
362
|
+
program
|
|
363
|
+
.command("reference")
|
|
364
|
+
.description("输出命令参考文档(DSL语法、题型映射、命令参数等)")
|
|
365
|
+
.argument("[topic]", "主题:dsl, question-types, survey, response, analytics(默认列出所有主题)")
|
|
366
|
+
.action((topic) => {
|
|
367
|
+
if (!topic) {
|
|
368
|
+
console.log(TOPICS["topics"].content);
|
|
369
|
+
return;
|
|
370
|
+
}
|
|
371
|
+
const entry = TOPICS[topic];
|
|
372
|
+
if (!entry) {
|
|
373
|
+
console.error(`未知主题: ${topic}\n可用主题: ${Object.keys(TOPICS).filter(k => k !== "topics").join(", ")}`);
|
|
374
|
+
process.exit(2);
|
|
375
|
+
}
|
|
376
|
+
console.log(entry.content);
|
|
377
|
+
});
|
|
378
|
+
}
|
|
379
|
+
//# sourceMappingURL=reference.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reference.js","sourceRoot":"","sources":["../../src/commands/reference.ts"],"names":[],"mappings":"AAEA,sEAAsE;AAEtE,MAAM,MAAM,GAAuD;IACjE,KAAK,EAAE;QACL,KAAK,EAAE,YAAY;QACnB,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;yCAsF4B;KACtC;IAED,gBAAgB,EAAE;QAChB,KAAK,EAAE,YAAY;QACnB,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mCAyFsB;KAChC;IAED,QAAQ,EAAE;QACR,KAAK,EAAE,eAAe;QACtB,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6BA6DgB;KAC1B;IAED,UAAU,EAAE;QACV,KAAK,EAAE,iBAAiB;QACxB,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+BAkDkB;KAC5B;IAED,WAAW,EAAE;QACX,KAAK,EAAE,kBAAkB;QACzB,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sCAyCyB;KACnC;IAED,QAAQ,EAAE;QACR,KAAK,EAAE,UAAU;QACjB,OAAO,EAAE;;;;;;oCAMuB;KACjC;CACF,CAAC;AAEF,MAAM,UAAU,yBAAyB,CAAC,OAAgB;IACxD,OAAO;SACJ,OAAO,CAAC,WAAW,CAAC;SACpB,WAAW,CAAC,4BAA4B,CAAC;SACzC,QAAQ,CAAC,SAAS,EAAE,+DAA+D,CAAC;SACpF,MAAM,CAAC,CAAC,KAAc,EAAE,EAAE;QACzB,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC;YACtC,OAAO;QACT,CAAC;QAED,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;QAC5B,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,CAAC,KAAK,CAAC,SAAS,KAAK,WAAW,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACrG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;AACP,CAAC"}
|
package/dist/commands/survey.js
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { readFileSync } from "node:fs";
|
|
2
|
+
import { createSurvey, createSurveyByText, getSurvey, listSurveys, updateSurveyStatus, getSurveySettings, updateSurveySettings, deleteSurvey, getQuestionTags, getTagDetails, clearRecycleBin, uploadFile, buildSurveyUrl, surveyToText, textToSurvey, parsedQuestionsToWire, } from "wjx-api-sdk";
|
|
2
3
|
import { CliError, handleError } from "../lib/errors.js";
|
|
3
4
|
import { mergeStdinWithOpts } from "../lib/stdin.js";
|
|
4
5
|
import { getCredentials } from "../lib/auth.js";
|
|
5
|
-
import { executeCommand, strictInt, requireField } from "../lib/command-helpers.js";
|
|
6
|
+
import { executeCommand, strictInt, requireField, createCapturingFetch, printDryRunPreview } from "../lib/command-helpers.js";
|
|
6
7
|
export function registerSurveyCommands(program) {
|
|
7
8
|
const survey = program.command("survey").description("问卷管理");
|
|
8
9
|
// --- list ---
|
|
@@ -57,6 +58,71 @@ export function registerSurveyCommands(program) {
|
|
|
57
58
|
};
|
|
58
59
|
});
|
|
59
60
|
});
|
|
61
|
+
// --- create-by-text ---
|
|
62
|
+
survey
|
|
63
|
+
.command("create-by-text")
|
|
64
|
+
.description("用 DSL 文本创建问卷(推荐 AI Agent 使用)")
|
|
65
|
+
.option("--text <s>", "DSL 格式问卷文本")
|
|
66
|
+
.option("--file <path>", "从文件读取 DSL 文本")
|
|
67
|
+
.option("--type <n>", "问卷类型:1=调查, 6=考试", strictInt)
|
|
68
|
+
.option("--publish", "创建后发布")
|
|
69
|
+
.option("--creater <s>", "创建者子账号")
|
|
70
|
+
.action(async (_opts, cmd) => {
|
|
71
|
+
try {
|
|
72
|
+
const stdinData = cmd.__stdinData;
|
|
73
|
+
let merged;
|
|
74
|
+
if (stdinData && Object.keys(stdinData).length > 0) {
|
|
75
|
+
merged = mergeStdinWithOpts(stdinData, cmd);
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
merged = { ...cmd.opts() };
|
|
79
|
+
}
|
|
80
|
+
// Resolve DSL text: --text > --file > stdin.text
|
|
81
|
+
let dslText;
|
|
82
|
+
if (typeof merged.text === "string" && merged.text) {
|
|
83
|
+
dslText = merged.text;
|
|
84
|
+
}
|
|
85
|
+
else if (typeof merged.file === "string" && merged.file) {
|
|
86
|
+
try {
|
|
87
|
+
dslText = readFileSync(merged.file, "utf8");
|
|
88
|
+
}
|
|
89
|
+
catch {
|
|
90
|
+
throw new CliError("INPUT_ERROR", `无法读取文件: ${merged.file}`);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
if (!dslText) {
|
|
94
|
+
throw new CliError("INPUT_ERROR", "必须提供 --text 或 --file 参数");
|
|
95
|
+
}
|
|
96
|
+
const globalOpts = program.opts();
|
|
97
|
+
if (globalOpts.dryRun) {
|
|
98
|
+
const parsed = textToSurvey(dslText);
|
|
99
|
+
const wireQuestions = parsedQuestionsToWire(parsed.questions);
|
|
100
|
+
process.stderr.write(JSON.stringify({
|
|
101
|
+
dry_run: true,
|
|
102
|
+
parsed_title: parsed.title,
|
|
103
|
+
parsed_description: parsed.description,
|
|
104
|
+
question_count: parsed.questions.length,
|
|
105
|
+
wire_questions: wireQuestions,
|
|
106
|
+
}, null, 2) + "\n");
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
const creds = getCredentials(globalOpts);
|
|
110
|
+
const result = await createSurveyByText({
|
|
111
|
+
text: dslText,
|
|
112
|
+
atype: merged.type,
|
|
113
|
+
publish: merged.publish,
|
|
114
|
+
creater: merged.creater,
|
|
115
|
+
}, creds);
|
|
116
|
+
if (result.result === false) {
|
|
117
|
+
throw new CliError("API_ERROR", result.errormsg || "API request failed");
|
|
118
|
+
}
|
|
119
|
+
const { formatOutput } = await import("../lib/output.js");
|
|
120
|
+
formatOutput(result, globalOpts);
|
|
121
|
+
}
|
|
122
|
+
catch (e) {
|
|
123
|
+
handleError(e);
|
|
124
|
+
}
|
|
125
|
+
});
|
|
60
126
|
// --- delete ---
|
|
61
127
|
survey
|
|
62
128
|
.command("delete")
|
|
@@ -187,6 +253,12 @@ export function registerSurveyCommands(program) {
|
|
|
187
253
|
}
|
|
188
254
|
requireField(merged, "vid");
|
|
189
255
|
const creds = getCredentials(program.opts());
|
|
256
|
+
if (program.opts().dryRun) {
|
|
257
|
+
const { fetchImpl, getCapturedRequest } = createCapturingFetch();
|
|
258
|
+
await getSurvey({ vid: merged.vid }, creds, fetchImpl);
|
|
259
|
+
printDryRunPreview(getCapturedRequest());
|
|
260
|
+
return;
|
|
261
|
+
}
|
|
190
262
|
const result = await getSurvey({ vid: merged.vid }, creds);
|
|
191
263
|
if (result.result === false) {
|
|
192
264
|
throw new CliError("API_ERROR", result.errormsg || "API request failed");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"survey.js","sourceRoot":"","sources":["../../src/commands/survey.ts"],"names":[],"mappings":"AACA,OAAO,EACL,YAAY,EACZ,SAAS,EACT,WAAW,EACX,kBAAkB,EAClB,iBAAiB,EACjB,oBAAoB,EACpB,YAAY,EACZ,eAAe,EACf,aAAa,EACb,eAAe,EACf,UAAU,EACV,cAAc,EACd,YAAY,GACb,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAEpF,MAAM,UAAU,sBAAsB,CAAC,OAAgB;IACrD,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IAE7D,eAAe;IACf,MAAM;SACH,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,MAAM,CAAC;SACnB,MAAM,CAAC,YAAY,EAAE,IAAI,EAAE,SAAS,CAAC;SACrC,MAAM,CAAC,iBAAiB,EAAE,MAAM,EAAE,SAAS,CAAC;SAC5C,MAAM,CAAC,cAAc,EAAE,MAAM,EAAE,SAAS,CAAC;SACzC,MAAM,CAAC,aAAa,EAAE,MAAM,EAAE,SAAS,CAAC;SACxC,MAAM,CAAC,iBAAiB,EAAE,MAAM,CAAC;SACjC,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;QAC3B,MAAM,cAAc,CAAC,OAAO,EAAE,GAAG,EAAE,WAAW,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACtD,UAAU,EAAE,CAAC,CAAC,IAAI;YAClB,SAAS,EAAE,CAAC,CAAC,SAAS;YACtB,MAAM,EAAE,CAAC,CAAC,MAAM;YAChB,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,SAAS,EAAE,CAAC,CAAC,SAAS;SACvB,CAAC,CAAC,CAAC;IACN,CAAC,CAAC,CAAC;IAEL,cAAc;IACd,MAAM;SACH,OAAO,CAAC,KAAK,CAAC;SACd,WAAW,CAAC,QAAQ,CAAC;SACrB,MAAM,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,CAAC;SACtC,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;QAC3B,MAAM,cAAc,CAAC,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE;YAClD,YAAY,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;YACvB,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC;QACxB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEL,iBAAiB;IACjB,MAAM;SACH,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,MAAM,CAAC;SACnB,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC;SAC7B,MAAM,CAAC,YAAY,EAAE,MAAM,EAAE,SAAS,CAAC;SACvC,MAAM,CAAC,mBAAmB,EAAE,MAAM,CAAC;SACnC,MAAM,CAAC,oBAAoB,EAAE,UAAU,CAAC;SACxC,MAAM,CAAC,kBAAkB,EAAE,SAAS,CAAC;SACrC,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC;SAC5B,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,OAAO,CAAC,CAAC;YACzB,OAAO;gBACL,KAAK,EAAE,CAAC,CAAC,KAAK;gBACd,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC;gBACjB,WAAW,EAAE,CAAC,CAAC,WAAW,IAAI,EAAE;gBAChC,SAAS,EAAE,CAAC,CAAC,SAAS,IAAI,IAAI;gBAC9B,UAAU,EAAE,CAAC,CAAC,UAAU;gBACxB,OAAO,EAAE,CAAC,CAAC,OAAO;aACnB,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEL,iBAAiB;IACjB,MAAM;SACH,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,MAAM,CAAC;SACnB,MAAM,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,CAAC;SACtC,MAAM,CAAC,gBAAgB,EAAE,KAAK,CAAC;SAC/B,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,KAAK,CAAC,CAAC;YACvB,YAAY,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;YAC5B,OAAO;gBACL,GAAG,EAAE,CAAC,CAAC,GAAG;gBACV,QAAQ,EAAE,CAAC,CAAC,QAAQ;gBACpB,iBAAiB,EAAE,CAAC,CAAC,UAAU;aAChC,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEL,iBAAiB;IACjB,MAAM;SACH,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,0BAA0B,CAAC;SACvC,MAAM,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,CAAC;SACtC,MAAM,CAAC,aAAa,EAAE,MAAM,EAAE,SAAS,CAAC;SACxC,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;QAC3B,MAAM,cAAc,CAAC,OAAO,EAAE,GAAG,EAAE,kBAAkB,EAAE,CAAC,CAAC,EAAE,EAAE;YAC3D,YAAY,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;YACvB,YAAY,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;YACzB,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;QACxC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEL,mBAAmB;IACnB,MAAM;SACH,OAAO,CAAC,UAAU,CAAC;SACnB,WAAW,CAAC,QAAQ,CAAC;SACrB,MAAM,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,CAAC;SACtC,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;QAC3B,MAAM,cAAc,CAAC,OAAO,EAAE,GAAG,EAAE,iBAAiB,EAAE,CAAC,CAAC,EAAE,EAAE;YAC1D,YAAY,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;YACvB,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC;QACxB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEL,0BAA0B;IAC1B,MAAM;SACH,OAAO,CAAC,iBAAiB,CAAC;SAC1B,WAAW,CAAC,QAAQ,CAAC;SACrB,MAAM,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,CAAC;SACtC,MAAM,CAAC,sBAAsB,EAAE,WAAW,CAAC;SAC3C,MAAM,CAAC,+BAA+B,EAAE,WAAW,CAAC;SACpD,MAAM,CAAC,sBAAsB,EAAE,UAAU,CAAC;SAC1C,MAAM,CAAC,6BAA6B,EAAE,UAAU,CAAC;SACjD,MAAM,CAAC,uBAAuB,EAAE,UAAU,CAAC;SAC3C,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;QAC3B,MAAM,cAAc,CAAC,OAAO,EAAE,GAAG,EAAE,oBAAoB,EAAE,CAAC,CAAC,EAAE,EAAE;YAC7D,YAAY,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;YACvB,OAAO;gBACL,GAAG,EAAE,CAAC,CAAC,GAAG;gBACV,WAAW,EAAE,CAAC,CAAC,WAAW;gBAC1B,oBAAoB,EAAE,CAAC,CAAC,oBAAoB;gBAC5C,WAAW,EAAE,CAAC,CAAC,WAAW;gBAC1B,kBAAkB,EAAE,CAAC,CAAC,kBAAkB;gBACxC,YAAY,EAAE,CAAC,CAAC,YAAY;aAC7B,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEL,eAAe;IACf,MAAM;SACH,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,QAAQ,CAAC;SACrB,MAAM,CAAC,gBAAgB,EAAE,KAAK,CAAC;SAC/B,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;QAC3B,MAAM,cAAc,CAAC,OAAO,EAAE,GAAG,EAAE,eAAe,EAAE,CAAC,CAAC,EAAE,EAAE;YACxD,YAAY,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;YAC5B,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;QAClC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEL,sBAAsB;IACtB,MAAM;SACH,OAAO,CAAC,aAAa,CAAC;SACtB,WAAW,CAAC,QAAQ,CAAC;SACrB,MAAM,CAAC,cAAc,EAAE,MAAM,EAAE,SAAS,CAAC;SACzC,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,QAAQ,EAAE,QAAQ,CAAC,CAAC;YACpC,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;QAC9B,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEL,oBAAoB;IACpB,MAAM;SACH,OAAO,CAAC,WAAW,CAAC;SACpB,WAAW,CAAC,OAAO,CAAC;SACpB,MAAM,CAAC,gBAAgB,EAAE,KAAK,CAAC;SAC/B,MAAM,CAAC,WAAW,EAAE,QAAQ,EAAE,SAAS,CAAC;SACxC,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;QAC3B,MAAM,cAAc,CAAC,OAAO,EAAE,GAAG,EAAE,eAAe,EAAE,CAAC,CAAC,EAAE,EAAE;YACxD,YAAY,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;YAC5B,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC;QAC9C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEL,iBAAiB;IACjB,MAAM;SACH,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,MAAM,CAAC;SACnB,MAAM,CAAC,iBAAiB,EAAE,KAAK,CAAC;SAChC,MAAM,CAAC,YAAY,EAAE,YAAY,CAAC;SAClC,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;QAC3B,MAAM,cAAc,CAAC,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC,CAAC,EAAE,EAAE;YACnD,YAAY,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;YAC7B,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;YACxB,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAClD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEL,sBAAsB;IACtB,MAAM;SACH,OAAO,CAAC,aAAa,CAAC;SACtB,WAAW,CAAC,iBAAiB,CAAC;SAC9B,MAAM,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,CAAC;SACtC,MAAM,CAAC,OAAO,EAAE,iBAAiB,CAAC;SAClC,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;QAC3B,IAAI,CAAC;YACH,MAAM,SAAS,GAAI,GAA0C,CAAC,WAAkD,CAAC;YACjH,IAAI,MAA+B,CAAC;YACpC,IAAI,SAAS,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACnD,MAAM,GAAG,kBAAkB,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;YAC9C,CAAC;iBAAM,CAAC;gBACN,MAAM,GAAG,EAAE,GAAG,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC;YAC7B,CAAC;YAED,YAAY,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YAE5B,MAAM,KAAK,GAAG,cAAc,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;YAC7C,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,GAAa,EAAE,EAAE,KAAK,CAAC,CAAC;YAErE,IAAI,MAAM,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;gBAC5B,MAAM,IAAI,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,QAAQ,IAAI,oBAAoB,CAAC,CAAC;YAC3E,CAAC;YAED,MAAM,IAAI,GAAI,MAA6C,CAAC,IAAI,CAAC;YACjE,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,MAAM,IAAI,QAAQ,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;YAChD,CAAC;YACD,MAAM,IAAI,GAAG,YAAY,CAAC,IAA0C,CAAC,CAAC;YACtE,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;YAElC,IAAI,MAAM,CAAC,GAAG,IAAI,UAAU,CAAC,KAAK,EAAE,CAAC;gBACnC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACpB,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAClE,CAAC;QACH,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,WAAW,CAAC,CAAC,CAAC,CAAC;QACjB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,cAAc;IACd,MAAM;SACH,OAAO,CAAC,KAAK,CAAC;SACd,WAAW,CAAC,iBAAiB,CAAC;SAC9B,MAAM,CAAC,YAAY,EAAE,mBAAmB,EAAE,QAAQ,CAAC;SACnD,MAAM,CAAC,YAAY,EAAE,gBAAgB,CAAC;SACtC,MAAM,CAAC,gBAAgB,EAAE,iBAAiB,EAAE,SAAS,CAAC;SACtD,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;QAC3B,IAAI,CAAC;YACH,+BAA+B;YAC/B,MAAM,SAAS,GAAI,GAA0C,CAAC,WAAkD,CAAC;YACjH,IAAI,MAA+B,CAAC;YACpC,IAAI,SAAS,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACnD,MAAM,GAAG,kBAAkB,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;YAC9C,CAAC;iBAAM,CAAC;gBACN,MAAM,GAAG,EAAE,GAAG,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC;YAC7B,CAAC;YAED,MAAM,GAAG,GAAG,cAAc,CAAC;gBACzB,IAAI,EAAG,MAAM,CAAC,IAA0B,IAAI,QAAQ;gBACpD,IAAI,EAAE,MAAM,CAAC,IAA0B;gBACvC,QAAQ,EAAE,MAAM,CAAC,QAA8B;aAChD,CAAC,CAAC;YACH,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;YAClC,IAAI,UAAU,CAAC,KAAK,EAAE,CAAC;gBACrB,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACnB,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAChD,CAAC;QACH,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,WAAW,CAAC,CAAC,CAAC,CAAC;QACjB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
1
|
+
{"version":3,"file":"survey.js","sourceRoot":"","sources":["../../src/commands/survey.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -13,9 +13,12 @@ import { registerAccountCommands } from "./commands/account.js";
|
|
|
13
13
|
import { registerSsoCommands } from "./commands/sso.js";
|
|
14
14
|
import { registerAnalyticsCommands } from "./commands/analytics.js";
|
|
15
15
|
import { registerInitCommands } from "./commands/init.js";
|
|
16
|
+
import { registerCompletionCommands } from "./commands/completion.js";
|
|
17
|
+
import { registerReferenceCommands } from "./commands/reference.js";
|
|
16
18
|
import { readStdin } from "./lib/stdin.js";
|
|
17
19
|
import { handleError } from "./lib/errors.js";
|
|
18
20
|
import { applyConfigToEnv } from "./lib/config.js";
|
|
21
|
+
import { getCompletions } from "./lib/completions.js";
|
|
19
22
|
// Load ~/.wjxrc config into process.env (env vars take precedence)
|
|
20
23
|
applyConfigToEnv();
|
|
21
24
|
const require = createRequire(import.meta.url);
|
|
@@ -28,7 +31,8 @@ program
|
|
|
28
31
|
.option("--api-key <apiKey>", "WJX API Key(或设置 WJX_API_KEY 环境变量)")
|
|
29
32
|
.option("--json", "JSON 输出(默认)")
|
|
30
33
|
.option("--table", "表格输出")
|
|
31
|
-
.option("--stdin", "从 stdin 读取 JSON 参数")
|
|
34
|
+
.option("--stdin", "从 stdin 读取 JSON 参数")
|
|
35
|
+
.option("--dry-run", "预览 API 请求(不实际发送)");
|
|
32
36
|
// Prevent Commander from calling process.exit on errors — we handle it ourselves
|
|
33
37
|
program.exitOverride();
|
|
34
38
|
// Global preAction hook: read stdin and merge with command opts
|
|
@@ -54,8 +58,22 @@ registerAccountCommands(program);
|
|
|
54
58
|
registerSsoCommands(program);
|
|
55
59
|
registerAnalyticsCommands(program);
|
|
56
60
|
registerInitCommands(program);
|
|
61
|
+
registerCompletionCommands(program);
|
|
62
|
+
registerReferenceCommands(program);
|
|
57
63
|
(async () => {
|
|
58
64
|
try {
|
|
65
|
+
// Hidden completion hook: --get-completions <point> <line...>
|
|
66
|
+
const rawArgs = process.argv.slice(2);
|
|
67
|
+
const gcIdx = rawArgs.indexOf("--get-completions");
|
|
68
|
+
if (gcIdx !== -1 && rawArgs[gcIdx + 1] !== undefined) {
|
|
69
|
+
const point = parseInt(rawArgs[gcIdx + 1], 10);
|
|
70
|
+
const line = rawArgs.slice(gcIdx + 2).join(" ");
|
|
71
|
+
const results = getCompletions(program, point, line);
|
|
72
|
+
if (results.length > 0) {
|
|
73
|
+
process.stdout.write(results.join("\n") + "\n");
|
|
74
|
+
}
|
|
75
|
+
process.exit(0);
|
|
76
|
+
}
|
|
59
77
|
await program.parseAsync();
|
|
60
78
|
}
|
|
61
79
|
catch (err) {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AACvE,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AACtE,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AACvE,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAsB,MAAM,gBAAgB,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Command } from "commander";
|
|
2
|
-
import type { WjxApiResponse } from "wjx-api-sdk";
|
|
2
|
+
import type { WjxApiResponse, FetchLike } from "wjx-api-sdk";
|
|
3
3
|
/**
|
|
4
4
|
* Strict integer parser. Rejects garbage like "123abc".
|
|
5
5
|
*/
|
|
@@ -11,6 +11,17 @@ export declare function requireField(merged: Record<string, unknown>, field: str
|
|
|
11
11
|
interface ExecuteOpts {
|
|
12
12
|
noAuth?: boolean;
|
|
13
13
|
}
|
|
14
|
+
export interface CapturedRequest {
|
|
15
|
+
method: string;
|
|
16
|
+
url: string;
|
|
17
|
+
headers: Record<string, string>;
|
|
18
|
+
body: string;
|
|
19
|
+
}
|
|
20
|
+
export declare function createCapturingFetch(): {
|
|
21
|
+
fetchImpl: FetchLike;
|
|
22
|
+
getCapturedRequest: () => CapturedRequest | null;
|
|
23
|
+
};
|
|
24
|
+
export declare function printDryRunPreview(request: CapturedRequest | null): void;
|
|
14
25
|
type SdkFunction = (input: any, creds: any, ...rest: any[]) => Promise<WjxApiResponse<any>>;
|
|
15
26
|
/**
|
|
16
27
|
* Central command executor.
|
|
@@ -2,6 +2,7 @@ import { getCredentials } from "./auth.js";
|
|
|
2
2
|
import { formatOutput } from "./output.js";
|
|
3
3
|
import { CliError, handleError } from "./errors.js";
|
|
4
4
|
import { mergeStdinWithOpts } from "./stdin.js";
|
|
5
|
+
import { maskAuthHeader } from "./mask.js";
|
|
5
6
|
/**
|
|
6
7
|
* Strict integer parser. Rejects garbage like "123abc".
|
|
7
8
|
*/
|
|
@@ -23,6 +24,31 @@ export function requireField(merged, field, label) {
|
|
|
23
24
|
throw new CliError("INPUT_ERROR", `Missing required option: --${label || field}`);
|
|
24
25
|
}
|
|
25
26
|
}
|
|
27
|
+
export function createCapturingFetch() {
|
|
28
|
+
let captured = null;
|
|
29
|
+
const fetchImpl = async (url, init) => {
|
|
30
|
+
const headers = {};
|
|
31
|
+
if (init?.headers) {
|
|
32
|
+
for (const [k, v] of Object.entries(init.headers)) {
|
|
33
|
+
headers[k] = k.toLowerCase() === "authorization" ? maskAuthHeader(String(v)) : String(v);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
captured = {
|
|
37
|
+
method: init?.method ?? "GET",
|
|
38
|
+
url: String(url),
|
|
39
|
+
headers,
|
|
40
|
+
body: init?.body ? String(init.body) : "",
|
|
41
|
+
};
|
|
42
|
+
return new Response(JSON.stringify({ result: true, data: {} }), {
|
|
43
|
+
status: 200,
|
|
44
|
+
headers: { "Content-Type": "application/json" },
|
|
45
|
+
});
|
|
46
|
+
};
|
|
47
|
+
return { fetchImpl, getCapturedRequest: () => captured };
|
|
48
|
+
}
|
|
49
|
+
export function printDryRunPreview(request) {
|
|
50
|
+
process.stderr.write(JSON.stringify({ dry_run: true, request }, null, 2) + "\n");
|
|
51
|
+
}
|
|
26
52
|
/**
|
|
27
53
|
* Central command executor.
|
|
28
54
|
* - Merges stdin data with CLI opts (source-aware)
|
|
@@ -45,20 +71,35 @@ export async function executeCommand(program, actionCommand, sdkFn, buildInput,
|
|
|
45
71
|
merged = { ...commandOpts };
|
|
46
72
|
}
|
|
47
73
|
const input = buildInput(merged);
|
|
74
|
+
const globalOpts = program.opts();
|
|
48
75
|
if (opts.noAuth) {
|
|
76
|
+
if (globalOpts.dryRun) {
|
|
77
|
+
process.stderr.write(JSON.stringify({
|
|
78
|
+
dry_run: true,
|
|
79
|
+
note: "本地命令,不会发送 API 请求",
|
|
80
|
+
input,
|
|
81
|
+
}, null, 2) + "\n");
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
49
84
|
// Local commands (e.g. buildSurveyUrl) — call with input only
|
|
50
85
|
const localFn = sdkFn;
|
|
51
86
|
const result = localFn(input);
|
|
52
|
-
formatOutput(result,
|
|
87
|
+
formatOutput(result, globalOpts);
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
const creds = getCredentials(globalOpts);
|
|
91
|
+
if (globalOpts.dryRun) {
|
|
92
|
+
const { fetchImpl, getCapturedRequest } = createCapturingFetch();
|
|
93
|
+
await sdkFn(input, creds, fetchImpl);
|
|
94
|
+
printDryRunPreview(getCapturedRequest());
|
|
53
95
|
return;
|
|
54
96
|
}
|
|
55
|
-
const creds = getCredentials(program.opts());
|
|
56
97
|
const result = await sdkFn(input, creds);
|
|
57
98
|
// P0 fix: detect SDK API failure response
|
|
58
99
|
if (result.result === false) {
|
|
59
100
|
throw new CliError("API_ERROR", result.errormsg || "API request failed");
|
|
60
101
|
}
|
|
61
|
-
formatOutput(result,
|
|
102
|
+
formatOutput(result, globalOpts);
|
|
62
103
|
}
|
|
63
104
|
catch (e) {
|
|
64
105
|
handleError(e);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command-helpers.js","sourceRoot":"","sources":["../../src/lib/command-helpers.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"command-helpers.js","sourceRoot":"","sources":["../../src/lib/command-helpers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { Command } from "commander";
|
|
2
|
+
/**
|
|
3
|
+
* Walk the Commander command tree and return completion candidates
|
|
4
|
+
* for the given input line and cursor position.
|
|
5
|
+
*/
|
|
6
|
+
export declare function getCompletions(program: Command, point: number, line: string): string[];
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Walk the Commander command tree and return completion candidates
|
|
3
|
+
* for the given input line and cursor position.
|
|
4
|
+
*/
|
|
5
|
+
export function getCompletions(program, point, line) {
|
|
6
|
+
const partial = line.slice(0, point);
|
|
7
|
+
const tokens = partial.trim().split(/\s+/).slice(1); // drop "wjx"
|
|
8
|
+
// If line ends with space, user wants next token; otherwise last token is partial
|
|
9
|
+
const endsWithSpace = partial.endsWith(" ");
|
|
10
|
+
const partialWord = endsWithSpace ? "" : (tokens.pop() ?? "");
|
|
11
|
+
let currentCmd = program;
|
|
12
|
+
for (const tok of tokens) {
|
|
13
|
+
const sub = currentCmd.commands.find((c) => c.name() === tok);
|
|
14
|
+
if (sub) {
|
|
15
|
+
currentCmd = sub;
|
|
16
|
+
}
|
|
17
|
+
else {
|
|
18
|
+
break;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
const candidates = [];
|
|
22
|
+
if (partialWord.startsWith("-")) {
|
|
23
|
+
// Complete options
|
|
24
|
+
for (const opt of currentCmd.options) {
|
|
25
|
+
if (opt.long)
|
|
26
|
+
candidates.push(opt.long);
|
|
27
|
+
else if (opt.short)
|
|
28
|
+
candidates.push(opt.short);
|
|
29
|
+
}
|
|
30
|
+
// Walk the full parent chain to include global options
|
|
31
|
+
let p = currentCmd.parent;
|
|
32
|
+
while (p) {
|
|
33
|
+
for (const opt of p.options) {
|
|
34
|
+
if (opt.long)
|
|
35
|
+
candidates.push(opt.long);
|
|
36
|
+
}
|
|
37
|
+
p = p.parent;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
// Complete subcommand names
|
|
42
|
+
for (const sub of currentCmd.commands) {
|
|
43
|
+
candidates.push(sub.name());
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
// Filter by prefix
|
|
47
|
+
return candidates.filter((c) => c.startsWith(partialWord));
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=completions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"completions.js","sourceRoot":"","sources":["../../src/lib/completions.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,OAAgB,EAAE,KAAa,EAAE,IAAY;IAC1E,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IACrC,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa;IAElE,kFAAkF;IAClF,MAAM,aAAa,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IAC5C,MAAM,WAAW,GAAG,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;IAE9D,IAAI,UAAU,GAAY,OAAO,CAAC;IAClC,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;QACzB,MAAM,GAAG,GAAG,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAU,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,CAAC;QACvE,IAAI,GAAG,EAAE,CAAC;YACR,UAAU,GAAG,GAAG,CAAC;QACnB,CAAC;aAAM,CAAC;YACN,MAAM;QACR,CAAC;IACH,CAAC;IAED,MAAM,UAAU,GAAa,EAAE,CAAC;IAEhC,IAAI,WAAW,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAChC,mBAAmB;QACnB,KAAK,MAAM,GAAG,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;YACrC,IAAI,GAAG,CAAC,IAAI;gBAAE,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;iBACnC,IAAI,GAAG,CAAC,KAAK;gBAAE,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACjD,CAAC;QACD,uDAAuD;QACvD,IAAI,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC;QAC1B,OAAO,CAAC,EAAE,CAAC;YACT,KAAK,MAAM,GAAG,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;gBAC5B,IAAI,GAAG,CAAC,IAAI;oBAAE,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAC1C,CAAC;YACD,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;QACf,CAAC;IACH,CAAC;SAAM,CAAC;QACN,4BAA4B;QAC5B,KAAK,MAAM,GAAG,IAAI,UAAU,CAAC,QAAQ,EAAE,CAAC;YACtC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;IAED,mBAAmB;IACnB,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC;AAC7D,CAAC"}
|
package/dist/lib/config.d.ts
CHANGED
|
@@ -3,6 +3,11 @@ export interface WjxConfig {
|
|
|
3
3
|
baseUrl?: string;
|
|
4
4
|
corpId?: string;
|
|
5
5
|
}
|
|
6
|
+
/**
|
|
7
|
+
* Evaluated once at module load time. Setting process.env.WJX_CONFIG_PATH
|
|
8
|
+
* after import will NOT change this value. Tests override it by passing the
|
|
9
|
+
* env var to child processes (e.g. via execFileSync env option).
|
|
10
|
+
*/
|
|
6
11
|
export declare const CONFIG_PATH: string;
|
|
7
12
|
export declare function loadConfig(): WjxConfig | null;
|
|
8
13
|
export declare function saveConfig(config: WjxConfig): void;
|
package/dist/lib/config.js
CHANGED
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
import { readFileSync, writeFileSync } from "node:fs";
|
|
2
2
|
import { join } from "node:path";
|
|
3
3
|
import { homedir } from "node:os";
|
|
4
|
+
/**
|
|
5
|
+
* Evaluated once at module load time. Setting process.env.WJX_CONFIG_PATH
|
|
6
|
+
* after import will NOT change this value. Tests override it by passing the
|
|
7
|
+
* env var to child processes (e.g. via execFileSync env option).
|
|
8
|
+
*/
|
|
4
9
|
export const CONFIG_PATH = process.env.WJX_CONFIG_PATH || join(homedir(), ".wjxrc");
|
|
5
10
|
export function loadConfig() {
|
|
6
11
|
try {
|
package/dist/lib/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACtD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAQlC,MAAM,CAAC,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,CAAC,CAAC;AAEpF,MAAM,UAAU,UAAU;IACxB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC/B,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,IAAI,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YACvF,OAAO,MAAmB,CAAC;QAC7B,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,MAAiB;IAC1C,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE;QACjE,QAAQ,EAAE,MAAM;QAChB,IAAI,EAAE,KAAK;KACZ,CAAC,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB;IAC9B,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,IAAI,CAAC,MAAM;QAAE,OAAO;IAEpB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAC9C,OAAO,CAAC,GAAG,CAAC,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC;IAC1C,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QAChD,OAAO,CAAC,GAAG,CAAC,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC;IAC5C,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAC9C,OAAO,CAAC,GAAG,CAAC,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC;IAC1C,CAAC;AACH,CAAC"}
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACtD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAQlC;;;;GAIG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,CAAC,CAAC;AAEpF,MAAM,UAAU,UAAU;IACxB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC/B,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,IAAI,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YACvF,OAAO,MAAmB,CAAC;QAC7B,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,MAAiB;IAC1C,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE;QACjE,QAAQ,EAAE,MAAM;QAChB,IAAI,EAAE,KAAK;KACZ,CAAC,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB;IAC9B,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,IAAI,CAAC,MAAM;QAAE,OAAO;IAEpB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAC9C,OAAO,CAAC,GAAG,CAAC,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC;IAC1C,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QAChD,OAAO,CAAC,GAAG,CAAC,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC;IAC5C,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAC9C,OAAO,CAAC,GAAG,CAAC,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC;IAC1C,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mask sensitive values for display (logs, diagnostics, dry-run previews).
|
|
3
|
+
*/
|
|
4
|
+
/** Mask an API key: show first 4 + last 4 chars, mask the middle. */
|
|
5
|
+
export declare function maskApiKey(value: string): string;
|
|
6
|
+
/**
|
|
7
|
+
* Mask an Authorization header value (e.g. "Bearer abc...xyz").
|
|
8
|
+
* Preserves the "Bearer " prefix + first 4 key chars, masks middle, keeps last 4.
|
|
9
|
+
*/
|
|
10
|
+
export declare function maskAuthHeader(value: string): string;
|
package/dist/lib/mask.js
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mask sensitive values for display (logs, diagnostics, dry-run previews).
|
|
3
|
+
*/
|
|
4
|
+
/** Mask an API key: show first 4 + last 4 chars, mask the middle. */
|
|
5
|
+
export function maskApiKey(value) {
|
|
6
|
+
if (value.length <= 4)
|
|
7
|
+
return "****";
|
|
8
|
+
return value.slice(0, 4) + "****" + value.slice(-4);
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Mask an Authorization header value (e.g. "Bearer abc...xyz").
|
|
12
|
+
* Preserves the "Bearer " prefix + first 4 key chars, masks middle, keeps last 4.
|
|
13
|
+
*/
|
|
14
|
+
export function maskAuthHeader(value) {
|
|
15
|
+
if (value.length <= 12)
|
|
16
|
+
return "****";
|
|
17
|
+
return value.slice(0, 11) + "****" + value.slice(-4);
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=mask.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mask.js","sourceRoot":"","sources":["../../src/lib/mask.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,qEAAqE;AACrE,MAAM,UAAU,UAAU,CAAC,KAAa;IACtC,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC;QAAE,OAAO,MAAM,CAAC;IACrC,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AACtD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,KAAa;IAC1C,IAAI,KAAK,CAAC,MAAM,IAAI,EAAE;QAAE,OAAO,MAAM,CAAC;IACtC,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AACvD,CAAC"}
|
package/dist/lib/stdin.js
CHANGED
|
@@ -17,11 +17,8 @@ export async function readStdin() {
|
|
|
17
17
|
}
|
|
18
18
|
try {
|
|
19
19
|
const parsed = JSON.parse(raw);
|
|
20
|
-
if (Array.isArray(parsed)) {
|
|
21
|
-
throw new CliError("INPUT_ERROR",
|
|
22
|
-
}
|
|
23
|
-
if (typeof parsed !== "object" || parsed === null) {
|
|
24
|
-
throw new CliError("INPUT_ERROR", "stdin JSON must be an object, got " + typeof parsed);
|
|
20
|
+
if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed)) {
|
|
21
|
+
throw new CliError("INPUT_ERROR", `stdin JSON must be an object, got ${Array.isArray(parsed) ? "array" : typeof parsed}`);
|
|
25
22
|
}
|
|
26
23
|
return parsed;
|
|
27
24
|
}
|
|
@@ -40,7 +37,7 @@ export function mergeStdinWithOpts(stdinData, command) {
|
|
|
40
37
|
const merged = { ...stdinData };
|
|
41
38
|
for (const key of Object.keys(opts)) {
|
|
42
39
|
// Skip internal flags
|
|
43
|
-
if (key === "stdin" || key === "apiKey" || key === "json" || key === "table") {
|
|
40
|
+
if (key === "stdin" || key === "apiKey" || key === "json" || key === "table" || key === "dryRun") {
|
|
44
41
|
continue;
|
|
45
42
|
}
|
|
46
43
|
const source = command.getOptionValueSource(key);
|
package/dist/lib/stdin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stdin.js","sourceRoot":"","sources":["../../src/lib/stdin.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS;IAC7B,4CAA4C;IAC5C,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACxB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QACxC,MAAM,CAAC,IAAI,CAAC,KAAe,CAAC,CAAC;IAC/B,CAAC;IACD,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;IAE1D,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC/B,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"stdin.js","sourceRoot":"","sources":["../../src/lib/stdin.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS;IAC7B,4CAA4C;IAC5C,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACxB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QACxC,MAAM,CAAC,IAAI,CAAC,KAAe,CAAC,CAAC;IAC/B,CAAC;IACD,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;IAE1D,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC/B,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YAC3E,MAAM,IAAI,QAAQ,CAAC,aAAa,EAC9B,qCAAqC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,MAAM,EAAE,CAAC,CAAC;QAC5F,CAAC;QACD,OAAO,MAAiC,CAAC;IAC3C,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,IAAI,CAAC,YAAY,QAAQ;YAAE,MAAM,CAAC,CAAC;QACnC,MAAM,IAAI,QAAQ,CAChB,aAAa,EACb,2BAA2B,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CACxE,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAChC,SAAkC,EAClC,OAAgB;IAEhB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAC5B,MAAM,MAAM,GAA4B,EAAE,GAAG,SAAS,EAAE,CAAC;IAEzD,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACpC,sBAAsB;QACtB,IAAI,GAAG,KAAK,OAAO,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,MAAM,IAAI,GAAG,KAAK,OAAO,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;YACjG,SAAS;QACX,CAAC;QACD,MAAM,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC;QACjD,wEAAwE;QACxE,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;YACrB,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
|