@wirecat/tg-cli 0.0.0 → 0.43.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 +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 +71 -2
- package/skills/tg-cli/SKILL.md +489 -0
- package/spec/bot/LICENSE +21 -0
- package/spec/bot/README.md +16 -0
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { getBasicPeerType, getMarkedPeerId, PeersIndex, tl } from "@mtcute/node";
|
|
2
|
+
import { CliError } from "@wirecat/cli-core";
|
|
3
|
+
/**
|
|
4
|
+
* Reads only. `messages.saveDefaultSendAs` would change the chat's saved choice for every client of
|
|
5
|
+
* the account, so the choice is made per send instead.
|
|
6
|
+
*/
|
|
7
|
+
export const sendAsIdentities = async (client, chatId) => {
|
|
8
|
+
const me = await client.getMe();
|
|
9
|
+
const self = { id: String(me.id), title: me.displayName, kind: "self", premiumRequired: false };
|
|
10
|
+
const alone = [{ ...self, default: true }];
|
|
11
|
+
if (getBasicPeerType(Number(chatId)) !== "channel")
|
|
12
|
+
return alone;
|
|
13
|
+
const { full } = await client.getFullChat(Number(chatId));
|
|
14
|
+
if (full._ !== "channelFull")
|
|
15
|
+
return alone;
|
|
16
|
+
const chosen = full.defaultSendAs ? String(getMarkedPeerId(full.defaultSendAs)) : self.id;
|
|
17
|
+
let answer;
|
|
18
|
+
try {
|
|
19
|
+
answer = await client.call({ _: "channels.getSendAs", peer: await client.resolvePeer(Number(chatId)) });
|
|
20
|
+
}
|
|
21
|
+
catch (error) {
|
|
22
|
+
// Measured 2026-10-04: a private supergroup the account is in answers PEER_ID_INVALID — no send-as there.
|
|
23
|
+
if (tl.RpcError.is(error, "PEER_ID_INVALID"))
|
|
24
|
+
return alone;
|
|
25
|
+
throw error;
|
|
26
|
+
}
|
|
27
|
+
const index = PeersIndex.from(answer);
|
|
28
|
+
const others = answer.peers.flatMap(({ peer, premiumRequired }) => {
|
|
29
|
+
const found = index.has(peer) ? index.get(peer) : undefined;
|
|
30
|
+
if (found?._ !== "channel")
|
|
31
|
+
return [];
|
|
32
|
+
return [
|
|
33
|
+
{
|
|
34
|
+
id: String(getMarkedPeerId(peer)),
|
|
35
|
+
title: found.title,
|
|
36
|
+
kind: found.broadcast ? "channel" : "group",
|
|
37
|
+
premiumRequired: premiumRequired === true,
|
|
38
|
+
},
|
|
39
|
+
];
|
|
40
|
+
});
|
|
41
|
+
return [self, ...others].map((one) => ({ ...one, default: one.id === chosen }));
|
|
42
|
+
};
|
|
43
|
+
/**
|
|
44
|
+
* The group's saved default sender, when it is not the account: Telegram posts as it when a send names none
|
|
45
|
+
* (measured 2026-10-07: a comment went out as the linked channel). One request, a supergroup only.
|
|
46
|
+
*/
|
|
47
|
+
export const savedSenderOf = async (client, chatId, self) => {
|
|
48
|
+
if (getBasicPeerType(Number(chatId)) !== "channel")
|
|
49
|
+
return null;
|
|
50
|
+
const { full } = await client.getFullChat(Number(chatId));
|
|
51
|
+
if (full._ !== "channelFull" || !full.defaultSendAs)
|
|
52
|
+
return null;
|
|
53
|
+
const saved = String(getMarkedPeerId(full.defaultSendAs));
|
|
54
|
+
return saved === self ? null : saved;
|
|
55
|
+
};
|
|
56
|
+
/** Telegram takes `send_as` in channels and supergroups only; elsewhere the account is the one author. */
|
|
57
|
+
export const sendAsPeer = (chatId, sendAs, self) => {
|
|
58
|
+
if (!/^-?\d{1,16}$/.test(sendAs) || !Number.isSafeInteger(Number(sendAs))) {
|
|
59
|
+
throw new CliError("validation_error", "--send-as takes an id from `tg chats send-as`");
|
|
60
|
+
}
|
|
61
|
+
if (getBasicPeerType(Number(chatId)) === "channel")
|
|
62
|
+
return Number(sendAs);
|
|
63
|
+
if (sendAs === self)
|
|
64
|
+
return undefined;
|
|
65
|
+
throw new CliError("validation_error", "only a supergroup offers identities other than the account");
|
|
66
|
+
};
|
|
67
|
+
//# sourceMappingURL=send-as.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"send-as.js","sourceRoot":"","sources":["../../src/telegram/send-as.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { tl } from "@mtcute/node";
|
|
2
|
+
import type { OfficialChannelStats, OfficialGraph, OfficialGraphError, OfficialGroupStats } from "@wirecat/cli-messaging";
|
|
3
|
+
export type GraphOf = (graph: tl.TypeStatsGraph) => Promise<OfficialGraph | OfficialGraphError>;
|
|
4
|
+
/** `statsGraph.json.data` as series; the label at the head of each column is not a value. */
|
|
5
|
+
export declare const toOfficialGraph: (data: string) => OfficialGraph | OfficialGraphError;
|
|
6
|
+
type Chat = {
|
|
7
|
+
id: string;
|
|
8
|
+
title: string;
|
|
9
|
+
};
|
|
10
|
+
export declare const toOfficialGroupStats: (chat: Chat, stats: tl.stats.RawMegagroupStats, graphOf: GraphOf) => Promise<OfficialGroupStats>;
|
|
11
|
+
export declare const toOfficialChannelStats: (chat: Chat, stats: tl.stats.RawBroadcastStats, graphOf: GraphOf) => Promise<OfficialChannelStats>;
|
|
12
|
+
export {};
|
|
13
|
+
//# sourceMappingURL=stats.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stats.d.ts","sourceRoot":"","sources":["../../src/telegram/stats.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,cAAc,CAAA;AACtC,OAAO,KAAK,EACV,oBAAoB,EACpB,aAAa,EACb,kBAAkB,EAClB,kBAAkB,EAGnB,MAAM,wBAAwB,CAAA;AAE/B,MAAM,MAAM,OAAO,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,cAAc,KAAK,OAAO,CAAC,aAAa,GAAG,kBAAkB,CAAC,CAAA;AAuB/F,6FAA6F;AAC7F,eAAO,MAAM,eAAe,SAAU,MAAM,KAAG,aAAa,GAAG,kBAyB9D,CAAA;AAyBD,KAAK,IAAI,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAA;AAEzC,eAAO,MAAM,oBAAoB,SACzB,IAAI,SACH,EAAE,CAAC,KAAK,CAAC,iBAAiB,WACxB,OAAO,KACf,OAAO,CAAC,kBAAkB,CA0C5B,CAAA;AAED,eAAO,MAAM,sBAAsB,SAC3B,IAAI,SACH,EAAE,CAAC,KAAK,CAAC,iBAAiB,WACxB,OAAO,KACf,OAAO,CAAC,oBAAoB,CAuC7B,CAAA"}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
const DAY_MS = 86_400_000;
|
|
2
|
+
/** Unix milliseconds start in 1973; anything smaller is an hour, a weekday or a count. */
|
|
3
|
+
const MS_FROM = 1e11;
|
|
4
|
+
const axisOf = (values) => {
|
|
5
|
+
if (values.length === 0 || values.some((value) => value < MS_FROM))
|
|
6
|
+
return { type: "number", values };
|
|
7
|
+
const days = values.every((value) => value % DAY_MS === 0);
|
|
8
|
+
return days
|
|
9
|
+
? { type: "date", values: values.map((value) => new Date(value).toISOString().slice(0, 10)) }
|
|
10
|
+
: { type: "time", values: values.map((value) => new Date(value).toISOString()) };
|
|
11
|
+
};
|
|
12
|
+
/** `statsGraph.json.data` as series; the label at the head of each column is not a value. */
|
|
13
|
+
export const toOfficialGraph = (data) => {
|
|
14
|
+
let chart;
|
|
15
|
+
try {
|
|
16
|
+
chart = JSON.parse(data);
|
|
17
|
+
}
|
|
18
|
+
catch {
|
|
19
|
+
return { error: "Telegram sent a graph tg cannot read" };
|
|
20
|
+
}
|
|
21
|
+
if (!Array.isArray(chart?.columns) || typeof chart.types !== "object")
|
|
22
|
+
return { error: "Telegram sent a graph tg cannot read" };
|
|
23
|
+
const x = chart.columns.find(([key]) => chart.types[key] === "x");
|
|
24
|
+
const series = chart.columns
|
|
25
|
+
.filter(([key]) => chart.types[key] !== "x")
|
|
26
|
+
.map(([key, ...values]) => ({
|
|
27
|
+
key,
|
|
28
|
+
name: chart.names?.[key] ?? key,
|
|
29
|
+
kind: chart.types[key] ?? "line",
|
|
30
|
+
values,
|
|
31
|
+
}));
|
|
32
|
+
return {
|
|
33
|
+
kind: series[0]?.kind ?? "line",
|
|
34
|
+
x: axisOf(x ? x.slice(1).map(Number) : []),
|
|
35
|
+
series,
|
|
36
|
+
...(chart.stacked ? { stacked: true } : {}),
|
|
37
|
+
...(chart.percentage ? { percentage: true } : {}),
|
|
38
|
+
};
|
|
39
|
+
};
|
|
40
|
+
const value = ({ current, previous }) => ({ current, previous });
|
|
41
|
+
const period = ({ minDate, maxDate }) => ({
|
|
42
|
+
since: new Date(minDate * 1000).toISOString(),
|
|
43
|
+
until: new Date(maxDate * 1000).toISOString(),
|
|
44
|
+
});
|
|
45
|
+
const graphs = async (keys, graphOf) => {
|
|
46
|
+
const answered = {};
|
|
47
|
+
// One after another: each asynchronous graph is a request of its own to the statistics server.
|
|
48
|
+
for (const [key, graph] of Object.entries(keys))
|
|
49
|
+
answered[key] = await graphOf(graph);
|
|
50
|
+
return answered;
|
|
51
|
+
};
|
|
52
|
+
const nameOf = (user) => {
|
|
53
|
+
if (user?._ !== "user")
|
|
54
|
+
return null;
|
|
55
|
+
const full = [user.firstName, user.lastName].filter(Boolean).join(" ");
|
|
56
|
+
return full || user.username || null;
|
|
57
|
+
};
|
|
58
|
+
export const toOfficialGroupStats = async (chat, stats, graphOf) => {
|
|
59
|
+
const users = new Map(stats.users.map((user) => [user.id, user]));
|
|
60
|
+
const person = (userId) => ({ person: String(userId), name: nameOf(users.get(userId)) });
|
|
61
|
+
return {
|
|
62
|
+
version: 1,
|
|
63
|
+
kind: "group",
|
|
64
|
+
chat,
|
|
65
|
+
period: period(stats.period),
|
|
66
|
+
totals: {
|
|
67
|
+
members: value(stats.members),
|
|
68
|
+
messages: value(stats.messages),
|
|
69
|
+
viewers: value(stats.viewers),
|
|
70
|
+
posters: value(stats.posters),
|
|
71
|
+
},
|
|
72
|
+
top: {
|
|
73
|
+
posters: stats.topPosters.map((one) => ({
|
|
74
|
+
...person(one.userId),
|
|
75
|
+
messages: one.messages,
|
|
76
|
+
averageChars: one.avgChars,
|
|
77
|
+
})),
|
|
78
|
+
admins: stats.topAdmins.map((one) => ({
|
|
79
|
+
...person(one.userId),
|
|
80
|
+
deleted: one.deleted,
|
|
81
|
+
removed: one.kicked,
|
|
82
|
+
banned: one.banned,
|
|
83
|
+
})),
|
|
84
|
+
inviters: stats.topInviters.map((one) => ({ ...person(one.userId), invited: one.invitations })),
|
|
85
|
+
},
|
|
86
|
+
graphs: await graphs({
|
|
87
|
+
growth: stats.growthGraph,
|
|
88
|
+
members: stats.membersGraph,
|
|
89
|
+
newMembersBySource: stats.newMembersBySourceGraph,
|
|
90
|
+
languages: stats.languagesGraph,
|
|
91
|
+
messages: stats.messagesGraph,
|
|
92
|
+
actions: stats.actionsGraph,
|
|
93
|
+
hours: stats.topHoursGraph,
|
|
94
|
+
weekdays: stats.weekdaysGraph,
|
|
95
|
+
}, graphOf),
|
|
96
|
+
};
|
|
97
|
+
};
|
|
98
|
+
export const toOfficialChannelStats = async (chat, stats, graphOf) => ({
|
|
99
|
+
version: 1,
|
|
100
|
+
kind: "channel",
|
|
101
|
+
chat,
|
|
102
|
+
period: period(stats.period),
|
|
103
|
+
totals: {
|
|
104
|
+
followers: value(stats.followers),
|
|
105
|
+
viewsPerPost: value(stats.viewsPerPost),
|
|
106
|
+
sharesPerPost: value(stats.sharesPerPost),
|
|
107
|
+
reactionsPerPost: value(stats.reactionsPerPost),
|
|
108
|
+
viewsPerStory: value(stats.viewsPerStory),
|
|
109
|
+
sharesPerStory: value(stats.sharesPerStory),
|
|
110
|
+
reactionsPerStory: value(stats.reactionsPerStory),
|
|
111
|
+
},
|
|
112
|
+
notifications: { enabled: stats.enabledNotifications.part, total: stats.enabledNotifications.total },
|
|
113
|
+
recentPosts: stats.recentPostsInteractions.map((post) => ({
|
|
114
|
+
kind: post._ === "postInteractionCountersMessage" ? "message" : "story",
|
|
115
|
+
id: String(post._ === "postInteractionCountersMessage" ? post.msgId : post.storyId),
|
|
116
|
+
views: post.views,
|
|
117
|
+
forwards: post.forwards,
|
|
118
|
+
reactions: post.reactions,
|
|
119
|
+
})),
|
|
120
|
+
graphs: await graphs({
|
|
121
|
+
growth: stats.growthGraph,
|
|
122
|
+
followers: stats.followersGraph,
|
|
123
|
+
muted: stats.muteGraph,
|
|
124
|
+
hours: stats.topHoursGraph,
|
|
125
|
+
interactions: stats.interactionsGraph,
|
|
126
|
+
instantView: stats.ivInteractionsGraph,
|
|
127
|
+
viewsBySource: stats.viewsBySourceGraph,
|
|
128
|
+
newFollowersBySource: stats.newFollowersBySourceGraph,
|
|
129
|
+
languages: stats.languagesGraph,
|
|
130
|
+
reactionsByEmotion: stats.reactionsByEmotionGraph,
|
|
131
|
+
storyInteractions: stats.storyInteractionsGraph,
|
|
132
|
+
storyReactionsByEmotion: stats.storyReactionsByEmotionGraph,
|
|
133
|
+
}, graphOf),
|
|
134
|
+
});
|
|
135
|
+
//# sourceMappingURL=stats.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stats.js","sourceRoot":"","sources":["../../src/telegram/stats.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../src/telegram/storage.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAwE,MAAM,cAAc,CAAA;AA4DtH,kEAAkE;AAClE,eAAO,MAAM,kBAAkB,SAAgB,MAAM,KAAG,OAAO,CAAC,iBAAiB,CAQhF,CAAA"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { chmodSync, closeSync, existsSync, openSync } from "node:fs";
|
|
2
|
+
import { BaseSqliteStorage, BaseSqliteStorageDriver } from "@mtcute/node";
|
|
3
|
+
import { openCache } from "@wirecat/cli-messaging/store";
|
|
4
|
+
/**
|
|
5
|
+
* mtcute's session storage over the SQLite the runtime already has — `node:sqlite` or `bun:sqlite`,
|
|
6
|
+
* through cli-messaging's seam — instead of `better-sqlite3`.
|
|
7
|
+
*
|
|
8
|
+
* Measured 2026-09-27: a global `pnpm add -g` installs `better-sqlite3` without running its install
|
|
9
|
+
* script, so it has no native binding and every login fails with "Could not locate the bindings
|
|
10
|
+
* file". `@mtcute/node` still imports it, but the binding is only loaded when a database is opened
|
|
11
|
+
* (`better-sqlite3/lib/database.js:48`), and this storage never asks it to.
|
|
12
|
+
*/
|
|
13
|
+
class RuntimeSqliteDriver extends BaseSqliteStorageDriver {
|
|
14
|
+
#database;
|
|
15
|
+
constructor(database) {
|
|
16
|
+
super();
|
|
17
|
+
this.#database = database;
|
|
18
|
+
}
|
|
19
|
+
// mtcute's exit hook closes the database on SIGINT/SIGTERM while the command is still running, and
|
|
20
|
+
// `client.destroy()` then flushes the writes queued since into a closed database: "database is not
|
|
21
|
+
// open" (BUG-148). The command closes the client on every exit path, so it is the only owner.
|
|
22
|
+
setup(...[log, platform]) {
|
|
23
|
+
super.setup(log, Object.assign(Object.create(platform), { beforeExit: () => () => { } }));
|
|
24
|
+
}
|
|
25
|
+
_createDatabase() {
|
|
26
|
+
const database = this.#database;
|
|
27
|
+
return {
|
|
28
|
+
exec: (sql) => database.exec(sql),
|
|
29
|
+
close: () => database.close(),
|
|
30
|
+
prepare: (sql) => {
|
|
31
|
+
const statement = database.prepare(sql);
|
|
32
|
+
return {
|
|
33
|
+
run: (...parameters) => {
|
|
34
|
+
statement.run(...parameters);
|
|
35
|
+
},
|
|
36
|
+
get: (...parameters) => statement.get(...parameters),
|
|
37
|
+
all: (...parameters) => statement.all(...parameters),
|
|
38
|
+
};
|
|
39
|
+
},
|
|
40
|
+
// better-sqlite3's shape: the function comes back wrapped, and runs in one transaction when called.
|
|
41
|
+
// biome-ignore lint/suspicious/noExplicitAny: mtcute's own signature
|
|
42
|
+
transaction: (work) => ((...args) => {
|
|
43
|
+
database.exec("BEGIN IMMEDIATE");
|
|
44
|
+
try {
|
|
45
|
+
const result = work(...args);
|
|
46
|
+
database.exec("COMMIT");
|
|
47
|
+
return result;
|
|
48
|
+
}
|
|
49
|
+
catch (error) {
|
|
50
|
+
database.exec("ROLLBACK");
|
|
51
|
+
throw error;
|
|
52
|
+
}
|
|
53
|
+
}),
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
/** The session is a login: owner-only, -wal and -shm included. */
|
|
58
|
+
export const openSessionStorage = async (path) => {
|
|
59
|
+
// SQLite gives -wal and -shm the database file's mode and writes them while it opens, so the file
|
|
60
|
+
// is 0600 before that. The chmod puts right a session made before this was so.
|
|
61
|
+
closeSync(openSync(path, "a", 0o600));
|
|
62
|
+
for (const file of [path, `${path}-wal`, `${path}-shm`]) {
|
|
63
|
+
if (existsSync(file))
|
|
64
|
+
chmodSync(file, 0o600);
|
|
65
|
+
}
|
|
66
|
+
return new BaseSqliteStorage(new RuntimeSqliteDriver(await openCache(path)));
|
|
67
|
+
};
|
|
68
|
+
//# sourceMappingURL=storage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage.js","sourceRoot":"","sources":["../../src/telegram/storage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AACpE,OAAO,EAAE,iBAAiB,EAAE,uBAAuB,EAA+C,MAAM,cAAc,CAAA;AACtH,OAAO,EAAsB,SAAS,EAAiB,MAAM,8BAA8B,CAAA;AAE3F;;;;;;;;GAQG;AACH,MAAM,mBAAoB,SAAQ,uBAAuB;IAC9C,SAAS,CAAe;IAEjC,YAAY,QAAuB;QACjC,KAAK,EAAE,CAAA;QACP,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAA;IAC3B,CAAC;IAED,mGAAmG;IACnG,mGAAmG;IACnG,8FAA8F;IACrF,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAA+C;QAC7E,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,GAAE,CAAC,EAAE,CAAC,CAAC,CAAA;IAC1F,CAAC;IAED,eAAe;QACb,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAA;QAC/B,OAAO;YACL,IAAI,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;YACjC,KAAK,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,KAAK,EAAE;YAC7B,OAAO,EAAE,CAAsB,GAAW,EAAuB,EAAE;gBACjE,MAAM,SAAS,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;gBACvC,OAAO;oBACL,GAAG,EAAE,CAAC,GAAG,UAAa,EAAE,EAAE;wBACxB,SAAS,CAAC,GAAG,CAAC,GAAI,UAAyB,CAAC,CAAA;oBAC9C,CAAC;oBACD,GAAG,EAAE,CAAC,GAAG,UAAa,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,GAAI,UAAyB,CAAC;oBACvE,GAAG,EAAE,CAAC,GAAG,UAAa,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,GAAI,UAAyB,CAAC;iBACxE,CAAA;YACH,CAAC;YACD,oGAAoG;YACpG,qEAAqE;YACrE,WAAW,EAAE,CAAoC,IAAO,EAAK,EAAE,CAC7D,CAAC,CAAC,GAAG,IAAmB,EAAE,EAAE;gBAC1B,QAAQ,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAA;gBAChC,IAAI,CAAC;oBACH,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,CAAA;oBAC5B,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;oBACvB,OAAO,MAAM,CAAA;gBACf,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;oBACzB,MAAM,KAAK,CAAA;gBACb,CAAC;YACH,CAAC,CAAM;SACV,CAAA;IACH,CAAC;CACF;AAED,kEAAkE;AAClE,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,EAAE,IAAY,EAA8B,EAAE;IACnF,kGAAkG;IAClG,+EAA+E;IAC/E,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,CAAA;IACrC,KAAK,MAAM,IAAI,IAAI,CAAC,IAAI,EAAE,GAAG,IAAI,MAAM,EAAE,GAAG,IAAI,MAAM,CAAC,EAAE,CAAC;QACxD,IAAI,UAAU,CAAC,IAAI,CAAC;YAAE,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;IAC9C,CAAC;IACD,OAAO,IAAI,iBAAiB,CAAC,IAAI,mBAAmB,CAAC,MAAM,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AAC9E,CAAC,CAAA"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { TelegramClient, UploadedFile } from "@mtcute/node";
|
|
2
|
+
import type { Upload } from "@wirecat/cli-messaging/sends";
|
|
3
|
+
export declare const UPLOAD_ATTEMPTS = 3;
|
|
4
|
+
/**
|
|
5
|
+
* Before the message exists, so a failure here means nothing was sent and a network drop can be tried
|
|
6
|
+
* again at once. The send that follows goes once, with the send's own random id.
|
|
7
|
+
*/
|
|
8
|
+
export declare const uploadAttachment: (client: Pick<TelegramClient, "uploadFile">, upload: Upload, wait?: (ms: number) => Promise<unknown>) => Promise<UploadedFile>;
|
|
9
|
+
//# sourceMappingURL=upload.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upload.d.ts","sourceRoot":"","sources":["../../src/telegram/upload.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAEhE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAA;AAI1D,eAAO,MAAM,eAAe,IAAI,CAAA;AAIhC;;;GAGG;AACH,eAAO,MAAM,gBAAgB,WACnB,IAAI,CAAC,cAAc,EAAE,YAAY,CAAC,UAClC,MAAM,SACR,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,KACrC,OAAO,CAAC,YAAY,CAgBtB,CAAA"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { CliError } from "@wirecat/cli-core";
|
|
2
|
+
import { toCliError } from "./errors.js";
|
|
3
|
+
import { toUploadParams } from "./map.js";
|
|
4
|
+
export const UPLOAD_ATTEMPTS = 3;
|
|
5
|
+
const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
|
|
6
|
+
/**
|
|
7
|
+
* Before the message exists, so a failure here means nothing was sent and a network drop can be tried
|
|
8
|
+
* again at once. The send that follows goes once, with the send's own random id.
|
|
9
|
+
*/
|
|
10
|
+
export const uploadAttachment = async (client, upload, wait = sleep) => {
|
|
11
|
+
for (let attempt = 1;; attempt++) {
|
|
12
|
+
try {
|
|
13
|
+
return await client.uploadFile(toUploadParams(upload));
|
|
14
|
+
}
|
|
15
|
+
catch (error) {
|
|
16
|
+
const known = toCliError(error);
|
|
17
|
+
const dropped = known instanceof CliError && ["timeout", "network_error"].includes(known.code);
|
|
18
|
+
if (!dropped)
|
|
19
|
+
throw error;
|
|
20
|
+
if (attempt >= UPLOAD_ATTEMPTS) {
|
|
21
|
+
throw new CliError(known.code, `the file did not upload after ${attempt} tries; nothing was sent`, {
|
|
22
|
+
attempts: attempt,
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
await wait(attempt * 1000);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
//# sourceMappingURL=upload.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upload.js","sourceRoot":"","sources":["../../src/telegram/upload.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAE5C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AAEzC,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAA;AAEhC,MAAM,KAAK,GAAG,CAAC,EAAU,EAAE,EAAE,CAAC,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAA;AAE/E;;;GAGG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,EACnC,MAA0C,EAC1C,MAAc,EACd,IAAI,GAAqC,KAAK,EACvB,EAAE;IACzB,KAAK,IAAI,OAAO,GAAG,CAAC,GAAI,OAAO,EAAE,EAAE,CAAC;QAClC,IAAI,CAAC;YACH,OAAO,MAAM,MAAM,CAAC,UAAU,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAA;QACxD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,CAAA;YAC/B,MAAM,OAAO,GAAG,KAAK,YAAY,QAAQ,IAAI,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;YAC9F,IAAI,CAAC,OAAO;gBAAE,MAAM,KAAK,CAAA;YACzB,IAAI,OAAO,IAAI,eAAe,EAAE,CAAC;gBAC/B,MAAM,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,iCAAiC,OAAO,0BAA0B,EAAE;oBACjG,QAAQ,EAAE,OAAO;iBAClB,CAAC,CAAA;YACJ,CAAC;YACD,MAAM,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,CAAA;QAC5B,CAAC;IACH,CAAC;AACH,CAAC,CAAA"}
|
package/dist/update.d.ts
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { FetchLike } from "@wirecat/cli-core/http";
|
|
2
|
+
import { type Installer } from "@wirecat/cli-core/update";
|
|
3
|
+
export declare const PACKAGE = "@wirecat/tg-cli";
|
|
4
|
+
/** npm, the clock, the terminal and the package manager as `tg upgrade` sees them — faked in a test. */
|
|
5
|
+
export interface UpdateEnvironment {
|
|
6
|
+
fetch?: FetchLike;
|
|
7
|
+
now?: () => number;
|
|
8
|
+
stderrIsTTY?: boolean;
|
|
9
|
+
scriptPath?: string;
|
|
10
|
+
/** Runs the update and answers its exit code; its output goes to stderr. */
|
|
11
|
+
spawn?: (argv: string[]) => number;
|
|
12
|
+
}
|
|
13
|
+
export declare const installer: ({ scriptPath }?: UpdateEnvironment) => Installer;
|
|
14
|
+
export declare const latest: (environment?: UpdateEnvironment) => Promise<string | undefined>;
|
|
15
|
+
/** This install's own entry point — after an update, the new code at the same path. */
|
|
16
|
+
export declare const tgScript: () => string;
|
|
17
|
+
export declare const runUpdate: (argv: string[], environment?: UpdateEnvironment) => number;
|
|
18
|
+
export declare const restartServer: (profile: string, env: NodeJS.ProcessEnv, environment?: UpdateEnvironment) => number;
|
|
19
|
+
/**
|
|
20
|
+
* The daily "a newer version exists" line, or `undefined`. Started beside the command and awaited
|
|
21
|
+
* after it, so asking npm costs the command nothing; any failure is silence, never an error.
|
|
22
|
+
*/
|
|
23
|
+
export declare const updateNotice: (argv: readonly string[], { tty, environment, env, }: {
|
|
24
|
+
tty?: boolean;
|
|
25
|
+
environment?: UpdateEnvironment;
|
|
26
|
+
env?: NodeJS.ProcessEnv;
|
|
27
|
+
}) => Promise<string | undefined>;
|
|
28
|
+
//# sourceMappingURL=update.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../src/update.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AACvD,OAAO,EACL,KAAK,SAAS,EAKf,MAAM,0BAA0B,CAAA;AAKjC,eAAO,MAAM,OAAO,oBAAoB,CAAA;AAExC,wGAAwG;AACxG,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,EAAE,SAAS,CAAA;IACjB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAA;IAClB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,4EAA4E;IAC5E,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,MAAM,CAAA;CACnC;AAED,eAAO,MAAM,SAAS,oBAAoB,iBAAiB,KAAQ,SACM,CAAA;AAEzE,eAAO,MAAM,MAAM,iBAAiB,iBAAiB,gCACoB,CAAA;AAEzE,uFAAuF;AACvF,eAAO,MAAM,QAAQ,QAAO,MAAgE,CAAA;AAE5F,eAAO,MAAM,SAAS,SAAU,MAAM,EAAE,gBAAe,iBAAiB,KAAQ,MACT,CAAA;AAEvE,eAAO,MAAM,aAAa,YAAa,MAAM,OAAO,MAAM,CAAC,UAAU,gBAAe,iBAAiB,KAAQ,MAK5G,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,YAAY,SACjB,SAAS,MAAM,EAAE,8BAKpB;IAAE,GAAG,CAAC,EAAE,OAAO,CAAC;IAAC,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAA;CAAE,KAC7E,OAAO,CAAC,MAAM,GAAG,SAAS,CAiC5B,CAAA"}
|
package/dist/update.js
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { spawnSync } from "node:child_process";
|
|
2
|
+
import { realpathSync } from "node:fs";
|
|
3
|
+
import { join } from "node:path";
|
|
4
|
+
import { fileURLToPath } from "node:url";
|
|
5
|
+
import { installerOf, latestVersion, runUpdate as runPackageManager, updateNotice as sharedNotice, } from "@wirecat/cli-core/update";
|
|
6
|
+
import { resolveSettings } from "./app.js";
|
|
7
|
+
import { pathsFor } from "./paths.js";
|
|
8
|
+
import { VERSION } from "./version.js";
|
|
9
|
+
export const PACKAGE = "@wirecat/tg-cli";
|
|
10
|
+
export const installer = ({ scriptPath } = {}) => installerOf(scriptPath ?? realpathSync(fileURLToPath(import.meta.url)));
|
|
11
|
+
export const latest = (environment = {}) => latestVersion(PACKAGE, environment.fetch ?? fetch, { timeoutMs: 3000 });
|
|
12
|
+
/** This install's own entry point — after an update, the new code at the same path. */
|
|
13
|
+
export const tgScript = () => fileURLToPath(new URL("./bin/tg.js", import.meta.url));
|
|
14
|
+
export const runUpdate = (argv, environment = {}) => environment.spawn ? environment.spawn(argv) : runPackageManager(argv);
|
|
15
|
+
export const restartServer = (profile, env, environment = {}) => {
|
|
16
|
+
const argv = [tgScript(), profile, "server", "restart"];
|
|
17
|
+
return environment.spawn
|
|
18
|
+
? environment.spawn([process.execPath, ...argv])
|
|
19
|
+
: (spawnSync(process.execPath, argv, { env, shell: false, stdio: ["ignore", 2, 2] }).status ?? 1);
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* The daily "a newer version exists" line, or `undefined`. Started beside the command and awaited
|
|
23
|
+
* after it, so asking npm costs the command nothing; any failure is silence, never an error.
|
|
24
|
+
*/
|
|
25
|
+
export const updateNotice = (argv, { tty, environment = {}, env = process.env, }) => {
|
|
26
|
+
try {
|
|
27
|
+
const delimiter = argv.indexOf("--");
|
|
28
|
+
const options = argv.slice(0, delimiter < 0 ? undefined : delimiter);
|
|
29
|
+
if (["--help", "-h", "--version", "-V", "--json", "--jsonl", "--dry-run", "--timeout", "commands"].some((word) => options.includes(word)))
|
|
30
|
+
return Promise.resolve(undefined);
|
|
31
|
+
if (argv.includes("upgrade"))
|
|
32
|
+
return Promise.resolve(undefined);
|
|
33
|
+
const pretty = !argv.includes("--json") && !argv.includes("--jsonl") && (tty ?? process.stdout.isTTY === true);
|
|
34
|
+
// cli-core 0.8 names the command `update` in its line; tg's is `upgrade`.
|
|
35
|
+
return sharedNotice({
|
|
36
|
+
argv,
|
|
37
|
+
packageName: PACKAGE,
|
|
38
|
+
command: "tg",
|
|
39
|
+
version: VERSION,
|
|
40
|
+
statePath: join(pathsFor(env).state, "update-check.json"),
|
|
41
|
+
fetch: environment.fetch ?? fetch,
|
|
42
|
+
...(environment.now ? { now: environment.now } : {}),
|
|
43
|
+
format: pretty ? "pretty" : "json",
|
|
44
|
+
stderrIsTTY: environment.stderrIsTTY ?? process.stderr.isTTY === true,
|
|
45
|
+
quiet: argv.includes("--quiet"),
|
|
46
|
+
enabled: resolveSettings({}, { env }).updateCheck,
|
|
47
|
+
installer: installer(environment),
|
|
48
|
+
env,
|
|
49
|
+
offVariables: ["TG_NO_UPDATE_CHECK"],
|
|
50
|
+
}).then((line) => line?.replace("`tg update`", "`tg upgrade`"));
|
|
51
|
+
}
|
|
52
|
+
catch {
|
|
53
|
+
return Promise.resolve(undefined);
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
//# sourceMappingURL=update.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../src/update.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO,WAAW,CAAA"}
|
package/dist/version.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,OAAO,GAAG,QAAQ,CAAA"}
|