@walavave/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.
- package/LICENSE +21 -0
- package/README.md +150 -0
- package/dist/api/client.d.ts +57 -0
- package/dist/api/client.d.ts.map +1 -0
- package/dist/api/client.js +298 -0
- package/dist/api/client.js.map +1 -0
- package/dist/api/endpoints.d.ts +48 -0
- package/dist/api/endpoints.d.ts.map +1 -0
- package/dist/api/endpoints.js +53 -0
- package/dist/api/endpoints.js.map +1 -0
- package/dist/api/types.d.ts +35 -0
- package/dist/api/types.d.ts.map +1 -0
- package/dist/api/types.js +2 -0
- package/dist/api/types.js.map +1 -0
- package/dist/api/webvpn.d.ts +40 -0
- package/dist/api/webvpn.d.ts.map +1 -0
- package/dist/api/webvpn.js +259 -0
- package/dist/api/webvpn.js.map +1 -0
- package/dist/cli/commands/account.d.ts +2 -0
- package/dist/cli/commands/account.d.ts.map +1 -0
- package/dist/cli/commands/account.js +81 -0
- package/dist/cli/commands/account.js.map +1 -0
- package/dist/cli/commands/board.d.ts +2 -0
- package/dist/cli/commands/board.d.ts.map +1 -0
- package/dist/cli/commands/board.js +61 -0
- package/dist/cli/commands/board.js.map +1 -0
- package/dist/cli/commands/cache.d.ts +2 -0
- package/dist/cli/commands/cache.d.ts.map +1 -0
- package/dist/cli/commands/cache.js +68 -0
- package/dist/cli/commands/cache.js.map +1 -0
- package/dist/cli/commands/forum.d.ts +2 -0
- package/dist/cli/commands/forum.d.ts.map +1 -0
- package/dist/cli/commands/forum.js +38 -0
- package/dist/cli/commands/forum.js.map +1 -0
- package/dist/cli/commands/login.d.ts +2 -0
- package/dist/cli/commands/login.d.ts.map +1 -0
- package/dist/cli/commands/login.js +98 -0
- package/dist/cli/commands/login.js.map +1 -0
- package/dist/cli/commands/logout.d.ts +2 -0
- package/dist/cli/commands/logout.d.ts.map +1 -0
- package/dist/cli/commands/logout.js +20 -0
- package/dist/cli/commands/logout.js.map +1 -0
- package/dist/cli/commands/me.d.ts +2 -0
- package/dist/cli/commands/me.d.ts.map +1 -0
- package/dist/cli/commands/me.js +9 -0
- package/dist/cli/commands/me.js.map +1 -0
- package/dist/cli/commands/message.d.ts +2 -0
- package/dist/cli/commands/message.d.ts.map +1 -0
- package/dist/cli/commands/message.js +42 -0
- package/dist/cli/commands/message.js.map +1 -0
- package/dist/cli/commands/notice.d.ts +2 -0
- package/dist/cli/commands/notice.d.ts.map +1 -0
- package/dist/cli/commands/notice.js +30 -0
- package/dist/cli/commands/notice.js.map +1 -0
- package/dist/cli/commands/post.d.ts +2 -0
- package/dist/cli/commands/post.d.ts.map +1 -0
- package/dist/cli/commands/post.js +37 -0
- package/dist/cli/commands/post.js.map +1 -0
- package/dist/cli/commands/search.d.ts +2 -0
- package/dist/cli/commands/search.d.ts.map +1 -0
- package/dist/cli/commands/search.js +13 -0
- package/dist/cli/commands/search.js.map +1 -0
- package/dist/cli/commands/topic.d.ts +2 -0
- package/dist/cli/commands/topic.d.ts.map +1 -0
- package/dist/cli/commands/topic.js +196 -0
- package/dist/cli/commands/topic.js.map +1 -0
- package/dist/cli/commands/update.d.ts +2 -0
- package/dist/cli/commands/update.d.ts.map +1 -0
- package/dist/cli/commands/update.js +24 -0
- package/dist/cli/commands/update.js.map +1 -0
- package/dist/cli/commands/user.d.ts +2 -0
- package/dist/cli/commands/user.d.ts.map +1 -0
- package/dist/cli/commands/user.js +90 -0
- package/dist/cli/commands/user.js.map +1 -0
- package/dist/cli/commands/vpn.d.ts +2 -0
- package/dist/cli/commands/vpn.d.ts.map +1 -0
- package/dist/cli/commands/vpn.js +177 -0
- package/dist/cli/commands/vpn.js.map +1 -0
- package/dist/cli/context.d.ts +9 -0
- package/dist/cli/context.d.ts.map +1 -0
- package/dist/cli/context.js +26 -0
- package/dist/cli/context.js.map +1 -0
- package/dist/cli/options.d.ts +6 -0
- package/dist/cli/options.d.ts.map +1 -0
- package/dist/cli/options.js +22 -0
- package/dist/cli/options.js.map +1 -0
- package/dist/cli/parse.d.ts +15 -0
- package/dist/cli/parse.d.ts.map +1 -0
- package/dist/cli/parse.js +55 -0
- package/dist/cli/parse.js.map +1 -0
- package/dist/cli/prompt.d.ts +4 -0
- package/dist/cli/prompt.d.ts.map +1 -0
- package/dist/cli/prompt.js +53 -0
- package/dist/cli/prompt.js.map +1 -0
- package/dist/cli/router.d.ts +2 -0
- package/dist/cli/router.d.ts.map +1 -0
- package/dist/cli/router.js +90 -0
- package/dist/cli/router.js.map +1 -0
- package/dist/config.d.ts +10 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +74 -0
- package/dist/config.js.map +1 -0
- package/dist/main.d.ts +3 -0
- package/dist/main.d.ts.map +1 -0
- package/dist/main.js +17 -0
- package/dist/main.js.map +1 -0
- package/dist/storage/cache-store.d.ts +62 -0
- package/dist/storage/cache-store.d.ts.map +1 -0
- package/dist/storage/cache-store.js +233 -0
- package/dist/storage/cache-store.js.map +1 -0
- package/dist/storage/paths.d.ts +5 -0
- package/dist/storage/paths.d.ts.map +1 -0
- package/dist/storage/paths.js +17 -0
- package/dist/storage/paths.js.map +1 -0
- package/dist/storage/token-store.d.ts +39 -0
- package/dist/storage/token-store.d.ts.map +1 -0
- package/dist/storage/token-store.js +177 -0
- package/dist/storage/token-store.js.map +1 -0
- package/dist/storage/vpn-store.d.ts +16 -0
- package/dist/storage/vpn-store.d.ts.map +1 -0
- package/dist/storage/vpn-store.js +72 -0
- package/dist/storage/vpn-store.js.map +1 -0
- package/dist/tui/account-modal.d.ts +31 -0
- package/dist/tui/account-modal.d.ts.map +1 -0
- package/dist/tui/account-modal.js +97 -0
- package/dist/tui/account-modal.js.map +1 -0
- package/dist/tui/ansi.d.ts +20 -0
- package/dist/tui/ansi.d.ts.map +1 -0
- package/dist/tui/ansi.js +28 -0
- package/dist/tui/ansi.js.map +1 -0
- package/dist/tui/app-data.d.ts +22 -0
- package/dist/tui/app-data.d.ts.map +1 -0
- package/dist/tui/app-data.js +828 -0
- package/dist/tui/app-data.js.map +1 -0
- package/dist/tui/app-runtime.d.ts +27 -0
- package/dist/tui/app-runtime.d.ts.map +1 -0
- package/dist/tui/app-runtime.js +874 -0
- package/dist/tui/app-runtime.js.map +1 -0
- package/dist/tui/app.d.ts +2 -0
- package/dist/tui/app.d.ts.map +1 -0
- package/dist/tui/app.js +172 -0
- package/dist/tui/app.js.map +1 -0
- package/dist/tui/cached-client.d.ts +41 -0
- package/dist/tui/cached-client.d.ts.map +1 -0
- package/dist/tui/cached-client.js +78 -0
- package/dist/tui/cached-client.js.map +1 -0
- package/dist/tui/canvas.d.ts +26 -0
- package/dist/tui/canvas.d.ts.map +1 -0
- package/dist/tui/canvas.js +204 -0
- package/dist/tui/canvas.js.map +1 -0
- package/dist/tui/downloads.d.ts +2 -0
- package/dist/tui/downloads.d.ts.map +1 -0
- package/dist/tui/downloads.js +81 -0
- package/dist/tui/downloads.js.map +1 -0
- package/dist/tui/image-preview.d.ts +19 -0
- package/dist/tui/image-preview.d.ts.map +1 -0
- package/dist/tui/image-preview.js +217 -0
- package/dist/tui/image-preview.js.map +1 -0
- package/dist/tui/interactions.d.ts +5 -0
- package/dist/tui/interactions.d.ts.map +1 -0
- package/dist/tui/interactions.js +25 -0
- package/dist/tui/interactions.js.map +1 -0
- package/dist/tui/keymap.d.ts +7 -0
- package/dist/tui/keymap.d.ts.map +1 -0
- package/dist/tui/keymap.js +262 -0
- package/dist/tui/keymap.js.map +1 -0
- package/dist/tui/layout.d.ts +29 -0
- package/dist/tui/layout.d.ts.map +1 -0
- package/dist/tui/layout.js +82 -0
- package/dist/tui/layout.js.map +1 -0
- package/dist/tui/renderer.d.ts +9 -0
- package/dist/tui/renderer.d.ts.map +1 -0
- package/dist/tui/renderer.js +375 -0
- package/dist/tui/renderer.js.map +1 -0
- package/dist/tui/terminal.d.ts +41 -0
- package/dist/tui/terminal.d.ts.map +1 -0
- package/dist/tui/terminal.js +162 -0
- package/dist/tui/terminal.js.map +1 -0
- package/dist/tui/text.d.ts +10 -0
- package/dist/tui/text.d.ts.map +1 -0
- package/dist/tui/text.js +158 -0
- package/dist/tui/text.js.map +1 -0
- package/dist/tui/theme.d.ts +56 -0
- package/dist/tui/theme.d.ts.map +1 -0
- package/dist/tui/theme.js +95 -0
- package/dist/tui/theme.js.map +1 -0
- package/dist/tui/tui-model.d.ts +126 -0
- package/dist/tui/tui-model.d.ts.map +1 -0
- package/dist/tui/tui-model.js +54 -0
- package/dist/tui/tui-model.js.map +1 -0
- package/dist/tui/ubb-renderer.d.ts +12 -0
- package/dist/tui/ubb-renderer.d.ts.map +1 -0
- package/dist/tui/ubb-renderer.js +196 -0
- package/dist/tui/ubb-renderer.js.map +1 -0
- package/dist/update.d.ts +17 -0
- package/dist/update.d.ts.map +1 -0
- package/dist/update.js +88 -0
- package/dist/update.js.map +1 -0
- package/dist/version.d.ts +6 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +6 -0
- package/dist/version.js.map +1 -0
- package/docs/images/tui.png +0 -0
- package/docs/images/tui2.png +0 -0
- package/package.json +43 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../../src/cli/commands/update.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAErE,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,IAAc;IAChD,MAAM,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC;IAE1B,IAAI,UAAU,KAAK,QAAQ,IAAI,UAAU,KAAK,IAAI,IAAI,UAAU,KAAK,MAAM,EAAE,CAAC;QAC5E,eAAe,EAAE,CAAC;QAClB,OAAO;IACT,CAAC;IAED,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CAAC,2BAA2B,UAAU,uCAAuC,CAAC,CAAC;IAChG,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,cAAc,EAAE,CAAC;IACtC,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC;AAC1C,CAAC;AAED,SAAS,eAAe;IACtB,OAAO,CAAC,GAAG,CAAC;;;;;;;CAOb,CAAC,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"user.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/user.ts"],"names":[],"mappings":"AAIA,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAoE/D"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { createCliContext } from "../context.js";
|
|
2
|
+
import { extractAccountOption } from "../options.js";
|
|
3
|
+
import { extractPageOptions, parseIds, parsePositiveInteger, printJson } from "../parse.js";
|
|
4
|
+
export async function userCommand(args) {
|
|
5
|
+
const accountOption = extractAccountOption(args);
|
|
6
|
+
const [subcommand, ...rest] = accountOption.args;
|
|
7
|
+
const { client } = await createCliContext({ account: accountOption.account });
|
|
8
|
+
switch (subcommand) {
|
|
9
|
+
case undefined:
|
|
10
|
+
case "--help":
|
|
11
|
+
case "-h":
|
|
12
|
+
case "help":
|
|
13
|
+
printUserHelp();
|
|
14
|
+
return;
|
|
15
|
+
case "me":
|
|
16
|
+
printJson(await client.getMe());
|
|
17
|
+
return;
|
|
18
|
+
case "profile": {
|
|
19
|
+
const userId = parsePositiveInteger(rest[0], "user-id");
|
|
20
|
+
printJson(await client.getUserProfile(userId));
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
case "basic":
|
|
24
|
+
printJson(await client.getBasicUsers(parseIds(rest)));
|
|
25
|
+
return;
|
|
26
|
+
case "list":
|
|
27
|
+
printJson(await client.getUsers(parseIds(rest)));
|
|
28
|
+
return;
|
|
29
|
+
case "followers": {
|
|
30
|
+
const page = extractPageOptions(rest, { size: 10 });
|
|
31
|
+
printJson(await client.getFriendIds("follower", page.from, page.size));
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
case "followees": {
|
|
35
|
+
const page = extractPageOptions(rest, { size: 10 });
|
|
36
|
+
printJson(await client.getFriendIds("followee", page.from, page.size));
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
case "moment": {
|
|
40
|
+
const page = extractPageOptions(rest, { size: 20 });
|
|
41
|
+
printJson(await client.getMoment(page.from, page.size));
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
case "favorite-updates": {
|
|
45
|
+
const page = extractPageOptions(rest, { size: 20 });
|
|
46
|
+
printJson(await client.getFavoriteUpdates(page.from, page.size));
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
case "favorite-groups":
|
|
50
|
+
printJson(await client.getFavoriteGroups());
|
|
51
|
+
return;
|
|
52
|
+
case "search": {
|
|
53
|
+
const name = rest.join(" ").trim();
|
|
54
|
+
if (!name) {
|
|
55
|
+
throw new Error("usage: cc98 user search <name>");
|
|
56
|
+
}
|
|
57
|
+
printJson(await client.searchUsers(name));
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
case "unread":
|
|
61
|
+
printJson(await client.getUnreadCount());
|
|
62
|
+
return;
|
|
63
|
+
case "browse-history": {
|
|
64
|
+
const page = extractPageOptions(rest, { size: 11 });
|
|
65
|
+
printJson(await client.getBrowseHistory(page.from, page.size));
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
default:
|
|
69
|
+
throw new Error(`unknown user command: ${subcommand}`);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
function printUserHelp() {
|
|
73
|
+
console.log(`cc98 user
|
|
74
|
+
|
|
75
|
+
Usage:
|
|
76
|
+
cc98 user me
|
|
77
|
+
cc98 user profile <user-id>
|
|
78
|
+
cc98 user basic <ids...>
|
|
79
|
+
cc98 user list <ids...>
|
|
80
|
+
cc98 user followers [--from n] [--size n]
|
|
81
|
+
cc98 user followees [--from n] [--size n]
|
|
82
|
+
cc98 user moment [--from n] [--size n]
|
|
83
|
+
cc98 user favorite-updates [--from n] [--size n]
|
|
84
|
+
cc98 user favorite-groups
|
|
85
|
+
cc98 user search <name>
|
|
86
|
+
cc98 user unread
|
|
87
|
+
cc98 user browse-history [--from n] [--size n]
|
|
88
|
+
`);
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=user.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"user.js","sourceRoot":"","sources":["../../../src/cli/commands/user.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,oBAAoB,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE5F,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,MAAM,gBAAgB,CAAC,EAAE,OAAO,EAAE,aAAa,CAAC,OAAO,EAAE,CAAC,CAAC;IAE9E,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,IAAI;YACP,SAAS,CAAC,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;YAChC,OAAO;QACT,KAAK,SAAS,CAAC,CAAC,CAAC;YACf,MAAM,MAAM,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;YACxD,SAAS,CAAC,MAAM,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC;YAC/C,OAAO;QACT,CAAC;QACD,KAAK,OAAO;YACV,SAAS,CAAC,MAAM,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACtD,OAAO;QACT,KAAK,MAAM;YACT,SAAS,CAAC,MAAM,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACjD,OAAO;QACT,KAAK,WAAW,CAAC,CAAC,CAAC;YACjB,MAAM,IAAI,GAAG,kBAAkB,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;YACpD,SAAS,CAAC,MAAM,MAAM,CAAC,YAAY,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YACvE,OAAO;QACT,CAAC;QACD,KAAK,WAAW,CAAC,CAAC,CAAC;YACjB,MAAM,IAAI,GAAG,kBAAkB,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;YACpD,SAAS,CAAC,MAAM,MAAM,CAAC,YAAY,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YACvE,OAAO;QACT,CAAC;QACD,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,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YACxD,OAAO;QACT,CAAC;QACD,KAAK,kBAAkB,CAAC,CAAC,CAAC;YACxB,MAAM,IAAI,GAAG,kBAAkB,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;YACpD,SAAS,CAAC,MAAM,MAAM,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YACjE,OAAO;QACT,CAAC;QACD,KAAK,iBAAiB;YACpB,SAAS,CAAC,MAAM,MAAM,CAAC,iBAAiB,EAAE,CAAC,CAAC;YAC5C,OAAO;QACT,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;YACnC,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;YACpD,CAAC;YACD,SAAS,CAAC,MAAM,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;YAC1C,OAAO;QACT,CAAC;QACD,KAAK,QAAQ;YACX,SAAS,CAAC,MAAM,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC;YACzC,OAAO;QACT,KAAK,gBAAgB,CAAC,CAAC,CAAC;YACtB,MAAM,IAAI,GAAG,kBAAkB,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;YACpD,SAAS,CAAC,MAAM,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YAC/D,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;;;;;;;;;;;;;;;CAeb,CAAC,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vpn.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/vpn.ts"],"names":[],"mappings":"AAIA,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA2B9D"}
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
import { WebVpnService } from "../../api/webvpn.js";
|
|
2
|
+
import { VpnStore } from "../../storage/vpn-store.js";
|
|
3
|
+
import { promptPassword, promptText } from "../prompt.js";
|
|
4
|
+
export async function vpnCommand(args) {
|
|
5
|
+
const [subCommand, ...rest] = args;
|
|
6
|
+
if (!subCommand || subCommand === "--help" || subCommand === "-h") {
|
|
7
|
+
printVpnHelp();
|
|
8
|
+
return;
|
|
9
|
+
}
|
|
10
|
+
switch (subCommand) {
|
|
11
|
+
case "login":
|
|
12
|
+
await vpnLogin(rest);
|
|
13
|
+
return;
|
|
14
|
+
case "logout":
|
|
15
|
+
await vpnLogout();
|
|
16
|
+
return;
|
|
17
|
+
case "status":
|
|
18
|
+
await vpnStatus();
|
|
19
|
+
return;
|
|
20
|
+
case "test":
|
|
21
|
+
await vpnTest();
|
|
22
|
+
return;
|
|
23
|
+
case "mode":
|
|
24
|
+
await vpnMode(rest);
|
|
25
|
+
return;
|
|
26
|
+
default:
|
|
27
|
+
throw new Error(`unknown vpn subcommand: ${subCommand}. Run "cc98 vpn --help" for usage.`);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
async function vpnLogin(args) {
|
|
31
|
+
const store = new VpnStore();
|
|
32
|
+
const config = await store.getConfig();
|
|
33
|
+
let username = args[0] || config.username;
|
|
34
|
+
if (!username) {
|
|
35
|
+
username = await promptText("浙大通行证用户名: ");
|
|
36
|
+
if (!username) {
|
|
37
|
+
console.error("用户名不能为空");
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
let password = args[1];
|
|
42
|
+
if (!password) {
|
|
43
|
+
password = await promptPassword("浙大通行证密码: ");
|
|
44
|
+
if (!password) {
|
|
45
|
+
console.error("密码不能为空");
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
console.log("正在登录 WebVPN...");
|
|
50
|
+
const vpn = new WebVpnService();
|
|
51
|
+
const result = await vpn.login(username, password);
|
|
52
|
+
if (result.needConfirm) {
|
|
53
|
+
console.log("需要确认登录(可能在其他设备已登录)");
|
|
54
|
+
const confirm = await promptText("是否确认登录?(y/N): ");
|
|
55
|
+
if (confirm.toLowerCase() !== "y") {
|
|
56
|
+
console.log("已取消登录");
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
const confirmResult = await vpn.confirmLogin();
|
|
60
|
+
if (!confirmResult.success) {
|
|
61
|
+
console.error("确认登录失败:", confirmResult.message);
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
else if (!result.success) {
|
|
66
|
+
console.error("WebVPN 登录失败:", result.message);
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
console.log("WebVPN 登录成功");
|
|
70
|
+
await store.saveSession(username, vpn.getCookies());
|
|
71
|
+
console.log("\n测试 WebVPN 连接...");
|
|
72
|
+
vpn.enabled = true;
|
|
73
|
+
const testResponse = await vpn.fetch("https://api.cc98.org/config/index");
|
|
74
|
+
if (testResponse.ok) {
|
|
75
|
+
console.log("WebVPN 连接正常");
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
console.error("WebVPN 连接失败:", testResponse.status);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
async function vpnLogout() {
|
|
82
|
+
const store = new VpnStore();
|
|
83
|
+
const config = await store.getConfig();
|
|
84
|
+
if (!config.username) {
|
|
85
|
+
console.log("未配置 WebVPN");
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
const vpn = new WebVpnService(config.cookies);
|
|
89
|
+
await vpn.logout();
|
|
90
|
+
await store.clear();
|
|
91
|
+
console.log("已清除 WebVPN 配置");
|
|
92
|
+
}
|
|
93
|
+
async function vpnStatus() {
|
|
94
|
+
const store = new VpnStore();
|
|
95
|
+
const config = await store.getConfig();
|
|
96
|
+
console.log("WebVPN 状态:");
|
|
97
|
+
console.log(` 模式: ${config.mode}`);
|
|
98
|
+
console.log(` 用户名: ${config.username || "未配置"}`);
|
|
99
|
+
console.log(` 会话: ${config.cookies ? "已保存" : "未登录"}`);
|
|
100
|
+
if (config.loggedInAt) {
|
|
101
|
+
console.log(` 登录时间: ${config.loggedInAt}`);
|
|
102
|
+
}
|
|
103
|
+
if (config.username) {
|
|
104
|
+
console.log("\n测试连接...");
|
|
105
|
+
const vpn = new WebVpnService(config.cookies);
|
|
106
|
+
const inCampus = await vpn.checkNetwork();
|
|
107
|
+
console.log(` 校园网: ${inCampus ? "是" : "否"}`);
|
|
108
|
+
if (!inCampus && config.mode !== "direct") {
|
|
109
|
+
console.log(" 提示: 不在校园网内,WebVPN 将自动启用");
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
async function vpnTest() {
|
|
114
|
+
console.log("测试 WebVPN 连接...\n");
|
|
115
|
+
const vpn = new WebVpnService();
|
|
116
|
+
console.log("1. 检测校园网...");
|
|
117
|
+
const inCampus = await vpn.checkNetwork();
|
|
118
|
+
console.log(` 结果: ${inCampus ? "在校园网内" : "不在校园网内"}`);
|
|
119
|
+
if (inCampus) {
|
|
120
|
+
console.log("\n当前在校园网内,无需使用 WebVPN");
|
|
121
|
+
return;
|
|
122
|
+
}
|
|
123
|
+
console.log("\n2. 测试 WebVPN 访问...");
|
|
124
|
+
vpn.enabled = true;
|
|
125
|
+
const store = new VpnStore();
|
|
126
|
+
const config = await store.getConfig();
|
|
127
|
+
if (config.username && config.cookies) {
|
|
128
|
+
console.log(` 使用账号: ${config.username}`);
|
|
129
|
+
vpn.loadCookies(config.cookies);
|
|
130
|
+
const response = await vpn.fetch("https://api.cc98.org/config/index");
|
|
131
|
+
console.log(` API 访问: ${response.ok ? "成功" : `失败 ${response.status}`}`);
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
134
|
+
if (config.username) {
|
|
135
|
+
console.log(` 已配置账号: ${config.username}`);
|
|
136
|
+
console.log(" 未保存有效会话,请运行 'cc98 vpn login' 重新登录");
|
|
137
|
+
return;
|
|
138
|
+
}
|
|
139
|
+
console.log(" 未配置 WebVPN 账号");
|
|
140
|
+
console.log(" 请运行 'cc98 vpn login' 配置");
|
|
141
|
+
}
|
|
142
|
+
async function vpnMode(args) {
|
|
143
|
+
const store = new VpnStore();
|
|
144
|
+
const mode = args[0];
|
|
145
|
+
if (!mode) {
|
|
146
|
+
const config = await store.getConfig();
|
|
147
|
+
console.log(`当前模式: ${config.mode}`);
|
|
148
|
+
console.log("\n可用模式:");
|
|
149
|
+
console.log(" auto - 自动检测校园网,非校园网自动使用 WebVPN");
|
|
150
|
+
console.log(" vpn - 强制使用 WebVPN");
|
|
151
|
+
console.log(" direct - 强制直连(不使用 WebVPN)");
|
|
152
|
+
console.log("\n用法: cc98 vpn mode <mode>");
|
|
153
|
+
return;
|
|
154
|
+
}
|
|
155
|
+
if (!["auto", "vpn", "direct"].includes(mode)) {
|
|
156
|
+
console.error(`无效的模式: ${mode}`);
|
|
157
|
+
console.error("可用模式: auto, vpn, direct");
|
|
158
|
+
return;
|
|
159
|
+
}
|
|
160
|
+
await store.saveMode(mode);
|
|
161
|
+
console.log(`已设置模式: ${mode}`);
|
|
162
|
+
}
|
|
163
|
+
function printVpnHelp() {
|
|
164
|
+
console.log(`cc98 vpn - WebVPN 管理
|
|
165
|
+
|
|
166
|
+
Usage:
|
|
167
|
+
cc98 vpn login [username] [password] 登录 WebVPN
|
|
168
|
+
cc98 vpn logout 注销 WebVPN
|
|
169
|
+
cc98 vpn status 查看状态
|
|
170
|
+
cc98 vpn test 测试连接
|
|
171
|
+
cc98 vpn mode [auto|vpn|direct] 设置模式
|
|
172
|
+
|
|
173
|
+
Options:
|
|
174
|
+
-h, --help 显示帮助
|
|
175
|
+
`);
|
|
176
|
+
}
|
|
177
|
+
//# sourceMappingURL=vpn.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vpn.js","sourceRoot":"","sources":["../../../src/cli/commands/vpn.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { Cc98Client } from "../api/client.js";
|
|
2
|
+
import { TokenStore } from "../storage/token-store.js";
|
|
3
|
+
export declare function createCliContext(options?: {
|
|
4
|
+
account?: string;
|
|
5
|
+
}): Promise<{
|
|
6
|
+
client: Cc98Client;
|
|
7
|
+
tokenStore: TokenStore;
|
|
8
|
+
}>;
|
|
9
|
+
//# sourceMappingURL=context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/cli/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAG9C,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAEvD,wBAAsB,gBAAgB,CAAC,OAAO,GAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,OAAO,CAAC;IAAE,MAAM,EAAE,UAAU,CAAC;IAAC,UAAU,EAAE,UAAU,CAAA;CAAE,CAAC,CASlI"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { Cc98Client } from "../api/client.js";
|
|
2
|
+
import { VpnStore } from "../storage/vpn-store.js";
|
|
3
|
+
import { TokenStore } from "../storage/token-store.js";
|
|
4
|
+
export async function createCliContext(options = {}) {
|
|
5
|
+
const tokenStore = new TokenStore().withAccount(options.account);
|
|
6
|
+
const vpnConfig = await new VpnStore().getConfig();
|
|
7
|
+
const webVpn = getWebVpnOptions(vpnConfig);
|
|
8
|
+
const client = new Cc98Client({ tokenStore, webVpn });
|
|
9
|
+
if (webVpn) {
|
|
10
|
+
await client.initWebVpn();
|
|
11
|
+
}
|
|
12
|
+
return { client, tokenStore };
|
|
13
|
+
}
|
|
14
|
+
function getWebVpnOptions(config) {
|
|
15
|
+
if (config.mode === "direct") {
|
|
16
|
+
return { mode: "direct" };
|
|
17
|
+
}
|
|
18
|
+
if (config.mode === "vpn" || config.cookies) {
|
|
19
|
+
return {
|
|
20
|
+
mode: config.mode,
|
|
21
|
+
cookies: config.cookies
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
return undefined;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/cli/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAEvD,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,UAAgC,EAAE;IACvE,MAAM,UAAU,GAAG,IAAI,UAAU,EAAE,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACjE,MAAM,SAAS,GAAG,MAAM,IAAI,QAAQ,EAAE,CAAC,SAAS,EAAE,CAAC;IACnD,MAAM,MAAM,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAC;IAC3C,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,CAAC;IACtD,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,MAAM,CAAC,UAAU,EAAE,CAAC;IAC5B,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;AAChC,CAAC;AAED,SAAS,gBAAgB,CAAC,MAAkD;IAC1E,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC7B,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IAC5B,CAAC;IACD,IAAI,MAAM,CAAC,IAAI,KAAK,KAAK,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QAC5C,OAAO;YACL,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,OAAO,EAAE,MAAM,CAAC,OAAO;SACxB,CAAC;IACJ,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../../src/cli/options.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,mBAAmB;IAClC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,mBAAmB,CAwBxE"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export function extractAccountOption(args) {
|
|
2
|
+
const nextArgs = [];
|
|
3
|
+
let account;
|
|
4
|
+
for (let index = 0; index < args.length; index += 1) {
|
|
5
|
+
const arg = args[index];
|
|
6
|
+
if (arg === "--account" || arg === "-a") {
|
|
7
|
+
const value = args[index + 1];
|
|
8
|
+
if (!value) {
|
|
9
|
+
throw new Error(`missing value for ${arg}`);
|
|
10
|
+
}
|
|
11
|
+
account = value;
|
|
12
|
+
index += 1;
|
|
13
|
+
continue;
|
|
14
|
+
}
|
|
15
|
+
nextArgs.push(arg);
|
|
16
|
+
}
|
|
17
|
+
return {
|
|
18
|
+
account,
|
|
19
|
+
args: nextArgs
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=options.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"options.js","sourceRoot":"","sources":["../../src/cli/options.ts"],"names":[],"mappings":"AAKA,MAAM,UAAU,oBAAoB,CAAC,IAAc;IACjD,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,IAAI,OAA2B,CAAC;IAEhC,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACpD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QAExB,IAAI,GAAG,KAAK,WAAW,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YACxC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;YAC9B,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,MAAM,IAAI,KAAK,CAAC,qBAAqB,GAAG,EAAE,CAAC,CAAC;YAC9C,CAAC;YACD,OAAO,GAAG,KAAK,CAAC;YAChB,KAAK,IAAI,CAAC,CAAC;YACX,SAAS;QACX,CAAC;QAED,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACrB,CAAC;IAED,OAAO;QACL,OAAO;QACP,IAAI,EAAE,QAAQ;KACf,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export declare function parseInteger(value: string | undefined, name: string): number;
|
|
2
|
+
export declare function parsePositiveInteger(value: string | undefined, name: string): number;
|
|
3
|
+
export declare function parseNonNegativeInteger(value: string | undefined, name: string): number;
|
|
4
|
+
export declare function parseIds(values: string[], name?: string): number[];
|
|
5
|
+
export interface PageOptions {
|
|
6
|
+
from: number;
|
|
7
|
+
size: number;
|
|
8
|
+
rest: string[];
|
|
9
|
+
}
|
|
10
|
+
export declare function extractPageOptions(args: string[], defaults?: {
|
|
11
|
+
from?: number;
|
|
12
|
+
size?: number;
|
|
13
|
+
}): PageOptions;
|
|
14
|
+
export declare function printJson(value: unknown): void;
|
|
15
|
+
//# sourceMappingURL=parse.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../../src/cli/parse.ts"],"names":[],"mappings":"AAAA,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAM5E;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAMpF;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAMvF;AAED,wBAAgB,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,IAAI,SAAQ,GAAG,MAAM,EAAE,CAWjE;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,QAAQ,GAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,WAAW,CAwB/G;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAE9C"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
export function parseInteger(value, name) {
|
|
2
|
+
const parsed = Number(value);
|
|
3
|
+
if (!Number.isInteger(parsed)) {
|
|
4
|
+
throw new Error(`missing or invalid value for ${name}`);
|
|
5
|
+
}
|
|
6
|
+
return parsed;
|
|
7
|
+
}
|
|
8
|
+
export function parsePositiveInteger(value, name) {
|
|
9
|
+
const parsed = parseInteger(value, name);
|
|
10
|
+
if (parsed <= 0) {
|
|
11
|
+
throw new Error(`missing or invalid value for ${name}`);
|
|
12
|
+
}
|
|
13
|
+
return parsed;
|
|
14
|
+
}
|
|
15
|
+
export function parseNonNegativeInteger(value, name) {
|
|
16
|
+
const parsed = parseInteger(value, name);
|
|
17
|
+
if (parsed < 0) {
|
|
18
|
+
throw new Error(`missing or invalid value for ${name}`);
|
|
19
|
+
}
|
|
20
|
+
return parsed;
|
|
21
|
+
}
|
|
22
|
+
export function parseIds(values, name = "ids") {
|
|
23
|
+
const ids = values.flatMap((value) => value.split(","))
|
|
24
|
+
.map((value) => value.trim())
|
|
25
|
+
.filter(Boolean)
|
|
26
|
+
.map((value) => parsePositiveInteger(value, name));
|
|
27
|
+
if (ids.length === 0) {
|
|
28
|
+
throw new Error(`missing ${name}`);
|
|
29
|
+
}
|
|
30
|
+
return ids;
|
|
31
|
+
}
|
|
32
|
+
export function extractPageOptions(args, defaults = {}) {
|
|
33
|
+
const rest = [];
|
|
34
|
+
let from = defaults.from ?? 0;
|
|
35
|
+
let size = defaults.size ?? 20;
|
|
36
|
+
for (let index = 0; index < args.length; index += 1) {
|
|
37
|
+
const arg = args[index];
|
|
38
|
+
if (arg === "--from") {
|
|
39
|
+
from = parseNonNegativeInteger(args[index + 1], "--from");
|
|
40
|
+
index += 1;
|
|
41
|
+
continue;
|
|
42
|
+
}
|
|
43
|
+
if (arg === "--size") {
|
|
44
|
+
size = parsePositiveInteger(args[index + 1], "--size");
|
|
45
|
+
index += 1;
|
|
46
|
+
continue;
|
|
47
|
+
}
|
|
48
|
+
rest.push(arg);
|
|
49
|
+
}
|
|
50
|
+
return { from, size, rest };
|
|
51
|
+
}
|
|
52
|
+
export function printJson(value) {
|
|
53
|
+
console.log(JSON.stringify(value, null, 2));
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=parse.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse.js","sourceRoot":"","sources":["../../src/cli/parse.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../../src/cli/prompt.ts"],"names":[],"mappings":"AAuBA,wBAAsB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAQ/D;AAED,wBAAsB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAmBnE;AAED,wBAAsB,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC,CAMrD"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { stdin, stdout } from "node:process";
|
|
2
|
+
import { Writable } from "node:stream";
|
|
3
|
+
import { createInterface } from "node:readline/promises";
|
|
4
|
+
class MuteableOutput extends Writable {
|
|
5
|
+
target;
|
|
6
|
+
muted = false;
|
|
7
|
+
constructor(target) {
|
|
8
|
+
super();
|
|
9
|
+
this.target = target;
|
|
10
|
+
}
|
|
11
|
+
_write(chunk, encoding, callback) {
|
|
12
|
+
if (!this.muted) {
|
|
13
|
+
this.target.write(chunk, encoding);
|
|
14
|
+
}
|
|
15
|
+
callback();
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
export async function promptText(label) {
|
|
19
|
+
const rl = createInterface({ input: stdin, output: stdout });
|
|
20
|
+
try {
|
|
21
|
+
return await rl.question(label);
|
|
22
|
+
}
|
|
23
|
+
finally {
|
|
24
|
+
rl.close();
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
export async function promptPassword(label) {
|
|
28
|
+
if (!stdin.isTTY) {
|
|
29
|
+
return promptText(label);
|
|
30
|
+
}
|
|
31
|
+
const output = new MuteableOutput(stdout);
|
|
32
|
+
const rl = createInterface({ input: stdin, output, terminal: true });
|
|
33
|
+
try {
|
|
34
|
+
stdout.write(label);
|
|
35
|
+
output.muted = true;
|
|
36
|
+
const password = await rl.question("");
|
|
37
|
+
output.muted = false;
|
|
38
|
+
stdout.write("\n");
|
|
39
|
+
return password;
|
|
40
|
+
}
|
|
41
|
+
finally {
|
|
42
|
+
output.muted = false;
|
|
43
|
+
rl.close();
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
export async function readStdinText() {
|
|
47
|
+
const chunks = [];
|
|
48
|
+
for await (const chunk of stdin) {
|
|
49
|
+
chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(String(chunk)));
|
|
50
|
+
}
|
|
51
|
+
return Buffer.concat(chunks).toString("utf8");
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=prompt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../src/cli/prompt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAEzD,MAAM,cAAe,SAAQ,QAAQ;IAGN;IAF7B,KAAK,GAAG,KAAK,CAAC;IAEd,YAA6B,MAA0B;QACrD,KAAK,EAAE,CAAC;QADmB,WAAM,GAAN,MAAM,CAAoB;IAEvD,CAAC;IAEQ,MAAM,CACb,KAAsB,EACtB,QAAwB,EACxB,QAAwC;QAExC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YAChB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QACrC,CAAC;QACD,QAAQ,EAAE,CAAC;IACb,CAAC;CACF;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,KAAa;IAC5C,MAAM,EAAE,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAE7D,IAAI,CAAC;QACH,OAAO,MAAM,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAClC,CAAC;YAAS,CAAC;QACT,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,KAAa;IAChD,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACjB,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC;IAC3B,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,cAAc,CAAC,MAAM,CAAC,CAAC;IAC1C,MAAM,EAAE,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IAErE,IAAI,CAAC;QACH,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACpB,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC;QACpB,MAAM,QAAQ,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACvC,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;QACrB,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACnB,OAAO,QAAQ,CAAC;IAClB,CAAC;YAAS,CAAC;QACT,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;QACrB,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa;IACjC,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,KAAK,EAAE,CAAC;QAChC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC3E,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AAChD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../src/cli/router.ts"],"names":[],"mappings":"AAwCA,wBAAsB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAwB1D"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { accountCommand } from "./commands/account.js";
|
|
2
|
+
import { boardCommand } from "./commands/board.js";
|
|
3
|
+
import { cacheCommand } from "./commands/cache.js";
|
|
4
|
+
import { forumCommand } from "./commands/forum.js";
|
|
5
|
+
import { loginCommand } from "./commands/login.js";
|
|
6
|
+
import { logoutCommand } from "./commands/logout.js";
|
|
7
|
+
import { messageCommand } from "./commands/message.js";
|
|
8
|
+
import { meCommand } from "./commands/me.js";
|
|
9
|
+
import { noticeCommand } from "./commands/notice.js";
|
|
10
|
+
import { postCommand } from "./commands/post.js";
|
|
11
|
+
import { extractAccountOption } from "./options.js";
|
|
12
|
+
import { searchCommand } from "./commands/search.js";
|
|
13
|
+
import { topicCommand } from "./commands/topic.js";
|
|
14
|
+
import { updateCommand } from "./commands/update.js";
|
|
15
|
+
import { userCommand } from "./commands/user.js";
|
|
16
|
+
import { vpnCommand } from "./commands/vpn.js";
|
|
17
|
+
import { runTui } from "../tui/app.js";
|
|
18
|
+
import { appName, appVersion } from "../version.js";
|
|
19
|
+
const commands = {
|
|
20
|
+
account: accountCommand,
|
|
21
|
+
board: boardCommand,
|
|
22
|
+
cache: cacheCommand,
|
|
23
|
+
forum: forumCommand,
|
|
24
|
+
login: loginCommand,
|
|
25
|
+
logout: logoutCommand,
|
|
26
|
+
message: messageCommand,
|
|
27
|
+
me: meCommand,
|
|
28
|
+
notice: noticeCommand,
|
|
29
|
+
post: postCommand,
|
|
30
|
+
search: searchCommand,
|
|
31
|
+
topic: topicCommand,
|
|
32
|
+
tui: runTui,
|
|
33
|
+
update: updateCommand,
|
|
34
|
+
user: userCommand,
|
|
35
|
+
vpn: vpnCommand
|
|
36
|
+
};
|
|
37
|
+
export async function runCli(args) {
|
|
38
|
+
const accountOption = extractAccountOption(args);
|
|
39
|
+
const [command, ...rest] = accountOption.args;
|
|
40
|
+
if (!command || command === "--help" || command === "-h" || command === "help") {
|
|
41
|
+
printHelp();
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
if (command === "--version" || command === "-v") {
|
|
45
|
+
console.log(`${appName} ${appVersion}`);
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
const handler = commands[command];
|
|
49
|
+
if (!handler) {
|
|
50
|
+
throw new Error(`unknown command: ${command}. Run "cc98 --help" for usage.`);
|
|
51
|
+
}
|
|
52
|
+
const commandArgs = accountOption.account && command !== "account"
|
|
53
|
+
? [...rest, "--account", accountOption.account]
|
|
54
|
+
: rest;
|
|
55
|
+
await handler(commandArgs);
|
|
56
|
+
}
|
|
57
|
+
function printHelp() {
|
|
58
|
+
console.log(`cc98
|
|
59
|
+
|
|
60
|
+
Usage:
|
|
61
|
+
cc98 Open the TUI
|
|
62
|
+
cc98 tui Open the TUI explicitly
|
|
63
|
+
cc98 login Sign in and save tokens
|
|
64
|
+
cc98 account list List local accounts
|
|
65
|
+
cc98 account use <name> Set current account
|
|
66
|
+
cc98 logout Remove saved tokens
|
|
67
|
+
cc98 me Show current user profile
|
|
68
|
+
cc98 forum index Read forum index config
|
|
69
|
+
cc98 forum boards Read all boards
|
|
70
|
+
cc98 board <board-id> List topics in a board
|
|
71
|
+
cc98 topic <topic-id> Read a topic
|
|
72
|
+
cc98 user profile <id> Read user profile
|
|
73
|
+
cc98 message unread Read unread counts
|
|
74
|
+
cc98 notice system Read system notices
|
|
75
|
+
cc98 post rate-reasons 0 Read post rating reasons
|
|
76
|
+
cc98 search <keyword> Search topics
|
|
77
|
+
cc98 cache stats Show cache statistics
|
|
78
|
+
cc98 cache cleanup Remove expired cache entries
|
|
79
|
+
cc98 cache clear Clear all cache
|
|
80
|
+
cc98 vpn login Login to WebVPN (non-campus network)
|
|
81
|
+
cc98 vpn status Show VPN status
|
|
82
|
+
cc98 update Check the latest GitHub Release
|
|
83
|
+
|
|
84
|
+
Options:
|
|
85
|
+
-a, --account <name> Use this account for supported commands
|
|
86
|
+
-h, --help Show this help
|
|
87
|
+
-v, --version Show version
|
|
88
|
+
`);
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=router.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"router.js","sourceRoot":"","sources":["../../src/cli/router.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAIpD,MAAM,QAAQ,GAAmC;IAC/C,OAAO,EAAE,cAAc;IACvB,KAAK,EAAE,YAAY;IACnB,KAAK,EAAE,YAAY;IACnB,KAAK,EAAE,YAAY;IACnB,KAAK,EAAE,YAAY;IACnB,MAAM,EAAE,aAAa;IACrB,OAAO,EAAE,cAAc;IACvB,EAAE,EAAE,SAAS;IACb,MAAM,EAAE,aAAa;IACrB,IAAI,EAAE,WAAW;IACjB,MAAM,EAAE,aAAa;IACrB,KAAK,EAAE,YAAY;IACnB,GAAG,EAAE,MAAM;IACX,MAAM,EAAE,aAAa;IACrB,IAAI,EAAE,WAAW;IACjB,GAAG,EAAE,UAAU;CAChB,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,IAAc;IACzC,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,SAAS,EAAE,CAAC;QACZ,OAAO;IACT,CAAC;IAED,IAAI,OAAO,KAAK,WAAW,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QAChD,OAAO,CAAC,GAAG,CAAC,GAAG,OAAO,IAAI,UAAU,EAAE,CAAC,CAAC;QACxC,OAAO;IACT,CAAC;IAED,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;IAClC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,oBAAoB,OAAO,gCAAgC,CAAC,CAAC;IAC/E,CAAC;IAED,MAAM,WAAW,GAAG,aAAa,CAAC,OAAO,IAAI,OAAO,KAAK,SAAS;QAChE,CAAC,CAAC,CAAC,GAAG,IAAI,EAAE,WAAW,EAAE,aAAa,CAAC,OAAO,CAAC;QAC/C,CAAC,CAAC,IAAI,CAAC;IAET,MAAM,OAAO,CAAC,WAAW,CAAC,CAAC;AAC7B,CAAC;AAED,SAAS,SAAS;IAChB,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8Bb,CAAC,CAAC;AACH,CAAC"}
|