@optima-chat/tiktok-cli 0.13.0 → 0.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +14 -0
- package/dist/index.js +228 -5
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -55,6 +55,20 @@ tiktok promotions create-flashsale --shop=<id> --price=11.9 # 等号式
|
|
|
55
55
|
|
|
56
56
|
(0.10.2 之前只认空格式,等号式会让那一格参数**静默消失**而命令照报成功,见 #11。)
|
|
57
57
|
|
|
58
|
+
**每条命令只认它自己的参数**(`tiktok <命令> --help` 列出来),外加全局 `--shop` / `--apply`。
|
|
59
|
+
不认的参数、多余的位置参数、`-f` 这类短参数一律**当场报 `VALIDATION`、不发请求**,并尽量给出最接近的写法:
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
tiktok orders list --shop <id> --days 14
|
|
63
|
+
# ⇒ VALIDATION:orders list:不认 --days(这条命令没有 --days;近 N 天用起点表示,如 --from 2026-09-06 …)。…
|
|
64
|
+
tiktok products get --shop <id> --product-id 1737…
|
|
65
|
+
# ⇒ VALIDATION:products get:不认 --product-id(你是想用 --product 吗?)。…
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
报错体里另有 `unknown_flags` / `extra_positional` / `allowed_flags` 三个机读字段。
|
|
69
|
+
(此前不认的参数被**静默丢掉**、按默认值跑出一份看起来正常的结果:`--days 14` 实际查的是 30 天,
|
|
70
|
+
`--product-id` 请求的是 `/products/undefined`,见 #25。)
|
|
71
|
+
|
|
58
72
|
**开关型 flag**(`--apply` / `--enable` / `--default` / `--unprocessed`)除了裸传,也能带值:
|
|
59
73
|
`true`/`1`/`yes`/`on` 为真,`false`/`0`/`no`/`off`/空串为假(大小写不敏感),
|
|
60
74
|
给它别的值**当场报错**而不是猜。同一个 flag 写两次以后者为准(`--apply=false --apply` 会真发)。
|
package/dist/index.js
CHANGED
|
@@ -3,6 +3,103 @@
|
|
|
3
3
|
// src/commands.ts
|
|
4
4
|
import { readFileSync as readFileSync2 } from "fs";
|
|
5
5
|
|
|
6
|
+
// src/flags.ts
|
|
7
|
+
var GLOBAL_FLAGS = ["shop", "actor", "apply", "help"];
|
|
8
|
+
var ENTITY_FLAGS = ["product", "order", "package", "video", "sku", "creator", "conversation", "category", "warehouse", "shop"];
|
|
9
|
+
var SYNONYMS = {
|
|
10
|
+
"limit": "page-size",
|
|
11
|
+
"size": "page-size",
|
|
12
|
+
"pagesize": "page-size",
|
|
13
|
+
"per-page": "page-size",
|
|
14
|
+
"start": "from",
|
|
15
|
+
"start-date": "from",
|
|
16
|
+
"begin": "from",
|
|
17
|
+
"since-date": "from",
|
|
18
|
+
"end": "to",
|
|
19
|
+
"end-date": "to",
|
|
20
|
+
"until": "to",
|
|
21
|
+
"qty": "quantity",
|
|
22
|
+
"shop-id": "shop",
|
|
23
|
+
"shopid": "shop",
|
|
24
|
+
"shop_id": "shop"
|
|
25
|
+
};
|
|
26
|
+
var DAY_MS = 864e5;
|
|
27
|
+
function editDistance(a, b) {
|
|
28
|
+
const dp = Array.from({ length: a.length + 1 }, (_, i) => [i, ...Array(b.length).fill(0)]);
|
|
29
|
+
for (let j = 1; j <= b.length; j++) dp[0][j] = j;
|
|
30
|
+
for (let i = 1; i <= a.length; i++) {
|
|
31
|
+
for (let j = 1; j <= b.length; j++) {
|
|
32
|
+
dp[i][j] = Math.min(dp[i - 1][j] + 1, dp[i][j - 1] + 1, dp[i - 1][j - 1] + (a[i - 1] === b[j - 1] ? 0 : 1));
|
|
33
|
+
if (i > 1 && j > 1 && a[i - 1] === b[j - 2] && a[i - 2] === b[j - 1]) dp[i][j] = Math.min(dp[i][j], dp[i - 2][j - 2] + 1);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return dp[a.length][b.length];
|
|
37
|
+
}
|
|
38
|
+
function suggestFlag(unknown, allowed, value, now = Date.now(), cmdName = "") {
|
|
39
|
+
const u = unknown.toLowerCase();
|
|
40
|
+
const dashed = u.replace(/_/g, "-");
|
|
41
|
+
const cands = [...allowed, ...GLOBAL_FLAGS.filter((g) => g !== "help")];
|
|
42
|
+
if (dashed === "days" && allowed.includes("from")) {
|
|
43
|
+
const n = Number(value);
|
|
44
|
+
const eg = Number.isFinite(n) && n > 0 ? new Date(now - n * DAY_MS).toISOString().slice(0, 10) : "<YYYY-MM-DD>";
|
|
45
|
+
const forms = allowed.includes("since") ? "YYYY-MM-DD \u6216 unix \u79D2" : "YYYY-MM-DD";
|
|
46
|
+
return `\u8FD9\u6761\u547D\u4EE4\u6CA1\u6709 --days\uFF1B\u8FD1 N \u5929\u7528\u8D77\u70B9\u8868\u793A\uFF0C\u5982 --from ${eg}\uFF08\u8D77\u6B62\u7528 --from / --to\uFF0C\u53D6 ${forms}\uFF09`;
|
|
47
|
+
}
|
|
48
|
+
if (dashed === "dry-run") {
|
|
49
|
+
return "\u4E0D\u9700\u8981 --dry-run\uFF1A\u5199\u547D\u4EE4\u9ED8\u8BA4\u5C31\u53EA\u9884\u89C8\u3001\u4E0D\u52A0 --apply \u4E0D\u4F1A\u771F\u53D1\uFF1B\u8BFB\u547D\u4EE4\u672C\u6765\u5C31\u4E0D\u5199\u3002\u53BB\u6389\u5B83\u5373\u53EF";
|
|
50
|
+
}
|
|
51
|
+
const syn = SYNONYMS[dashed] ?? SYNONYMS[u];
|
|
52
|
+
if (syn && cands.includes(syn)) return `--${syn}`;
|
|
53
|
+
if (dashed !== unknown && cands.includes(dashed)) return `--${dashed}`;
|
|
54
|
+
const base = dashed.replace(/-?ids?$/, "");
|
|
55
|
+
if (base && base !== dashed && ENTITY_FLAGS.includes(base) && cands.includes(base)) return `--${base}`;
|
|
56
|
+
if (dashed === "id") {
|
|
57
|
+
if (/\b(list|search|recommend)\b/.test(cmdName)) return null;
|
|
58
|
+
const ents = allowed.filter((f) => ENTITY_FLAGS.includes(f));
|
|
59
|
+
if (ents.length === 1) return `--${ents[0]}`;
|
|
60
|
+
return null;
|
|
61
|
+
}
|
|
62
|
+
let best = null;
|
|
63
|
+
let bestD = Infinity;
|
|
64
|
+
for (const f of cands) {
|
|
65
|
+
const d = editDistance(dashed, f);
|
|
66
|
+
if (d < bestD) {
|
|
67
|
+
best = f;
|
|
68
|
+
bestD = d;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
const shortest = Math.min(dashed.length, (best ?? "").length);
|
|
72
|
+
const limit = shortest <= 3 ? 0 : shortest <= 6 ? 1 : 2;
|
|
73
|
+
const NEG = /^(un|dis|non|in)/;
|
|
74
|
+
if (best && best.replace(NEG, "") === dashed.replace(NEG, "") && best !== dashed) return null;
|
|
75
|
+
if (best && bestD <= limit) return `--${best}`;
|
|
76
|
+
return null;
|
|
77
|
+
}
|
|
78
|
+
function checkFlags(cmdName, args2, allowed, rest = [], now = Date.now(), noShop = false) {
|
|
79
|
+
const known = /* @__PURE__ */ new Set([...allowed, ...GLOBAL_FLAGS]);
|
|
80
|
+
const unknown = Object.keys(args2).filter((k) => !known.has(k));
|
|
81
|
+
if (unknown.length === 0 && rest.length === 0) return null;
|
|
82
|
+
const parts = [];
|
|
83
|
+
for (const k of unknown) {
|
|
84
|
+
if (k === "") {
|
|
85
|
+
parts.push(`\u4E0D\u8BA4 --=${args2[k]}\uFF08\u6CA1\u6709\u53C2\u6570\u540D\uFF09`);
|
|
86
|
+
continue;
|
|
87
|
+
}
|
|
88
|
+
const hint = suggestFlag(k, allowed, args2[k], now, cmdName);
|
|
89
|
+
parts.push(!hint ? `\u4E0D\u8BA4 --${k}` : hint.startsWith("--") ? `\u4E0D\u8BA4 --${k}\uFF08\u4F60\u662F\u60F3\u7528 ${hint} \u5417\uFF1F\uFF09` : `\u4E0D\u8BA4 --${k}\uFF08${hint}\uFF09`);
|
|
90
|
+
}
|
|
91
|
+
if (rest.length > 0) {
|
|
92
|
+
parts.push(`\u591A\u4F59\u7684\u4F4D\u7F6E\u53C2\u6570 ${rest.map((r) => JSON.stringify(r)).join(" ")}\uFF08\u672C CLI \u7684\u53C2\u6570\u90FD\u7528 --\u957F\u53C2\u6570 \u4F20\uFF0C\u4E0D\u6536\u4F4D\u7F6E\u53C2\u6570\u548C -x \u77ED\u53C2\u6570\uFF1B\u503C\u91CC\u6709\u7A7A\u683C\u5C31\u7ED9\u6574\u4E2A\u503C\u52A0\u5F15\u53F7\uFF0C\u5982 --title "Flash Sale"\uFF09`);
|
|
93
|
+
}
|
|
94
|
+
const allowedText = allowed.length ? allowed.map((f) => `--${f}`).join(" ") : "\uFF08\u6CA1\u6709\u4E13\u5C5E\u53C2\u6570\uFF09";
|
|
95
|
+
return {
|
|
96
|
+
unknown_flags: unknown,
|
|
97
|
+
extra_positional: [...rest],
|
|
98
|
+
allowed_flags: [...allowed],
|
|
99
|
+
message: `${cmdName}\uFF1A${parts.join("\uFF1B")}\u3002\u8FD9\u6761\u547D\u4EE4\u8BA4\u7684\u53C2\u6570\uFF1A${allowedText}\uFF08\u53E6\u6709\u5168\u5C40 ${noShop ? "--apply" : "--shop / --apply"}\uFF09\u3002\u26D4 \u6CA1\u53D1\u8BF7\u6C42 \u2014\u2014 \u4E0D\u8BA4\u7684\u53C2\u6570\u539F\u6765\u4F1A\u88AB\u9759\u9ED8\u4E22\u6389\u3001\u6309\u9ED8\u8BA4\u503C\u8DD1\u51FA\u4E00\u4EFD\u770B\u8D77\u6765\u6B63\u5E38\u7684\u7ED3\u679C\u3002`
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
|
|
6
103
|
// src/client.ts
|
|
7
104
|
import { readFileSync } from "fs";
|
|
8
105
|
import { homedir } from "os";
|
|
@@ -209,9 +306,14 @@ function fillEmptyList(data, listKey) {
|
|
|
209
306
|
if (!(listKey in d)) d[listKey] = [];
|
|
210
307
|
}
|
|
211
308
|
function commandUsage(cmd) {
|
|
212
|
-
|
|
309
|
+
const flags = cmd.flags?.length ? cmd.flags.map((f) => `--${f}`).join(" ") : "\uFF08\u6CA1\u6709\u4E13\u5C5E\u53C2\u6570\uFF09";
|
|
310
|
+
const shop = cmd.noShop ? "" : " --shop <shopId>";
|
|
311
|
+
const globals = cmd.noShop ? "--apply" : "--shop / --apply";
|
|
312
|
+
return `tiktok ${cmd.name}${shop} [--flags]
|
|
213
313
|
|
|
214
314
|
${cmd.summary}
|
|
315
|
+
|
|
316
|
+
\u8BA4\u7684\u53C2\u6570\uFF1A${flags}\uFF08\u53E6\u6709\u5168\u5C40 ${globals}\uFF09\uFF1B\u4E0D\u8BA4\u7684\u4F1A\u5F53\u573A\u62A5\u9519\u3002
|
|
215
317
|
`;
|
|
216
318
|
}
|
|
217
319
|
var today = () => (/* @__PURE__ */ new Date()).toISOString().slice(0, 10);
|
|
@@ -222,6 +324,7 @@ var COMMANDS = [
|
|
|
222
324
|
{
|
|
223
325
|
name: "orders list",
|
|
224
326
|
summary: "\u8BA2\u5355\u5217\u8868\uFF08\u9ED8\u8BA4\u8FD130\u5929\u3001\u6309\u521B\u5EFA\u65F6\u95F4\u5012\u5E8F\uFF1B--from/--to\uFF08unix\u79D2\u6216YYYY-MM-DD\uFF09--status --page-size --sort-order ASC/DESC --sort-field create_time/update_time\uFF09",
|
|
327
|
+
flags: ["from", "page-size", "page-token", "since", "sort-field", "sort-order", "status", "to"],
|
|
225
328
|
listKey: "orders",
|
|
226
329
|
run: ({ shop, args: args2 }) => proxy("POST", shop, "/order/202309/orders/search", {
|
|
227
330
|
query: {
|
|
@@ -243,12 +346,14 @@ var COMMANDS = [
|
|
|
243
346
|
{
|
|
244
347
|
name: "orders get",
|
|
245
348
|
summary: "\u8BA2\u5355\u8BE6\u60C5\uFF08--id \u5FC5\u586B\uFF09",
|
|
349
|
+
flags: ["id"],
|
|
246
350
|
run: ({ shop, args: args2 }) => proxy("GET", shop, "/order/202309/orders/detail", { query: { ids: args2.id } })
|
|
247
351
|
},
|
|
248
352
|
// ── 售后(退货/取消)只读 ──
|
|
249
353
|
{
|
|
250
354
|
name: "orders cancellations",
|
|
251
355
|
summary: "\u53D6\u6D88\u5355\u5217\u8868\uFF08--status \u53EF\u9009\uFF0C--page-size\uFF09",
|
|
356
|
+
flags: ["page-size", "status"],
|
|
252
357
|
listKey: "cancellations",
|
|
253
358
|
run: ({ shop, args: args2 }) => proxy("POST", shop, "/return_refund/202309/cancellations/search", {
|
|
254
359
|
query: { page_size: String(args2["page-size"] ?? 20) },
|
|
@@ -258,6 +363,7 @@ var COMMANDS = [
|
|
|
258
363
|
{
|
|
259
364
|
name: "orders returns",
|
|
260
365
|
summary: "\u9000\u8D27\u5355\u5217\u8868\uFF08--status \u53EF\u9009\uFF0C--page-size\uFF09",
|
|
366
|
+
flags: ["page-size", "status"],
|
|
261
367
|
listKey: "return_orders",
|
|
262
368
|
run: ({ shop, args: args2 }) => proxy("POST", shop, "/return_refund/202309/returns/search", {
|
|
263
369
|
query: { page_size: String(args2["page-size"] ?? 20) },
|
|
@@ -267,16 +373,19 @@ var COMMANDS = [
|
|
|
267
373
|
{
|
|
268
374
|
name: "orders return-records",
|
|
269
375
|
summary: "\u9000\u8D27\u5355\u5904\u7406\u8BB0\u5F55\uFF08--id return_id\uFF09",
|
|
376
|
+
flags: ["id"],
|
|
270
377
|
run: ({ shop, args: args2 }) => proxy("GET", shop, `/return_refund/202309/returns/${args2.id}/records`, {})
|
|
271
378
|
},
|
|
272
379
|
{
|
|
273
380
|
name: "orders aftersale-eligibility",
|
|
274
381
|
summary: "\u8BA2\u5355\u552E\u540E\u8D44\u683C\uFF08--order id\uFF09",
|
|
382
|
+
flags: ["order"],
|
|
275
383
|
run: ({ shop, args: args2 }) => proxy("GET", shop, `/return_refund/202512/orders/${args2.order}/aftersale_eligibility`, {})
|
|
276
384
|
},
|
|
277
385
|
{
|
|
278
386
|
name: "orders reject-reasons",
|
|
279
387
|
summary: "\u9A73\u56DE\u53D6\u6D88/\u9000\u8D27\u7684\u5408\u6CD5\u7406\u7531\uFF08--id return_or_cancel_id\uFF09",
|
|
388
|
+
flags: ["id"],
|
|
280
389
|
listKey: "reasons",
|
|
281
390
|
run: ({ shop, args: args2 }) => proxy("GET", shop, "/return_refund/202309/reject_reasons", {
|
|
282
391
|
query: { return_or_cancel_id: args2.id }
|
|
@@ -285,6 +394,7 @@ var COMMANDS = [
|
|
|
285
394
|
{
|
|
286
395
|
name: "orders refund-calculate",
|
|
287
396
|
summary: "\u8BA1\u7B97\u9000\u6B3E\u989D\uFF08--body-file calc.json\uFF09",
|
|
397
|
+
flags: ["body-file"],
|
|
288
398
|
run: ({ shop, args: args2 }) => proxy("POST", shop, "/return_refund/202309/refunds/calculate", {
|
|
289
399
|
body: readBodyFile(args2["body-file"])
|
|
290
400
|
})
|
|
@@ -293,11 +403,13 @@ var COMMANDS = [
|
|
|
293
403
|
{
|
|
294
404
|
name: "orders tracking",
|
|
295
405
|
summary: "\u8BA2\u5355\u7269\u6D41\u8DDF\u8E2A\uFF08--order id\uFF09",
|
|
406
|
+
flags: ["order"],
|
|
296
407
|
run: ({ shop, args: args2 }) => proxy("GET", shop, `/fulfillment/202309/orders/${args2.order}/tracking`, {})
|
|
297
408
|
},
|
|
298
409
|
{
|
|
299
410
|
name: "orders shipping-services",
|
|
300
411
|
summary: "\u8BA2\u5355\u53EF\u7528\u627F\u8FD0/\u914D\u9001\u670D\u52A1\uFF08--order id\uFF09",
|
|
412
|
+
flags: ["order"],
|
|
301
413
|
run: ({ shop, args: args2 }) => proxy("POST", shop, `/fulfillment/202309/orders/${args2.order}/shipping_services/query`, {
|
|
302
414
|
body: {}
|
|
303
415
|
})
|
|
@@ -305,6 +417,7 @@ var COMMANDS = [
|
|
|
305
417
|
{
|
|
306
418
|
name: "packages search",
|
|
307
419
|
summary: "\u5305\u88F9\u5217\u8868\uFF08--page-size\uFF09",
|
|
420
|
+
flags: ["page-size"],
|
|
308
421
|
listKey: "packages",
|
|
309
422
|
run: ({ shop, args: args2 }) => proxy("POST", shop, "/fulfillment/202309/packages/search", {
|
|
310
423
|
query: { page_size: String(args2["page-size"] ?? 20) },
|
|
@@ -314,17 +427,20 @@ var COMMANDS = [
|
|
|
314
427
|
{
|
|
315
428
|
name: "packages get",
|
|
316
429
|
summary: "\u5305\u88F9\u8BE6\u60C5\uFF08--package id\uFF09",
|
|
430
|
+
flags: ["package"],
|
|
317
431
|
run: ({ shop, args: args2 }) => proxy("GET", shop, `/fulfillment/202309/packages/${args2.package}`, {})
|
|
318
432
|
},
|
|
319
433
|
{
|
|
320
434
|
name: "packages documents",
|
|
321
435
|
summary: "\u5305\u88F9\u7269\u6D41\u9762\u5355\uFF08--package id\uFF09",
|
|
436
|
+
flags: ["package"],
|
|
322
437
|
run: ({ shop, args: args2 }) => proxy("GET", shop, `/fulfillment/202309/packages/${args2.package}/shipping_documents`, {})
|
|
323
438
|
},
|
|
324
439
|
// ── 售后审批 / 发货 写(不可逆,默认 dry-run,--apply 才提交)──
|
|
325
440
|
{
|
|
326
441
|
name: "orders cancel-approve",
|
|
327
442
|
summary: "\u6279\u51C6\u53D6\u6D88\u5355\uFF08--id cancel_id\uFF09\u3002\u9ED8\u8BA4 dry-run\uFF0C--apply \u624D\u6279\u3002\u4E0D\u53EF\u9006",
|
|
443
|
+
flags: ["id"],
|
|
328
444
|
write: true,
|
|
329
445
|
preview: ({ args: args2 }) => [{
|
|
330
446
|
step: "\u6279\u51C6\u53D6\u6D88\u5355",
|
|
@@ -337,6 +453,7 @@ var COMMANDS = [
|
|
|
337
453
|
{
|
|
338
454
|
name: "orders cancel-reject",
|
|
339
455
|
summary: "\u9A73\u56DE\u53D6\u6D88\u5355\uFF08--id --reason\uFF09\u3002\u9ED8\u8BA4 dry-run\uFF0C--apply \u624D\u9A73\u3002\u4E0D\u53EF\u9006",
|
|
456
|
+
flags: ["id", "reason"],
|
|
340
457
|
write: true,
|
|
341
458
|
preview: ({ args: args2 }) => [{
|
|
342
459
|
step: "\u9A73\u56DE\u53D6\u6D88\u5355",
|
|
@@ -354,6 +471,7 @@ var COMMANDS = [
|
|
|
354
471
|
{
|
|
355
472
|
name: "orders return-approve",
|
|
356
473
|
summary: "\u6279\u51C6\u9000\u8D27\u5355\uFF08--id return_id\uFF09\u3002\u9ED8\u8BA4 dry-run\uFF0C--apply \u624D\u6279\u3002\u4E0D\u53EF\u9006",
|
|
474
|
+
flags: ["id"],
|
|
357
475
|
write: true,
|
|
358
476
|
preview: ({ args: args2 }) => [{
|
|
359
477
|
step: "\u6279\u51C6\u9000\u8D27\u5355",
|
|
@@ -366,6 +484,7 @@ var COMMANDS = [
|
|
|
366
484
|
{
|
|
367
485
|
name: "orders return-reject",
|
|
368
486
|
summary: "\u9A73\u56DE\u9000\u8D27\u5355\uFF08--id --reason\uFF09\u3002\u9ED8\u8BA4 dry-run\uFF0C--apply \u624D\u9A73\u3002\u4E0D\u53EF\u9006",
|
|
487
|
+
flags: ["id", "reason"],
|
|
369
488
|
write: true,
|
|
370
489
|
preview: ({ args: args2 }) => [{
|
|
371
490
|
step: "\u9A73\u56DE\u9000\u8D27\u5355",
|
|
@@ -383,6 +502,7 @@ var COMMANDS = [
|
|
|
383
502
|
{
|
|
384
503
|
name: "orders create-package",
|
|
385
504
|
summary: "\u4E3A\u8BA2\u5355\u5EFA\u5305\u88F9\uFF08--order id --body-file pkg.json\uFF09\u3002\u9ED8\u8BA4 dry-run\uFF0C--apply \u624D\u5EFA\u3002\u4EC5\u76F4\u53D1\u5546\u5BB6\uFF08\u7269\u6D41\u9ED8\u8BA4 ERP \u7BA1\uFF09",
|
|
505
|
+
flags: ["body-file", "order"],
|
|
386
506
|
write: true,
|
|
387
507
|
preview: ({ args: args2 }) => [{
|
|
388
508
|
step: "\u5EFA\u5305\u88F9",
|
|
@@ -400,6 +520,7 @@ var COMMANDS = [
|
|
|
400
520
|
{
|
|
401
521
|
name: "packages ship",
|
|
402
522
|
summary: "\u53D1\u8D27\uFF08--package id --body-file ship.json\uFF09\u3002\u9ED8\u8BA4 dry-run\uFF0C--apply \u624D\u53D1\u3002\u4E0D\u53EF\u9006\uFF0C\u4EC5\u76F4\u53D1\u5546\u5BB6",
|
|
523
|
+
flags: ["body-file", "package"],
|
|
403
524
|
write: true,
|
|
404
525
|
preview: ({ args: args2 }) => [{
|
|
405
526
|
step: "\u53D1\u8D27",
|
|
@@ -418,6 +539,7 @@ var COMMANDS = [
|
|
|
418
539
|
{
|
|
419
540
|
name: "events",
|
|
420
541
|
summary: "\u67E5\u5E97\u94FA webhook \u4E8B\u4EF6\uFF08--type \u9017\u53F7\u5206\u9694 --since 1d/unix --unprocessed --limit\uFF09",
|
|
542
|
+
flags: ["limit", "since", "type", "unprocessed"],
|
|
421
543
|
run: ({ shop, args: args2 }) => {
|
|
422
544
|
const q = {};
|
|
423
545
|
if (args2.type) q.type = args2.type;
|
|
@@ -430,6 +552,7 @@ var COMMANDS = [
|
|
|
430
552
|
{
|
|
431
553
|
name: "events ack",
|
|
432
554
|
summary: "\u6807\u4E8B\u4EF6\u5DF2\u5904\u7406\uFF08--ids id1,id2 \u6216 --before <ts>\uFF09\u3002\u9ED8\u8BA4 dry-run\uFF0C--apply \u624D\u6807",
|
|
555
|
+
flags: ["before", "ids"],
|
|
433
556
|
write: true,
|
|
434
557
|
preview: ({ args: args2 }) => [{
|
|
435
558
|
step: "\u6807\u4E8B\u4EF6\u5DF2\u5904\u7406",
|
|
@@ -442,6 +565,7 @@ var COMMANDS = [
|
|
|
442
565
|
{
|
|
443
566
|
name: "analytics shop",
|
|
444
567
|
summary: "\u5E97\u94FA\u7ECF\u8425\u6570\u636E\uFF08--from --to\uFF0C\u9ED8\u8BA4\u8FD130\u5929\uFF09",
|
|
568
|
+
flags: ["from", "granularity", "to"],
|
|
445
569
|
run: ({ shop, args: args2 }) => proxy("GET", shop, "/analytics/202509/shop/performance", {
|
|
446
570
|
query: {
|
|
447
571
|
start_date_ge: args2.from ?? daysAgo(30),
|
|
@@ -453,6 +577,7 @@ var COMMANDS = [
|
|
|
453
577
|
{
|
|
454
578
|
name: "analytics products",
|
|
455
579
|
summary: "\u5546\u54C1\u7EF4\u5EA6\u7ECF\u8425\u6570\u636E\uFF08\u6309 GMV \u964D\u5E8F\uFF09",
|
|
580
|
+
flags: ["from", "page-size", "to"],
|
|
456
581
|
run: ({ shop, args: args2 }) => proxy("GET", shop, "/analytics/202509/shop_products/performance", {
|
|
457
582
|
query: {
|
|
458
583
|
start_date_ge: args2.from ?? daysAgo(30),
|
|
@@ -466,6 +591,7 @@ var COMMANDS = [
|
|
|
466
591
|
{
|
|
467
592
|
name: "analytics videos",
|
|
468
593
|
summary: "\u5185\u5BB9\u89C6\u9891\u7EF4\u5EA6\u7ECF\u8425\u6570\u636E\uFF08shop_videos\uFF0C--from --to\uFF0C\u9ED8\u8BA4\u8FD130\u5929\uFF0C\u6309 GMV \u964D\u5E8F\uFF1B--sort-field --sort-order --page-size --page-token\uFF09",
|
|
594
|
+
flags: ["from", "page-size", "page-token", "sort-field", "sort-order", "to"],
|
|
469
595
|
run: ({ shop, args: args2 }) => proxy("GET", shop, "/analytics/202509/shop_videos/performance", {
|
|
470
596
|
query: {
|
|
471
597
|
start_date_ge: args2.from ?? daysAgo(30),
|
|
@@ -480,6 +606,7 @@ var COMMANDS = [
|
|
|
480
606
|
{
|
|
481
607
|
name: "analytics videos-overview",
|
|
482
608
|
summary: "\u5185\u5BB9\u89C6\u9891\u6574\u4F53\u6982\u89C8\uFF08shop_videos overview\uFF1B--from --to --granularity\uFF09",
|
|
609
|
+
flags: ["from", "granularity", "to"],
|
|
483
610
|
run: ({ shop, args: args2 }) => proxy("GET", shop, "/analytics/202509/shop_videos/overview_performance", {
|
|
484
611
|
query: {
|
|
485
612
|
start_date_ge: args2.from ?? daysAgo(30),
|
|
@@ -491,6 +618,7 @@ var COMMANDS = [
|
|
|
491
618
|
{
|
|
492
619
|
name: "analytics video",
|
|
493
620
|
summary: "\u5355\u6761\u89C6\u9891\u7ECF\u8425\u660E\u7EC6\uFF08--video video_id \u5FC5\u586B\uFF1B--from --to\uFF09",
|
|
621
|
+
flags: ["from", "to", "video"],
|
|
494
622
|
run: ({ shop, args: args2 }) => proxy("GET", shop, `/analytics/202509/shop_videos/${args2.video}/performance`, {
|
|
495
623
|
query: {
|
|
496
624
|
start_date_ge: args2.from ?? daysAgo(30),
|
|
@@ -501,6 +629,7 @@ var COMMANDS = [
|
|
|
501
629
|
{
|
|
502
630
|
name: "analytics video-products",
|
|
503
631
|
summary: "\u5355\u6761\u89C6\u9891\u5E26\u8D27\u5546\u54C1\u8868\u73B0\uFF08--video video_id \u5FC5\u586B\uFF1B--from --to --page-size\uFF09",
|
|
632
|
+
flags: ["from", "page-size", "to", "video"],
|
|
504
633
|
run: ({ shop, args: args2 }) => proxy("GET", shop, `/analytics/202509/shop_videos/${args2.video}/products/performance`, {
|
|
505
634
|
query: {
|
|
506
635
|
start_date_ge: args2.from ?? daysAgo(30),
|
|
@@ -512,6 +641,7 @@ var COMMANDS = [
|
|
|
512
641
|
{
|
|
513
642
|
name: "analytics lives",
|
|
514
643
|
summary: "\u76F4\u64AD\u7EF4\u5EA6\u7ECF\u8425\u6570\u636E\uFF08shop_lives\uFF0C--from --to\uFF0C\u9ED8\u8BA4\u8FD130\u5929\uFF0C\u6309 GMV \u964D\u5E8F\uFF1B--sort-field --sort-order --page-size --page-token\uFF09",
|
|
644
|
+
flags: ["from", "page-size", "page-token", "sort-field", "sort-order", "to"],
|
|
515
645
|
run: ({ shop, args: args2 }) => proxy("GET", shop, "/analytics/202509/shop_lives/performance", {
|
|
516
646
|
query: {
|
|
517
647
|
start_date_ge: args2.from ?? daysAgo(30),
|
|
@@ -526,6 +656,7 @@ var COMMANDS = [
|
|
|
526
656
|
{
|
|
527
657
|
name: "analytics lives-overview",
|
|
528
658
|
summary: "\u76F4\u64AD\u6574\u4F53\u6982\u89C8\uFF08shop_lives overview\uFF1B--from --to --granularity\uFF09",
|
|
659
|
+
flags: ["from", "granularity", "to"],
|
|
529
660
|
run: ({ shop, args: args2 }) => proxy("GET", shop, "/analytics/202509/shop_lives/overview_performance", {
|
|
530
661
|
query: {
|
|
531
662
|
start_date_ge: args2.from ?? daysAgo(30),
|
|
@@ -537,6 +668,7 @@ var COMMANDS = [
|
|
|
537
668
|
{
|
|
538
669
|
name: "analytics skus",
|
|
539
670
|
summary: "SKU \u7EF4\u5EA6\u7ECF\u8425\u6570\u636E\uFF08shop_skus\uFF0C--from --to\uFF0C\u9ED8\u8BA4\u8FD130\u5929\uFF0C\u6309 GMV \u964D\u5E8F\uFF1B--sort-field --sort-order --page-size --page-token\uFF09",
|
|
671
|
+
flags: ["from", "page-size", "page-token", "sort-field", "sort-order", "to"],
|
|
540
672
|
run: ({ shop, args: args2 }) => proxy("GET", shop, "/analytics/202509/shop_skus/performance", {
|
|
541
673
|
query: {
|
|
542
674
|
start_date_ge: args2.from ?? daysAgo(30),
|
|
@@ -551,6 +683,7 @@ var COMMANDS = [
|
|
|
551
683
|
{
|
|
552
684
|
name: "analytics sku",
|
|
553
685
|
summary: "\u5355\u4E2A SKU \u7ECF\u8425\u660E\u7EC6\uFF08--sku sku_id \u5FC5\u586B\uFF1B--from --to --granularity\uFF09",
|
|
686
|
+
flags: ["from", "granularity", "sku", "to"],
|
|
554
687
|
run: ({ shop, args: args2 }) => proxy("GET", shop, `/analytics/202509/shop_skus/${args2.sku}/performance`, {
|
|
555
688
|
query: {
|
|
556
689
|
start_date_ge: args2.from ?? daysAgo(30),
|
|
@@ -562,6 +695,7 @@ var COMMANDS = [
|
|
|
562
695
|
{
|
|
563
696
|
name: "analytics product",
|
|
564
697
|
summary: "\u5355\u4E2A\u5546\u54C1\u7ECF\u8425\u660E\u7EC6\uFF08--product product_id \u5FC5\u586B\uFF1B--from --to --granularity\uFF09",
|
|
698
|
+
flags: ["from", "granularity", "product", "to"],
|
|
565
699
|
run: ({ shop, args: args2 }) => proxy("GET", shop, `/analytics/202509/shop_products/${args2.product}/performance`, {
|
|
566
700
|
query: {
|
|
567
701
|
start_date_ge: args2.from ?? daysAgo(30),
|
|
@@ -573,11 +707,13 @@ var COMMANDS = [
|
|
|
573
707
|
{
|
|
574
708
|
name: "analytics shop-hourly",
|
|
575
709
|
summary: "\u5E97\u94FA\u67D0\u5929\u5206\u65F6\uFF08\u9010\u5C0F\u65F6\uFF09\u7ECF\u8425\u6570\u636E\uFF08--date YYYY-MM-DD\uFF0C\u9ED8\u8BA4\u6628\u5929\uFF09",
|
|
710
|
+
flags: ["date"],
|
|
576
711
|
run: ({ shop, args: args2 }) => proxy("GET", shop, `/analytics/202510/shop/performance/${args2.date ?? daysAgo(1)}/performance_per_hour`, {})
|
|
577
712
|
},
|
|
578
713
|
{
|
|
579
714
|
name: "products list",
|
|
580
715
|
summary: "\u5546\u54C1\u5217\u8868\uFF08--status ACTIVATE \u53EA\u53D6\u5728\u552E\uFF1B\u4E0D\u4F20\u8FD4\u6240\u6709\u542B DELETED\uFF0C\u5199\u64CD\u4F5C\u524D\u52A1\u5FC5\u7B5B ACTIVATE\uFF09",
|
|
716
|
+
flags: ["page-size", "status"],
|
|
581
717
|
listKey: "products",
|
|
582
718
|
run: ({ shop, args: args2 }) => proxy("POST", shop, "/product/202309/products/search", {
|
|
583
719
|
query: { page_size: args2["page-size"] ?? "20" },
|
|
@@ -587,11 +723,13 @@ var COMMANDS = [
|
|
|
587
723
|
{
|
|
588
724
|
name: "products get",
|
|
589
725
|
summary: "\u5355\u4E2A\u5546\u54C1\u5B8C\u6574\u8BE6\u60C5\uFF08--product id\uFF1B\u9010\u5B57\u6BB5\u56DE\u8BFB\u7528\uFF1A\u6807\u9898/\u63CF\u8FF0/\u56FE/SKU/\u4EF7/\u5E93\u5B58/\u91CD\u91CF/\u5C3A\u5BF8/\u5C5E\u6027\uFF09",
|
|
726
|
+
flags: ["product"],
|
|
590
727
|
run: ({ shop, args: args2 }) => proxy("GET", shop, `/product/202309/products/${args2.product}`, {})
|
|
591
728
|
},
|
|
592
729
|
{
|
|
593
730
|
name: "products diagnose",
|
|
594
731
|
summary: "\u5546\u54C1\u5B98\u65B9\u95EE\u9898\u8BCA\u65AD\uFF08--product \u9017\u53F7\u5206\u9694\u672C\u5E97\u81EA\u6709\u5546\u54C1 id\uFF09",
|
|
732
|
+
flags: ["product"],
|
|
595
733
|
listKey: "products",
|
|
596
734
|
run: ({ shop, args: args2 }) => proxy("GET", shop, "/product/202405/products/diagnoses", {
|
|
597
735
|
query: { product_ids: String(args2.product ?? "") }
|
|
@@ -600,6 +738,7 @@ var COMMANDS = [
|
|
|
600
738
|
{
|
|
601
739
|
name: "promotions list",
|
|
602
740
|
summary: "\u4FC3\u9500\u6D3B\u52A8\u5217\u8868\uFF08--status \u7701\u7565=\u5168\u90E8\u72B6\u6001\uFF5CONGOING/NOT_START/EXPIRED/DEACTIVATED\uFF0C\u53D6\u503C\u533A\u5206\u5927\u5C0F\u5199\u4E14\u4E0D trim\uFF0C\u672A\u77E5\u503C\u672C\u5730\u62D2\u3001\u5E73\u53F0\u4F1A\u9759\u9ED8\u8FD4\u56DE\u5168\u90E8\uFF1B--force-status \u8D8A\u8FC7\u672C\u5730\u6821\u9A8C\uFF1B--page-size \u9ED8\u8BA420\uFF1B--page-token \u7FFB\u9875\uFF0C\u672B\u9875\u65E0 next_page_token\uFF09",
|
|
741
|
+
flags: ["force-status", "page-size", "page-token", "status"],
|
|
603
742
|
listKey: "activities",
|
|
604
743
|
run: ({ shop, args: args2 }) => {
|
|
605
744
|
const st = args2.status ? String(args2.status) : "";
|
|
@@ -631,6 +770,7 @@ var COMMANDS = [
|
|
|
631
770
|
{
|
|
632
771
|
name: "finance statements",
|
|
633
772
|
summary: "\u7ED3\u7B97\u5355\u5217\u8868",
|
|
773
|
+
flags: ["page-size", "sort-field", "sort-order"],
|
|
634
774
|
listKey: "statements",
|
|
635
775
|
run: ({ shop, args: args2 }) => proxy("GET", shop, "/finance/202309/statements", {
|
|
636
776
|
query: {
|
|
@@ -644,22 +784,26 @@ var COMMANDS = [
|
|
|
644
784
|
{
|
|
645
785
|
name: "seller status",
|
|
646
786
|
summary: "\u8D26\u53F7/\u5E97\u94FA\u72B6\u6001\uFF08seller_status/shop_statuses/tax_form_status\uFF09",
|
|
787
|
+
flags: [],
|
|
647
788
|
run: ({ shop }) => proxy("GET", shop, "/seller/202508/status", {})
|
|
648
789
|
},
|
|
649
790
|
{
|
|
650
791
|
name: "seller permissions",
|
|
651
792
|
summary: "\u5DF2\u6388\u6743\u6743\u9650\u5217\u8868",
|
|
793
|
+
flags: [],
|
|
652
794
|
run: ({ shop }) => proxy("GET", shop, "/seller/202309/permissions", {})
|
|
653
795
|
},
|
|
654
796
|
// ===== 建品前置只读辅助命令 =====
|
|
655
797
|
{
|
|
656
798
|
name: "products prerequisites",
|
|
657
799
|
summary: "\u5EFA\u54C1\u524D\u7F6E\u68C0\u67E5",
|
|
800
|
+
flags: [],
|
|
658
801
|
run: ({ shop }) => proxy("GET", shop, "/product/202312/prerequisites", {})
|
|
659
802
|
},
|
|
660
803
|
{
|
|
661
804
|
name: "categories recommend",
|
|
662
805
|
summary: "\u7C7B\u76EE\u63A8\u8350\uFF08--title [--desc]\uFF09",
|
|
806
|
+
flags: ["desc", "title"],
|
|
663
807
|
listKey: "categories",
|
|
664
808
|
run: ({ shop, args: args2 }) => proxy("POST", shop, "/product/202309/categories/recommend", {
|
|
665
809
|
body: {
|
|
@@ -671,6 +815,7 @@ var COMMANDS = [
|
|
|
671
815
|
{
|
|
672
816
|
name: "categories tree",
|
|
673
817
|
summary: "\u7C7B\u76EE\u6811\uFF08--version v2\uFF09",
|
|
818
|
+
flags: ["version"],
|
|
674
819
|
listKey: "categories",
|
|
675
820
|
run: ({ shop, args: args2 }) => proxy("GET", shop, "/product/202309/categories", {
|
|
676
821
|
query: { category_version: args2.version ?? "v2" }
|
|
@@ -679,6 +824,7 @@ var COMMANDS = [
|
|
|
679
824
|
{
|
|
680
825
|
name: "categories attributes",
|
|
681
826
|
summary: "\u7C7B\u76EE\u5C5E\u6027\uFF08--category\uFF09",
|
|
827
|
+
flags: ["category", "version"],
|
|
682
828
|
run: ({ shop, args: args2 }) => proxy("GET", shop, `/product/202309/categories/${args2.category}/attributes`, {
|
|
683
829
|
query: { category_version: args2.version ?? "v2" }
|
|
684
830
|
})
|
|
@@ -686,6 +832,7 @@ var COMMANDS = [
|
|
|
686
832
|
{
|
|
687
833
|
name: "categories rules",
|
|
688
834
|
summary: "\u7C7B\u76EE\u89C4\u5219\uFF08--category\uFF09",
|
|
835
|
+
flags: ["category", "version"],
|
|
689
836
|
run: ({ shop, args: args2 }) => proxy("GET", shop, `/product/202309/categories/${args2.category}/rules`, {
|
|
690
837
|
query: { category_version: args2.version ?? "v2" }
|
|
691
838
|
})
|
|
@@ -693,6 +840,7 @@ var COMMANDS = [
|
|
|
693
840
|
{
|
|
694
841
|
name: "brands list",
|
|
695
842
|
summary: "\u54C1\u724C\u5217\u8868\uFF08[--category] [--name]\uFF09",
|
|
843
|
+
flags: ["category", "name", "page-size"],
|
|
696
844
|
listKey: "brands",
|
|
697
845
|
run: ({ shop, args: args2 }) => proxy("GET", shop, "/product/202309/brands", {
|
|
698
846
|
query: {
|
|
@@ -705,6 +853,7 @@ var COMMANDS = [
|
|
|
705
853
|
{
|
|
706
854
|
name: "brands recommend",
|
|
707
855
|
summary: "\u54C1\u724C\u63A8\u8350\uFF08--title\uFF09",
|
|
856
|
+
flags: ["title"],
|
|
708
857
|
run: ({ shop, args: args2 }) => proxy("POST", shop, "/product/202309/brands/recommend", {
|
|
709
858
|
body: { product_title: args2.title }
|
|
710
859
|
})
|
|
@@ -712,18 +861,21 @@ var COMMANDS = [
|
|
|
712
861
|
{
|
|
713
862
|
name: "warehouses list",
|
|
714
863
|
summary: "\u4ED3\u5E93\u5217\u8868\uFF08\u8DE8\u5883\u8BA4 sub_type CB_*\uFF09",
|
|
864
|
+
flags: [],
|
|
715
865
|
listKey: "warehouses",
|
|
716
866
|
run: ({ shop }) => proxy("GET", shop, "/logistics/202309/warehouses", {})
|
|
717
867
|
},
|
|
718
868
|
{
|
|
719
869
|
name: "shipping-templates list",
|
|
720
870
|
summary: "\u8FD0\u8D39\u6A21\u677F\u5217\u8868",
|
|
871
|
+
flags: [],
|
|
721
872
|
listKey: "templates",
|
|
722
873
|
run: ({ shop }) => proxy("GET", shop, "/logistics/202510/seller_templates", {})
|
|
723
874
|
},
|
|
724
875
|
{
|
|
725
876
|
name: "delivery-options",
|
|
726
877
|
summary: "\u4ED3\u5E93\u4EA4\u4ED8\u65B9\u5F0F\uFF08--warehouse\uFF09",
|
|
878
|
+
flags: ["warehouse"],
|
|
727
879
|
run: ({ shop, args: args2 }) => proxy("GET", shop, `/logistics/202309/warehouses/${args2.warehouse}/delivery_options`, {
|
|
728
880
|
query: { scope: "PRODUCT" }
|
|
729
881
|
})
|
|
@@ -732,6 +884,7 @@ var COMMANDS = [
|
|
|
732
884
|
{
|
|
733
885
|
name: "products set-price",
|
|
734
886
|
summary: "\u6539 SKU \u552E\u4EF7\uFF08--product --sku --price [--currency MYR]\uFF09\u3002\u5199\u64CD\u4F5C,\u9ED8\u8BA4 dry-run",
|
|
887
|
+
flags: ["currency", "price", "product", "sku"],
|
|
735
888
|
write: true,
|
|
736
889
|
preview: ({ args: args2 }) => [{
|
|
737
890
|
step: "\u6539\u4EF7",
|
|
@@ -745,6 +898,7 @@ var COMMANDS = [
|
|
|
745
898
|
{
|
|
746
899
|
name: "promotions create-flashsale",
|
|
747
900
|
summary: "\u5EFA\u79D2\u6740\u6D3B\u52A8\uFF08--title --product --sku --price [--limit] [--hours 48]\uFF09\u3002\u4E24\u6B65:\u5EFA\u58F3+\u52A0\u54C1",
|
|
901
|
+
flags: ["hours", "limit", "per-user", "price", "product", "sku", "start-in-min", "title"],
|
|
748
902
|
write: true,
|
|
749
903
|
preview: ({ args: args2 }) => {
|
|
750
904
|
const { begin, end } = flashWindow(args2);
|
|
@@ -769,6 +923,7 @@ var COMMANDS = [
|
|
|
769
923
|
{
|
|
770
924
|
name: "promotions create-discount",
|
|
771
925
|
summary: "\u5EFA\u5546\u54C1\u6298\u6263\u6D3B\u52A8 FIXED_PRICE\uFF08--title [--product] --price <skuId>:<\u4E00\u53E3\u4EF7>|<productId>/<skuId>:<\u4E00\u53E3\u4EF7>[,...] [--days 180]\uFF09\u3002\u4E24\u6B65:\u5EFA\u58F3+\u52A0\u54C1\uFF0C\u53EF\u591A\u5546\u54C1",
|
|
926
|
+
flags: ["days", "price", "product", "title"],
|
|
772
927
|
write: true,
|
|
773
928
|
validate: validateCreateDiscount,
|
|
774
929
|
preview: ({ args: args2 }) => {
|
|
@@ -835,6 +990,7 @@ var COMMANDS = [
|
|
|
835
990
|
{
|
|
836
991
|
name: "promotions deactivate",
|
|
837
992
|
summary: "\u7EC8\u6B62/\u505C\u7528\u4FC3\u9500\u6D3B\u52A8\uFF08--id \u5FC5\u586B\uFF09\u3002\u4E0D\u53EF\u9006",
|
|
993
|
+
flags: ["id"],
|
|
838
994
|
write: true,
|
|
839
995
|
preview: ({ args: args2 }) => [{ step: "\u7EC8\u6B62\u6D3B\u52A8", method: "POST", path: `/promotion/202309/activities/${args2.id}/deactivate`, body: {} }],
|
|
840
996
|
run: ({ shop, args: args2 }) => proxy("POST", shop, `/promotion/202309/activities/${args2.id}/deactivate`, { body: {} })
|
|
@@ -842,6 +998,7 @@ var COMMANDS = [
|
|
|
842
998
|
{
|
|
843
999
|
name: "products set-inventory",
|
|
844
1000
|
summary: "\u6539 SKU \u5E93\u5B58\uFF08--product --sku --warehouse --quantity\uFF09\u3002\u5199\u64CD\u4F5C,\u9ED8\u8BA4 dry-run",
|
|
1001
|
+
flags: ["product", "quantity", "sku", "warehouse"],
|
|
845
1002
|
write: true,
|
|
846
1003
|
preview: ({ args: args2 }) => [{
|
|
847
1004
|
step: "\u6539\u5E93\u5B58",
|
|
@@ -855,6 +1012,7 @@ var COMMANDS = [
|
|
|
855
1012
|
{
|
|
856
1013
|
name: "products create",
|
|
857
1014
|
summary: "\u5EFA\u54C1\uFF08--body-file [--apply]\uFF09\u3002dry-run \u8DD1 listing_check \u9884\u68C0\uFF1B\u5199\u64CD\u4F5C\u3002\u26A0\uFE0F --apply \u5373\u5EFA\u5B8C\u76F4\u63A5\u4E0A\u67B6\u9001\u5BA1\uFF1B\u7528\u6237\u8981\u5B58\u8349\u7A3F\u5C31\u505C\u624B\u95EE\u7528\u6237\uFF08#1958\uFF09",
|
|
1015
|
+
flags: ["body-file"],
|
|
858
1016
|
write: true,
|
|
859
1017
|
preview: () => [{ step: "listing_check \u9884\u68C0 \u2192 \u5EFA\u54C1", method: "POST", path: "/product/202309/products/listing_check", body: void 0 }],
|
|
860
1018
|
precheck: ({ shop, args: args2 }) => proxy("POST", shop, "/product/202309/products/listing_check", { body: readBodyFile(args2["body-file"]) }),
|
|
@@ -869,6 +1027,7 @@ var COMMANDS = [
|
|
|
869
1027
|
{
|
|
870
1028
|
name: "products add-variant",
|
|
871
1029
|
summary: "\u7ED9\u5546\u54C1\u52A0\u89C4\u683C SKU\uFF08--product --body-file skus-delta.json [--apply]\uFF09\u3002\u26A0\uFE0F --apply \u5373\u9001\u5BA1\u4E0A\u67B6\uFF1B\u7528\u6237\u8981\u5B58\u8349\u7A3F\u5C31\u505C\u624B\u95EE\u7528\u6237\uFF08#1958\uFF09",
|
|
1030
|
+
flags: ["body-file", "product"],
|
|
872
1031
|
write: true,
|
|
873
1032
|
preview: () => [{ step: "\u8BFB\u73B0\u6709 skus \u2192 append \u2192 partial_edit\u3002\u26A0\uFE0F \u9ED8\u8BA4 save_mode=LISTING\uFF1A--apply \u5373\u9001\u5BA1\u4E0A\u67B6\uFF08DRAFT \u5546\u54C1\u4F1A\u88AB\u63D0\u4EA4\uFF09\uFF1B\u672C\u547D\u4EE4\u81EA\u6784 body\uFF0Cbody-file \u91CC\u7684 save_mode \u4E0D\u900F\u4F20\u3001\u5199\u4E86\u4E5F\u65E0\u6548\u3002\u82E5\u7528\u6237\u8981\u6C42\u5B58\u8349\u7A3F/\u522B\u63D0\u4EA4 \u2192 \u4E0D\u8981 --apply\uFF0C\u505C\u624B\u95EE\u7528\u6237\uFF08#1958\uFF09", method: "POST", path: "/product/202309/products/{id}/partial_edit" }],
|
|
874
1033
|
run: async ({ shop, args: args2 }) => {
|
|
@@ -882,6 +1041,7 @@ var COMMANDS = [
|
|
|
882
1041
|
{
|
|
883
1042
|
name: "products replace-images",
|
|
884
1043
|
summary: "\u6574\u7EC4\u6362\u4E3B\u56FE\uFF08--product --body-file images.json [--apply]\uFF09\u3002\u26A0\uFE0F --apply \u5373\u9001\u5BA1\u4E0A\u67B6\uFF1B\u7528\u6237\u8981\u5B58\u8349\u7A3F\u5C31\u505C\u624B\u95EE\u7528\u6237\uFF08#1958\uFF09",
|
|
1044
|
+
flags: ["body-file", "product"],
|
|
885
1045
|
write: true,
|
|
886
1046
|
preview: () => [{ step: "main_images \u6574\u7EC4\u66FF\u6362 \u2192 partial_edit\u3002\u26A0\uFE0F \u9ED8\u8BA4 save_mode=LISTING\uFF1A--apply \u5373\u9001\u5BA1\u4E0A\u67B6\uFF08DRAFT \u5546\u54C1\u4F1A\u88AB\u63D0\u4EA4\uFF09\uFF1B\u672C\u547D\u4EE4\u81EA\u6784 body\uFF0Cbody-file \u91CC\u7684 save_mode \u4E0D\u900F\u4F20\u3001\u5199\u4E86\u4E5F\u65E0\u6548\u3002\u82E5\u7528\u6237\u8981\u6C42\u5B58\u8349\u7A3F/\u522B\u63D0\u4EA4 \u2192 \u4E0D\u8981 --apply\uFF0C\u505C\u624B\u95EE\u7528\u6237\uFF08#1958\uFF09", method: "POST", path: "/product/202309/products/{id}/partial_edit" }],
|
|
887
1047
|
run: ({ shop, args: args2 }) => proxy("POST", shop, `/product/202309/products/${args2.product}/partial_edit`, { body: { main_images: readBodyFile(args2["body-file"]).main_images } }),
|
|
@@ -890,6 +1050,7 @@ var COMMANDS = [
|
|
|
890
1050
|
{
|
|
891
1051
|
name: "products partial-edit",
|
|
892
1052
|
summary: "\u6539\u5546\u54C1\u5B57\u6BB5\uFF08--product --body-file patch.json [--apply]\uFF09\u3002\u26A0\uFE0F --apply \u5373\u9001\u5BA1\u4E0A\u67B6\uFF1B\u7528\u6237\u8981\u5B58\u8349\u7A3F\u5C31\u505C\u624B\u95EE\u7528\u6237\uFF08#1958\uFF09",
|
|
1053
|
+
flags: ["body-file", "product"],
|
|
893
1054
|
write: true,
|
|
894
1055
|
preview: ({ args: args2 }) => [{ step: "partial_edit\uFF08\u5D4C\u5957\u5B57\u6BB5\u672A\u5217\u5B50\u9879\u4F1A\u88AB\u6E05\u7A7A\uFF09\u3002\u26A0\uFE0F \u9ED8\u8BA4 save_mode=LISTING\uFF1A--apply \u5373\u9001\u5BA1\u4E0A\u67B6\uFF08DRAFT \u5546\u54C1\u4F1A\u88AB\u63D0\u4EA4\uFF09\u3002\u82E5\u7528\u6237\u8981\u6C42\u5B58\u8349\u7A3F/\u522B\u63D0\u4EA4 \u2192 \u4E0D\u8981 --apply\uFF0C\u505C\u624B\u95EE\u7528\u6237\uFF08#1958\uFF09", method: "POST", path: `/product/202309/products/${args2.product}/partial_edit`, body: readBodyFile(args2["body-file"]) }],
|
|
895
1056
|
run: ({ shop, args: args2 }) => proxy("POST", shop, `/product/202309/products/${args2.product}/partial_edit`, { body: readBodyFile(args2["body-file"]) }),
|
|
@@ -899,6 +1060,7 @@ var COMMANDS = [
|
|
|
899
1060
|
{
|
|
900
1061
|
name: "affiliate creators search",
|
|
901
1062
|
summary: "\u8054\u76DF\u5E7F\u573A\u627E\u8FBE\u4EBA\uFF08--keyword\uFF0C--page-size 12|20\uFF0C\u9ED8\u8BA4 12\uFF09",
|
|
1063
|
+
flags: ["keyword", "page-size"],
|
|
902
1064
|
listKey: "creators",
|
|
903
1065
|
run: ({ shop, args: args2 }) => proxy("POST", shop, "/affiliate_seller/202508/marketplace_creators/search", {
|
|
904
1066
|
query: { page_size: String(args2["page-size"] ?? 12) },
|
|
@@ -908,11 +1070,13 @@ var COMMANDS = [
|
|
|
908
1070
|
{
|
|
909
1071
|
name: "affiliate creators perf",
|
|
910
1072
|
summary: "\u8FBE\u4EBA\u5E26\u8D27\u8868\u73B0\u8BE6\u60C5\uFF08--creator \u5FC5\u586B\uFF0Ccreator_open_id\uFF09",
|
|
1073
|
+
flags: ["creator"],
|
|
911
1074
|
run: ({ shop, args: args2 }) => proxy("GET", shop, `/affiliate_seller/202508/marketplace_creators/${args2.creator}`, {})
|
|
912
1075
|
},
|
|
913
1076
|
{
|
|
914
1077
|
name: "affiliate target-collab search",
|
|
915
1078
|
summary: "\u5B9A\u5411\u9080\u7EA6\u5217\u8868\uFF08--status collaboration_status\uFF0C\u5982 ONGOING/EXPIRING/VALID/CANCELING/COMPLETED\uFF1B--page-size\uFF09",
|
|
1079
|
+
flags: ["page-size", "status"],
|
|
916
1080
|
listKey: "target_collaborations",
|
|
917
1081
|
run: ({ shop, args: args2 }) => proxy("POST", shop, "/affiliate_seller/202508/target_collaborations/search", {
|
|
918
1082
|
query: { page_size: String(args2["page-size"] ?? 20) },
|
|
@@ -922,11 +1086,13 @@ var COMMANDS = [
|
|
|
922
1086
|
{
|
|
923
1087
|
name: "affiliate target-collab query",
|
|
924
1088
|
summary: "\u5B9A\u5411\u9080\u7EA6\u8BE6\u60C5\uFF08--id \u5FC5\u586B\uFF09",
|
|
1089
|
+
flags: ["id"],
|
|
925
1090
|
run: ({ shop, args: args2 }) => proxy("GET", shop, `/affiliate_seller/202508/target_collaborations/${args2.id}`, {})
|
|
926
1091
|
},
|
|
927
1092
|
{
|
|
928
1093
|
name: "affiliate samples search",
|
|
929
1094
|
summary: "\u6837\u54C1\u7533\u8BF7\u5217\u8868\uFF08--page-size\uFF09",
|
|
1095
|
+
flags: ["page-size"],
|
|
930
1096
|
listKey: "sample_applications",
|
|
931
1097
|
run: ({ shop, args: args2 }) => proxy("POST", shop, "/affiliate_seller/202508/sample_applications/search", {
|
|
932
1098
|
query: { page_size: String(args2["page-size"] ?? 20) },
|
|
@@ -936,6 +1102,7 @@ var COMMANDS = [
|
|
|
936
1102
|
{
|
|
937
1103
|
name: "affiliate dm list",
|
|
938
1104
|
summary: "\u79C1\u4FE1\u4F1A\u8BDD\u5217\u8868\uFF08--page-size\uFF0C--status conversation_status \u53EF\u9009\uFF09\u3002\u26A0\uFE0F\u7248\u672C\u56FA\u5B9A 202412",
|
|
1105
|
+
flags: ["page-size", "status"],
|
|
939
1106
|
listKey: "conversations",
|
|
940
1107
|
run: ({ shop, args: args2 }) => proxy("GET", shop, "/affiliate_seller/202412/conversations", {
|
|
941
1108
|
query: {
|
|
@@ -947,11 +1114,13 @@ var COMMANDS = [
|
|
|
947
1114
|
{
|
|
948
1115
|
name: "affiliate dm messages",
|
|
949
1116
|
summary: "\u4F1A\u8BDD\u6D88\u606F\u8BB0\u5F55\uFF08--conversation \u5FC5\u586B\uFF0Cconversation_id\uFF09",
|
|
1117
|
+
flags: ["conversation"],
|
|
950
1118
|
run: ({ shop, args: args2 }) => proxy("GET", shop, `/affiliate_seller/202412/conversation/${args2.conversation}/messages`, {})
|
|
951
1119
|
},
|
|
952
1120
|
{
|
|
953
1121
|
name: "affiliate orders search",
|
|
954
1122
|
summary: "\u8054\u76DF\u8BA2\u5355\u5217\u8868\uFF08\u4F63\u91D1\u660E\u7EC6\uFF0C--page-size\uFF09",
|
|
1123
|
+
flags: ["page-size"],
|
|
955
1124
|
listKey: "orders",
|
|
956
1125
|
run: ({ shop, args: args2 }) => proxy("POST", shop, "/affiliate_seller/202410/orders/search", {
|
|
957
1126
|
query: { page_size: String(args2["page-size"] ?? 20) },
|
|
@@ -961,6 +1130,7 @@ var COMMANDS = [
|
|
|
961
1130
|
{
|
|
962
1131
|
name: "affiliate open-collab products-search",
|
|
963
1132
|
summary: "\u516C\u5F00\u5408\u4F5C\u53EF\u8BBE\u4F63\u54C1\u5217\u8868\uFF08--page-size\uFF09",
|
|
1133
|
+
flags: ["page-size"],
|
|
964
1134
|
listKey: "products",
|
|
965
1135
|
run: ({ shop, args: args2 }) => proxy("POST", shop, "/affiliate_seller/202405/open_collaborations/products/search", {
|
|
966
1136
|
query: { page_size: String(args2["page-size"] ?? 20) },
|
|
@@ -970,6 +1140,7 @@ var COMMANDS = [
|
|
|
970
1140
|
{
|
|
971
1141
|
name: "affiliate open-collab search",
|
|
972
1142
|
summary: "\u516C\u5F00\u5408\u4F5C\u751F\u6548\u5217\u8868\uFF08\u542B current_commission\uFF0C--page-size\uFF09",
|
|
1143
|
+
flags: ["page-size"],
|
|
973
1144
|
listKey: "open_collaborations",
|
|
974
1145
|
run: ({ shop, args: args2 }) => proxy("POST", shop, "/affiliate_seller/202412/open_collaborations/search", {
|
|
975
1146
|
query: { page_size: String(args2["page-size"] ?? 20) },
|
|
@@ -979,12 +1150,14 @@ var COMMANDS = [
|
|
|
979
1150
|
{
|
|
980
1151
|
name: "affiliate open-collab settings get",
|
|
981
1152
|
summary: "\u516C\u5F00\u5408\u4F5C\u5168\u5C40\u8BBE\u7F6E\uFF08\u81EA\u52A8\u65B0\u589E\u54C1\u9ED8\u8BA4\u4F63\u91D1\uFF09",
|
|
1153
|
+
flags: [],
|
|
982
1154
|
run: ({ shop }) => proxy("GET", shop, "/affiliate_seller/202409/open_collaboration_settings", {})
|
|
983
1155
|
},
|
|
984
1156
|
// ===== 联盟写命令(managing-affiliate-program,三道阀:dry-run 预览 → --apply 提交 → 回读) =====
|
|
985
1157
|
{
|
|
986
1158
|
name: "affiliate target-collab create",
|
|
987
1159
|
summary: "\u53D1\u5B9A\u5411\u9080\u7EA6\uFF08--body-file collab.json\uFF0C\u542B creator_user_open_ids[]/products[]/free_sample_rule\uFF09\u3002\u9ED8\u8BA4 dry-run\uFF0C--apply \u624D\u53D1",
|
|
1160
|
+
flags: ["body-file"],
|
|
988
1161
|
write: true,
|
|
989
1162
|
preview: ({ args: args2 }) => [{
|
|
990
1163
|
step: "\u53D1\u5B9A\u5411\u9080\u7EA6",
|
|
@@ -1003,6 +1176,7 @@ var COMMANDS = [
|
|
|
1003
1176
|
{
|
|
1004
1177
|
name: "affiliate target-collab update",
|
|
1005
1178
|
summary: "\u6539\u5B9A\u5411\u9080\u7EA6\uFF08--id --body-file collab.json\uFF09\u3002\u9ED8\u8BA4 dry-run\uFF0C--apply \u624D\u63D0\u4EA4",
|
|
1179
|
+
flags: ["body-file", "id"],
|
|
1006
1180
|
write: true,
|
|
1007
1181
|
preview: ({ args: args2 }) => [{
|
|
1008
1182
|
step: "\u6539\u5B9A\u5411\u9080\u7EA6",
|
|
@@ -1018,6 +1192,7 @@ var COMMANDS = [
|
|
|
1018
1192
|
{
|
|
1019
1193
|
name: "affiliate target-collab remove",
|
|
1020
1194
|
summary: "\u64A4\u56DE\u5B9A\u5411\u9080\u7EA6\uFF08--id \u5FC5\u586B\uFF0C\u64A4\u56DE\u5B89\u5168\u7F51\uFF09\u3002\u4E0D\u53EF\u9006\uFF0C\u9ED8\u8BA4 dry-run\uFF0C--apply \u624D\u53D1",
|
|
1195
|
+
flags: ["id"],
|
|
1021
1196
|
write: true,
|
|
1022
1197
|
preview: ({ args: args2 }) => [{
|
|
1023
1198
|
step: "\u64A4\u56DE\u5B9A\u5411\u9080\u7EA6",
|
|
@@ -1030,6 +1205,7 @@ var COMMANDS = [
|
|
|
1030
1205
|
{
|
|
1031
1206
|
name: "affiliate target-collab link",
|
|
1032
1207
|
summary: "\u751F\u6210\u5B9A\u5411\u9080\u7EA6\u5206\u4EAB\u94FE\u63A5\uFF08--id \u5FC5\u586B\uFF09\u3002\u9ED8\u8BA4 dry-run\uFF0C--apply \u624D\u53D1",
|
|
1208
|
+
flags: ["id"],
|
|
1033
1209
|
write: true,
|
|
1034
1210
|
preview: ({ args: args2 }) => [{
|
|
1035
1211
|
step: "\u751F\u6210\u9080\u7EA6\u94FE\u63A5",
|
|
@@ -1042,6 +1218,7 @@ var COMMANDS = [
|
|
|
1042
1218
|
{
|
|
1043
1219
|
name: "affiliate dm open",
|
|
1044
1220
|
summary: "\u5F00\u8FBE\u4EBA\u79C1\u4FE1\u4F1A\u8BDD\uFF08--creator \u5FC5\u586B\uFF0Ccreator_open_id\uFF09\u3002\u9ED8\u8BA4 dry-run\uFF0C--apply \u624D\u53D1",
|
|
1221
|
+
flags: ["creator"],
|
|
1045
1222
|
write: true,
|
|
1046
1223
|
preview: ({ args: args2 }) => [{
|
|
1047
1224
|
step: "\u5F00\u79C1\u4FE1\u4F1A\u8BDD",
|
|
@@ -1056,6 +1233,7 @@ var COMMANDS = [
|
|
|
1056
1233
|
{
|
|
1057
1234
|
name: "affiliate dm send",
|
|
1058
1235
|
summary: "\u7ED9\u8FBE\u4EBA\u53D1\u79C1\u4FE1\uFF08--conversation --content [--msg-type TEXT]\uFF09\u3002\u9ED8\u8BA4 dry-run\uFF0C--apply \u624D\u53D1",
|
|
1236
|
+
flags: ["content", "conversation", "msg-type"],
|
|
1059
1237
|
write: true,
|
|
1060
1238
|
preview: ({ args: args2 }) => [{
|
|
1061
1239
|
step: "\u53D1\u79C1\u4FE1",
|
|
@@ -1070,6 +1248,7 @@ var COMMANDS = [
|
|
|
1070
1248
|
{
|
|
1071
1249
|
name: "affiliate samples review",
|
|
1072
1250
|
summary: "\u5BA1\u6279\u6837\u54C1\u7533\u8BF7\uFF08--id application_id --result review_result [--reject-reason]\uFF09\u3002\u9ED8\u8BA4 dry-run\uFF0C--apply \u624D\u53D1",
|
|
1251
|
+
flags: ["id", "reject-reason", "result"],
|
|
1073
1252
|
listKey: "sample_applications",
|
|
1074
1253
|
write: true,
|
|
1075
1254
|
preview: ({ args: args2 }) => [{
|
|
@@ -1090,6 +1269,7 @@ var COMMANDS = [
|
|
|
1090
1269
|
{
|
|
1091
1270
|
name: "affiliate open-collab set-commission",
|
|
1092
1271
|
summary: "\u6309\u54C1\u8BBE\u516C\u5F00\u5408\u4F5C\u4F63\u91D1\u7387\uFF08--product product_id --rate\uFF0C\u5355\u4F4D=\u767E\u5206\u6BD4\xD7100\uFF0C\u5982 1350=13.5%\uFF0C\u8303\u56F4 800-8000\uFF09\u3002\u9ED8\u8BA4 dry-run\uFF0C--apply \u624D\u5B58",
|
|
1272
|
+
flags: ["product", "rate"],
|
|
1093
1273
|
write: true,
|
|
1094
1274
|
preview: ({ args: args2 }) => [{
|
|
1095
1275
|
step: "\u8BBE\u6309\u54C1\u516C\u5F00\u5408\u4F5C\u4F63\u91D1",
|
|
@@ -1108,6 +1288,7 @@ var COMMANDS = [
|
|
|
1108
1288
|
{
|
|
1109
1289
|
name: "affiliate open-collab remove",
|
|
1110
1290
|
summary: "\u79FB\u9664\u54C1\u7684\u516C\u5F00\u5408\u4F5C\uFF08--product product_id\uFF09\u3002\u9ED8\u8BA4 dry-run\uFF0C--apply \u624D\u53D1",
|
|
1291
|
+
flags: ["product"],
|
|
1111
1292
|
write: true,
|
|
1112
1293
|
preview: ({ args: args2 }) => [{
|
|
1113
1294
|
step: "\u79FB\u9664\u516C\u5F00\u5408\u4F5C",
|
|
@@ -1120,6 +1301,7 @@ var COMMANDS = [
|
|
|
1120
1301
|
{
|
|
1121
1302
|
name: "affiliate open-collab settings edit",
|
|
1122
1303
|
summary: "\u6539\u516C\u5F00\u5408\u4F5C\u5168\u5C40\u9ED8\u8BA4\uFF08\u81EA\u52A8\u65B0\u589E\u54C1\u4F63\u91D1\uFF0C--rate --enable true|false\uFF09\u3002\u9ED8\u8BA4 dry-run\uFF0C--apply \u624D\u5B58",
|
|
1304
|
+
flags: ["enable", "rate"],
|
|
1123
1305
|
write: true,
|
|
1124
1306
|
preview: ({ args: args2 }) => [{
|
|
1125
1307
|
step: "\u6539\u5168\u5C40\u9ED8\u8BA4",
|
|
@@ -1136,6 +1318,7 @@ var COMMANDS = [
|
|
|
1136
1318
|
{
|
|
1137
1319
|
name: "apps add",
|
|
1138
1320
|
summary: "\u767B\u8BB0\u4E00\u4E2A TikTok App\uFF08--service-id --app-key --app-secret --type --label\uFF0C[--markets a,b] [--redirect] [--owner-entity] [--default]\uFF09",
|
|
1321
|
+
flags: ["app-key", "app-secret", "default", "label", "markets", "owner-entity", "redirect", "service-id", "type"],
|
|
1139
1322
|
run: ({ args: args2 }) => adminApps("POST", {
|
|
1140
1323
|
body: {
|
|
1141
1324
|
serviceId: args2["service-id"],
|
|
@@ -1153,6 +1336,7 @@ var COMMANDS = [
|
|
|
1153
1336
|
{
|
|
1154
1337
|
name: "apps set-shop",
|
|
1155
1338
|
summary: "\u9884\u7F6E shop\u2192app \u6620\u5C04\uFF08--shop shopId --app serviceId [--note]\uFF09\u2014\u2014auth link \u65F6\u6309\u5E97\u89E3\u6790\u7528\u54EA\u4E2A app",
|
|
1339
|
+
flags: ["app", "note"],
|
|
1156
1340
|
run: ({ args: args2 }) => {
|
|
1157
1341
|
if (!args2.shop || !args2.app) return Promise.resolve({ ok: false, error: { code: "VALIDATION", message: "--shop \u548C --app\uFF08serviceId\uFF09\u5FC5\u586B", retryable: false } });
|
|
1158
1342
|
return setShopApp(args2.shop, args2.app, args2.note);
|
|
@@ -1161,16 +1345,19 @@ var COMMANDS = [
|
|
|
1161
1345
|
{
|
|
1162
1346
|
name: "apps list",
|
|
1163
1347
|
summary: "\u5217\u51FA\u5DF2\u767B\u8BB0\u7684 TikTok App\uFF08admin\uFF0C\u542B appKey/status\uFF09",
|
|
1348
|
+
flags: [],
|
|
1164
1349
|
run: () => adminApps("GET")
|
|
1165
1350
|
},
|
|
1166
1351
|
{
|
|
1167
1352
|
name: "apps available",
|
|
1168
1353
|
summary: "\u5217\u51FA\u53EF\u9009 App\uFF08\u7528\u6237\u9274\u6743\uFF0C\u4EC5 active\uFF0C\u65E0 secret\uFF09\u2014\u2014\u9009 serviceId \u4F20\u7ED9 auth link --app",
|
|
1354
|
+
flags: [],
|
|
1169
1355
|
run: () => availableApps()
|
|
1170
1356
|
},
|
|
1171
1357
|
{
|
|
1172
1358
|
name: "apps disable",
|
|
1173
1359
|
summary: "\u505C\u7528\u4E00\u4E2A TikTok App\uFF08--id\uFF09",
|
|
1360
|
+
flags: ["id"],
|
|
1174
1361
|
run: ({ args: args2 }) => adminApps("PATCH", { id: args2.id, body: { status: "disabled" } })
|
|
1175
1362
|
},
|
|
1176
1363
|
// ── auth link:skill 只传 --shop,backend 按 shop 解析用哪个 app(custom 映射→默认 public)。
|
|
@@ -1178,6 +1365,7 @@ var COMMANDS = [
|
|
|
1178
1365
|
{
|
|
1179
1366
|
name: "auth link",
|
|
1180
1367
|
summary: "\u751F\u6210\u5E97\u94FA\u7ED1\u5B9A\u6388\u6743\u94FE\u63A5\uFF08--shop shopId\uFF0Cbackend \u6309\u5E97\u5B9A app\uFF1B--app serviceId \u53EF\u9009\u8986\u76D6\uFF09",
|
|
1368
|
+
flags: ["app"],
|
|
1181
1369
|
run: async ({ args: args2 }) => {
|
|
1182
1370
|
if (!args2.shop && !args2.app) {
|
|
1183
1371
|
return { ok: false, error: { code: "VALIDATION", message: "--shop\uFF08shopId\uFF09\u5FC5\u586B\uFF08\u6216 --app \u8986\u76D6\uFF09", retryable: false } };
|
|
@@ -1331,7 +1519,10 @@ function validateCreateDiscount(ctx2) {
|
|
|
1331
1519
|
if (k === "sku") {
|
|
1332
1520
|
return { ok: false, message: "\u672C\u547D\u4EE4\u6CA1\u6709 --sku\uFF1AskuId \u5199\u5728 --price \u91CC\uFF0C\u5982 --price 173707:29.90\uFF08\u6CA1\u4F20 --product \u65F6\u6BCF\u9879\u90FD\u8981\u5E26 productId\uFF0C\u5982 --price 1737048/173707:29.90\uFF09" };
|
|
1333
1521
|
}
|
|
1334
|
-
|
|
1522
|
+
const own = DISCOUNT_FLAGS.filter((f) => !GLOBAL_FLAGS.includes(f));
|
|
1523
|
+
const hint = suggestFlag(k, own, args2[k], Date.now(), "promotions create-discount");
|
|
1524
|
+
const tip = !hint ? "" : hint.startsWith("--") ? `\uFF08\u4F60\u662F\u60F3\u7528 ${hint} \u5417\uFF1F\uFF09` : `\uFF08${hint}\uFF09`;
|
|
1525
|
+
return { ok: false, message: `\u4E0D\u652F\u6301\u7684\u53C2\u6570 --${k}${tip}\uFF1B\u672C\u547D\u4EE4\u53EA\u8BA4 ${DISCOUNT_FLAGS.map((f) => "--" + f).join(" ")}` };
|
|
1335
1526
|
}
|
|
1336
1527
|
if (rest && rest.length > 0) {
|
|
1337
1528
|
return { ok: false, message: `\u591A\u4F59\u7684\u4F4D\u7F6E\u53C2\u6570\u300C${rest.join(" ")}\u300D\u2014\u2014\u6BCF\u4E2A\u53C2\u6570\u53EA\u80FD\u5E26\u4E00\u4E2A\u503C\u3002\u591A\u4E2A SKU \u8981\u7528\u9017\u53F7\u8FDE\u6210\u4E00\u4E2A --price\uFF0C\u5982 --price A:12,B:15\uFF08\u4E0D\u80FD\u7528\u7A7A\u683C\u5206\u9694\uFF09\uFF1B\u82E5\u662F\u6807\u9898\u7B49\u503C\u91CC\u542B\u7A7A\u683C\uFF0C\u7ED9\u6574\u4E2A\u503C\u52A0\u5F15\u53F7\uFF0C\u5982 --title "Momo Sale"` };
|
|
@@ -1490,6 +1681,8 @@ async function dupSelfCheck(shop, title, submitted) {
|
|
|
1490
1681
|
|
|
1491
1682
|
// src/index.ts
|
|
1492
1683
|
var NO_SHOP_COMMANDS = /* @__PURE__ */ new Set(["auth link", "apps add", "apps list", "apps disable", "apps available", "apps set-shop"]);
|
|
1684
|
+
var SHOP_OPTIONAL_BUT_READ = /* @__PURE__ */ new Set(["auth link", "apps set-shop"]);
|
|
1685
|
+
var mentionsShop = (name) => !NO_SHOP_COMMANDS.has(name) || SHOP_OPTIONAL_BUT_READ.has(name);
|
|
1493
1686
|
function parseFlags(tokens) {
|
|
1494
1687
|
const args2 = {};
|
|
1495
1688
|
const positional2 = [];
|
|
@@ -1547,6 +1740,7 @@ function usage() {
|
|
|
1547
1740
|
for (const c of COMMANDS) lines.push(` ${c.name.padEnd(22)} ${c.summary}`);
|
|
1548
1741
|
lines.push(` ${"shops".padEnd(22)} \u67E5\u5F53\u524D\u767B\u5F55\u7528\u6237\u5DF2\u6388\u6743\u5E97\u94FA`);
|
|
1549
1742
|
lines.push(` ${"images upload".padEnd(22)} \u4E0A\u4F20\u672C\u5730\u56FE\u7247\uFF08--file --use-case [--out]\uFF09`);
|
|
1743
|
+
lines.push("", "\u6BCF\u6761\u547D\u4EE4\u53EA\u8BA4\u5B83\u81EA\u5DF1\u7684\u53C2\u6570\uFF08`tiktok <\u547D\u4EE4> --help` \u770B\uFF09\uFF0C\u4E0D\u8BA4\u7684\u4F1A\u5F53\u573A\u62A5 VALIDATION \u2014\u2014 \u4E0D\u4F1A\u518D\u88AB\u9759\u9ED8\u4E22\u6389\u3002");
|
|
1550
1744
|
lines.push("", "\u901A\u7528\uFF1A--shop \u5FC5\u586B\uFF08\u9664 shops / auth link / apps add|list|disable\uFF09\uFF1B\u9ED8\u8BA4 JSON \u8F93\u51FA\uFF1BTIKTOK_BACKEND_URL \u663E\u5F0F\u6307\u5B9A backend\uFF08\u672A\u8BBE\u5219\u6309 OPTIMA_ENV \u6620\u5C04 cn-stage/cn-prod\uFF0C\u5426\u5219 localhost\uFF09\u3002");
|
|
1551
1745
|
process.stderr.write(lines.join("\n") + "\n");
|
|
1552
1746
|
}
|
|
@@ -1556,11 +1750,40 @@ if (argv.length === 0 || argv[0] === "--help" || argv[0] === "-h") {
|
|
|
1556
1750
|
process.exit(argv.length === 0 ? 1 : 0);
|
|
1557
1751
|
}
|
|
1558
1752
|
var { args, positional } = parseFlags(argv);
|
|
1753
|
+
var wantsHelp = argv.includes("--help") || argv.includes("-h") || "help" in args;
|
|
1754
|
+
function rejectUnknownFlags(cmdName, allowed, rest, noShop = false) {
|
|
1755
|
+
const v = checkFlags(cmdName, args, allowed, rest, Date.now(), noShop);
|
|
1756
|
+
if (!v) return;
|
|
1757
|
+
out({
|
|
1758
|
+
ok: false,
|
|
1759
|
+
error: {
|
|
1760
|
+
code: "VALIDATION",
|
|
1761
|
+
message: v.message,
|
|
1762
|
+
retryable: false,
|
|
1763
|
+
unknown_flags: v.unknown_flags,
|
|
1764
|
+
extra_positional: v.extra_positional,
|
|
1765
|
+
allowed_flags: v.allowed_flags
|
|
1766
|
+
}
|
|
1767
|
+
});
|
|
1768
|
+
process.exit(1);
|
|
1769
|
+
}
|
|
1770
|
+
var IMAGES_UPLOAD = { name: "images upload", summary: "\u4E0A\u4F20\u672C\u5730\u56FE\u7247\uFF08--file <\u8DEF\u5F84> [--use-case MAIN_IMAGE] [--out <\u8FFD\u52A0\u5199\u5165\u7684 jsonl>]\uFF09", flags: ["file", "use-case", "out"] };
|
|
1771
|
+
var SHOPS = { name: "shops", summary: "\u67E5\u5F53\u524D\u767B\u5F55\u7528\u6237\u5DF2\u6388\u6743\u5E97\u94FA\uFF08\u4E0D\u9700\u8981 --shop\uFF09", flags: [], noShop: true };
|
|
1559
1772
|
if (positional[0] === "shops") {
|
|
1773
|
+
if (wantsHelp) {
|
|
1774
|
+
process.stderr.write(commandUsage(SHOPS));
|
|
1775
|
+
process.exit(0);
|
|
1776
|
+
}
|
|
1777
|
+
rejectUnknownFlags(SHOPS.name, SHOPS.flags, positional.slice(1), true);
|
|
1560
1778
|
out(await listShops());
|
|
1561
1779
|
process.exit(0);
|
|
1562
1780
|
}
|
|
1563
1781
|
if (positional[0] === "images" && positional[1] === "upload") {
|
|
1782
|
+
if (wantsHelp) {
|
|
1783
|
+
process.stderr.write(commandUsage(IMAGES_UPLOAD));
|
|
1784
|
+
process.exit(0);
|
|
1785
|
+
}
|
|
1786
|
+
rejectUnknownFlags(IMAGES_UPLOAD.name, IMAGES_UPLOAD.flags, positional.slice(2));
|
|
1564
1787
|
if (!args.file) {
|
|
1565
1788
|
out({ ok: false, error: { code: "VALIDATION", message: "\u7F3A\u5C11 --file", retryable: false } });
|
|
1566
1789
|
process.exit(1);
|
|
@@ -1577,14 +1800,12 @@ if (positional[0] === "images" && positional[1] === "upload") {
|
|
|
1577
1800
|
out(r);
|
|
1578
1801
|
process.exit(0);
|
|
1579
1802
|
}
|
|
1580
|
-
var wantsHelp = argv.includes("--help") || argv.includes("-h");
|
|
1581
1803
|
var match = findCommand(positional);
|
|
1582
1804
|
if (wantsHelp) {
|
|
1583
|
-
if (match) process.stderr.write(commandUsage(match.cmd));
|
|
1805
|
+
if (match) process.stderr.write(commandUsage({ ...match.cmd, noShop: !mentionsShop(match.cmd.name) }));
|
|
1584
1806
|
else usage();
|
|
1585
1807
|
process.exit(0);
|
|
1586
1808
|
}
|
|
1587
|
-
normalizeBooleanFlags(args);
|
|
1588
1809
|
if (!match) {
|
|
1589
1810
|
out({ ok: false, error: { code: "VALIDATION", message: `\u672A\u77E5\u547D\u4EE4: ${positional.join(" ")}`, retryable: false } });
|
|
1590
1811
|
usage();
|
|
@@ -1596,6 +1817,8 @@ if (verdict && !verdict.ok) {
|
|
|
1596
1817
|
out({ ok: false, error: { code: "VALIDATION", message: verdict.message, retryable: false } });
|
|
1597
1818
|
process.exit(1);
|
|
1598
1819
|
}
|
|
1820
|
+
rejectUnknownFlags(match.cmd.name, match.cmd.flags, match.rest, !mentionsShop(match.cmd.name));
|
|
1821
|
+
normalizeBooleanFlags(args);
|
|
1599
1822
|
if (!args.shop && !NO_SHOP_COMMANDS.has(match.cmd.name)) {
|
|
1600
1823
|
out({ ok: false, error: { code: "VALIDATION", message: "\u7F3A\u5C11 --shop\uFF08\u591A\u5E97\u663E\u5F0F\u8DEF\u7531\uFF09", retryable: false } });
|
|
1601
1824
|
process.exit(1);
|