@geoly-ai/social-hub-cli 0.3.20 → 0.3.21

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/CHANGELOG.md CHANGED
@@ -4,6 +4,14 @@ All notable changes to `@geoly-ai/social-hub-cli` are documented in this file.
4
4
 
5
5
  Release workflow: `pnpm release:cli` → `pnpm publish:cli`.
6
6
 
7
+ ## [0.3.21] - 2026-08-21
8
+
9
+ ### Fixed
10
+
11
+ - risk-list 分页补 ORDER BY 与 --offset
12
+ - doctor 不再明文打印 API token(R11)
13
+ - SDK 请求管线收敛 —— 两条 CSV 导出命令首次可用(R8/R9)
14
+
7
15
  ## [0.3.20] - 2026-08-18
8
16
 
9
17
  ### Added
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=accounts-list-offset.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"accounts-list-offset.test.d.ts","sourceRoot":"","sources":["../src/accounts-list-offset.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * R9 回归:`accounts list` 的分页游标。
3
+ *
4
+ * `limit` 上限 200(contracts `paginationQuerySchema`),此前 CLI 只有 `-n/--limit`,
5
+ * 账号数超过 200 的 team 无法穷举 —— SDK 与服务端一直支持 `offset`,缺的只有 CLI 这一层。
6
+ * 只断言选项已注册挡不住「注册了但忘了转发/转成 NaN」,所以这里跑真实 handler,
7
+ * 断言 SDK 收到的是**数值** offset,且不传时不发 offset(保持服务端默认 0)。
8
+ */
9
+ import { beforeAll, afterEach, describe, expect, it, vi } from "vitest";
10
+ const listAccounts = vi.fn().mockResolvedValue({ items: [], total: 0 });
11
+ vi.mock("@geoly-ai/social-hub-sdk", () => ({
12
+ SocialHubClient: vi.fn(),
13
+ getSocialHubHealth: vi.fn(),
14
+ }));
15
+ vi.mock("./client.js", () => ({
16
+ requireClient: () => ({ listAccounts }),
17
+ resolveTeamId: (t) => t ?? "team-1",
18
+ getBaseUrl: () => "http://localhost",
19
+ }));
20
+ let program;
21
+ beforeAll(async () => {
22
+ program = (await import("./index.js")).program;
23
+ vi.spyOn(console, "log").mockImplementation(() => { });
24
+ }, 30000);
25
+ afterEach(() => {
26
+ listAccounts.mockClear();
27
+ });
28
+ describe("accounts list 分页", () => {
29
+ // 两次 parse 放在同一个用例里且「不传」在前:commander 会把上一次 parse 的
30
+ // option 值留在同一个 command 实例上,拆成两个用例会互相污染。
31
+ it("--offset 以数值透传给 SDK,不传时则不发送(沿用服务端默认 0)", async () => {
32
+ await program.parseAsync(["node", "social-hub", "accounts", "list"]);
33
+ expect(listAccounts).toHaveBeenCalledTimes(1);
34
+ expect(listAccounts.mock.calls[0]?.[1]?.offset).toBeUndefined();
35
+ await program.parseAsync([
36
+ "node",
37
+ "social-hub",
38
+ "accounts",
39
+ "list",
40
+ "--limit",
41
+ "200",
42
+ "--offset",
43
+ "400",
44
+ ]);
45
+ expect(listAccounts).toHaveBeenCalledTimes(2);
46
+ expect(listAccounts.mock.calls[1]?.[0]).toBe("team-1");
47
+ expect(listAccounts.mock.calls[1]?.[1]).toMatchObject({
48
+ limit: 200,
49
+ offset: 400,
50
+ });
51
+ });
52
+ });
53
+ //# sourceMappingURL=accounts-list-offset.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"accounts-list-offset.test.js","sourceRoot":"","sources":["../src/accounts-list-offset.test.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAExE,MAAM,YAAY,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;AAExE,EAAE,CAAC,IAAI,CAAC,0BAA0B,EAAE,GAAG,EAAE,CAAC,CAAC;IACzC,eAAe,EAAE,EAAE,CAAC,EAAE,EAAE;IACxB,kBAAkB,EAAE,EAAE,CAAC,EAAE,EAAE;CAC5B,CAAC,CAAC,CAAC;AAEJ,EAAE,CAAC,IAAI,CAAC,aAAa,EAAE,GAAG,EAAE,CAAC,CAAC;IAC5B,aAAa,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC;IACvC,aAAa,EAAE,CAAC,CAAU,EAAE,EAAE,CAAC,CAAC,IAAI,QAAQ;IAC5C,UAAU,EAAE,GAAG,EAAE,CAAC,kBAAkB;CACrC,CAAC,CAAC,CAAC;AAEJ,IAAI,OAAwD,CAAC;AAE7D,SAAS,CAAC,KAAK,IAAI,EAAE;IACnB,OAAO,GAAG,CAAC,MAAM,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC;IAC/C,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;AACxD,CAAC,EAAE,KAAK,CAAC,CAAC;AAEV,SAAS,CAAC,GAAG,EAAE;IACb,YAAY,CAAC,SAAS,EAAE,CAAC;AAC3B,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAChC,mDAAmD;IACnD,yCAAyC;IACzC,EAAE,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;QACtD,MAAM,OAAO,CAAC,UAAU,CAAC,CAAC,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;QACrE,MAAM,CAAC,YAAY,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QAC9C,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,aAAa,EAAE,CAAC;QAEhE,MAAM,OAAO,CAAC,UAAU,CAAC;YACvB,MAAM;YACN,YAAY;YACZ,UAAU;YACV,MAAM;YACN,SAAS;YACT,KAAK;YACL,UAAU;YACV,KAAK;SACN,CAAC,CAAC;QACH,MAAM,CAAC,YAAY,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QAC9C,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACvD,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC;YACpD,KAAK,EAAE,GAAG;YACV,MAAM,EAAE,GAAG;SACZ,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1,6 +1,6 @@
1
1
  {
2
- "generatedAt": "2026-08-18T09:08:50.530Z",
3
- "cliVersion": "0.3.20",
2
+ "generatedAt": "2026-08-21T06:10:56.141Z",
3
+ "cliVersion": "0.3.21",
4
4
  "commands": [
5
5
  "accounts",
6
6
  "accounts brand-bindings",
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=compliance-risk-list-offset.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compliance-risk-list-offset.test.d.ts","sourceRoot":"","sources":["../src/compliance-risk-list-offset.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,63 @@
1
+ /**
2
+ * 回归:`compliance risk-list` 的分页游标。
3
+ *
4
+ * `limit` 上限 200(contracts `listAccountRiskProfilesQuerySchema`),此前 CLI 只有
5
+ * `-n/--limit`,风险画像超过 200 个的 team 无法穷举 —— 调用方拿到 200 条会以为
6
+ * 那就是全部(生产上某团队已有 125 个)。与 `accounts list --offset`(R9)同形。
7
+ *
8
+ * 只断言选项已注册挡不住「注册了但忘了转发/转成 NaN」,所以这里跑真实 handler,
9
+ * 断言 SDK 收到的是**数值** offset,且不传时不发 offset(保持服务端默认 0)。
10
+ */
11
+ import { beforeAll, afterEach, describe, expect, it, vi } from "vitest";
12
+ const listAccountRiskProfiles = vi
13
+ .fn()
14
+ .mockResolvedValue({ items: [], total: 0 });
15
+ vi.mock("@geoly-ai/social-hub-sdk", () => ({
16
+ SocialHubClient: vi.fn(),
17
+ getSocialHubHealth: vi.fn(),
18
+ }));
19
+ vi.mock("./client.js", () => ({
20
+ requireClient: () => ({ listAccountRiskProfiles }),
21
+ resolveTeamId: (t) => t ?? "team-1",
22
+ getBaseUrl: () => "http://localhost",
23
+ }));
24
+ let program;
25
+ beforeAll(async () => {
26
+ program = (await import("./index.js")).program;
27
+ vi.spyOn(console, "log").mockImplementation(() => { });
28
+ }, 30000);
29
+ afterEach(() => {
30
+ listAccountRiskProfiles.mockClear();
31
+ });
32
+ describe("compliance risk-list 分页", () => {
33
+ // 两次 parse 放在同一个用例里且「不传」在前:commander 会把上一次 parse 的
34
+ // option 值留在同一个 command 实例上,拆成两个用例会互相污染。
35
+ it("--offset 以数值透传给 SDK,不传时则不发送(沿用服务端默认 0)", async () => {
36
+ await program.parseAsync(["node", "social-hub", "compliance", "risk-list"]);
37
+ expect(listAccountRiskProfiles).toHaveBeenCalledTimes(1);
38
+ expect(listAccountRiskProfiles.mock.calls[0]?.[0]).toBe("team-1");
39
+ expect(listAccountRiskProfiles.mock.calls[0]?.[1]?.offset).toBeUndefined();
40
+ expect(listAccountRiskProfiles.mock.calls[0]?.[1]?.limit).toBe(100);
41
+ await program.parseAsync([
42
+ "node",
43
+ "social-hub",
44
+ "compliance",
45
+ "risk-list",
46
+ "--limit",
47
+ "200",
48
+ "--offset",
49
+ "400",
50
+ "--search",
51
+ "espresso",
52
+ ]);
53
+ expect(listAccountRiskProfiles).toHaveBeenCalledTimes(2);
54
+ expect(listAccountRiskProfiles.mock.calls[1]?.[1]).toMatchObject({
55
+ limit: 200,
56
+ offset: 400,
57
+ search: "espresso",
58
+ });
59
+ // 老的 number 位置参数已经换成对象;传成数字会让 offset/search 静默丢失。
60
+ expect(typeof listAccountRiskProfiles.mock.calls[1]?.[1]).toBe("object");
61
+ });
62
+ });
63
+ //# sourceMappingURL=compliance-risk-list-offset.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compliance-risk-list-offset.test.js","sourceRoot":"","sources":["../src/compliance-risk-list-offset.test.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA4DpC,QAAA,MAAM,OAAO,SAAgB,CAAC;AA2gF9B,8DAA8D;AAC9D,wBAAgB,4BAA4B,CAC1C,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,MAAM,GAAG,IAAI,CAOf;AAg+BD,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAC1D,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACjE,CAAC;AAQF,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,gBAAgB,EACxB,MAAM,EAAE;IACN,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,OAAO,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACvC,GACA,OAAO,CAAC;IAAE,QAAQ,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,CAAC,CAkJnE;AAyqBD;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE;IACvC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,sBAAsB,CAAC,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACpE,GAAG,MAAM,CAiBT;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,CAyCpD;AAgyDD,OAAO,EAAE,OAAO,EAAE,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA4DpC,QAAA,MAAM,OAAO,SAAgB,CAAC;AAyhF9B,8DAA8D;AAC9D,wBAAgB,4BAA4B,CAC1C,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,MAAM,GAAG,IAAI,CAOf;AAg+BD,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAC1D,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACjE,CAAC;AAQF,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,gBAAgB,EACxB,MAAM,EAAE;IACN,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,OAAO,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACvC,GACA,OAAO,CAAC;IAAE,QAAQ,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,CAAC,CAkJnE;AAyqBD;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE;IACvC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,sBAAsB,CAAC,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACpE,GAAG,MAAM,CAiBT;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,CAyCpD;AAgyDD,OAAO,EAAE,OAAO,EAAE,CAAC"}
package/dist/index.js CHANGED
@@ -608,10 +608,12 @@ accounts
608
608
  .option("--campaign <uuid>", "campaignId 过滤(legacy)")
609
609
  .option("--persona <uuid>", "personaId")
610
610
  .option("--category <cat>", "人设分类")
611
- .option("-n, --limit <n>", "limit", "50")
611
+ .option("-n, --limit <n>", "limit(上限 200)", "50")
612
+ .option("--offset <n>", "offset(翻页:offset 每次 += limit;返回体的 total 是过滤后的总数,offset + items.length >= total 即翻完)")
612
613
  .action(async (opts) => {
613
614
  const res = await requireClient().listAccounts(resolveTeamId(opts.team), {
614
615
  limit: Number(opts.limit),
616
+ offset: opts.offset === undefined ? undefined : Number(opts.offset),
615
617
  status: opts.status,
616
618
  platform: opts.platform,
617
619
  brandId: opts.brand,
@@ -1657,9 +1659,15 @@ compliance
1657
1659
  .command("risk-list")
1658
1660
  .description("GET /account-risk-profiles")
1659
1661
  .option("-t, --team <teamId>", "Team UUID(缺省用当前 context)")
1660
- .option("-n, --limit <n>", "limit", "100")
1662
+ .option("-n, --limit <n>", "limit(上限 200)", "100")
1663
+ .option("--offset <n>", "offset(翻页:offset 每次 += limit;返回体的 total 是过滤后的总数,集合在翻页期间不变时 offset + items.length >= total 即翻完。offset 分页不是快照分页,并发写入下同一行可能重复出现或被跳过)")
1664
+ .option("--search <text>", "按 handle / platform 模糊过滤")
1661
1665
  .action(async (opts) => {
1662
- const res = await requireClient().listAccountRiskProfiles(resolveTeamId(opts.team), Number(opts.limit));
1666
+ const res = await requireClient().listAccountRiskProfiles(resolveTeamId(opts.team), {
1667
+ limit: Number(opts.limit),
1668
+ offset: opts.offset === undefined ? undefined : Number(opts.offset),
1669
+ search: opts.search,
1670
+ });
1663
1671
  console.log(JSON.stringify(res, null, 2));
1664
1672
  });
1665
1673
  compliance