cc98-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 (119) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +246 -0
  3. package/dist/api/client.d.ts +47 -0
  4. package/dist/api/client.d.ts.map +1 -0
  5. package/dist/api/client.js +188 -0
  6. package/dist/api/client.js.map +1 -0
  7. package/dist/api/endpoints.d.ts +48 -0
  8. package/dist/api/endpoints.d.ts.map +1 -0
  9. package/dist/api/endpoints.js +53 -0
  10. package/dist/api/endpoints.js.map +1 -0
  11. package/dist/api/types.d.ts +14 -0
  12. package/dist/api/types.d.ts.map +1 -0
  13. package/dist/api/types.js +2 -0
  14. package/dist/api/types.js.map +1 -0
  15. package/dist/cli/commands/account.d.ts +2 -0
  16. package/dist/cli/commands/account.d.ts.map +1 -0
  17. package/dist/cli/commands/account.js +81 -0
  18. package/dist/cli/commands/account.js.map +1 -0
  19. package/dist/cli/commands/board.d.ts +2 -0
  20. package/dist/cli/commands/board.d.ts.map +1 -0
  21. package/dist/cli/commands/board.js +61 -0
  22. package/dist/cli/commands/board.js.map +1 -0
  23. package/dist/cli/commands/forum.d.ts +2 -0
  24. package/dist/cli/commands/forum.d.ts.map +1 -0
  25. package/dist/cli/commands/forum.js +38 -0
  26. package/dist/cli/commands/forum.js.map +1 -0
  27. package/dist/cli/commands/login.d.ts +2 -0
  28. package/dist/cli/commands/login.d.ts.map +1 -0
  29. package/dist/cli/commands/login.js +98 -0
  30. package/dist/cli/commands/login.js.map +1 -0
  31. package/dist/cli/commands/logout.d.ts +2 -0
  32. package/dist/cli/commands/logout.d.ts.map +1 -0
  33. package/dist/cli/commands/logout.js +20 -0
  34. package/dist/cli/commands/logout.js.map +1 -0
  35. package/dist/cli/commands/me.d.ts +2 -0
  36. package/dist/cli/commands/me.d.ts.map +1 -0
  37. package/dist/cli/commands/me.js +9 -0
  38. package/dist/cli/commands/me.js.map +1 -0
  39. package/dist/cli/commands/message.d.ts +2 -0
  40. package/dist/cli/commands/message.d.ts.map +1 -0
  41. package/dist/cli/commands/message.js +42 -0
  42. package/dist/cli/commands/message.js.map +1 -0
  43. package/dist/cli/commands/notice.d.ts +2 -0
  44. package/dist/cli/commands/notice.d.ts.map +1 -0
  45. package/dist/cli/commands/notice.js +30 -0
  46. package/dist/cli/commands/notice.js.map +1 -0
  47. package/dist/cli/commands/post.d.ts +2 -0
  48. package/dist/cli/commands/post.d.ts.map +1 -0
  49. package/dist/cli/commands/post.js +37 -0
  50. package/dist/cli/commands/post.js.map +1 -0
  51. package/dist/cli/commands/search.d.ts +2 -0
  52. package/dist/cli/commands/search.d.ts.map +1 -0
  53. package/dist/cli/commands/search.js +13 -0
  54. package/dist/cli/commands/search.js.map +1 -0
  55. package/dist/cli/commands/topic.d.ts +2 -0
  56. package/dist/cli/commands/topic.d.ts.map +1 -0
  57. package/dist/cli/commands/topic.js +196 -0
  58. package/dist/cli/commands/topic.js.map +1 -0
  59. package/dist/cli/commands/user.d.ts +2 -0
  60. package/dist/cli/commands/user.d.ts.map +1 -0
  61. package/dist/cli/commands/user.js +90 -0
  62. package/dist/cli/commands/user.js.map +1 -0
  63. package/dist/cli/context.d.ts +9 -0
  64. package/dist/cli/context.d.ts.map +1 -0
  65. package/dist/cli/context.js +8 -0
  66. package/dist/cli/context.js.map +1 -0
  67. package/dist/cli/options.d.ts +6 -0
  68. package/dist/cli/options.d.ts.map +1 -0
  69. package/dist/cli/options.js +22 -0
  70. package/dist/cli/options.js.map +1 -0
  71. package/dist/cli/parse.d.ts +15 -0
  72. package/dist/cli/parse.d.ts.map +1 -0
  73. package/dist/cli/parse.js +55 -0
  74. package/dist/cli/parse.js.map +1 -0
  75. package/dist/cli/prompt.d.ts +4 -0
  76. package/dist/cli/prompt.d.ts.map +1 -0
  77. package/dist/cli/prompt.js +53 -0
  78. package/dist/cli/prompt.js.map +1 -0
  79. package/dist/cli/router.d.ts +2 -0
  80. package/dist/cli/router.d.ts.map +1 -0
  81. package/dist/cli/router.js +77 -0
  82. package/dist/cli/router.js.map +1 -0
  83. package/dist/main.d.ts +3 -0
  84. package/dist/main.d.ts.map +1 -0
  85. package/dist/main.js +17 -0
  86. package/dist/main.js.map +1 -0
  87. package/dist/storage/cache-store.d.ts +19 -0
  88. package/dist/storage/cache-store.d.ts.map +1 -0
  89. package/dist/storage/cache-store.js +82 -0
  90. package/dist/storage/cache-store.js.map +1 -0
  91. package/dist/storage/paths.d.ts +4 -0
  92. package/dist/storage/paths.d.ts.map +1 -0
  93. package/dist/storage/paths.js +14 -0
  94. package/dist/storage/paths.js.map +1 -0
  95. package/dist/storage/token-store.d.ts +39 -0
  96. package/dist/storage/token-store.d.ts.map +1 -0
  97. package/dist/storage/token-store.js +177 -0
  98. package/dist/storage/token-store.js.map +1 -0
  99. package/dist/tui/ansi.d.ts +16 -0
  100. package/dist/tui/ansi.d.ts.map +1 -0
  101. package/dist/tui/ansi.js +24 -0
  102. package/dist/tui/ansi.js.map +1 -0
  103. package/dist/tui/app.d.ts +2 -0
  104. package/dist/tui/app.d.ts.map +1 -0
  105. package/dist/tui/app.js +1096 -0
  106. package/dist/tui/app.js.map +1 -0
  107. package/dist/tui/cached-client.d.ts +22 -0
  108. package/dist/tui/cached-client.d.ts.map +1 -0
  109. package/dist/tui/cached-client.js +60 -0
  110. package/dist/tui/cached-client.js.map +1 -0
  111. package/dist/tui/terminal.d.ts +21 -0
  112. package/dist/tui/terminal.d.ts.map +1 -0
  113. package/dist/tui/terminal.js +67 -0
  114. package/dist/tui/terminal.js.map +1 -0
  115. package/dist/tui/ubb-renderer.d.ts +7 -0
  116. package/dist/tui/ubb-renderer.d.ts.map +1 -0
  117. package/dist/tui/ubb-renderer.js +102 -0
  118. package/dist/tui/ubb-renderer.js.map +1 -0
  119. package/package.json +39 -0
@@ -0,0 +1,2 @@
1
+ export declare function accountCommand(args: string[]): Promise<void>;
2
+ //# sourceMappingURL=account.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"account.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/account.ts"],"names":[],"mappings":"AAEA,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAuElE"}
@@ -0,0 +1,81 @@
1
+ import { TokenStore } from "../../storage/token-store.js";
2
+ export async function accountCommand(args) {
3
+ const [subcommand, ...rest] = args;
4
+ const tokenStore = new TokenStore();
5
+ switch (subcommand) {
6
+ case undefined:
7
+ case "--help":
8
+ case "-h":
9
+ case "help":
10
+ printAccountHelp();
11
+ return;
12
+ case "list": {
13
+ const current = await tokenStore.getCurrentAccountName();
14
+ const accounts = await tokenStore.listAccounts();
15
+ console.log(JSON.stringify({
16
+ current,
17
+ accounts: accounts.map((account) => ({
18
+ account: account.account,
19
+ userId: account.userId,
20
+ username: account.username,
21
+ displayName: account.displayName,
22
+ createdAt: account.createdAt,
23
+ updatedAt: account.updatedAt,
24
+ current: account.account === current
25
+ }))
26
+ }, null, 2));
27
+ return;
28
+ }
29
+ case "current": {
30
+ const current = await tokenStore.getCurrentAccount();
31
+ console.log(JSON.stringify(current ? {
32
+ account: current.account,
33
+ userId: current.userId,
34
+ username: current.username,
35
+ displayName: current.displayName,
36
+ createdAt: current.createdAt,
37
+ updatedAt: current.updatedAt
38
+ } : null, null, 2));
39
+ return;
40
+ }
41
+ case "use": {
42
+ const account = rest[0];
43
+ if (!account) {
44
+ throw new Error("usage: cc98 account use <account>");
45
+ }
46
+ const record = await tokenStore.useAccount(account);
47
+ console.log(JSON.stringify({
48
+ current: record.account,
49
+ userId: record.userId,
50
+ username: record.username,
51
+ displayName: record.displayName
52
+ }, null, 2));
53
+ return;
54
+ }
55
+ case "remove": {
56
+ const account = rest[0];
57
+ if (!account) {
58
+ throw new Error("usage: cc98 account remove <account>");
59
+ }
60
+ await tokenStore.removeAccount(account);
61
+ console.log(JSON.stringify({ removed: account }, null, 2));
62
+ return;
63
+ }
64
+ default:
65
+ throw new Error(`unknown account command: ${subcommand}`);
66
+ }
67
+ }
68
+ function printAccountHelp() {
69
+ console.log(`cc98 account
70
+
71
+ Usage:
72
+ cc98 account list
73
+ cc98 account current
74
+ cc98 account use <account>
75
+ cc98 account remove <account>
76
+
77
+ Options:
78
+ -h, --help Show this help
79
+ `);
80
+ }
81
+ //# sourceMappingURL=account.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"account.js","sourceRoot":"","sources":["../../../src/cli/commands/account.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function boardCommand(args: string[]): Promise<void>;
2
+ //# sourceMappingURL=board.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"board.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/board.ts"],"names":[],"mappings":"AAIA,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAoChE"}
@@ -0,0 +1,61 @@
1
+ import { createCliContext } from "../context.js";
2
+ import { extractAccountOption } from "../options.js";
3
+ import { extractPageOptions, parsePositiveInteger, printJson } from "../parse.js";
4
+ export async function boardCommand(args) {
5
+ const accountOption = extractAccountOption(args);
6
+ const [subcommandOrId, ...rest] = accountOption.args;
7
+ const { client } = createCliContext({ account: accountOption.account });
8
+ if (!subcommandOrId || subcommandOrId === "--help" || subcommandOrId === "-h" || subcommandOrId === "help") {
9
+ printBoardHelp();
10
+ return;
11
+ }
12
+ if (/^\d+$/.test(subcommandOrId)) {
13
+ const boardId = parsePositiveInteger(subcommandOrId, "board-id");
14
+ const page = extractPageOptions(rest, { size: 20 });
15
+ printJson(await client.getBoardTopics(boardId, page.from, page.size));
16
+ return;
17
+ }
18
+ switch (subcommandOrId) {
19
+ case "list":
20
+ printJson(await client.getAllBoards());
21
+ return;
22
+ case "info": {
23
+ const boardId = parsePositiveInteger(rest[0], "board-id");
24
+ printJson(await client.getBoardInfo(boardId));
25
+ return;
26
+ }
27
+ case "topics": {
28
+ const boardId = parsePositiveInteger(rest[0], "board-id");
29
+ const { best, args: pageArgs } = extractBestOption(rest.slice(1));
30
+ const page = extractPageOptions(pageArgs, { size: 20 });
31
+ printJson(await client.getBoardTopics(boardId, page.from, page.size, best));
32
+ return;
33
+ }
34
+ default:
35
+ throw new Error(`unknown board command: ${subcommandOrId}`);
36
+ }
37
+ }
38
+ function extractBestOption(args) {
39
+ const rest = [];
40
+ let best = false;
41
+ for (const arg of args) {
42
+ if (arg === "--best") {
43
+ best = true;
44
+ }
45
+ else {
46
+ rest.push(arg);
47
+ }
48
+ }
49
+ return { best, args: rest };
50
+ }
51
+ function printBoardHelp() {
52
+ console.log(`cc98 board
53
+
54
+ Usage:
55
+ cc98 board <board-id> [--from n] [--size n]
56
+ cc98 board list
57
+ cc98 board info <board-id>
58
+ cc98 board topics <board-id> [--from n] [--size n] [--best]
59
+ `);
60
+ }
61
+ //# sourceMappingURL=board.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"board.js","sourceRoot":"","sources":["../../../src/cli/commands/board.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function forumCommand(args: string[]): Promise<void>;
2
+ //# sourceMappingURL=forum.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"forum.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/forum.ts"],"names":[],"mappings":"AAIA,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAyBhE"}
@@ -0,0 +1,38 @@
1
+ import { createCliContext } from "../context.js";
2
+ import { extractAccountOption } from "../options.js";
3
+ import { printJson } from "../parse.js";
4
+ export async function forumCommand(args) {
5
+ const accountOption = extractAccountOption(args);
6
+ const [subcommand] = accountOption.args;
7
+ const { client } = createCliContext({ account: accountOption.account });
8
+ switch (subcommand) {
9
+ case undefined:
10
+ case "--help":
11
+ case "-h":
12
+ case "help":
13
+ printForumHelp();
14
+ return;
15
+ case "index":
16
+ printJson(await client.getForumIndex());
17
+ return;
18
+ case "boards":
19
+ case "all-boards":
20
+ printJson(await client.getAllBoards());
21
+ return;
22
+ case "card-stat":
23
+ printJson(await client.getCardStat());
24
+ return;
25
+ default:
26
+ throw new Error(`unknown forum command: ${subcommand}`);
27
+ }
28
+ }
29
+ function printForumHelp() {
30
+ console.log(`cc98 forum
31
+
32
+ Usage:
33
+ cc98 forum index
34
+ cc98 forum boards
35
+ cc98 forum card-stat
36
+ `);
37
+ }
38
+ //# sourceMappingURL=forum.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"forum.js","sourceRoot":"","sources":["../../../src/cli/commands/forum.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,IAAc;IAC/C,MAAM,aAAa,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;IACjD,MAAM,CAAC,UAAU,CAAC,GAAG,aAAa,CAAC,IAAI,CAAC;IACxC,MAAM,EAAE,MAAM,EAAE,GAAG,gBAAgB,CAAC,EAAE,OAAO,EAAE,aAAa,CAAC,OAAO,EAAE,CAAC,CAAC;IAExE,QAAQ,UAAU,EAAE,CAAC;QACnB,KAAK,SAAS,CAAC;QACf,KAAK,QAAQ,CAAC;QACd,KAAK,IAAI,CAAC;QACV,KAAK,MAAM;YACT,cAAc,EAAE,CAAC;YACjB,OAAO;QACT,KAAK,OAAO;YACV,SAAS,CAAC,MAAM,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC;YACxC,OAAO;QACT,KAAK,QAAQ,CAAC;QACd,KAAK,YAAY;YACf,SAAS,CAAC,MAAM,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC;YACvC,OAAO;QACT,KAAK,WAAW;YACd,SAAS,CAAC,MAAM,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;YACtC,OAAO;QACT;YACE,MAAM,IAAI,KAAK,CAAC,0BAA0B,UAAU,EAAE,CAAC,CAAC;IAC5D,CAAC;AACH,CAAC;AAED,SAAS,cAAc;IACrB,OAAO,CAAC,GAAG,CAAC;;;;;;CAMb,CAAC,CAAC;AACH,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function loginCommand(args?: string[]): Promise<void>;
2
+ //# sourceMappingURL=login.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/login.ts"],"names":[],"mappings":"AAWA,wBAAsB,YAAY,CAAC,IAAI,GAAE,MAAM,EAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAkCrE"}
@@ -0,0 +1,98 @@
1
+ import { createCliContext } from "../context.js";
2
+ import { extractAccountOption } from "../options.js";
3
+ import { promptPassword, promptText, readStdinText } from "../prompt.js";
4
+ export async function loginCommand(args = []) {
5
+ const options = parseLoginArgs(args);
6
+ if (options.help) {
7
+ printLoginHelp();
8
+ return;
9
+ }
10
+ const { client, tokenStore } = createCliContext();
11
+ const username = options.username ?? (await promptText("CC98 username: ")).trim();
12
+ const password = options.passwordStdin
13
+ ? (await readStdinText()).trimEnd()
14
+ : await promptPassword("CC98 password: ");
15
+ if (!username) {
16
+ throw new Error("username cannot be empty");
17
+ }
18
+ try {
19
+ const token = await client.loginWithPassword(username, password);
20
+ const me = await client.getMeWithAccessToken(token.accessToken);
21
+ const account = options.account ?? getDefaultAccountName(me, username);
22
+ await tokenStore.saveAccount(account, {
23
+ accessToken: token.accessToken,
24
+ refreshToken: token.refreshToken,
25
+ userId: typeof me.id === "number" ? me.id : undefined,
26
+ username,
27
+ displayName: typeof me.name === "string" ? me.name : undefined
28
+ });
29
+ const name = typeof me.name === "string" ? me.name : username;
30
+ const id = typeof me.id === "number" ? `#${me.id}` : "";
31
+ console.log(`logged in as ${name}${id ? ` ${id}` : ""} (${account})`);
32
+ }
33
+ catch (error) {
34
+ throw normalizeLoginError(error);
35
+ }
36
+ }
37
+ function parseLoginArgs(args) {
38
+ const accountOption = extractAccountOption(args);
39
+ const options = {
40
+ account: accountOption.account,
41
+ passwordStdin: false,
42
+ help: false
43
+ };
44
+ for (let index = 0; index < accountOption.args.length; index += 1) {
45
+ const arg = accountOption.args[index];
46
+ if (arg === "--help" || arg === "-h") {
47
+ options.help = true;
48
+ continue;
49
+ }
50
+ if (arg === "--password-stdin") {
51
+ options.passwordStdin = true;
52
+ continue;
53
+ }
54
+ if (arg === "--username" || arg === "-u") {
55
+ const value = accountOption.args[index + 1];
56
+ if (!value) {
57
+ throw new Error(`missing value for ${arg}`);
58
+ }
59
+ options.username = value;
60
+ index += 1;
61
+ continue;
62
+ }
63
+ throw new Error(`unknown login option: ${arg}`);
64
+ }
65
+ return options;
66
+ }
67
+ function printLoginHelp() {
68
+ console.log(`cc98 login
69
+
70
+ Usage:
71
+ cc98 login
72
+ cc98 login -u <username>
73
+ cc98 login --account <account>
74
+ printf '%s' "$CC98_PASSWORD" | cc98 login -u <username> --password-stdin
75
+
76
+ Options:
77
+ -u, --username <name> Provide the CC98 username
78
+ -a, --account <account> Save as this local account name
79
+ --password-stdin Read password from stdin
80
+ -h, --help Show this help
81
+ `);
82
+ }
83
+ function getDefaultAccountName(me, username) {
84
+ if (typeof me.name === "string" && me.name.trim()) {
85
+ return me.name.trim();
86
+ }
87
+ if (typeof me.id === "number") {
88
+ return String(me.id);
89
+ }
90
+ return username;
91
+ }
92
+ function normalizeLoginError(error) {
93
+ if (error instanceof Error) {
94
+ return new Error(`login failed: ${error.message}`);
95
+ }
96
+ return new Error(`login failed: ${String(error)}`);
97
+ }
98
+ //# sourceMappingURL=login.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login.js","sourceRoot":"","sources":["../../../src/cli/commands/login.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function logoutCommand(args?: string[]): Promise<void>;
2
+ //# sourceMappingURL=logout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logout.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/logout.ts"],"names":[],"mappings":"AAGA,wBAAsB,aAAa,CAAC,IAAI,GAAE,MAAM,EAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAmBtE"}
@@ -0,0 +1,20 @@
1
+ import { createCliContext } from "../context.js";
2
+ import { extractAccountOption } from "../options.js";
3
+ export async function logoutCommand(args = []) {
4
+ const { account, args: rest } = extractAccountOption(args);
5
+ if (rest.includes("--all")) {
6
+ const { tokenStore } = createCliContext();
7
+ await tokenStore.clear();
8
+ console.log(JSON.stringify({ loggedOut: "all" }, null, 2));
9
+ return;
10
+ }
11
+ const { tokenStore } = createCliContext({ account });
12
+ const current = await tokenStore.getCurrentAccountName();
13
+ if (!current) {
14
+ console.log(JSON.stringify({ loggedOut: null }, null, 2));
15
+ return;
16
+ }
17
+ await tokenStore.removeAccount(current);
18
+ console.log(JSON.stringify({ loggedOut: current }, null, 2));
19
+ }
20
+ //# sourceMappingURL=logout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logout.js","sourceRoot":"","sources":["../../../src/cli/commands/logout.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAErD,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,OAAiB,EAAE;IACrD,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;IAE3D,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3B,MAAM,EAAE,UAAU,EAAE,GAAG,gBAAgB,EAAE,CAAC;QAC1C,MAAM,UAAU,CAAC,KAAK,EAAE,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC3D,OAAO;IACT,CAAC;IAED,MAAM,EAAE,UAAU,EAAE,GAAG,gBAAgB,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;IACrD,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,qBAAqB,EAAE,CAAC;IACzD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC1D,OAAO;IACT,CAAC;IAED,MAAM,UAAU,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IACxC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AAC/D,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function meCommand(args?: string[]): Promise<void>;
2
+ //# sourceMappingURL=me.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"me.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/me.ts"],"names":[],"mappings":"AAGA,wBAAsB,SAAS,CAAC,IAAI,GAAE,MAAM,EAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAKlE"}
@@ -0,0 +1,9 @@
1
+ import { createCliContext } from "../context.js";
2
+ import { extractAccountOption } from "../options.js";
3
+ export async function meCommand(args = []) {
4
+ const { account } = extractAccountOption(args);
5
+ const { client } = createCliContext({ account });
6
+ const me = await client.getMe();
7
+ console.log(JSON.stringify(me, null, 2));
8
+ }
9
+ //# sourceMappingURL=me.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"me.js","sourceRoot":"","sources":["../../../src/cli/commands/me.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAErD,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,OAAiB,EAAE;IACjD,MAAM,EAAE,OAAO,EAAE,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;IAC/C,MAAM,EAAE,MAAM,EAAE,GAAG,gBAAgB,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;IACjD,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;IAChC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AAC3C,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function messageCommand(args: string[]): Promise<void>;
2
+ //# sourceMappingURL=message.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/message.ts"],"names":[],"mappings":"AAIA,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA6BlE"}
@@ -0,0 +1,42 @@
1
+ import { createCliContext } from "../context.js";
2
+ import { extractAccountOption } from "../options.js";
3
+ import { extractPageOptions, parsePositiveInteger, printJson } from "../parse.js";
4
+ export async function messageCommand(args) {
5
+ const accountOption = extractAccountOption(args);
6
+ const [subcommand, ...rest] = accountOption.args;
7
+ const { client } = createCliContext({ account: accountOption.account });
8
+ switch (subcommand) {
9
+ case undefined:
10
+ case "--help":
11
+ case "-h":
12
+ case "help":
13
+ printMessageHelp();
14
+ return;
15
+ case "unread":
16
+ printJson(await client.getUnreadCount());
17
+ return;
18
+ case "recent": {
19
+ const page = extractPageOptions(rest, { size: 10 });
20
+ printJson(await client.getRecentChats(page.from, page.size));
21
+ return;
22
+ }
23
+ case "history": {
24
+ const userId = parsePositiveInteger(rest[0], "user-id");
25
+ const page = extractPageOptions(rest.slice(1), { size: 10 });
26
+ printJson(await client.getChatHistory(userId, page.from, page.size));
27
+ return;
28
+ }
29
+ default:
30
+ throw new Error(`unknown message command: ${subcommand}`);
31
+ }
32
+ }
33
+ function printMessageHelp() {
34
+ console.log(`cc98 message
35
+
36
+ Usage:
37
+ cc98 message unread
38
+ cc98 message recent [--from n] [--size n]
39
+ cc98 message history <user-id> [--from n] [--size n]
40
+ `);
41
+ }
42
+ //# sourceMappingURL=message.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message.js","sourceRoot":"","sources":["../../../src/cli/commands/message.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAElF,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,IAAc;IACjD,MAAM,aAAa,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;IACjD,MAAM,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,GAAG,aAAa,CAAC,IAAI,CAAC;IACjD,MAAM,EAAE,MAAM,EAAE,GAAG,gBAAgB,CAAC,EAAE,OAAO,EAAE,aAAa,CAAC,OAAO,EAAE,CAAC,CAAC;IAExE,QAAQ,UAAU,EAAE,CAAC;QACnB,KAAK,SAAS,CAAC;QACf,KAAK,QAAQ,CAAC;QACd,KAAK,IAAI,CAAC;QACV,KAAK,MAAM;YACT,gBAAgB,EAAE,CAAC;YACnB,OAAO;QACT,KAAK,QAAQ;YACX,SAAS,CAAC,MAAM,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC;YACzC,OAAO;QACT,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,IAAI,GAAG,kBAAkB,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;YACpD,SAAS,CAAC,MAAM,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YAC7D,OAAO;QACT,CAAC;QACD,KAAK,SAAS,CAAC,CAAC,CAAC;YACf,MAAM,MAAM,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;YACxD,MAAM,IAAI,GAAG,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;YAC7D,SAAS,CAAC,MAAM,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YACrE,OAAO;QACT,CAAC;QACD;YACE,MAAM,IAAI,KAAK,CAAC,4BAA4B,UAAU,EAAE,CAAC,CAAC;IAC9D,CAAC;AACH,CAAC;AAED,SAAS,gBAAgB;IACvB,OAAO,CAAC,GAAG,CAAC;;;;;;CAMb,CAAC,CAAC;AACH,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function noticeCommand(args: string[]): Promise<void>;
2
+ //# sourceMappingURL=notice.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notice.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/notice.ts"],"names":[],"mappings":"AAMA,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAgBjE"}
@@ -0,0 +1,30 @@
1
+ import { createCliContext } from "../context.js";
2
+ import { extractAccountOption } from "../options.js";
3
+ import { extractPageOptions, printJson } from "../parse.js";
4
+ export async function noticeCommand(args) {
5
+ const accountOption = extractAccountOption(args);
6
+ const [typeArg, ...rest] = accountOption.args;
7
+ if (!typeArg || typeArg === "--help" || typeArg === "-h" || typeArg === "help") {
8
+ printNoticeHelp();
9
+ return;
10
+ }
11
+ if (!isNoticeType(typeArg)) {
12
+ throw new Error("usage: cc98 notice <system|at|reply> [--from n] [--size n]");
13
+ }
14
+ const page = extractPageOptions(rest, { size: 10 });
15
+ const { client } = createCliContext({ account: accountOption.account });
16
+ printJson(await client.getNotices(typeArg, page.from, page.size));
17
+ }
18
+ function isNoticeType(value) {
19
+ return value === "system" || value === "at" || value === "reply";
20
+ }
21
+ function printNoticeHelp() {
22
+ console.log(`cc98 notice
23
+
24
+ Usage:
25
+ cc98 notice system [--from n] [--size n]
26
+ cc98 notice at [--from n] [--size n]
27
+ cc98 notice reply [--from n] [--size n]
28
+ `);
29
+ }
30
+ //# sourceMappingURL=notice.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notice.js","sourceRoot":"","sources":["../../../src/cli/commands/notice.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAI5D,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,IAAc;IAChD,MAAM,aAAa,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;IACjD,MAAM,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,aAAa,CAAC,IAAI,CAAC;IAE9C,IAAI,CAAC,OAAO,IAAI,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;QAC/E,eAAe,EAAE,CAAC;QAClB,OAAO;IACT,CAAC;IAED,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAC;IAChF,CAAC;IAED,MAAM,IAAI,GAAG,kBAAkB,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;IACpD,MAAM,EAAE,MAAM,EAAE,GAAG,gBAAgB,CAAC,EAAE,OAAO,EAAE,aAAa,CAAC,OAAO,EAAE,CAAC,CAAC;IACxE,SAAS,CAAC,MAAM,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACpE,CAAC;AAED,SAAS,YAAY,CAAC,KAAa;IACjC,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,OAAO,CAAC;AACnE,CAAC;AAED,SAAS,eAAe;IACtB,OAAO,CAAC,GAAG,CAAC;;;;;;CAMb,CAAC,CAAC;AACH,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function postCommand(args: string[]): Promise<void>;
2
+ //# sourceMappingURL=post.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"post.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/post.ts"],"names":[],"mappings":"AAIA,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAyB/D"}
@@ -0,0 +1,37 @@
1
+ import { createCliContext } from "../context.js";
2
+ import { extractAccountOption } from "../options.js";
3
+ import { parseInteger, parsePositiveInteger, printJson } from "../parse.js";
4
+ export async function postCommand(args) {
5
+ const accountOption = extractAccountOption(args);
6
+ const [subcommand, ...rest] = accountOption.args;
7
+ const { client } = createCliContext({ account: accountOption.account });
8
+ switch (subcommand) {
9
+ case undefined:
10
+ case "--help":
11
+ case "-h":
12
+ case "help":
13
+ printPostHelp();
14
+ return;
15
+ case "reaction-state": {
16
+ const postId = parsePositiveInteger(rest[0], "post-id");
17
+ printJson(await client.getPostReactionState(postId));
18
+ return;
19
+ }
20
+ case "rate-reasons": {
21
+ const type = parseInteger(rest[0], "type");
22
+ printJson(await client.getPostRateReasons(type));
23
+ return;
24
+ }
25
+ default:
26
+ throw new Error(`unknown post command: ${subcommand}`);
27
+ }
28
+ }
29
+ function printPostHelp() {
30
+ console.log(`cc98 post
31
+
32
+ Usage:
33
+ cc98 post reaction-state <post-id>
34
+ cc98 post rate-reasons <type>
35
+ `);
36
+ }
37
+ //# sourceMappingURL=post.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"post.js","sourceRoot":"","sources":["../../../src/cli/commands/post.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,oBAAoB,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE5E,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,IAAc;IAC9C,MAAM,aAAa,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;IACjD,MAAM,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,GAAG,aAAa,CAAC,IAAI,CAAC;IACjD,MAAM,EAAE,MAAM,EAAE,GAAG,gBAAgB,CAAC,EAAE,OAAO,EAAE,aAAa,CAAC,OAAO,EAAE,CAAC,CAAC;IAExE,QAAQ,UAAU,EAAE,CAAC;QACnB,KAAK,SAAS,CAAC;QACf,KAAK,QAAQ,CAAC;QACd,KAAK,IAAI,CAAC;QACV,KAAK,MAAM;YACT,aAAa,EAAE,CAAC;YAChB,OAAO;QACT,KAAK,gBAAgB,CAAC,CAAC,CAAC;YACtB,MAAM,MAAM,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;YACxD,SAAS,CAAC,MAAM,MAAM,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC;YACrD,OAAO;QACT,CAAC;QACD,KAAK,cAAc,CAAC,CAAC,CAAC;YACpB,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;YAC3C,SAAS,CAAC,MAAM,MAAM,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC;YACjD,OAAO;QACT,CAAC;QACD;YACE,MAAM,IAAI,KAAK,CAAC,yBAAyB,UAAU,EAAE,CAAC,CAAC;IAC3D,CAAC;AACH,CAAC;AAED,SAAS,aAAa;IACpB,OAAO,CAAC,GAAG,CAAC;;;;;CAKb,CAAC,CAAC;AACH,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function searchCommand(args: string[]): Promise<void>;
2
+ //# sourceMappingURL=search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/search.ts"],"names":[],"mappings":"AAGA,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAUjE"}
@@ -0,0 +1,13 @@
1
+ import { createCliContext } from "../context.js";
2
+ import { extractAccountOption } from "../options.js";
3
+ export async function searchCommand(args) {
4
+ const accountOption = extractAccountOption(args);
5
+ const keyword = accountOption.args.join(" ").trim();
6
+ if (!keyword) {
7
+ throw new Error("usage: cc98 search <keyword>");
8
+ }
9
+ const { client } = createCliContext({ account: accountOption.account });
10
+ const result = await client.searchTopics(keyword);
11
+ console.log(JSON.stringify(result, null, 2));
12
+ }
13
+ //# sourceMappingURL=search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.js","sourceRoot":"","sources":["../../../src/cli/commands/search.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAErD,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,IAAc;IAChD,MAAM,aAAa,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;IACjD,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IACpD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;IAClD,CAAC;IAED,MAAM,EAAE,MAAM,EAAE,GAAG,gBAAgB,CAAC,EAAE,OAAO,EAAE,aAAa,CAAC,OAAO,EAAE,CAAC,CAAC;IACxE,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;IAClD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AAC/C,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function topicCommand(args: string[]): Promise<void>;
2
+ //# sourceMappingURL=topic.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"topic.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/topic.ts"],"names":[],"mappings":"AAiBA,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAkGhE"}