@wirecat/tg-cli 0.0.0 → 0.43.1
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 +204 -0
- package/README.md +527 -0
- package/THIRD_PARTY_NOTICES +55 -0
- package/dist/app.d.ts +11 -0
- package/dist/app.d.ts.map +1 -0
- package/dist/app.js +16 -0
- package/dist/app.js.map +1 -0
- package/dist/bin/tg.d.ts +3 -0
- package/dist/bin/tg.d.ts.map +1 -0
- package/dist/bin/tg.js +18 -0
- package/dist/bin/tg.js.map +1 -0
- package/dist/bot/adapter.d.ts +9 -0
- package/dist/bot/adapter.d.ts.map +1 -0
- package/dist/bot/adapter.js +171 -0
- package/dist/bot/adapter.js.map +1 -0
- package/dist/bot/generated/definitions.d.ts +3 -0
- package/dist/bot/generated/definitions.d.ts.map +1 -0
- package/dist/bot/generated/definitions.js +19104 -0
- package/dist/bot/generated/definitions.js.map +1 -0
- package/dist/bot/generated/manifest.d.ts +3 -0
- package/dist/bot/generated/manifest.d.ts.map +1 -0
- package/dist/bot/generated/manifest.js +15354 -0
- package/dist/bot/generated/manifest.js.map +1 -0
- package/dist/bot/generated/schemas.d.ts +1407 -0
- package/dist/bot/generated/schemas.d.ts.map +1 -0
- package/dist/bot/generated/schemas.js +5118 -0
- package/dist/bot/generated/schemas.js.map +1 -0
- package/dist/bot/generated/types.d.ts +6884 -0
- package/dist/bot/generated/types.d.ts.map +1 -0
- package/dist/bot/generated/types.js +5 -0
- package/dist/bot/generated/types.js.map +1 -0
- package/dist/bot/map.d.ts +122 -0
- package/dist/bot/map.d.ts.map +1 -0
- package/dist/bot/map.js +193 -0
- package/dist/bot/map.js.map +1 -0
- package/dist/bot/proxy.d.ts +15 -0
- package/dist/bot/proxy.d.ts.map +1 -0
- package/dist/bot/proxy.js +64 -0
- package/dist/bot/proxy.js.map +1 -0
- package/dist/bot/transport.d.ts +42 -0
- package/dist/bot/transport.d.ts.map +1 -0
- package/dist/bot/transport.js +158 -0
- package/dist/bot/transport.js.map +1 -0
- package/dist/browser.d.ts +6 -0
- package/dist/browser.d.ts.map +1 -0
- package/dist/browser.js +18 -0
- package/dist/browser.js.map +1 -0
- package/dist/commands/bot-api.d.ts +3 -0
- package/dist/commands/bot-api.d.ts.map +1 -0
- package/dist/commands/bot-api.js +112 -0
- package/dist/commands/bot-api.js.map +1 -0
- package/dist/commands/bot.d.ts +7 -0
- package/dist/commands/bot.d.ts.map +1 -0
- package/dist/commands/bot.js +99 -0
- package/dist/commands/bot.js.map +1 -0
- package/dist/commands/context.d.ts +59 -0
- package/dist/commands/context.d.ts.map +1 -0
- package/dist/commands/context.js +176 -0
- package/dist/commands/context.js.map +1 -0
- package/dist/commands/proxy-config.d.ts +9 -0
- package/dist/commands/proxy-config.d.ts.map +1 -0
- package/dist/commands/proxy-config.js +63 -0
- package/dist/commands/proxy-config.js.map +1 -0
- package/dist/commands/session.d.ts +22 -0
- package/dist/commands/session.d.ts.map +1 -0
- package/dist/commands/session.js +191 -0
- package/dist/commands/session.js.map +1 -0
- package/dist/commands/setup.d.ts +3 -0
- package/dist/commands/setup.d.ts.map +1 -0
- package/dist/commands/setup.js +203 -0
- package/dist/commands/setup.js.map +1 -0
- package/dist/commands/update.d.ts +2 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +35 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/install/postinstall.d.ts +8 -0
- package/dist/install/postinstall.d.ts.map +1 -0
- package/dist/install/postinstall.js +62 -0
- package/dist/install/postinstall.js.map +1 -0
- package/dist/paths.d.ts +9 -0
- package/dist/paths.d.ts.map +1 -0
- package/dist/paths.js +11 -0
- package/dist/paths.js.map +1 -0
- package/dist/program.d.ts +8 -0
- package/dist/program.d.ts.map +1 -0
- package/dist/program.js +138 -0
- package/dist/program.js.map +1 -0
- package/dist/proxy.d.ts +31 -0
- package/dist/proxy.d.ts.map +1 -0
- package/dist/proxy.js +99 -0
- package/dist/proxy.js.map +1 -0
- package/dist/telegram/adapter.d.ts +432 -0
- package/dist/telegram/adapter.d.ts.map +1 -0
- package/dist/telegram/adapter.js +1898 -0
- package/dist/telegram/adapter.js.map +1 -0
- package/dist/telegram/bot-history.d.ts +18 -0
- package/dist/telegram/bot-history.d.ts.map +1 -0
- package/dist/telegram/bot-history.js +145 -0
- package/dist/telegram/bot-history.js.map +1 -0
- package/dist/telegram/comments.d.ts +18 -0
- package/dist/telegram/comments.d.ts.map +1 -0
- package/dist/telegram/comments.js +48 -0
- package/dist/telegram/comments.js.map +1 -0
- package/dist/telegram/credentials.d.ts +22 -0
- package/dist/telegram/credentials.d.ts.map +1 -0
- package/dist/telegram/credentials.js +49 -0
- package/dist/telegram/credentials.js.map +1 -0
- package/dist/telegram/errors.d.ts +6 -0
- package/dist/telegram/errors.d.ts.map +1 -0
- package/dist/telegram/errors.js +186 -0
- package/dist/telegram/errors.js.map +1 -0
- package/dist/telegram/folder-rules.d.ts +14 -0
- package/dist/telegram/folder-rules.d.ts.map +1 -0
- package/dist/telegram/folder-rules.js +23 -0
- package/dist/telegram/folder-rules.js.map +1 -0
- package/dist/telegram/format-html.d.ts +4 -0
- package/dist/telegram/format-html.d.ts.map +1 -0
- package/dist/telegram/format-html.js +29 -0
- package/dist/telegram/format-html.js.map +1 -0
- package/dist/telegram/format-markdown.d.ts +3 -0
- package/dist/telegram/format-markdown.d.ts.map +1 -0
- package/dist/telegram/format-markdown.js +160 -0
- package/dist/telegram/format-markdown.js.map +1 -0
- package/dist/telegram/join-requests.d.ts +15 -0
- package/dist/telegram/join-requests.d.ts.map +1 -0
- package/dist/telegram/join-requests.js +35 -0
- package/dist/telegram/join-requests.js.map +1 -0
- package/dist/telegram/map.d.ts +92 -0
- package/dist/telegram/map.d.ts.map +1 -0
- package/dist/telegram/map.js +471 -0
- package/dist/telegram/map.js.map +1 -0
- package/dist/telegram/poll-voters.d.ts +15 -0
- package/dist/telegram/poll-voters.d.ts.map +1 -0
- package/dist/telegram/poll-voters.js +31 -0
- package/dist/telegram/poll-voters.js.map +1 -0
- package/dist/telegram/polls.d.ts +5 -0
- package/dist/telegram/polls.d.ts.map +1 -0
- package/dist/telegram/polls.js +20 -0
- package/dist/telegram/polls.js.map +1 -0
- package/dist/telegram/profile.d.ts +9 -0
- package/dist/telegram/profile.d.ts.map +1 -0
- package/dist/telegram/profile.js +175 -0
- package/dist/telegram/profile.js.map +1 -0
- package/dist/telegram/proxy.d.ts +48 -0
- package/dist/telegram/proxy.d.ts.map +1 -0
- package/dist/telegram/proxy.js +108 -0
- package/dist/telegram/proxy.js.map +1 -0
- package/dist/telegram/registration.d.ts +31 -0
- package/dist/telegram/registration.d.ts.map +1 -0
- package/dist/telegram/registration.js +95 -0
- package/dist/telegram/registration.js.map +1 -0
- package/dist/telegram/send-as.d.ts +17 -0
- package/dist/telegram/send-as.d.ts.map +1 -0
- package/dist/telegram/send-as.js +67 -0
- package/dist/telegram/send-as.js.map +1 -0
- package/dist/telegram/stats.d.ts +13 -0
- package/dist/telegram/stats.d.ts.map +1 -0
- package/dist/telegram/stats.js +135 -0
- package/dist/telegram/stats.js.map +1 -0
- package/dist/telegram/storage.d.ts +4 -0
- package/dist/telegram/storage.d.ts.map +1 -0
- package/dist/telegram/storage.js +68 -0
- package/dist/telegram/storage.js.map +1 -0
- package/dist/telegram/upload.d.ts +9 -0
- package/dist/telegram/upload.d.ts.map +1 -0
- package/dist/telegram/upload.js +29 -0
- package/dist/telegram/upload.js.map +1 -0
- package/dist/update.d.ts +28 -0
- package/dist/update.d.ts.map +1 -0
- package/dist/update.js +56 -0
- package/dist/update.js.map +1 -0
- package/dist/version.d.ts +2 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +2 -0
- package/dist/version.js.map +1 -0
- package/install/postinstall.mjs +3 -0
- package/install/windows.ps1 +161 -0
- package/package.json +72 -3
- package/skills/tg-cli/SKILL.md +489 -0
- package/spec/bot/LICENSE +21 -0
- package/spec/bot/README.md +16 -0
package/dist/program.js
ADDED
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import { appendFileSync } from "node:fs";
|
|
2
|
+
import { exitCodeFor, processStreams } from "@wirecat/cli-core";
|
|
3
|
+
import { accountCommand, attachmentsCommand, botCommand, chatsCommand, commandsCommand, completeCommand, configCommand, contactsCommand, conversationsCommand, createProgram as create, doctorCommand, floodCommand, inboxCommand, mcpCommand, messagesCommand, metadataCommand, modelsCommand, pollsCommand, reactionsCommand, recipientsCommand, repliesCommand, reviewCommand, run as runCli, runsCommand, searchCommand, searchesCommand, sendsCommand, serveCommand, serverCommand, skillCommand, statsCommand, storeCommand, tagsCommand, tasksCommand, topicsCommand, watchCommand, } from "@wirecat/cli-messaging/cli";
|
|
4
|
+
import { CONFIG, TG } from "./app.js";
|
|
5
|
+
import { TELEGRAM_BOT } from "./commands/bot.js";
|
|
6
|
+
import { telegramBotApiCommand } from "./commands/bot-api.js";
|
|
7
|
+
import { SKILL, TELEGRAM } from "./commands/context.js";
|
|
8
|
+
import { withProxySecrets } from "./commands/proxy-config.js";
|
|
9
|
+
import { sessionCommand } from "./commands/session.js";
|
|
10
|
+
import { setupCommand } from "./commands/setup.js";
|
|
11
|
+
import { upgradeCommand } from "./commands/update.js";
|
|
12
|
+
import { updateNotice } from "./update.js";
|
|
13
|
+
/** A revoked or missing login fails the same on every retry; serve reports a locked keyring with another code. */
|
|
14
|
+
export const NO_RESTART_ON = [exitCodeFor("authentication_error")];
|
|
15
|
+
const definition = {
|
|
16
|
+
app: TG,
|
|
17
|
+
configuration: CONFIG,
|
|
18
|
+
configure: (program) => {
|
|
19
|
+
program.addHelpText("after", "\nGetting started after installation:\n" +
|
|
20
|
+
" tg setup Guided first run; allow about 5 minutes\n" +
|
|
21
|
+
" tg setup --agent codex Log in and install your agent's skill\n" +
|
|
22
|
+
" tg setup --help Login choices, examples and Windows instructions\n" +
|
|
23
|
+
"\nFor agents:\n" +
|
|
24
|
+
" tg skill show Read the bundled instructions before using Telegram\n" +
|
|
25
|
+
" tg commands --json Discover commands, arguments and flags\n" +
|
|
26
|
+
"\nSetup checks five chats. Choose a chat before downloading its history.\n");
|
|
27
|
+
program.commands
|
|
28
|
+
.find((command) => command.name() === "skill")
|
|
29
|
+
?.addHelpText("after", "\nBefore the first login, an agent can read `tg skill show`; no session is needed.\n" +
|
|
30
|
+
"Run `tg setup --agent codex` for guided login and skill installation.\n" +
|
|
31
|
+
"To install instructions separately: `tg skill install --for all`.\n");
|
|
32
|
+
const contacts = program.commands.find((command) => command.name() === "contacts");
|
|
33
|
+
const check = contacts?.commands.find((command) => command.name() === "check");
|
|
34
|
+
const registries = check?.options.find((option) => option.long === "--no-registries");
|
|
35
|
+
if (registries)
|
|
36
|
+
registries.description = "skip public ban lists; still ask Telegram for the profile and photos unless --offline";
|
|
37
|
+
contacts?.commands
|
|
38
|
+
.find((command) => command.name() === "context")
|
|
39
|
+
?.description("what the local store holds about a person; --chat --refresh explicitly asks Telegram first");
|
|
40
|
+
const audit = program.commands
|
|
41
|
+
.find((command) => command.name() === "chats")
|
|
42
|
+
?.commands.find((command) => command.name() === "members")
|
|
43
|
+
?.commands.find((command) => command.name() === "audit");
|
|
44
|
+
audit?.description("members that look like bots, each with its reasons, from the member list and local store; " +
|
|
45
|
+
"--deep checks selected people individually; removes nobody");
|
|
46
|
+
const deep = audit?.options.find((option) => option.long === "--deep");
|
|
47
|
+
if (deep)
|
|
48
|
+
deep.description =
|
|
49
|
+
"also check the top n profiles, oldest photos, up to 1,000 stored messages each and public ban lists, " +
|
|
50
|
+
"which are sent their ids — one person a second";
|
|
51
|
+
},
|
|
52
|
+
commands: () => loggingArgv([
|
|
53
|
+
sessionCommand(),
|
|
54
|
+
setupCommand(),
|
|
55
|
+
accountCommand(TELEGRAM),
|
|
56
|
+
chatsCommand(TELEGRAM),
|
|
57
|
+
contactsCommand(TELEGRAM),
|
|
58
|
+
messagesCommand(TELEGRAM),
|
|
59
|
+
reactionsCommand(TELEGRAM),
|
|
60
|
+
pollsCommand(TELEGRAM),
|
|
61
|
+
modelsCommand(TELEGRAM),
|
|
62
|
+
inboxCommand(TELEGRAM),
|
|
63
|
+
reviewCommand(TELEGRAM),
|
|
64
|
+
topicsCommand(TELEGRAM),
|
|
65
|
+
watchCommand(TELEGRAM),
|
|
66
|
+
serveCommand(TELEGRAM),
|
|
67
|
+
serverCommand(TELEGRAM, { unit: { noRestartOn: NO_RESTART_ON } }),
|
|
68
|
+
storeCommand(TELEGRAM),
|
|
69
|
+
conversationsCommand(TELEGRAM),
|
|
70
|
+
attachmentsCommand(TELEGRAM),
|
|
71
|
+
tagsCommand(TELEGRAM),
|
|
72
|
+
metadataCommand(TELEGRAM),
|
|
73
|
+
statsCommand(TELEGRAM),
|
|
74
|
+
tasksCommand(TELEGRAM),
|
|
75
|
+
searchCommand(TELEGRAM, { topics: true }),
|
|
76
|
+
searchesCommand(TELEGRAM),
|
|
77
|
+
floodCommand(TELEGRAM),
|
|
78
|
+
repliesCommand(TELEGRAM),
|
|
79
|
+
recipientsCommand(TELEGRAM),
|
|
80
|
+
sendsCommand(TELEGRAM),
|
|
81
|
+
runsCommand(TG),
|
|
82
|
+
withProxySecrets(configCommand(TG, CONFIG)),
|
|
83
|
+
doctorCommand(TELEGRAM),
|
|
84
|
+
commandsCommand(TG),
|
|
85
|
+
completeCommand(TELEGRAM, CONFIG),
|
|
86
|
+
upgradeCommand(),
|
|
87
|
+
mcpCommand(TELEGRAM),
|
|
88
|
+
botCommand(TELEGRAM_BOT).addCommand(telegramBotApiCommand()),
|
|
89
|
+
skillCommand(TG, SKILL),
|
|
90
|
+
]),
|
|
91
|
+
};
|
|
92
|
+
export const createProgram = () => create(definition);
|
|
93
|
+
/** Never throws: every outcome is an exit code, and a failure is said once, on stderr. */
|
|
94
|
+
export const run = async (argv, environment = {}) => {
|
|
95
|
+
const notice = updateNotice(argv, {
|
|
96
|
+
...(environment.tty === undefined ? {} : { tty: environment.tty }),
|
|
97
|
+
...(environment.update ? { environment: environment.update } : {}),
|
|
98
|
+
...(environment.env ? { env: environment.env } : {}),
|
|
99
|
+
});
|
|
100
|
+
const code = await runCli(argv, definition, environment);
|
|
101
|
+
const line = await notice;
|
|
102
|
+
const argvLog = process.env.TG_TEST_ARGV_LOG;
|
|
103
|
+
// --version ends before any action, so the preAction hook never sees it.
|
|
104
|
+
if (argvLog && code === 0 && argv.some((word) => word === "--version" || word === "-V"))
|
|
105
|
+
appendFileSync(argvLog, `${JSON.stringify({ command: "", options: ["--version"] })}\n`);
|
|
106
|
+
if (line && code === 0)
|
|
107
|
+
(environment.streams ?? processStreams).diagnostic(line);
|
|
108
|
+
return code;
|
|
109
|
+
};
|
|
110
|
+
/**
|
|
111
|
+
* Under vitest only: which command a test drove and the option names it gave, never a value
|
|
112
|
+
* (`pnpm test:matrix`). The hook sits on each top-level command because the root program is built
|
|
113
|
+
* inside cli-messaging; commander runs an ancestor's preAction hook for every subcommand.
|
|
114
|
+
*/
|
|
115
|
+
function loggingArgv(commands) {
|
|
116
|
+
const file = process.env.TG_TEST_ARGV_LOG;
|
|
117
|
+
if (file)
|
|
118
|
+
for (const command of commands)
|
|
119
|
+
command.hook("preAction", (_self, action) => logParsed(file, action));
|
|
120
|
+
return commands;
|
|
121
|
+
}
|
|
122
|
+
const logParsed = (file, action) => {
|
|
123
|
+
const words = [];
|
|
124
|
+
const options = [];
|
|
125
|
+
for (let at = action; at; at = at.parent) {
|
|
126
|
+
if (at.parent)
|
|
127
|
+
words.unshift(at.name());
|
|
128
|
+
for (const option of at.options) {
|
|
129
|
+
const key = option.attributeName();
|
|
130
|
+
if (at.getOptionValueSource(key) !== "cli" || !option.long)
|
|
131
|
+
continue;
|
|
132
|
+
if (option.negate === (at.getOptionValue(key) === false))
|
|
133
|
+
options.push(option.long);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
appendFileSync(file, `${JSON.stringify({ command: words.join(" "), options })}\n`);
|
|
137
|
+
};
|
|
138
|
+
//# sourceMappingURL=program.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"program.js","sourceRoot":"","sources":["../src/program.ts"],"names":[],"mappings":"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"}
|
package/dist/proxy.d.ts
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { CliError } from "@wirecat/cli-core";
|
|
2
|
+
import * as v from "valibot";
|
|
3
|
+
export type ProxyKind = "socks5" | "http" | "mtproxy";
|
|
4
|
+
export interface ProxyServer {
|
|
5
|
+
kind: ProxyKind;
|
|
6
|
+
host: string;
|
|
7
|
+
port: number;
|
|
8
|
+
/** `https://`: the connection to the proxy itself is TLS. */
|
|
9
|
+
tls: boolean;
|
|
10
|
+
user?: string;
|
|
11
|
+
/** The proxy password, or the MTProxy secret. Never printed, never in the configuration file. */
|
|
12
|
+
secret?: string;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* A proxy URL as tg reads it. ⚠ Every error names only where the value came from: the value can
|
|
16
|
+
* hold a password, and an error is printed, kept in a run record and pasted into issues.
|
|
17
|
+
*/
|
|
18
|
+
export declare const parseProxy: (text: string, from: string) => ProxyServer;
|
|
19
|
+
/** The proxy with its password or secret left out: what the configuration file keeps and what tg prints. */
|
|
20
|
+
export declare const proxyLabel: (proxy: ProxyServer) => string;
|
|
21
|
+
/** Scheme, host and port only — for an HTTP agent, which takes the credentials apart from the address. */
|
|
22
|
+
export declare const proxyAddress: (proxy: ProxyServer) => string;
|
|
23
|
+
/** A proxy that refused or could not be reached — `configuration_error`, so it never reads as Telegram being down. */
|
|
24
|
+
export declare const proxyError: (proxy: ProxyServer, reason: string) => CliError;
|
|
25
|
+
/**
|
|
26
|
+
* The `proxy` setting. It holds no secret, as no setting does: `tg config set proxy` moves the
|
|
27
|
+
* password or the MTProxy secret to the OS keyring before the file is written, so this refuses only
|
|
28
|
+
* a file edited by hand.
|
|
29
|
+
*/
|
|
30
|
+
export declare const proxySetting: v.SchemaWithPipe<readonly [v.StringSchema<"has to be a proxy URL, in quotes">, v.CheckAction<string, "has to be socks5://host:port, http://host:port, https://host:port or an MTProxy link (tg://proxy?server=…), without its password or secret — `tg config set proxy -` keeps those in the OS keyring">]>;
|
|
31
|
+
//# sourceMappingURL=proxy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"proxy.d.ts","sourceRoot":"","sources":["../src/proxy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAC5C,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAE5B,MAAM,MAAM,SAAS,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,CAAA;AAErD,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,SAAS,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,6DAA6D;IAC7D,GAAG,EAAE,OAAO,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,iGAAiG;IACjG,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAKD;;;GAGG;AACH,eAAO,MAAM,UAAU,SAAU,MAAM,QAAQ,MAAM,KAAG,WAiCvD,CAAA;AA6BD,4GAA4G;AAC5G,eAAO,MAAM,UAAU,UAAW,WAAW,KAAG,MAI/C,CAAA;AAED,0GAA0G;AAC1G,eAAO,MAAM,YAAY,UAAW,WAAW,KAAG,MAIjD,CAAA;AAED,sHAAsH;AACtH,eAAO,MAAM,UAAU,UAAW,WAAW,UAAU,MAAM,KAAG,QAK7D,CAAA;AAEH;;;;GAIG;AACH,eAAO,MAAM,YAAY,8SASxB,CAAA"}
|
package/dist/proxy.js
ADDED
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { CliError } from "@wirecat/cli-core";
|
|
2
|
+
import * as v from "valibot";
|
|
3
|
+
const SHAPES = "socks5://host:port, http://host:port, https://host:port or an MTProxy link (tg://proxy?server=…)";
|
|
4
|
+
const TELEGRAM_HOSTS = new Set(["t.me", "telegram.me", "telegram.dog"]);
|
|
5
|
+
/**
|
|
6
|
+
* A proxy URL as tg reads it. ⚠ Every error names only where the value came from: the value can
|
|
7
|
+
* hold a password, and an error is printed, kept in a run record and pasted into issues.
|
|
8
|
+
*/
|
|
9
|
+
export const parseProxy = (text, from) => {
|
|
10
|
+
const fail = (why) => {
|
|
11
|
+
throw new CliError("configuration_error", `${from} ${why} — it takes ${SHAPES}`);
|
|
12
|
+
};
|
|
13
|
+
let url;
|
|
14
|
+
try {
|
|
15
|
+
url = new URL(text.trim());
|
|
16
|
+
}
|
|
17
|
+
catch {
|
|
18
|
+
return fail("is not a URL");
|
|
19
|
+
}
|
|
20
|
+
const link = telegramLink(url);
|
|
21
|
+
if (link)
|
|
22
|
+
return fromLink(link.kind, url.searchParams, fail);
|
|
23
|
+
const port = (fallback) => {
|
|
24
|
+
const number = url.port === "" ? fallback : Number(url.port);
|
|
25
|
+
return number >= 1 && number <= 65_535 ? number : fail("has no valid port");
|
|
26
|
+
};
|
|
27
|
+
if (url.hostname === "")
|
|
28
|
+
fail("names no host");
|
|
29
|
+
const credentials = {
|
|
30
|
+
...(url.username ? { user: decodeURIComponent(url.username) } : {}),
|
|
31
|
+
...(url.password ? { secret: decodeURIComponent(url.password) } : {}),
|
|
32
|
+
};
|
|
33
|
+
const host = url.hostname.replace(/^\[(.*)\]$/, "$1");
|
|
34
|
+
switch (url.protocol) {
|
|
35
|
+
case "socks5:":
|
|
36
|
+
case "socks5h:":
|
|
37
|
+
return { kind: "socks5", host, port: port(1080), tls: false, ...credentials };
|
|
38
|
+
case "http:":
|
|
39
|
+
return { kind: "http", host, port: port(80), tls: false, ...credentials };
|
|
40
|
+
case "https:":
|
|
41
|
+
return { kind: "http", host, port: port(443), tls: true, ...credentials };
|
|
42
|
+
default:
|
|
43
|
+
return fail(`uses ${url.protocol.replace(/:$/, "")}, which tg does not speak`);
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
/** Telegram's own share links: `tg://proxy?…`, `tg://socks?…` and their `https://t.me/…` forms. */
|
|
47
|
+
const telegramLink = (url) => {
|
|
48
|
+
const path = url.protocol === "tg:"
|
|
49
|
+
? (url.hostname || url.pathname.replace(/^\/+/, "")).toLowerCase()
|
|
50
|
+
: (url.protocol === "https:" || url.protocol === "http:") && TELEGRAM_HOSTS.has(url.hostname.toLowerCase())
|
|
51
|
+
? url.pathname.replace(/^\/+|\/+$/g, "").toLowerCase()
|
|
52
|
+
: undefined;
|
|
53
|
+
return path === "proxy" || path === "socks" ? { kind: path } : undefined;
|
|
54
|
+
};
|
|
55
|
+
const fromLink = (kind, query, fail) => {
|
|
56
|
+
const host = query.get("server") ?? fail("has no server");
|
|
57
|
+
const port = Number(query.get("port"));
|
|
58
|
+
if (!Number.isInteger(port) || port < 1 || port > 65_535)
|
|
59
|
+
fail("has no valid port");
|
|
60
|
+
const secret = query.get(kind === "proxy" ? "secret" : "pass") ?? undefined;
|
|
61
|
+
const user = kind === "socks" ? (query.get("user") ?? undefined) : undefined;
|
|
62
|
+
return {
|
|
63
|
+
kind: kind === "proxy" ? "mtproxy" : "socks5",
|
|
64
|
+
host,
|
|
65
|
+
port,
|
|
66
|
+
tls: false,
|
|
67
|
+
...(user ? { user } : {}),
|
|
68
|
+
...(secret ? { secret } : {}),
|
|
69
|
+
};
|
|
70
|
+
};
|
|
71
|
+
/** The proxy with its password or secret left out: what the configuration file keeps and what tg prints. */
|
|
72
|
+
export const proxyLabel = (proxy) => {
|
|
73
|
+
if (proxy.kind === "mtproxy")
|
|
74
|
+
return `tg://proxy?server=${encodeURIComponent(proxy.host)}&port=${proxy.port}`;
|
|
75
|
+
const user = proxy.user === undefined ? "" : `${encodeURIComponent(proxy.user)}@`;
|
|
76
|
+
return proxyAddress(proxy).replace("://", `://${user}`);
|
|
77
|
+
};
|
|
78
|
+
/** Scheme, host and port only — for an HTTP agent, which takes the credentials apart from the address. */
|
|
79
|
+
export const proxyAddress = (proxy) => {
|
|
80
|
+
const host = proxy.host.includes(":") ? `[${proxy.host}]` : proxy.host;
|
|
81
|
+
const scheme = proxy.kind === "socks5" ? "socks5" : proxy.tls ? "https" : "http";
|
|
82
|
+
return `${scheme}://${host}:${proxy.port}`;
|
|
83
|
+
};
|
|
84
|
+
/** A proxy that refused or could not be reached — `configuration_error`, so it never reads as Telegram being down. */
|
|
85
|
+
export const proxyError = (proxy, reason) => new CliError("configuration_error", `the proxy ${proxyLabel(proxy)} ${reason} — check it, or change it with \`tg config set proxy\` or TG_PROXY`, { proxy: proxyLabel(proxy), retryable: true });
|
|
86
|
+
/**
|
|
87
|
+
* The `proxy` setting. It holds no secret, as no setting does: `tg config set proxy` moves the
|
|
88
|
+
* password or the MTProxy secret to the OS keyring before the file is written, so this refuses only
|
|
89
|
+
* a file edited by hand.
|
|
90
|
+
*/
|
|
91
|
+
export const proxySetting = v.pipe(v.string("has to be a proxy URL, in quotes"), v.check((text) => {
|
|
92
|
+
try {
|
|
93
|
+
return parseProxy(text, "proxy").secret === undefined;
|
|
94
|
+
}
|
|
95
|
+
catch {
|
|
96
|
+
return false;
|
|
97
|
+
}
|
|
98
|
+
}, `has to be ${SHAPES}, without its password or secret — \`tg config set proxy -\` keeps those in the OS keyring`));
|
|
99
|
+
//# sourceMappingURL=proxy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"proxy.js","sourceRoot":"","sources":["../src/proxy.ts"],"names":[],"mappings":"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"}
|