@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":"endpoints.js","sourceRoot":"","sources":["../../src/api/endpoints.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
export interface AuthToken {
|
|
2
|
+
access_token?: string;
|
|
3
|
+
refresh_token?: string;
|
|
4
|
+
error?: string;
|
|
5
|
+
error_description?: string;
|
|
6
|
+
}
|
|
7
|
+
export interface WebVpnOptions {
|
|
8
|
+
mode?: "auto" | "vpn" | "direct";
|
|
9
|
+
cookies?: Record<string, string>;
|
|
10
|
+
credentials?: {
|
|
11
|
+
username: string;
|
|
12
|
+
password: string;
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
export interface ClientOptions {
|
|
16
|
+
tokenStore: {
|
|
17
|
+
getAccessToken(): Promise<string | undefined>;
|
|
18
|
+
getRefreshToken(): Promise<string | undefined>;
|
|
19
|
+
getCurrentAccount?(): Promise<{
|
|
20
|
+
account: string;
|
|
21
|
+
refreshToken?: string;
|
|
22
|
+
} | undefined>;
|
|
23
|
+
save(tokens: {
|
|
24
|
+
accessToken: string;
|
|
25
|
+
refreshToken?: string;
|
|
26
|
+
}): Promise<void>;
|
|
27
|
+
saveAccount?(account: string, tokens: {
|
|
28
|
+
accessToken: string;
|
|
29
|
+
refreshToken?: string;
|
|
30
|
+
}): Promise<unknown>;
|
|
31
|
+
};
|
|
32
|
+
webVpn?: WebVpnOptions;
|
|
33
|
+
}
|
|
34
|
+
export type JsonObject = Record<string, unknown>;
|
|
35
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/api/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,SAAS;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,QAAQ,CAAC;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,WAAW,CAAC,EAAE;QACZ,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;CACH;AAED,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE;QACV,cAAc,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;QAC9C,eAAe,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;QAC/C,iBAAiB,CAAC,IAAI,OAAO,CAAC;YAAE,OAAO,EAAE,MAAM,CAAC;YAAC,YAAY,CAAC,EAAE,MAAM,CAAA;SAAE,GAAG,SAAS,CAAC,CAAC;QACtF,IAAI,CAAC,MAAM,EAAE;YAAE,WAAW,EAAE,MAAM,CAAC;YAAC,YAAY,CAAC,EAAE,MAAM,CAAA;SAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QAC5E,WAAW,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE;YAAE,WAAW,EAAE,MAAM,CAAC;YAAC,YAAY,CAAC,EAAE,MAAM,CAAA;SAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;KACzG,CAAC;IACF,MAAM,CAAC,EAAE,aAAa,CAAC;CACxB;AAED,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/api/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
export interface WebVpnLoginResult {
|
|
2
|
+
success: boolean;
|
|
3
|
+
message?: string;
|
|
4
|
+
needCaptcha?: boolean;
|
|
5
|
+
needConfirm?: boolean;
|
|
6
|
+
captchaId?: string;
|
|
7
|
+
}
|
|
8
|
+
export interface WebVpnStatus {
|
|
9
|
+
enabled: boolean;
|
|
10
|
+
loggedIn: boolean;
|
|
11
|
+
inCampusNetwork?: boolean;
|
|
12
|
+
}
|
|
13
|
+
export declare class WebVpnService {
|
|
14
|
+
private cookies;
|
|
15
|
+
private loggedIn;
|
|
16
|
+
private webVpnEnabled;
|
|
17
|
+
constructor(cookies?: Record<string, string>);
|
|
18
|
+
get isLoggedIn(): boolean;
|
|
19
|
+
get isEnabled(): boolean;
|
|
20
|
+
set enabled(value: boolean);
|
|
21
|
+
loadCookies(cookies: Record<string, string>): void;
|
|
22
|
+
getCookies(): Record<string, string>;
|
|
23
|
+
checkNetwork(): Promise<boolean>;
|
|
24
|
+
login(username: string, password: string): Promise<WebVpnLoginResult>;
|
|
25
|
+
confirmLogin(): Promise<WebVpnLoginResult>;
|
|
26
|
+
logout(): Promise<void>;
|
|
27
|
+
convertUrl(url: string): string;
|
|
28
|
+
fetch(url: string, options?: RequestInit): Promise<Response>;
|
|
29
|
+
getStatus(): WebVpnStatus;
|
|
30
|
+
private fetchWithRedirects;
|
|
31
|
+
private getHeaders;
|
|
32
|
+
private updateCookies;
|
|
33
|
+
private get userAgent();
|
|
34
|
+
private get;
|
|
35
|
+
private post;
|
|
36
|
+
private parseLoginPage;
|
|
37
|
+
private aesEncrypt;
|
|
38
|
+
private buildPassword;
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=webvpn.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webvpn.d.ts","sourceRoot":"","sources":["../../src/api/webvpn.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,OAAO,CAAkC;IACjD,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,aAAa,CAAS;gBAElB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAM5C,IAAI,UAAU,IAAI,OAAO,CAExB;IAED,IAAI,SAAS,IAAI,OAAO,CAEvB;IAED,IAAI,OAAO,CAAC,KAAK,EAAE,OAAO,EAEzB;IAED,WAAW,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI;IAUlD,UAAU,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAI9B,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC;IAchC,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAmDrE,YAAY,IAAI,OAAO,CAAC,iBAAiB,CAAC;IAgB1C,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAU7B,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAmBzB,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,QAAQ,CAAC;IAItE,SAAS,IAAI,YAAY;YAOX,kBAAkB;IA8BhC,OAAO,CAAC,UAAU;IAelB,OAAO,CAAC,aAAa;IAoBrB,OAAO,KAAK,SAAS,GAEpB;IAED,OAAO,CAAC,GAAG;IAIX,OAAO,CAAC,IAAI;IAQZ,OAAO,CAAC,cAAc;IAStB,OAAO,CAAC,UAAU;IAclB,OAAO,CAAC,aAAa;CAMtB"}
|
|
@@ -0,0 +1,259 @@
|
|
|
1
|
+
import { createCipheriv } from "node:crypto";
|
|
2
|
+
const WEBVPN_BASE = "https://webvpn.zju.edu.cn";
|
|
3
|
+
const MIRROR_URL = "https://mirrors.zju.edu.cn/api/is_campus_network";
|
|
4
|
+
const URL_KEY = "wrdvpnisthebest!";
|
|
5
|
+
const PWD_KEY = "wrdvpnisawesome!";
|
|
6
|
+
export class WebVpnService {
|
|
7
|
+
cookies = new Map();
|
|
8
|
+
loggedIn = false;
|
|
9
|
+
webVpnEnabled = false;
|
|
10
|
+
constructor(cookies) {
|
|
11
|
+
if (cookies) {
|
|
12
|
+
this.loadCookies(cookies);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
get isLoggedIn() {
|
|
16
|
+
return this.loggedIn;
|
|
17
|
+
}
|
|
18
|
+
get isEnabled() {
|
|
19
|
+
return this.webVpnEnabled;
|
|
20
|
+
}
|
|
21
|
+
set enabled(value) {
|
|
22
|
+
this.webVpnEnabled = value;
|
|
23
|
+
}
|
|
24
|
+
loadCookies(cookies) {
|
|
25
|
+
this.cookies.clear();
|
|
26
|
+
for (const [name, value] of Object.entries(cookies)) {
|
|
27
|
+
if (name && value) {
|
|
28
|
+
this.cookies.set(name, value);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
this.loggedIn = this.cookies.size > 0;
|
|
32
|
+
}
|
|
33
|
+
getCookies() {
|
|
34
|
+
return Object.fromEntries(this.cookies.entries());
|
|
35
|
+
}
|
|
36
|
+
async checkNetwork() {
|
|
37
|
+
try {
|
|
38
|
+
const response = await fetch(MIRROR_URL, {
|
|
39
|
+
headers: {
|
|
40
|
+
"User-Agent": this.userAgent
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
const text = await response.text();
|
|
44
|
+
return text === "1" || text === "2";
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
return false;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
async login(username, password) {
|
|
51
|
+
try {
|
|
52
|
+
const loginPage = await this.get(`${WEBVPN_BASE}/login`);
|
|
53
|
+
const html = await loginPage.text();
|
|
54
|
+
const { csrf, captchaId } = this.parseLoginPage(html);
|
|
55
|
+
if (!csrf) {
|
|
56
|
+
return { success: false, message: "获取 CSRF token 失败" };
|
|
57
|
+
}
|
|
58
|
+
const encryptedPassword = this.buildPassword(PWD_KEY, password);
|
|
59
|
+
const formData = new URLSearchParams({
|
|
60
|
+
_csrf: csrf,
|
|
61
|
+
auth_type: "local",
|
|
62
|
+
sms_code: "",
|
|
63
|
+
captcha: "",
|
|
64
|
+
needCaptcha: "false",
|
|
65
|
+
captcha_id: captchaId || "",
|
|
66
|
+
username,
|
|
67
|
+
password: encryptedPassword
|
|
68
|
+
});
|
|
69
|
+
const loginResponse = await this.post(`${WEBVPN_BASE}/do-login`, formData.toString(), {
|
|
70
|
+
"Content-Type": "application/x-www-form-urlencoded"
|
|
71
|
+
});
|
|
72
|
+
const result = await loginResponse.json();
|
|
73
|
+
if (result.success) {
|
|
74
|
+
this.loggedIn = true;
|
|
75
|
+
return { success: true };
|
|
76
|
+
}
|
|
77
|
+
if (result.error === "NEED_CONFIRM") {
|
|
78
|
+
return { success: false, needConfirm: true, message: "需要确认登录" };
|
|
79
|
+
}
|
|
80
|
+
if (result.error === "CAPTCHA_FAILED") {
|
|
81
|
+
return {
|
|
82
|
+
success: false,
|
|
83
|
+
needCaptcha: true,
|
|
84
|
+
captchaId: String(result.description || ""),
|
|
85
|
+
message: "需要验证码"
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
return { success: false, message: String(result.message || result.error || "登录失败") };
|
|
89
|
+
}
|
|
90
|
+
catch (error) {
|
|
91
|
+
return { success: false, message: error instanceof Error ? error.message : "登录出错" };
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
async confirmLogin() {
|
|
95
|
+
try {
|
|
96
|
+
const response = await this.post(`${WEBVPN_BASE}/do-confirm-login`, "");
|
|
97
|
+
const result = await response.json();
|
|
98
|
+
if (result.success) {
|
|
99
|
+
this.loggedIn = true;
|
|
100
|
+
return { success: true };
|
|
101
|
+
}
|
|
102
|
+
return { success: false, message: String(result.error || "确认失败") };
|
|
103
|
+
}
|
|
104
|
+
catch (error) {
|
|
105
|
+
return { success: false, message: error instanceof Error ? error.message : "确认出错" };
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
async logout() {
|
|
109
|
+
try {
|
|
110
|
+
await this.get(`${WEBVPN_BASE}/logout`);
|
|
111
|
+
this.loggedIn = false;
|
|
112
|
+
this.cookies.clear();
|
|
113
|
+
}
|
|
114
|
+
catch {
|
|
115
|
+
// Ignore logout failures.
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
convertUrl(url) {
|
|
119
|
+
const uri = new URL(url);
|
|
120
|
+
if (uri.origin === WEBVPN_BASE) {
|
|
121
|
+
return url;
|
|
122
|
+
}
|
|
123
|
+
const scheme = uri.protocol.slice(0, -1);
|
|
124
|
+
const host = uri.hostname;
|
|
125
|
+
const port = uri.port ? parseInt(uri.port, 10) : 0;
|
|
126
|
+
const isSpecialPort = port > 0 &&
|
|
127
|
+
!(scheme === "http" && port === 80) &&
|
|
128
|
+
!(scheme === "https" && port === 443);
|
|
129
|
+
const property = isSpecialPort ? `${scheme}-${port}` : scheme;
|
|
130
|
+
const encryptedHost = this.buildPassword(URL_KEY, host);
|
|
131
|
+
const path = [property, encryptedHost].map((segment) => encodeURIComponent(segment)).join("/");
|
|
132
|
+
return `${WEBVPN_BASE}/${path}${uri.pathname}${uri.search}`;
|
|
133
|
+
}
|
|
134
|
+
async fetch(url, options = {}) {
|
|
135
|
+
return this.fetchWithRedirects(url, options, 0);
|
|
136
|
+
}
|
|
137
|
+
getStatus() {
|
|
138
|
+
return {
|
|
139
|
+
enabled: this.enabled,
|
|
140
|
+
loggedIn: this.loggedIn
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
async fetchWithRedirects(url, options, redirectCount) {
|
|
144
|
+
if (redirectCount > 10) {
|
|
145
|
+
throw new Error("too many WebVPN redirects");
|
|
146
|
+
}
|
|
147
|
+
const targetUrl = this.webVpnEnabled ? this.convertUrl(url) : url;
|
|
148
|
+
const headers = new Headers(this.getHeaders());
|
|
149
|
+
for (const [name, value] of new Headers(options.headers).entries()) {
|
|
150
|
+
headers.set(name, value);
|
|
151
|
+
}
|
|
152
|
+
const response = await fetch(targetUrl, {
|
|
153
|
+
...options,
|
|
154
|
+
headers,
|
|
155
|
+
redirect: "manual"
|
|
156
|
+
});
|
|
157
|
+
if (response.status >= 300 && response.status < 400) {
|
|
158
|
+
const location = response.headers.get("location");
|
|
159
|
+
if (location) {
|
|
160
|
+
this.updateCookies(response);
|
|
161
|
+
const nextUrl = new URL(location, response.url || targetUrl).toString();
|
|
162
|
+
return this.fetchWithRedirects(nextUrl, redirectOptions(options, response.status), redirectCount + 1);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
this.updateCookies(response);
|
|
166
|
+
return response;
|
|
167
|
+
}
|
|
168
|
+
getHeaders() {
|
|
169
|
+
const headers = {
|
|
170
|
+
"User-Agent": this.userAgent,
|
|
171
|
+
Referer: WEBVPN_BASE
|
|
172
|
+
};
|
|
173
|
+
if (this.cookies.size > 0) {
|
|
174
|
+
headers.Cookie = Array.from(this.cookies.entries())
|
|
175
|
+
.map(([key, value]) => `${key}=${value}`)
|
|
176
|
+
.join("; ");
|
|
177
|
+
}
|
|
178
|
+
return headers;
|
|
179
|
+
}
|
|
180
|
+
updateCookies(response) {
|
|
181
|
+
const headers = response.headers;
|
|
182
|
+
const setCookies = headers.getSetCookie?.() || splitSetCookieHeader(headers.get("set-cookie"));
|
|
183
|
+
for (const cookie of setCookies) {
|
|
184
|
+
const [nameValue] = cookie.split(";");
|
|
185
|
+
if (!nameValue) {
|
|
186
|
+
continue;
|
|
187
|
+
}
|
|
188
|
+
const separator = nameValue.indexOf("=");
|
|
189
|
+
if (separator < 1) {
|
|
190
|
+
continue;
|
|
191
|
+
}
|
|
192
|
+
const name = nameValue.slice(0, separator).trim();
|
|
193
|
+
const value = nameValue.slice(separator + 1).trim();
|
|
194
|
+
if (name && value) {
|
|
195
|
+
this.cookies.set(name, value);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
get userAgent() {
|
|
200
|
+
return "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36";
|
|
201
|
+
}
|
|
202
|
+
get(url) {
|
|
203
|
+
return this.fetch(url, { method: "GET" });
|
|
204
|
+
}
|
|
205
|
+
post(url, body, headers) {
|
|
206
|
+
return this.fetch(url, {
|
|
207
|
+
method: "POST",
|
|
208
|
+
body,
|
|
209
|
+
headers: headers || {}
|
|
210
|
+
});
|
|
211
|
+
}
|
|
212
|
+
parseLoginPage(html) {
|
|
213
|
+
const csrfMatch = html.match(/name="_csrf"[^>]*value="([^"]+)"/);
|
|
214
|
+
const captchaMatch = html.match(/name="captcha_id"[^>]*value="([^"]+)"/);
|
|
215
|
+
return {
|
|
216
|
+
csrf: csrfMatch?.[1] || "",
|
|
217
|
+
captchaId: captchaMatch?.[1] || ""
|
|
218
|
+
};
|
|
219
|
+
}
|
|
220
|
+
aesEncrypt(plaintext, key, iv) {
|
|
221
|
+
const keyBuffer = Buffer.from(key.padEnd(16, " ").slice(0, 16));
|
|
222
|
+
const ivBuffer = Buffer.from(iv.padEnd(16, " ").slice(0, 16));
|
|
223
|
+
const plainBytes = Buffer.from(plaintext, "utf8");
|
|
224
|
+
const padLen = 16 - (plainBytes.length % 16);
|
|
225
|
+
const padded = padLen === 16 ? plainBytes : Buffer.concat([plainBytes, Buffer.alloc(padLen)]);
|
|
226
|
+
const cipher = createCipheriv("aes-128-cfb", keyBuffer, ivBuffer);
|
|
227
|
+
cipher.setAutoPadding(false);
|
|
228
|
+
const encrypted = Buffer.concat([cipher.update(padded), cipher.final()]);
|
|
229
|
+
return encrypted.toString("hex").toLowerCase();
|
|
230
|
+
}
|
|
231
|
+
buildPassword(prefix, plaintext) {
|
|
232
|
+
const prefixHex = Buffer.from(prefix, "ascii").toString("hex");
|
|
233
|
+
const fullEncrypted = this.aesEncrypt(plaintext, prefix, prefix);
|
|
234
|
+
const sliceLength = 2 * plaintext.length;
|
|
235
|
+
return prefixHex + fullEncrypted.slice(0, Math.min(fullEncrypted.length, sliceLength));
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
function splitSetCookieHeader(value) {
|
|
239
|
+
if (!value) {
|
|
240
|
+
return [];
|
|
241
|
+
}
|
|
242
|
+
return value.split(/,(?=\s*[^;,=\s]+=[^;,]*)/);
|
|
243
|
+
}
|
|
244
|
+
function redirectOptions(options, status) {
|
|
245
|
+
const method = options.method?.toUpperCase();
|
|
246
|
+
if ((status === 301 || status === 302 || status === 303) && method && method !== "GET" && method !== "HEAD") {
|
|
247
|
+
const headers = new Headers(options.headers);
|
|
248
|
+
headers.delete("content-type");
|
|
249
|
+
headers.delete("content-length");
|
|
250
|
+
return {
|
|
251
|
+
...options,
|
|
252
|
+
method: "GET",
|
|
253
|
+
body: undefined,
|
|
254
|
+
headers
|
|
255
|
+
};
|
|
256
|
+
}
|
|
257
|
+
return options;
|
|
258
|
+
}
|
|
259
|
+
//# sourceMappingURL=webvpn.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webvpn.js","sourceRoot":"","sources":["../../src/api/webvpn.ts"],"names":[],"mappings":"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"}
|
|
@@ -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 @@
|
|
|
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 } = await 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 @@
|
|
|
1
|
+
{"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/cache.ts"],"names":[],"mappings":"AAEA,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAsDhE"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { CacheStore } from "../../storage/cache-store.js";
|
|
2
|
+
export async function cacheCommand(args) {
|
|
3
|
+
const [subcommand, ...rest] = args;
|
|
4
|
+
switch (subcommand) {
|
|
5
|
+
case undefined:
|
|
6
|
+
case "--help":
|
|
7
|
+
case "-h":
|
|
8
|
+
case "help":
|
|
9
|
+
printCacheHelp();
|
|
10
|
+
return;
|
|
11
|
+
case "stats": {
|
|
12
|
+
const cache = new CacheStore();
|
|
13
|
+
const stats = await cache.getStats();
|
|
14
|
+
console.log(JSON.stringify(stats, null, 2));
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
case "cleanup": {
|
|
18
|
+
const cache = new CacheStore();
|
|
19
|
+
const result = await cache.cleanupFileCache();
|
|
20
|
+
console.log(JSON.stringify({
|
|
21
|
+
action: "cleanup",
|
|
22
|
+
removed: result.removed,
|
|
23
|
+
kept: result.kept
|
|
24
|
+
}, null, 2));
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
case "clear": {
|
|
28
|
+
const target = rest[0] ?? "all";
|
|
29
|
+
const cache = new CacheStore();
|
|
30
|
+
switch (target) {
|
|
31
|
+
case "all":
|
|
32
|
+
await cache.clearAll();
|
|
33
|
+
console.log(JSON.stringify({ action: "clear", target: "all" }, null, 2));
|
|
34
|
+
return;
|
|
35
|
+
case "memory":
|
|
36
|
+
cache.clearMemory();
|
|
37
|
+
console.log(JSON.stringify({ action: "clear", target: "memory" }, null, 2));
|
|
38
|
+
return;
|
|
39
|
+
case "file":
|
|
40
|
+
await cache.clearFileCache();
|
|
41
|
+
console.log(JSON.stringify({ action: "clear", target: "file" }, null, 2));
|
|
42
|
+
return;
|
|
43
|
+
default:
|
|
44
|
+
throw new Error(`unknown cache clear target: ${target}. Use "all", "memory", or "file".`);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
default:
|
|
48
|
+
throw new Error(`unknown cache command: ${subcommand}. Run "cc98 cache --help" for usage.`);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
function printCacheHelp() {
|
|
52
|
+
console.log(`cc98 cache
|
|
53
|
+
|
|
54
|
+
Usage:
|
|
55
|
+
cc98 cache stats Show cache statistics
|
|
56
|
+
cc98 cache cleanup Remove expired cache entries
|
|
57
|
+
cc98 cache clear [target] Clear cache (default: all)
|
|
58
|
+
|
|
59
|
+
Clear targets:
|
|
60
|
+
all Clear both memory and file cache
|
|
61
|
+
memory Clear memory cache only
|
|
62
|
+
file Clear file cache only
|
|
63
|
+
|
|
64
|
+
Options:
|
|
65
|
+
-h, --help Show this help
|
|
66
|
+
`);
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=cache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../../../src/cli/commands/cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAE1D,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,IAAc;IAC/C,MAAM,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;IAEnC,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;QAET,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,MAAM,KAAK,GAAG,IAAI,UAAU,EAAE,CAAC;YAC/B,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,QAAQ,EAAE,CAAC;YACrC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAC5C,OAAO;QACT,CAAC;QAED,KAAK,SAAS,CAAC,CAAC,CAAC;YACf,MAAM,KAAK,GAAG,IAAI,UAAU,EAAE,CAAC;YAC/B,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,gBAAgB,EAAE,CAAC;YAC9C,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;gBACzB,MAAM,EAAE,SAAS;gBACjB,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,IAAI,EAAE,MAAM,CAAC,IAAI;aAClB,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YACb,OAAO;QACT,CAAC;QAED,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC;YAChC,MAAM,KAAK,GAAG,IAAI,UAAU,EAAE,CAAC;YAE/B,QAAQ,MAAM,EAAE,CAAC;gBACf,KAAK,KAAK;oBACR,MAAM,KAAK,CAAC,QAAQ,EAAE,CAAC;oBACvB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;oBACzE,OAAO;gBACT,KAAK,QAAQ;oBACX,KAAK,CAAC,WAAW,EAAE,CAAC;oBACpB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;oBAC5E,OAAO;gBACT,KAAK,MAAM;oBACT,MAAM,KAAK,CAAC,cAAc,EAAE,CAAC;oBAC7B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;oBAC1E,OAAO;gBACT;oBACE,MAAM,IAAI,KAAK,CAAC,+BAA+B,MAAM,mCAAmC,CAAC,CAAC;YAC9F,CAAC;QACH,CAAC;QAED;YACE,MAAM,IAAI,KAAK,CAAC,0BAA0B,UAAU,sCAAsC,CAAC,CAAC;IAChG,CAAC;AACH,CAAC;AAED,SAAS,cAAc;IACrB,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;CAcb,CAAC,CAAC;AACH,CAAC"}
|
|
@@ -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"}
|