tglfs 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/README.md +216 -0
- package/dist/auth.d.ts +58 -0
- package/dist/auth.js +187 -0
- package/dist/auth.js.map +1 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +627 -0
- package/dist/cli.js.map +1 -0
- package/dist/crypto.d.ts +8 -0
- package/dist/crypto.js +45 -0
- package/dist/crypto.js.map +1 -0
- package/dist/download.d.ts +26 -0
- package/dist/download.js +228 -0
- package/dist/download.js.map +1 -0
- package/dist/errors.d.ts +18 -0
- package/dist/errors.js +35 -0
- package/dist/errors.js.map +1 -0
- package/dist/file-ops.d.ts +71 -0
- package/dist/file-ops.js +234 -0
- package/dist/file-ops.js.map +1 -0
- package/dist/gramjs.d.ts +14 -0
- package/dist/gramjs.js +70 -0
- package/dist/gramjs.js.map +1 -0
- package/dist/interactive.d.ts +11 -0
- package/dist/interactive.js +81 -0
- package/dist/interactive.js.map +1 -0
- package/dist/json.d.ts +2 -0
- package/dist/json.js +4 -0
- package/dist/json.js.map +1 -0
- package/dist/progress.d.ts +16 -0
- package/dist/progress.js +62 -0
- package/dist/progress.js.map +1 -0
- package/dist/protocol.d.ts +5 -0
- package/dist/protocol.js +27 -0
- package/dist/protocol.js.map +1 -0
- package/dist/search.d.ts +23 -0
- package/dist/search.js +81 -0
- package/dist/search.js.map +1 -0
- package/dist/secrets.d.ts +12 -0
- package/dist/secrets.js +29 -0
- package/dist/secrets.js.map +1 -0
- package/dist/shared/archive.d.ts +9 -0
- package/dist/shared/archive.js +95 -0
- package/dist/shared/archive.js.map +1 -0
- package/dist/shared/constants.d.ts +5 -0
- package/dist/shared/constants.js +6 -0
- package/dist/shared/constants.js.map +1 -0
- package/dist/shared/file-cards.d.ts +31 -0
- package/dist/shared/file-cards.js +103 -0
- package/dist/shared/file-cards.js.map +1 -0
- package/dist/shared/telegram-files.d.ts +84 -0
- package/dist/shared/telegram-files.js +137 -0
- package/dist/shared/telegram-files.js.map +1 -0
- package/dist/shared/upload.d.ts +44 -0
- package/dist/shared/upload.js +181 -0
- package/dist/shared/upload.js.map +1 -0
- package/dist/store.d.ts +15 -0
- package/dist/store.js +97 -0
- package/dist/store.js.map +1 -0
- package/dist/types.d.ts +18 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/ufid.d.ts +8 -0
- package/dist/ufid.js +65 -0
- package/dist/ufid.js.map +1 -0
- package/dist/upload.d.ts +19 -0
- package/dist/upload.js +101 -0
- package/dist/upload.js.map +1 -0
- package/man/tglfs-delete.1 +19 -0
- package/man/tglfs-download.1 +42 -0
- package/man/tglfs-inspect.1 +34 -0
- package/man/tglfs-login.1 +53 -0
- package/man/tglfs-logout.1 +17 -0
- package/man/tglfs-receive.1 +26 -0
- package/man/tglfs-rename.1 +8 -0
- package/man/tglfs-search.1 +37 -0
- package/man/tglfs-send.1 +22 -0
- package/man/tglfs-status.1 +12 -0
- package/man/tglfs-unsend.1 +37 -0
- package/man/tglfs-upload.1 +28 -0
- package/man/tglfs.1 +70 -0
- package/package.json +66 -0
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/crypto.d.ts
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export declare const ENCRYPTION_CHUNK_SIZE: number;
|
|
2
|
+
export declare function deriveAESKeyFromPassword(password: string, salt: Uint8Array): Promise<CryptoKey>;
|
|
3
|
+
export declare function incrementCounter64By(counter: Uint8Array, blocks: number): Uint8Array;
|
|
4
|
+
export declare function incrementCounter(counter: Uint8Array): Uint8Array;
|
|
5
|
+
export declare function decodeIv(iv: string): {
|
|
6
|
+
salt: Uint8Array;
|
|
7
|
+
counter: Uint8Array;
|
|
8
|
+
};
|
package/dist/crypto.js
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { CliError, EXIT_CODES } from "./errors.js";
|
|
2
|
+
export const ENCRYPTION_CHUNK_SIZE = 1024 * 1024;
|
|
3
|
+
export async function deriveAESKeyFromPassword(password, salt) {
|
|
4
|
+
const keyMaterial = await globalThis.crypto.subtle.importKey("raw", new TextEncoder().encode(password), { name: "PBKDF2" }, false, ["deriveKey"]);
|
|
5
|
+
return globalThis.crypto.subtle.deriveKey({
|
|
6
|
+
name: "PBKDF2",
|
|
7
|
+
salt,
|
|
8
|
+
iterations: 100000,
|
|
9
|
+
hash: "SHA-256",
|
|
10
|
+
}, keyMaterial, { name: "AES-CTR", length: 256 }, false, ["encrypt", "decrypt"]);
|
|
11
|
+
}
|
|
12
|
+
export function incrementCounter64By(counter, blocks) {
|
|
13
|
+
const result = new Uint8Array(counter);
|
|
14
|
+
let carry = blocks >>> 0;
|
|
15
|
+
for (let i = result.length - 1; i >= result.length - 8; i -= 1) {
|
|
16
|
+
const byteSum = result[i] + (carry & 0xff);
|
|
17
|
+
result[i] = byteSum & 0xff;
|
|
18
|
+
carry = (carry >>> 8) + (byteSum >>> 8);
|
|
19
|
+
if (carry === 0 && i < result.length - 1) {
|
|
20
|
+
break;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
return result;
|
|
24
|
+
}
|
|
25
|
+
export function incrementCounter(counter) {
|
|
26
|
+
const result = new Uint8Array(counter.length);
|
|
27
|
+
let carry = 1;
|
|
28
|
+
for (let index = counter.length - 1; index >= 0; index -= 1) {
|
|
29
|
+
const sum = counter[index] + carry;
|
|
30
|
+
result[index] = sum & 0xff;
|
|
31
|
+
carry = sum >> 8;
|
|
32
|
+
}
|
|
33
|
+
return result;
|
|
34
|
+
}
|
|
35
|
+
export function decodeIv(iv) {
|
|
36
|
+
const bytes = Uint8Array.from(Buffer.from(iv, "base64"));
|
|
37
|
+
if (bytes.length !== 32) {
|
|
38
|
+
throw new CliError("invalid_file_card", "The file card IV is invalid or unsupported.", EXIT_CODES.INVALID_FILE_CARD);
|
|
39
|
+
}
|
|
40
|
+
return {
|
|
41
|
+
salt: bytes.subarray(0, 16),
|
|
42
|
+
counter: bytes.slice(16),
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=crypto.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crypto.js","sourceRoot":"","sources":["../src/crypto.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAElD,MAAM,CAAC,MAAM,qBAAqB,GAAG,IAAI,GAAG,IAAI,CAAA;AAEhD,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAAC,QAAgB,EAAE,IAAgB;IAC7E,MAAM,WAAW,GAAG,MAAM,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CACxD,KAAK,EACL,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,EAClC,EAAE,IAAI,EAAE,QAAQ,EAAE,EAClB,KAAK,EACL,CAAC,WAAW,CAAC,CAChB,CAAA;IAED,OAAO,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CACrC;QACI,IAAI,EAAE,QAAQ;QACd,IAAI;QACJ,UAAU,EAAE,MAAM;QAClB,IAAI,EAAE,SAAS;KAClB,EACD,WAAW,EACX,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,EAChC,KAAK,EACL,CAAC,SAAS,EAAE,SAAS,CAAC,CACzB,CAAA;AACL,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,OAAmB,EAAE,MAAc;IACpE,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,OAAO,CAAC,CAAA;IACtC,IAAI,KAAK,GAAG,MAAM,KAAK,CAAC,CAAA;IACxB,KAAK,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7D,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,CAAA;QAC1C,MAAM,CAAC,CAAC,CAAC,GAAG,OAAO,GAAG,IAAI,CAAA;QAC1B,KAAK,GAAG,CAAC,KAAK,KAAK,CAAC,CAAC,GAAG,CAAC,OAAO,KAAK,CAAC,CAAC,CAAA;QACvC,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvC,MAAK;QACT,CAAC;IACL,CAAC;IACD,OAAO,MAAM,CAAA;AACjB,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,OAAmB;IAChD,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;IAC7C,IAAI,KAAK,GAAG,CAAC,CAAA;IACb,KAAK,IAAI,KAAK,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QAC1D,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,CAAA;QAClC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,IAAI,CAAA;QAC1B,KAAK,GAAG,GAAG,IAAI,CAAC,CAAA;IACpB,CAAC;IACD,OAAO,MAAM,CAAA;AACjB,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,EAAU;IAC/B,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAA;IACxD,IAAI,KAAK,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;QACtB,MAAM,IAAI,QAAQ,CACd,mBAAmB,EACnB,6CAA6C,EAC7C,UAAU,CAAC,iBAAiB,CAC/B,CAAA;IACL,CAAC;IACD,OAAO;QACH,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC;QAC3B,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;KAC3B,CAAA;AACL,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { TelegramClient } from "telegram/client/TelegramClient.js";
|
|
2
|
+
import type { FileCardData } from "./types.js";
|
|
3
|
+
export type DownloadMode = "current" | "legacy";
|
|
4
|
+
type DownloadResult = {
|
|
5
|
+
outputPath: string;
|
|
6
|
+
bytesWritten: number;
|
|
7
|
+
name: string;
|
|
8
|
+
ufid: string;
|
|
9
|
+
};
|
|
10
|
+
export type DownloadProgress = {
|
|
11
|
+
bytesWritten: number;
|
|
12
|
+
totalBytes: number;
|
|
13
|
+
};
|
|
14
|
+
export type DownloadInspectionResult = {
|
|
15
|
+
bytesWritten: number;
|
|
16
|
+
computedUfid: string;
|
|
17
|
+
};
|
|
18
|
+
export declare function coerceTelegramDocumentSize(value: unknown): number | null;
|
|
19
|
+
export declare function resolveChunkDocumentSize(chunkMessage: any, chunkId: number, ufid: string): number;
|
|
20
|
+
export declare function iterateEncryptedFile(client: TelegramClient, data: FileCardData, peer?: string): AsyncGenerator<Uint8Array>;
|
|
21
|
+
export declare function defaultOutputPath(fileName: string): string;
|
|
22
|
+
export declare function ensureOutputDirectory(filePath: string): Promise<void>;
|
|
23
|
+
export declare function inspectFileFromEncryptedParts(data: FileCardData, password: string, encryptedParts: AsyncIterable<Uint8Array>, mode: DownloadMode, onProgress?: (progress: DownloadProgress) => void): Promise<DownloadInspectionResult>;
|
|
24
|
+
export declare function restoreFileFromEncryptedParts(data: FileCardData, password: string, outputPath: string, encryptedParts: AsyncIterable<Uint8Array>, overwrite?: boolean, onProgress?: (progress: DownloadProgress) => void, mode?: DownloadMode): Promise<DownloadResult>;
|
|
25
|
+
export declare function downloadFileCard(client: TelegramClient, data: FileCardData, password: string, outputPath: string, overwrite?: boolean, onProgress?: (progress: DownloadProgress) => void, mode?: DownloadMode): Promise<DownloadResult>;
|
|
26
|
+
export {};
|
package/dist/download.js
ADDED
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
import { mkdir, open, rename, rm } from "node:fs/promises";
|
|
2
|
+
import { dirname, join, resolve } from "node:path";
|
|
3
|
+
import { decodeIv, deriveAESKeyFromPassword, ENCRYPTION_CHUNK_SIZE, incrementCounter, incrementCounter64By, } from "./crypto.js";
|
|
4
|
+
import { CliError, EXIT_CODES } from "./errors.js";
|
|
5
|
+
import { getGramJs } from "./gramjs.js";
|
|
6
|
+
import { DOWNLOAD_PART_SIZE } from "./shared/constants.js";
|
|
7
|
+
import { UfidAccumulator } from "./ufid.js";
|
|
8
|
+
function isTelegramIntegerLike(value) {
|
|
9
|
+
return Boolean(value) && typeof value === "object" && typeof value.toString === "function";
|
|
10
|
+
}
|
|
11
|
+
export function coerceTelegramDocumentSize(value) {
|
|
12
|
+
if (typeof value === "number") {
|
|
13
|
+
return Number.isSafeInteger(value) && value >= 0 ? value : null;
|
|
14
|
+
}
|
|
15
|
+
if (typeof value === "bigint") {
|
|
16
|
+
return value >= 0n && value <= BigInt(Number.MAX_SAFE_INTEGER) ? Number(value) : null;
|
|
17
|
+
}
|
|
18
|
+
if (isTelegramIntegerLike(value)) {
|
|
19
|
+
const parsed = Number(value.toString());
|
|
20
|
+
return Number.isSafeInteger(parsed) && parsed >= 0 ? parsed : null;
|
|
21
|
+
}
|
|
22
|
+
return null;
|
|
23
|
+
}
|
|
24
|
+
export function resolveChunkDocumentSize(chunkMessage, chunkId, ufid) {
|
|
25
|
+
if (!chunkMessage) {
|
|
26
|
+
throw new CliError("invalid_file_card", `The file card references chunk message ${chunkId}, but it no longer exists in Saved Messages.`, EXIT_CODES.INVALID_FILE_CARD, { ufid, chunkId, reason: "missing_chunk_message" });
|
|
27
|
+
}
|
|
28
|
+
if (!chunkMessage?.media?.document) {
|
|
29
|
+
throw new CliError("invalid_file_card", `The file card references chunk message ${chunkId}, but that Saved Messages entry is not a Telegram document.`, EXIT_CODES.INVALID_FILE_CARD, {
|
|
30
|
+
ufid,
|
|
31
|
+
chunkId,
|
|
32
|
+
reason: "chunk_message_not_document",
|
|
33
|
+
messageType: chunkMessage.className,
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
const chunkSize = coerceTelegramDocumentSize(chunkMessage.media.document.size);
|
|
37
|
+
if (chunkSize === null) {
|
|
38
|
+
throw new CliError("invalid_file_card", `The file card references chunk message ${chunkId}, but its document size is invalid.`, EXIT_CODES.INVALID_FILE_CARD, {
|
|
39
|
+
ufid,
|
|
40
|
+
chunkId,
|
|
41
|
+
reason: "invalid_chunk_size",
|
|
42
|
+
size: chunkMessage.media.document.size,
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
return chunkSize;
|
|
46
|
+
}
|
|
47
|
+
function normalizeDownloadError(error) {
|
|
48
|
+
if (error instanceof CliError) {
|
|
49
|
+
return error;
|
|
50
|
+
}
|
|
51
|
+
if (error instanceof TypeError) {
|
|
52
|
+
return new CliError("decryption_failed", "Incorrect decryption password or corrupted compressed data.", EXIT_CODES.DECRYPTION_FAILED);
|
|
53
|
+
}
|
|
54
|
+
if (error instanceof Error && error.name === "OperationError") {
|
|
55
|
+
return new CliError("decryption_failed", "Incorrect decryption password or corrupted encrypted data.", EXIT_CODES.DECRYPTION_FAILED);
|
|
56
|
+
}
|
|
57
|
+
if (error instanceof Error) {
|
|
58
|
+
return new CliError("download_failed", error.message, EXIT_CODES.GENERAL_ERROR);
|
|
59
|
+
}
|
|
60
|
+
return new CliError("download_failed", String(error), EXIT_CODES.GENERAL_ERROR);
|
|
61
|
+
}
|
|
62
|
+
export async function* iterateEncryptedFile(client, data, peer = "me") {
|
|
63
|
+
const { Api, getFileInfo } = getGramJs();
|
|
64
|
+
const chunkMessages = await client.getMessages(peer, { ids: data.chunks, waitTime: 0 });
|
|
65
|
+
const chunkMap = new Map();
|
|
66
|
+
for (const message of chunkMessages) {
|
|
67
|
+
if (message?.id !== undefined) {
|
|
68
|
+
chunkMap.set(message.id, message);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
for (const chunkId of data.chunks) {
|
|
72
|
+
const chunkMessage = chunkMap.get(chunkId);
|
|
73
|
+
const chunkSize = resolveChunkDocumentSize(chunkMessage, chunkId, data.ufid);
|
|
74
|
+
let offset = 0;
|
|
75
|
+
while (offset < chunkSize) {
|
|
76
|
+
const part = await client.invoke(new Api.upload.GetFile({
|
|
77
|
+
location: getFileInfo(chunkMessage.media).location,
|
|
78
|
+
offset,
|
|
79
|
+
limit: DOWNLOAD_PART_SIZE,
|
|
80
|
+
precise: false,
|
|
81
|
+
cdnSupported: false,
|
|
82
|
+
}));
|
|
83
|
+
const bytes = part.bytes;
|
|
84
|
+
if (!(bytes instanceof Uint8Array) || bytes.length === 0) {
|
|
85
|
+
throw new CliError("download_failed", `Telegram returned an empty response while downloading chunk message ${chunkId}.`, EXIT_CODES.GENERAL_ERROR, { ufid: data.ufid, chunkId, offset });
|
|
86
|
+
}
|
|
87
|
+
offset += bytes.length;
|
|
88
|
+
yield bytes;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
async function consumeDecompressedStream(readable, filePath, totalBytes, onProgress) {
|
|
93
|
+
const handle = await open(filePath, "w");
|
|
94
|
+
const reader = readable.getReader();
|
|
95
|
+
const ufid = new UfidAccumulator();
|
|
96
|
+
let bytesWritten = 0;
|
|
97
|
+
try {
|
|
98
|
+
while (true) {
|
|
99
|
+
const { done, value } = await reader.read();
|
|
100
|
+
if (done) {
|
|
101
|
+
break;
|
|
102
|
+
}
|
|
103
|
+
if (!value || value.length === 0) {
|
|
104
|
+
continue;
|
|
105
|
+
}
|
|
106
|
+
await handle.write(value);
|
|
107
|
+
bytesWritten += value.length;
|
|
108
|
+
onProgress?.({ bytesWritten, totalBytes });
|
|
109
|
+
await ufid.update(value);
|
|
110
|
+
}
|
|
111
|
+
return {
|
|
112
|
+
bytesWritten,
|
|
113
|
+
computedUfid: await ufid.digest(),
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
finally {
|
|
117
|
+
await handle.close();
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
async function consumeDecompressedMetadata(readable, totalBytes, onProgress) {
|
|
121
|
+
const reader = readable.getReader();
|
|
122
|
+
const ufid = new UfidAccumulator();
|
|
123
|
+
let bytesWritten = 0;
|
|
124
|
+
while (true) {
|
|
125
|
+
const { done, value } = await reader.read();
|
|
126
|
+
if (done) {
|
|
127
|
+
break;
|
|
128
|
+
}
|
|
129
|
+
if (!value || value.length === 0) {
|
|
130
|
+
continue;
|
|
131
|
+
}
|
|
132
|
+
bytesWritten += value.length;
|
|
133
|
+
onProgress?.({ bytesWritten, totalBytes });
|
|
134
|
+
await ufid.update(value);
|
|
135
|
+
}
|
|
136
|
+
return {
|
|
137
|
+
bytesWritten,
|
|
138
|
+
computedUfid: await ufid.digest(),
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
export function defaultOutputPath(fileName) {
|
|
142
|
+
return resolve(process.cwd(), fileName.split(/[\\/]/).pop() ?? fileName);
|
|
143
|
+
}
|
|
144
|
+
export async function ensureOutputDirectory(filePath) {
|
|
145
|
+
await mkdir(dirname(filePath), { recursive: true });
|
|
146
|
+
}
|
|
147
|
+
async function withDecompressedReadable(data, password, encryptedParts, mode, consumeReadable) {
|
|
148
|
+
const { salt, counter } = decodeIv(data.IV);
|
|
149
|
+
const aesKey = await deriveAESKeyFromPassword(password, salt);
|
|
150
|
+
let decryptionCounter = counter;
|
|
151
|
+
let bufferBytes = 0;
|
|
152
|
+
const decryptionBuffer = new Uint8Array(ENCRYPTION_CHUNK_SIZE);
|
|
153
|
+
const decompressionStream = new DecompressionStream("gzip");
|
|
154
|
+
const writer = decompressionStream.writable.getWriter();
|
|
155
|
+
const consumePromise = consumeReadable(decompressionStream.readable);
|
|
156
|
+
try {
|
|
157
|
+
for await (const part of encryptedParts) {
|
|
158
|
+
let partOffset = 0;
|
|
159
|
+
while (partOffset < part.length) {
|
|
160
|
+
const bytesToCopy = Math.min(part.length - partOffset, decryptionBuffer.length - bufferBytes);
|
|
161
|
+
decryptionBuffer.set(part.subarray(partOffset, partOffset + bytesToCopy), bufferBytes);
|
|
162
|
+
bufferBytes += bytesToCopy;
|
|
163
|
+
partOffset += bytesToCopy;
|
|
164
|
+
if (bufferBytes === decryptionBuffer.length) {
|
|
165
|
+
const decrypted = new Uint8Array(await globalThis.crypto.subtle.decrypt({ name: "AES-CTR", counter: decryptionCounter, length: 64 }, aesKey, decryptionBuffer));
|
|
166
|
+
decryptionCounter =
|
|
167
|
+
mode === "legacy"
|
|
168
|
+
? incrementCounter(decryptionCounter)
|
|
169
|
+
: incrementCounter64By(decryptionCounter, Math.ceil(decryptionBuffer.length / 16));
|
|
170
|
+
bufferBytes = 0;
|
|
171
|
+
await writer.write(decrypted);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
if (bufferBytes > 0) {
|
|
176
|
+
const decrypted = new Uint8Array(await globalThis.crypto.subtle.decrypt({ name: "AES-CTR", counter: decryptionCounter, length: 64 }, aesKey, decryptionBuffer.subarray(0, bufferBytes)));
|
|
177
|
+
decryptionCounter =
|
|
178
|
+
mode === "legacy"
|
|
179
|
+
? incrementCounter(decryptionCounter)
|
|
180
|
+
: incrementCounter64By(decryptionCounter, Math.ceil(bufferBytes / 16));
|
|
181
|
+
await writer.write(decrypted);
|
|
182
|
+
}
|
|
183
|
+
await writer.close();
|
|
184
|
+
return await consumePromise;
|
|
185
|
+
}
|
|
186
|
+
catch (error) {
|
|
187
|
+
try {
|
|
188
|
+
await writer.abort(error);
|
|
189
|
+
}
|
|
190
|
+
catch { }
|
|
191
|
+
try {
|
|
192
|
+
await consumePromise;
|
|
193
|
+
}
|
|
194
|
+
catch { }
|
|
195
|
+
throw normalizeDownloadError(error);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
export async function inspectFileFromEncryptedParts(data, password, encryptedParts, mode, onProgress) {
|
|
199
|
+
return withDecompressedReadable(data, password, encryptedParts, mode, (readable) => consumeDecompressedMetadata(readable, data.size, onProgress));
|
|
200
|
+
}
|
|
201
|
+
export async function restoreFileFromEncryptedParts(data, password, outputPath, encryptedParts, overwrite = false, onProgress, mode = "current") {
|
|
202
|
+
await ensureOutputDirectory(outputPath);
|
|
203
|
+
const tempPath = join(dirname(outputPath), `.${data.ufid}.part`);
|
|
204
|
+
try {
|
|
205
|
+
const { bytesWritten, computedUfid } = await withDecompressedReadable(data, password, encryptedParts, mode, (readable) => consumeDecompressedStream(readable, tempPath, data.size, onProgress));
|
|
206
|
+
if (computedUfid !== data.ufid) {
|
|
207
|
+
throw new CliError("ufid_mismatch", "The downloaded file did not match the expected UFID.", EXIT_CODES.UFID_MISMATCH);
|
|
208
|
+
}
|
|
209
|
+
if (overwrite) {
|
|
210
|
+
await rm(outputPath, { force: true });
|
|
211
|
+
}
|
|
212
|
+
await rename(tempPath, outputPath);
|
|
213
|
+
return {
|
|
214
|
+
outputPath,
|
|
215
|
+
bytesWritten,
|
|
216
|
+
name: data.name,
|
|
217
|
+
ufid: data.ufid,
|
|
218
|
+
};
|
|
219
|
+
}
|
|
220
|
+
catch (error) {
|
|
221
|
+
await rm(tempPath, { force: true }).catch(() => { });
|
|
222
|
+
throw normalizeDownloadError(error);
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
export async function downloadFileCard(client, data, password, outputPath, overwrite = false, onProgress, mode = "current") {
|
|
226
|
+
return restoreFileFromEncryptedParts(data, password, outputPath, iterateEncryptedFile(client, data), overwrite, onProgress, mode);
|
|
227
|
+
}
|
|
228
|
+
//# sourceMappingURL=download.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"download.js","sourceRoot":"","sources":["../src/download.ts"],"names":[],"mappings":"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"}
|
package/dist/errors.d.ts
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export declare const EXIT_CODES: {
|
|
2
|
+
readonly OK: 0;
|
|
3
|
+
readonly GENERAL_ERROR: 1;
|
|
4
|
+
readonly MISSING_AUTH: 10;
|
|
5
|
+
readonly INTERACTIVE_REQUIRED: 11;
|
|
6
|
+
readonly FILE_NOT_FOUND: 12;
|
|
7
|
+
readonly DECRYPTION_FAILED: 13;
|
|
8
|
+
readonly UFID_MISMATCH: 14;
|
|
9
|
+
readonly INVALID_FILE_CARD: 15;
|
|
10
|
+
};
|
|
11
|
+
export declare class CliError extends Error {
|
|
12
|
+
readonly code: string;
|
|
13
|
+
readonly exitCode: number;
|
|
14
|
+
readonly details?: unknown;
|
|
15
|
+
constructor(code: string, message: string, exitCode: number, details?: unknown);
|
|
16
|
+
}
|
|
17
|
+
export declare function isCliError(error: unknown): error is CliError;
|
|
18
|
+
export declare function toCliError(error: unknown): CliError;
|
package/dist/errors.js
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
export const EXIT_CODES = {
|
|
2
|
+
OK: 0,
|
|
3
|
+
GENERAL_ERROR: 1,
|
|
4
|
+
MISSING_AUTH: 10,
|
|
5
|
+
INTERACTIVE_REQUIRED: 11,
|
|
6
|
+
FILE_NOT_FOUND: 12,
|
|
7
|
+
DECRYPTION_FAILED: 13,
|
|
8
|
+
UFID_MISMATCH: 14,
|
|
9
|
+
INVALID_FILE_CARD: 15,
|
|
10
|
+
};
|
|
11
|
+
export class CliError extends Error {
|
|
12
|
+
code;
|
|
13
|
+
exitCode;
|
|
14
|
+
details;
|
|
15
|
+
constructor(code, message, exitCode, details) {
|
|
16
|
+
super(message);
|
|
17
|
+
this.name = "CliError";
|
|
18
|
+
this.code = code;
|
|
19
|
+
this.exitCode = exitCode;
|
|
20
|
+
this.details = details;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
export function isCliError(error) {
|
|
24
|
+
return error instanceof CliError;
|
|
25
|
+
}
|
|
26
|
+
export function toCliError(error) {
|
|
27
|
+
if (isCliError(error)) {
|
|
28
|
+
return error;
|
|
29
|
+
}
|
|
30
|
+
if (error instanceof Error) {
|
|
31
|
+
return new CliError("internal_error", error.message, EXIT_CODES.GENERAL_ERROR);
|
|
32
|
+
}
|
|
33
|
+
return new CliError("internal_error", String(error), EXIT_CODES.GENERAL_ERROR);
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,UAAU,GAAG;IACtB,EAAE,EAAE,CAAC;IACL,aAAa,EAAE,CAAC;IAChB,YAAY,EAAE,EAAE;IAChB,oBAAoB,EAAE,EAAE;IACxB,cAAc,EAAE,EAAE;IAClB,iBAAiB,EAAE,EAAE;IACrB,aAAa,EAAE,EAAE;IACjB,iBAAiB,EAAE,EAAE;CACf,CAAA;AAEV,MAAM,OAAO,QAAS,SAAQ,KAAK;IACtB,IAAI,CAAQ;IACZ,QAAQ,CAAQ;IAChB,OAAO,CAAU;IAE1B,YAAY,IAAY,EAAE,OAAe,EAAE,QAAgB,EAAE,OAAiB;QAC1E,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,IAAI,GAAG,UAAU,CAAA;QACtB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QAChB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;QACxB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;IAC1B,CAAC;CACJ;AAED,MAAM,UAAU,UAAU,CAAC,KAAc;IACrC,OAAO,KAAK,YAAY,QAAQ,CAAA;AACpC,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,KAAc;IACrC,IAAI,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QACpB,OAAO,KAAK,CAAA;IAChB,CAAC;IACD,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QACzB,OAAO,IAAI,QAAQ,CAAC,gBAAgB,EAAE,KAAK,CAAC,OAAO,EAAE,UAAU,CAAC,aAAa,CAAC,CAAA;IAClF,CAAC;IACD,OAAO,IAAI,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC,aAAa,CAAC,CAAA;AAClF,CAAC"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import type { TelegramClient } from "telegram/client/TelegramClient.js";
|
|
2
|
+
import type { DownloadMode } from "./download.js";
|
|
3
|
+
import type { FileCardData, FileCardRecord } from "./types.js";
|
|
4
|
+
export type ChunkInspection = {
|
|
5
|
+
msgId: number;
|
|
6
|
+
status: "ok" | "missing" | "not_document" | "invalid_size";
|
|
7
|
+
size?: number;
|
|
8
|
+
className?: string;
|
|
9
|
+
};
|
|
10
|
+
export type FileInspectionResult = {
|
|
11
|
+
peer: string;
|
|
12
|
+
msgId: number;
|
|
13
|
+
date: number;
|
|
14
|
+
data: FileCardData;
|
|
15
|
+
chunks: ChunkInspection[];
|
|
16
|
+
format: DownloadMode | "unknown";
|
|
17
|
+
probe?: {
|
|
18
|
+
mode: DownloadMode;
|
|
19
|
+
bytesWritten: number;
|
|
20
|
+
computedUfid: string;
|
|
21
|
+
} | undefined;
|
|
22
|
+
probeError?: string;
|
|
23
|
+
};
|
|
24
|
+
export type FileModeProbe = NonNullable<FileInspectionResult["probe"]>;
|
|
25
|
+
export type FileModeDetectionResult = {
|
|
26
|
+
probe?: FileModeProbe;
|
|
27
|
+
lastError?: string;
|
|
28
|
+
};
|
|
29
|
+
export declare function resolveFileCardRecord(client: TelegramClient, ufid: string, peer?: string): Promise<FileCardRecord>;
|
|
30
|
+
export declare function resolveFileCardRecords(client: TelegramClient, ufids: string[], peer?: string): Promise<FileCardRecord[]>;
|
|
31
|
+
export declare function renameFile(client: TelegramClient, ufid: string, newName: string): Promise<{
|
|
32
|
+
before: FileCardRecord;
|
|
33
|
+
after: {
|
|
34
|
+
data: {
|
|
35
|
+
name: string;
|
|
36
|
+
ufid: string;
|
|
37
|
+
size: number;
|
|
38
|
+
uploadComplete: boolean;
|
|
39
|
+
chunks: number[];
|
|
40
|
+
IV: string;
|
|
41
|
+
};
|
|
42
|
+
msgId: number;
|
|
43
|
+
date: number;
|
|
44
|
+
};
|
|
45
|
+
}>;
|
|
46
|
+
export declare function deleteResolvedFiles(client: TelegramClient, records: FileCardRecord[]): Promise<FileCardRecord[]>;
|
|
47
|
+
export declare function deleteFiles(client: TelegramClient, ufids: string[]): Promise<FileCardRecord[]>;
|
|
48
|
+
export declare function sendFiles(client: TelegramClient, ufids: string[], recipient: string): Promise<{
|
|
49
|
+
source: FileCardRecord;
|
|
50
|
+
recipient: string;
|
|
51
|
+
data: FileCardData;
|
|
52
|
+
}[]>;
|
|
53
|
+
export declare function receiveFiles(client: TelegramClient, source: string, ufids: string[]): Promise<{
|
|
54
|
+
source: string;
|
|
55
|
+
original: FileCardRecord;
|
|
56
|
+
data: FileCardData;
|
|
57
|
+
}[]>;
|
|
58
|
+
export declare function unsendFiles(client: TelegramClient, source: string, ufids: string[]): Promise<FileCardRecord[]>;
|
|
59
|
+
export declare function detectFileMode(expected: {
|
|
60
|
+
size: number;
|
|
61
|
+
ufid: string;
|
|
62
|
+
}, inspectMode: (mode: DownloadMode) => Promise<{
|
|
63
|
+
bytesWritten: number;
|
|
64
|
+
computedUfid: string;
|
|
65
|
+
}>): Promise<FileModeDetectionResult>;
|
|
66
|
+
export declare function inspectFileCard(client: TelegramClient, ufid: string, options?: {
|
|
67
|
+
peer?: string;
|
|
68
|
+
password?: string;
|
|
69
|
+
probe?: boolean;
|
|
70
|
+
}): Promise<FileInspectionResult>;
|
|
71
|
+
export declare function formatDeleteConfirmation(records: FileCardRecord[]): string;
|