wjw-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 (68) hide show
  1. package/README.md +29 -0
  2. package/dist/api/normalize.d.ts +14 -0
  3. package/dist/api/normalize.d.ts.map +1 -0
  4. package/dist/api/normalize.js +282 -0
  5. package/dist/api/normalize.js.map +1 -0
  6. package/dist/api/project-detail.d.ts +7 -0
  7. package/dist/api/project-detail.d.ts.map +1 -0
  8. package/dist/api/project-detail.js +200 -0
  9. package/dist/api/project-detail.js.map +1 -0
  10. package/dist/api/structure-narrow.d.ts +21 -0
  11. package/dist/api/structure-narrow.d.ts.map +1 -0
  12. package/dist/api/structure-narrow.js +259 -0
  13. package/dist/api/structure-narrow.js.map +1 -0
  14. package/dist/api/survey-api.d.ts +48 -0
  15. package/dist/api/survey-api.d.ts.map +1 -0
  16. package/dist/api/survey-api.js +551 -0
  17. package/dist/api/survey-api.js.map +1 -0
  18. package/dist/argv.d.ts +9 -0
  19. package/dist/argv.d.ts.map +1 -0
  20. package/dist/argv.js +62 -0
  21. package/dist/argv.js.map +1 -0
  22. package/dist/cli.d.ts +3 -0
  23. package/dist/cli.d.ts.map +1 -0
  24. package/dist/cli.js +7 -0
  25. package/dist/cli.js.map +1 -0
  26. package/dist/commands/main.d.ts +2 -0
  27. package/dist/commands/main.d.ts.map +1 -0
  28. package/dist/commands/main.js +568 -0
  29. package/dist/commands/main.js.map +1 -0
  30. package/dist/config.d.ts +23 -0
  31. package/dist/config.d.ts.map +1 -0
  32. package/dist/config.js +37 -0
  33. package/dist/config.js.map +1 -0
  34. package/dist/credentials-store.d.ts +9 -0
  35. package/dist/credentials-store.d.ts.map +1 -0
  36. package/dist/credentials-store.js +38 -0
  37. package/dist/credentials-store.js.map +1 -0
  38. package/dist/handbook.d.ts +3 -0
  39. package/dist/handbook.d.ts.map +1 -0
  40. package/dist/handbook.js +43 -0
  41. package/dist/handbook.js.map +1 -0
  42. package/dist/http/request.d.ts +15 -0
  43. package/dist/http/request.d.ts.map +1 -0
  44. package/dist/http/request.js +65 -0
  45. package/dist/http/request.js.map +1 -0
  46. package/dist/index.d.ts +8 -0
  47. package/dist/index.d.ts.map +1 -0
  48. package/dist/index.js +7 -0
  49. package/dist/index.js.map +1 -0
  50. package/dist/io/readInput.d.ts +7 -0
  51. package/dist/io/readInput.d.ts.map +1 -0
  52. package/dist/io/readInput.js +39 -0
  53. package/dist/io/readInput.js.map +1 -0
  54. package/dist/sign.d.ts +6 -0
  55. package/dist/sign.d.ts.map +1 -0
  56. package/dist/sign.js +46 -0
  57. package/dist/sign.js.map +1 -0
  58. package/dist/token.d.ts +4 -0
  59. package/dist/token.d.ts.map +1 -0
  60. package/dist/token.js +65 -0
  61. package/dist/token.js.map +1 -0
  62. package/dist/version.d.ts +2 -0
  63. package/dist/version.d.ts.map +1 -0
  64. package/dist/version.js +2 -0
  65. package/dist/version.js.map +1 -0
  66. package/package.json +40 -0
  67. package/references/README.md +4 -0
  68. package/references/project_json_structure_guide.md +910 -0
@@ -0,0 +1,551 @@
1
+ import { resolveAuthToken } from "../token.js";
2
+ import { buildSignedQueryParams } from "../sign.js";
3
+ import { joinUrl, requestText, urlEncodeForm } from "../http/request.js";
4
+ import { ensureCustomAttrShowSeqOn, ensureQuestionStructMongoId, normalizeQuestionListForCreate, normalizeQuestionStructForUpstream, PROJECT_TYPE_MAP, } from "./normalize.js";
5
+ import { narrowProjectStructureData, narrowOptsHasAny, coerceStructureNarrowOpts, } from "./structure-narrow.js";
6
+ function log(cfg, ...args) {
7
+ if (cfg.httpLogEnabled)
8
+ console.error("[wjw]", ...args);
9
+ }
10
+ function extractDataWithStatus(payload, errorPrefix) {
11
+ if (payload.status_code !== 1) {
12
+ const errCode = payload.err_code ?? "unknown_err_code";
13
+ const errMsg = payload.err_msg ?? "unknown error";
14
+ throw new Error(`${errorPrefix} business error: ${String(errCode)} ${String(errMsg)}`);
15
+ }
16
+ const data = payload.data;
17
+ if (data && typeof data === "object" && !Array.isArray(data))
18
+ return data;
19
+ return {};
20
+ }
21
+ function extractPayloadWithStatus(payload, errorPrefix) {
22
+ if (payload.status_code !== 1) {
23
+ const errCode = payload.err_code ?? "unknown_err_code";
24
+ const errMsg = payload.err_msg ?? "unknown error";
25
+ throw new Error(`${errorPrefix} business error: ${String(errCode)} ${String(errMsg)}`);
26
+ }
27
+ return payload;
28
+ }
29
+ function parseJson(text, label) {
30
+ try {
31
+ const v = JSON.parse(text);
32
+ if (v && typeof v === "object" && !Array.isArray(v))
33
+ return v;
34
+ throw new Error("not an object");
35
+ }
36
+ catch {
37
+ throw new Error(`${label}: invalid JSON`);
38
+ }
39
+ }
40
+ function sleep(ms) {
41
+ return new Promise((r) => setTimeout(r, ms));
42
+ }
43
+ function toPublicUrl(cfg, url) {
44
+ if (!url)
45
+ return "";
46
+ const siteBase = cfg.baseUrl.replace(/\/+$/, "");
47
+ if (!siteBase)
48
+ return url;
49
+ try {
50
+ const source = new URL(url);
51
+ const target = new URL(siteBase.startsWith("http") ? siteBase : `https://${siteBase}`);
52
+ if (!source.hostname || !target.hostname)
53
+ return url;
54
+ return `${target.protocol}//${target.host}${source.pathname}${source.search}${source.hash}`;
55
+ }
56
+ catch {
57
+ return url;
58
+ }
59
+ }
60
+ async function requestUpstream(ctx, init) {
61
+ const authToken = await resolveAuthToken(ctx.userTempToken, ctx.cfg);
62
+ const base = ctx.cfg.baseUrl.replace(/\/+$/, "") + "/";
63
+ const path = init.path.replace(/^\/+/, "");
64
+ const urlBase = joinUrl(base, path);
65
+ let urlStr;
66
+ let body;
67
+ const headers = {
68
+ Accept: "application/json",
69
+ "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
70
+ Authorization: `Bearer ${authToken}`,
71
+ };
72
+ if (init.method === "GET") {
73
+ const finalParams = buildSignedQueryParams({ ...(init.params ?? {}) });
74
+ urlStr = `${urlBase}?${urlEncodeForm(finalParams)}`;
75
+ body = undefined;
76
+ }
77
+ else {
78
+ urlStr = urlBase;
79
+ const signSource = { ...(init.formBody ?? {}), ...(init.params ?? {}) };
80
+ const signedParams = buildSignedQueryParams(signSource);
81
+ body = urlEncodeForm(signedParams);
82
+ }
83
+ log(ctx.cfg, init.method, urlStr);
84
+ const res = await requestText(urlStr, { method: init.method, headers, body, cfg: ctx.cfg, timeoutMs: init.timeoutMs });
85
+ if (res.status < 200 || res.status >= 300) {
86
+ throw new Error(`Upstream HTTPError ${res.status}: ${res.body}`);
87
+ }
88
+ return parseJson(res.body, "upstream");
89
+ }
90
+ async function requestUpstreamJson(ctx, init) {
91
+ const authToken = init.authToken ?? (await resolveAuthToken(ctx.userTempToken, ctx.cfg));
92
+ const base = ctx.cfg.baseUrl.replace(/\/+$/, "") + "/";
93
+ const path = init.path.replace(/^\/+/, "");
94
+ let urlStr = joinUrl(base, path);
95
+ if (init.params && Object.keys(init.params).length > 0) {
96
+ const flat = {};
97
+ for (const [k, v] of Object.entries(init.params)) {
98
+ flat[k] = String(v ?? "");
99
+ }
100
+ const q = urlEncodeForm(flat);
101
+ urlStr += urlStr.includes("?") ? `&${q}` : `?${q}`;
102
+ }
103
+ const body = JSON.stringify(init.jsonBody ?? {});
104
+ const headers = {
105
+ Accept: "application/json",
106
+ "Content-Type": "application/json",
107
+ Authorization: `Bearer ${authToken}`,
108
+ };
109
+ const res = await requestText(urlStr, { method: init.method, headers, body, cfg: ctx.cfg, timeoutMs: init.timeoutMs });
110
+ if (res.status < 200 || res.status >= 300) {
111
+ throw new Error(`Upstream HTTPError ${res.status}: ${res.body}`);
112
+ }
113
+ return parseJson(res.body, "upstream json");
114
+ }
115
+ function requestSignatureParams(webSite, params) {
116
+ if (webSite !== "ai_mcp")
117
+ throw new Error(`Unsupported web_site for local signature: ${webSite}`);
118
+ const signed = buildSignedQueryParams({ ...params });
119
+ return {
120
+ appkey: String(signed.appkey ?? ""),
121
+ web_site: String(signed.web_site ?? webSite),
122
+ timestamp: String(signed.timestamp ?? ""),
123
+ signature: String(signed.signature ?? ""),
124
+ };
125
+ }
126
+ function buildAiMcpSignedUrl(cfg, path, params) {
127
+ const base = cfg.baseUrl.replace(/\/+$/, "") + "/";
128
+ const p = path.replace(/^\/+/, "");
129
+ const url = joinUrl(base, p);
130
+ const business = { ...(params ?? {}) };
131
+ const signed = requestSignatureParams("ai_mcp", business);
132
+ const merged = {};
133
+ for (const [k, v] of Object.entries(business))
134
+ merged[k] = String(v ?? "");
135
+ for (const [k, v] of Object.entries(signed))
136
+ merged[k] = v;
137
+ const q = urlEncodeForm(merged);
138
+ return `${url}${url.includes("?") ? "&" : "?"}${q}`;
139
+ }
140
+ async function requestSignedUrlGet(ctx, url, timeoutMs = 20000) {
141
+ const authToken = await resolveAuthToken(ctx.userTempToken, ctx.cfg);
142
+ const headers = {
143
+ Accept: "application/json",
144
+ "Content-Type": "application/json",
145
+ Authorization: `Bearer ${authToken}`,
146
+ };
147
+ const res = await requestText(url, { method: "GET", headers, cfg: ctx.cfg, timeoutMs });
148
+ if (res.status < 200 || res.status >= 300)
149
+ throw new Error(`Upstream HTTPError ${res.status}: ${res.body}`);
150
+ return parseJson(res.body, "signed GET");
151
+ }
152
+ async function requestSignedUrlPostForm(ctx, url, formBody, timeoutMs = 20000) {
153
+ const authToken = await resolveAuthToken(ctx.userTempToken, ctx.cfg);
154
+ const encoded = urlEncodeForm(Object.fromEntries(Object.entries(formBody ?? {}).map(([k, v]) => [k, String(v ?? "")])));
155
+ const headers = {
156
+ Accept: "application/json",
157
+ "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
158
+ Authorization: `Bearer ${authToken}`,
159
+ };
160
+ const res = await requestText(url, { method: "POST", headers, body: encoded, cfg: ctx.cfg, timeoutMs });
161
+ if (res.status < 200 || res.status >= 300)
162
+ throw new Error(`Upstream HTTPError ${res.status}: ${res.body}`);
163
+ return parseJson(res.body, "signed POST");
164
+ }
165
+ async function archiveProjectUntilSuccess(ctx, projectId) {
166
+ const archiveUrl = buildAiMcpSignedUrl(ctx.cfg, ctx.cfg.archiveProjectApiPath, { pid: projectId });
167
+ const maxAttempts = 120;
168
+ for (let attempt = 1; attempt <= maxAttempts; attempt++) {
169
+ const payload = await requestSignedUrlPostForm(ctx, archiveUrl, { is_merge: "0" }, 30000);
170
+ const status = String(payload.status ?? "");
171
+ const result = String(payload.result ?? "");
172
+ if (status === "200" && result === "Success") {
173
+ log(ctx.cfg, "project archive success", projectId, attempt);
174
+ return;
175
+ }
176
+ if (status === "200" && result === "Doing") {
177
+ await sleep(2500);
178
+ continue;
179
+ }
180
+ const message = String(payload.message ?? payload.err_msg ?? "archive failed");
181
+ throw new Error(`Archive project failed: ${message}`);
182
+ }
183
+ throw new Error("Archive project timeout: still Doing");
184
+ }
185
+ async function ensureReadyForEdit(ctx, projectId) {
186
+ if (!projectId)
187
+ throw new Error("Missing project_id");
188
+ const structure = await fetchProjectStructure(ctx, projectId);
189
+ const status = String(structure.status ?? "");
190
+ const projStatus = String(structure.proj_status ?? "");
191
+ if (status === "1" || projStatus === "1") {
192
+ log(ctx.cfg, "project collecting, auto stop before edit", projectId);
193
+ await publishSurvey(ctx, projectId, "stop");
194
+ }
195
+ await archiveProjectUntilSuccess(ctx, projectId);
196
+ }
197
+ export async function fetchProjectList(ctx, keyword, page, ptype) {
198
+ const params = {
199
+ jwt: 1,
200
+ page,
201
+ page_size: ctx.cfg.projectsPageSize,
202
+ };
203
+ if (keyword)
204
+ params.keyword = keyword;
205
+ if (ptype)
206
+ params.ptype = ptype;
207
+ const payload = await requestUpstream(ctx, {
208
+ method: "GET",
209
+ path: ctx.cfg.projectsApiPath,
210
+ params,
211
+ timeoutMs: 10000,
212
+ });
213
+ const data = extractDataWithStatus(payload, "Project list");
214
+ const items = data.list;
215
+ if (Array.isArray(items)) {
216
+ for (const item of items) {
217
+ if (!item || typeof item !== "object")
218
+ continue;
219
+ const row = item;
220
+ const previewUrl = String(row.pre_view_url ?? "").trim();
221
+ if (previewUrl)
222
+ row.pre_view_url = toPublicUrl(ctx.cfg, previewUrl);
223
+ }
224
+ }
225
+ return data;
226
+ }
227
+ export async function fetchProjectStructure(ctx, projectId, opts) {
228
+ if (!projectId)
229
+ throw new Error("Missing project_id");
230
+ const payload = await requestUpstream(ctx, {
231
+ method: "GET",
232
+ path: ctx.cfg.projectStructureApiPath,
233
+ params: { project_id: projectId },
234
+ timeoutMs: 20000,
235
+ });
236
+ const data = extractDataWithStatus(payload, "Project structure");
237
+ const narrowed = coerceStructureNarrowOpts(opts);
238
+ if (narrowed && narrowOptsHasAny(narrowed))
239
+ return narrowProjectStructureData(data, narrowed);
240
+ return data;
241
+ }
242
+ export async function updateProject(ctx, projectId, fields) {
243
+ if (!projectId)
244
+ throw new Error("Missing project_id");
245
+ const formBody = { project_id: projectId };
246
+ if (fields.title !== undefined)
247
+ formBody.title = fields.title;
248
+ if (fields.begin_desc !== undefined)
249
+ formBody.begin_desc = fields.begin_desc;
250
+ if (fields.end_desc !== undefined)
251
+ formBody.end_desc = fields.end_desc;
252
+ if (Object.keys(formBody).length === 1)
253
+ throw new Error("At least one of title, begin_desc, end_desc is required");
254
+ await ensureReadyForEdit(ctx, projectId);
255
+ const payload = await requestUpstream(ctx, {
256
+ method: "POST",
257
+ path: ctx.cfg.projectStructureApiPath,
258
+ formBody,
259
+ });
260
+ return extractDataWithStatus(payload, "Update project");
261
+ }
262
+ export async function createQuestion(ctx, init) {
263
+ const { projectId, questionpageId, index } = init;
264
+ if (!projectId)
265
+ throw new Error("Missing project_id");
266
+ if (!questionpageId)
267
+ throw new Error("Missing questionpage_id");
268
+ if (!init.questionStruct || typeof init.questionStruct !== "object")
269
+ throw new Error("question_struct must be an object");
270
+ await ensureReadyForEdit(ctx, projectId);
271
+ const struct = normalizeQuestionStructForUpstream({ ...init.questionStruct });
272
+ ensureCustomAttrShowSeqOn(struct);
273
+ struct.project_id = projectId;
274
+ struct.questionpage_id = questionpageId;
275
+ const questionStructJson = JSON.stringify(struct);
276
+ const payload = await requestUpstream(ctx, {
277
+ method: "POST",
278
+ path: ctx.cfg.createQuestionApiPath,
279
+ formBody: {
280
+ project_id: projectId,
281
+ questionpage_id: questionpageId,
282
+ question_struct: questionStructJson,
283
+ index: String(index),
284
+ },
285
+ });
286
+ return extractPayloadWithStatus(payload, "Create question");
287
+ }
288
+ export async function updateQuestion(ctx, init) {
289
+ const { projectId, questionId, questionpageId } = init;
290
+ if (!projectId || !questionId || !questionpageId)
291
+ throw new Error("Missing project_id, question_id or questionpage_id");
292
+ if (!init.questionStruct || typeof init.questionStruct !== "object")
293
+ throw new Error("question_struct must be an object");
294
+ await ensureReadyForEdit(ctx, projectId);
295
+ const normalizedStruct = normalizeQuestionStructForUpstream({ ...init.questionStruct });
296
+ ensureQuestionStructMongoId(normalizedStruct, questionId);
297
+ normalizedStruct.project_id = projectId;
298
+ normalizedStruct.questionpage_id = questionpageId;
299
+ const questionStructJson = JSON.stringify(normalizedStruct);
300
+ const payload = await requestUpstream(ctx, {
301
+ method: "POST",
302
+ path: ctx.cfg.updateQuestionApiPath,
303
+ formBody: {
304
+ project_id: projectId,
305
+ questionpage_id: questionpageId,
306
+ question_id: questionId,
307
+ question_struct: questionStructJson,
308
+ },
309
+ });
310
+ return extractPayloadWithStatus(payload, "Update question");
311
+ }
312
+ export async function deleteQuestion(ctx, projectId, questionId) {
313
+ if (!projectId || !questionId)
314
+ throw new Error("Missing project_id or question_id");
315
+ await ensureReadyForEdit(ctx, projectId);
316
+ const payload = await requestUpstream(ctx, {
317
+ method: "POST",
318
+ path: ctx.cfg.deleteQuestionApiPath,
319
+ formBody: { project_id: projectId, question_id: questionId },
320
+ });
321
+ return extractPayloadWithStatus(payload, "Delete question");
322
+ }
323
+ export async function publishSurvey(ctx, projectId, action) {
324
+ if (!projectId)
325
+ throw new Error("Missing project_id");
326
+ if (action !== "publish" && action !== "stop")
327
+ throw new Error("action must be publish or stop");
328
+ const authToken = await resolveAuthToken(ctx.userTempToken, ctx.cfg);
329
+ const status = action === "publish" ? 1 : 0;
330
+ const base = ctx.cfg.baseUrl.replace(/\/+$/, "") + "/";
331
+ const path = ctx.cfg.publishSurveyApiPath.replace(/^\/+/, "");
332
+ const url = joinUrl(base, path);
333
+ const payloadBody = {
334
+ proj_id: projectId,
335
+ status,
336
+ web_site: "wenjuan_web",
337
+ source: "wenjuan_web",
338
+ share_project: "off",
339
+ };
340
+ const headers = {
341
+ Accept: "application/json",
342
+ "Content-Type": "application/json",
343
+ Authorization: `Bearer ${authToken}`,
344
+ };
345
+ const res = await requestText(url, {
346
+ method: "POST",
347
+ headers,
348
+ body: JSON.stringify(payloadBody),
349
+ cfg: ctx.cfg,
350
+ timeoutMs: 20000,
351
+ });
352
+ if (res.status < 200 || res.status >= 300)
353
+ throw new Error(`Upstream HTTPError ${res.status}: ${res.body}`);
354
+ const parsed = parseJson(res.body, "publish");
355
+ if (action === "publish" && parsed.status_code === 1) {
356
+ const data = parsed.data;
357
+ if (data && typeof data === "object") {
358
+ const d = data;
359
+ const updateErrMsg = String(d.update_err_msg ?? "").trim();
360
+ if (updateErrMsg && ["违规", "审核", "审查"].some((k) => updateErrMsg.includes(k))) {
361
+ delete d.update_err_msg;
362
+ parsed.pending_review = true;
363
+ parsed.message = "项目审核中";
364
+ }
365
+ }
366
+ }
367
+ if (parsed.status_code === 1) {
368
+ try {
369
+ const structure = await fetchProjectStructure(ctx, projectId);
370
+ const shortId = String(structure.short_id ?? "").trim();
371
+ parsed.project_id = projectId;
372
+ parsed.title = String(structure.title ?? "").trim();
373
+ parsed.question_count = Number(structure.question_count ?? 0) || 0;
374
+ parsed.answer_url = shortId ? `${ctx.cfg.baseUrl.replace(/\/+$/, "")}/s/${shortId}` : "";
375
+ }
376
+ catch (e) {
377
+ log(ctx.cfg, "fetch project summary after publish failed", projectId, e);
378
+ }
379
+ }
380
+ return parsed;
381
+ }
382
+ export async function createSurvey(ctx, init) {
383
+ const { title, ptype, questionList, projectExtras, autoPublish, maxPollTimes } = init;
384
+ if (!title)
385
+ throw new Error("Missing title");
386
+ if (!(ptype in PROJECT_TYPE_MAP))
387
+ throw new Error("ptype must be one of survey/vote/form/assess");
388
+ if (!Array.isArray(questionList) || questionList.length === 0)
389
+ throw new Error("question_list must be non-empty array");
390
+ const typeInfo = PROJECT_TYPE_MAP[ptype];
391
+ const normalizedQuestionList = normalizeQuestionListForCreate(questionList);
392
+ const projectJson = {
393
+ title,
394
+ type_id: typeInfo.type_id,
395
+ p_type: typeInfo.p_type,
396
+ ai_source: 13,
397
+ import_type: "0",
398
+ question_list: normalizedQuestionList,
399
+ };
400
+ if (projectExtras && typeof projectExtras === "object") {
401
+ for (const key of ["survey_result", "welcome", "cover", "phone_cover_url"]) {
402
+ if (projectExtras[key] !== undefined)
403
+ projectJson[key] = projectExtras[key];
404
+ }
405
+ }
406
+ const first = await requestUpstreamJson(ctx, {
407
+ method: "POST",
408
+ path: ctx.cfg.createSurveyApiPath,
409
+ jsonBody: { project_json: projectJson },
410
+ timeoutMs: 30000,
411
+ });
412
+ if (first.status_code !== 1) {
413
+ const err = first.message ?? first.err_msg ?? "create_survey failed";
414
+ throw new Error(`Create survey business error: ${String(err)}`);
415
+ }
416
+ const fingerprint = first.data?.fingerprint;
417
+ if (!fingerprint || typeof fingerprint !== "string")
418
+ throw new Error("Create survey missing fingerprint");
419
+ let projectId = "";
420
+ let shortId = "";
421
+ let lastStatus = {};
422
+ for (let i = 0; i < maxPollTimes; i++) {
423
+ await sleep(1000);
424
+ const statusUrl = buildAiMcpSignedUrl(ctx.cfg, ctx.cfg.createSurveyApiPath, { fingerprint });
425
+ const statusPayload = await requestSignedUrlGet(ctx, statusUrl, 20000);
426
+ lastStatus = statusPayload;
427
+ const data = statusPayload.data ?? {};
428
+ if (!data.continue_poll) {
429
+ projectId = String(data.project_id ?? "");
430
+ shortId = String(data.short_id ?? "");
431
+ break;
432
+ }
433
+ }
434
+ if (!projectId)
435
+ throw new Error(`Create survey polling timeout or failed: ${JSON.stringify(lastStatus)}`);
436
+ const result = {
437
+ project_id: projectId,
438
+ short_id: shortId,
439
+ title,
440
+ question_count: questionList.length,
441
+ ptype,
442
+ };
443
+ if (autoPublish) {
444
+ result.publish_result = await publishSurvey(ctx, projectId, "publish");
445
+ }
446
+ return result;
447
+ }
448
+ export function getReport(cfg, projectId) {
449
+ if (!projectId)
450
+ throw new Error("Missing project_id");
451
+ const base = `${cfg.baseUrl.replace(/\/+$/, "")}/report/topic/`;
452
+ return { project_id: projectId, report_url: joinUrl(base, projectId) };
453
+ }
454
+ export async function overviewStats(ctx, projectId) {
455
+ if (!projectId)
456
+ throw new Error("Missing project_id");
457
+ const statsPath = ctx.cfg.reportOverviewStatsApiPath.replace("{project_id}", projectId);
458
+ const url = buildAiMcpSignedUrl(ctx.cfg, statsPath);
459
+ const payload = await requestSignedUrlGet(ctx, url, 30000);
460
+ if (String(payload.status) !== "200") {
461
+ const msg = payload.message ?? "unknown error";
462
+ const code = payload.status ?? "unknown_status";
463
+ throw new Error(`Overview stats business error: ${String(code)} ${String(msg)}`);
464
+ }
465
+ const data = payload.data;
466
+ return data && typeof data === "object" && !Array.isArray(data) ? data : {};
467
+ }
468
+ export async function exportData(ctx, init) {
469
+ const { projectId, timeoutSeconds, pollIntervalSeconds } = init;
470
+ if (!projectId)
471
+ throw new Error("Missing project_id");
472
+ const filterCountPayload = await requestUpstreamJson(ctx, {
473
+ method: "POST",
474
+ path: ctx.cfg.reportDownloadFilterCountApiPath,
475
+ params: requestSignatureParams("ai_mcp", {}),
476
+ jsonBody: {
477
+ project_id: projectId,
478
+ client_type: 1,
479
+ source: 1,
480
+ filter_template: {},
481
+ },
482
+ timeoutMs: 30000,
483
+ });
484
+ const filterCount = Number(filterCountPayload.data?.filter_count ?? 0) || 0;
485
+ if (filterCount === 0) {
486
+ return { project_id: projectId, filter_count: 0, status: "no_data" };
487
+ }
488
+ const createPayload = await requestUpstreamJson(ctx, {
489
+ method: "POST",
490
+ path: ctx.cfg.reportDownloadApiPath,
491
+ params: requestSignatureParams("ai_mcp", {}),
492
+ jsonBody: {
493
+ project_id: projectId,
494
+ download_type: 1,
495
+ sub_type: 3,
496
+ client_type: 1,
497
+ source: 1,
498
+ file_type: [1],
499
+ data_type: 1,
500
+ is_merge: true,
501
+ ext: {
502
+ data_content: "raw",
503
+ data_format: "text",
504
+ display_mode: "one_question_one_column",
505
+ },
506
+ },
507
+ timeoutMs: 30000,
508
+ });
509
+ if (!(createPayload.status_code === 1 || String(createPayload.code) === "200")) {
510
+ const errMsg = createPayload.err_msg ?? createPayload.msg ?? "create export task failed";
511
+ const errCode = createPayload.err_code ?? createPayload.code ?? "unknown";
512
+ throw new Error(`Export data create task error: ${String(errCode)} ${String(errMsg)}`);
513
+ }
514
+ const start = Date.now() / 1000;
515
+ while (Date.now() / 1000 - start <= timeoutSeconds) {
516
+ await sleep(Math.max(1, pollIntervalSeconds) * 1000);
517
+ const infosUrl = buildAiMcpSignedUrl(ctx.cfg, ctx.cfg.reportDownloadInfosApiPath, { project_id: projectId });
518
+ const infosPayload = await requestSignedUrlGet(ctx, infosUrl, 30000);
519
+ const ok = infosPayload.status_code === 1 || String(infosPayload.code) === "200";
520
+ if (!ok)
521
+ continue;
522
+ const data = infosPayload.data ?? {};
523
+ const taskList = data.task_list ?? data.list ?? [];
524
+ for (const task of taskList) {
525
+ if (!task || typeof task !== "object")
526
+ continue;
527
+ const t = task;
528
+ const st = t.status;
529
+ if (st === 1 && t.download_url) {
530
+ return {
531
+ project_id: projectId,
532
+ filter_count: filterCount,
533
+ status: "success",
534
+ download_url: t.download_url,
535
+ display_name: String(t.display_name ?? ""),
536
+ };
537
+ }
538
+ if (st === 2)
539
+ return { project_id: projectId, filter_count: filterCount, status: "failed" };
540
+ if (st === 4)
541
+ return { project_id: projectId, filter_count: filterCount, status: "no_data" };
542
+ }
543
+ }
544
+ return {
545
+ project_id: projectId,
546
+ filter_count: filterCount,
547
+ status: "timeout",
548
+ report_url: getReport(ctx.cfg, projectId).report_url,
549
+ };
550
+ }
551
+ //# sourceMappingURL=survey-api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"survey-api.js","sourceRoot":"","sources":["../../src/api/survey-api.ts"],"names":[],"mappings":"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"}
package/dist/argv.d.ts ADDED
@@ -0,0 +1,9 @@
1
+ export type ParsedCli = {
2
+ positional: string[];
3
+ flags: Record<string, string | boolean>;
4
+ };
5
+ export declare function parseCliArgs(argv: string[]): ParsedCli;
6
+ export declare function flagString(flags: Record<string, string | boolean>, key: string): string | undefined;
7
+ export declare function flagBool(flags: Record<string, string | boolean>, key: string, defaultValue: boolean): boolean;
8
+ export declare function flagInt(flags: Record<string, string | boolean>, key: string, defaultValue: number): number;
9
+ //# sourceMappingURL=argv.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"argv.d.ts","sourceRoot":"","sources":["../src/argv.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GAAG;IACtB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC;CACzC,CAAC;AAEF,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,SAAS,CA6BtD;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAInG;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,GAAG,OAAO,CAU7G;AAED,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,CAK1G"}
package/dist/argv.js ADDED
@@ -0,0 +1,62 @@
1
+ export function parseCliArgs(argv) {
2
+ const positional = [];
3
+ const flags = {};
4
+ for (let i = 0; i < argv.length; i++) {
5
+ const a = argv[i];
6
+ if (a === "--") {
7
+ positional.push(...argv.slice(i + 1));
8
+ break;
9
+ }
10
+ if (a.startsWith("--")) {
11
+ const eq = a.indexOf("=");
12
+ if (eq !== -1) {
13
+ const key = a.slice(2, eq);
14
+ flags[key] = a.slice(eq + 1);
15
+ }
16
+ else {
17
+ const key = a.slice(2);
18
+ const next = argv[i + 1];
19
+ if (next && !next.startsWith("--")) {
20
+ flags[key] = next;
21
+ i++;
22
+ }
23
+ else {
24
+ flags[key] = true;
25
+ }
26
+ }
27
+ }
28
+ else {
29
+ positional.push(a);
30
+ }
31
+ }
32
+ return { positional, flags };
33
+ }
34
+ export function flagString(flags, key) {
35
+ const v = flags[key];
36
+ if (v === true || v === undefined)
37
+ return undefined;
38
+ return String(v);
39
+ }
40
+ export function flagBool(flags, key, defaultValue) {
41
+ const v = flags[key];
42
+ if (v === undefined)
43
+ return defaultValue;
44
+ if (v === true)
45
+ return true;
46
+ if (typeof v === "string") {
47
+ const s = v.toLowerCase();
48
+ if (["1", "true", "yes", "on"].includes(s))
49
+ return true;
50
+ if (["0", "false", "no", "off"].includes(s))
51
+ return false;
52
+ }
53
+ return defaultValue;
54
+ }
55
+ export function flagInt(flags, key, defaultValue) {
56
+ const raw = flagString(flags, key);
57
+ if (raw === undefined)
58
+ return defaultValue;
59
+ const n = Number.parseInt(raw, 10);
60
+ return Number.isFinite(n) ? n : defaultValue;
61
+ }
62
+ //# sourceMappingURL=argv.js.map