@mtcute/node 0.16.7 → 0.16.13
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/chunks/cjs/BpvQ752Q.js +33 -0
- package/chunks/cjs/D7i-4e0W.js +74 -0
- package/chunks/cjs/HP2yqAk_.js +79 -0
- package/chunks/cjs/package.json +3 -0
- package/chunks/es/CKso6cAV.js +75 -0
- package/chunks/es/CnOjjhdK.js +29 -0
- package/chunks/es/HZgHrOPU.js +69 -0
- package/{cjs/client.d.ts → client.d.ts} +3 -4
- package/{cjs/common-internals-node → common-internals-node}/platform.d.ts +1 -1
- package/index.cjs +449 -0
- package/index.d.ts +8 -1
- package/index.js +410 -1
- package/{cjs/methods → methods}/download-file.d.ts +1 -1
- package/{esm/methods → methods}/download-node-stream.d.ts +2 -2
- package/methods.cjs +17 -0
- package/methods.d.ts +3 -1
- package/methods.js +6 -1
- package/package.json +49 -33
- package/{esm/sqlite → sqlite}/driver.d.ts +2 -3
- package/{esm/sqlite → sqlite}/index.d.ts +1 -1
- package/sqlite/sqlite.test.d.ts +1 -0
- package/{cjs/utils → utils}/crypto.d.ts +1 -2
- package/utils/crypto.test.d.ts +1 -0
- package/{cjs/utils → utils}/normalize-file.d.ts +1 -1
- package/utils/stream-utils.test.d.ts +1 -0
- package/{cjs/utils → utils}/tcp.d.ts +4 -5
- package/utils/tcp.test.d.ts +1 -0
- package/utils.cjs +20 -0
- package/utils.d.ts +3 -1
- package/utils.js +9 -1
- package/{cjs/worker.d.ts → worker.d.ts} +1 -2
- package/cjs/client.js +0 -112
- package/cjs/client.js.map +0 -1
- package/cjs/common-internals-node/exit-hook.js +0 -45
- package/cjs/common-internals-node/exit-hook.js.map +0 -1
- package/cjs/common-internals-node/logging.js +0 -34
- package/cjs/common-internals-node/logging.js.map +0 -1
- package/cjs/common-internals-node/platform.js +0 -85
- package/cjs/common-internals-node/platform.js.map +0 -1
- package/cjs/index.js +0 -31
- package/cjs/index.js.map +0 -1
- package/cjs/methods/download-file.js +0 -33
- package/cjs/methods/download-file.js.map +0 -1
- package/cjs/methods/download-node-stream.d.ts +0 -8
- package/cjs/methods/download-node-stream.js +0 -14
- package/cjs/methods/download-node-stream.js.map +0 -1
- package/cjs/methods.js +0 -29
- package/cjs/methods.js.map +0 -1
- package/cjs/package.json +0 -3
- package/cjs/sqlite/driver.d.ts +0 -26
- package/cjs/sqlite/driver.js +0 -29
- package/cjs/sqlite/driver.js.map +0 -1
- package/cjs/sqlite/index.d.ts +0 -8
- package/cjs/sqlite/index.js +0 -18
- package/cjs/sqlite/index.js.map +0 -1
- package/cjs/utils/crypto.js +0 -71
- package/cjs/utils/crypto.js.map +0 -1
- package/cjs/utils/normalize-file.js +0 -30
- package/cjs/utils/normalize-file.js.map +0 -1
- package/cjs/utils/stream-utils.js +0 -76
- package/cjs/utils/stream-utils.js.map +0 -1
- package/cjs/utils/tcp.js +0 -126
- package/cjs/utils/tcp.js.map +0 -1
- package/cjs/utils/version.js +0 -21
- package/cjs/utils/version.js.map +0 -1
- package/cjs/utils.js +0 -26
- package/cjs/utils.js.map +0 -1
- package/cjs/worker.js +0 -48
- package/cjs/worker.js.map +0 -1
- package/esm/client.d.ts +0 -48
- package/esm/client.js +0 -107
- package/esm/client.js.map +0 -1
- package/esm/common-internals-node/exit-hook.d.ts +0 -1
- package/esm/common-internals-node/exit-hook.js +0 -42
- package/esm/common-internals-node/exit-hook.js.map +0 -1
- package/esm/common-internals-node/logging.d.ts +0 -2
- package/esm/common-internals-node/logging.js +0 -31
- package/esm/common-internals-node/logging.js.map +0 -1
- package/esm/common-internals-node/platform.d.ts +0 -18
- package/esm/common-internals-node/platform.js +0 -58
- package/esm/common-internals-node/platform.js.map +0 -1
- package/esm/index.d.ts +0 -8
- package/esm/index.js +0 -9
- package/esm/index.js.map +0 -1
- package/esm/methods/download-file.d.ts +0 -9
- package/esm/methods/download-file.js +0 -30
- package/esm/methods/download-file.js.map +0 -1
- package/esm/methods/download-node-stream.js +0 -11
- package/esm/methods/download-node-stream.js.map +0 -1
- package/esm/methods.d.ts +0 -3
- package/esm/methods.js +0 -4
- package/esm/methods.js.map +0 -1
- package/esm/sqlite/driver.js +0 -22
- package/esm/sqlite/driver.js.map +0 -1
- package/esm/sqlite/index.js +0 -13
- package/esm/sqlite/index.js.map +0 -1
- package/esm/utils/crypto.d.ts +0 -16
- package/esm/utils/crypto.js +0 -69
- package/esm/utils/crypto.js.map +0 -1
- package/esm/utils/normalize-file.d.ts +0 -6
- package/esm/utils/normalize-file.js +0 -27
- package/esm/utils/normalize-file.js.map +0 -1
- package/esm/utils/stream-utils.d.ts +0 -3
- package/esm/utils/stream-utils.js +0 -72
- package/esm/utils/stream-utils.js.map +0 -1
- package/esm/utils/tcp.d.ts +0 -30
- package/esm/utils/tcp.js +0 -118
- package/esm/utils/tcp.js.map +0 -1
- package/esm/utils/version.d.ts +0 -3
- package/esm/utils/version.js +0 -17
- package/esm/utils/version.js.map +0 -1
- package/esm/utils.d.ts +0 -3
- package/esm/utils.js +0 -4
- package/esm/utils.js.map +0 -1
- package/esm/worker.d.ts +0 -11
- package/esm/worker.js +0 -43
- package/esm/worker.js.map +0 -1
- /package/{cjs/common-internals-node → common-internals-node}/exit-hook.d.ts +0 -0
- /package/{cjs/common-internals-node → common-internals-node}/logging.d.ts +0 -0
- /package/{cjs/index.d.ts → index.d.cts} +0 -0
- /package/{cjs/methods.d.ts → methods.d.cts} +0 -0
- /package/{cjs/utils → utils}/stream-utils.d.ts +0 -0
- /package/{cjs/utils → utils}/version.d.ts +0 -0
- /package/{cjs/utils.d.ts → utils.d.cts} +0 -0
package/cjs/utils/crypto.js
DELETED
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.NodeCryptoProvider = exports.BaseNodeCryptoProvider = void 0;
|
|
4
|
-
const node_crypto_1 = require("node:crypto");
|
|
5
|
-
const promises_1 = require("node:fs/promises");
|
|
6
|
-
const node_zlib_1 = require("node:zlib");
|
|
7
|
-
const utils_js_1 = require("@mtcute/core/utils.js");
|
|
8
|
-
const wasm_1 = require("@mtcute/wasm");
|
|
9
|
-
class BaseNodeCryptoProvider extends utils_js_1.BaseCryptoProvider {
|
|
10
|
-
createAesCtr(key, iv) {
|
|
11
|
-
const cipher = (0, node_crypto_1.createCipheriv)(`aes-${key.length * 8}-ctr`, key, iv);
|
|
12
|
-
const update = (data) => cipher.update(data);
|
|
13
|
-
return {
|
|
14
|
-
process: update,
|
|
15
|
-
};
|
|
16
|
-
}
|
|
17
|
-
pbkdf2(password, salt, iterations, keylen = 64, algo = 'sha512') {
|
|
18
|
-
return new Promise((resolve, reject) => (0, node_crypto_1.pbkdf2)(password, salt, iterations, keylen, algo, (err, buf) => err !== null ? reject(err) : resolve(buf)));
|
|
19
|
-
}
|
|
20
|
-
sha1(data) {
|
|
21
|
-
return (0, node_crypto_1.createHash)('sha1').update(data).digest();
|
|
22
|
-
}
|
|
23
|
-
sha256(data) {
|
|
24
|
-
return (0, node_crypto_1.createHash)('sha256').update(data).digest();
|
|
25
|
-
}
|
|
26
|
-
hmacSha256(data, key) {
|
|
27
|
-
return (0, node_crypto_1.createHmac)('sha256', key).update(data).digest();
|
|
28
|
-
}
|
|
29
|
-
gzip(data, maxSize) {
|
|
30
|
-
try {
|
|
31
|
-
// telegram accepts both zlib and gzip, but zlib is faster and has less overhead, so we use it here
|
|
32
|
-
return (0, node_zlib_1.deflateSync)(data, {
|
|
33
|
-
maxOutputLength: maxSize,
|
|
34
|
-
});
|
|
35
|
-
// hot path, avoid additional runtime checks
|
|
36
|
-
}
|
|
37
|
-
catch (e) {
|
|
38
|
-
if (e.code === 'ERR_BUFFER_TOO_LARGE') {
|
|
39
|
-
return null;
|
|
40
|
-
}
|
|
41
|
-
throw e;
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
gunzip(data) {
|
|
45
|
-
return (0, node_zlib_1.gunzipSync)(data);
|
|
46
|
-
}
|
|
47
|
-
randomFill(buf) {
|
|
48
|
-
(0, node_crypto_1.randomFillSync)(buf);
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
exports.BaseNodeCryptoProvider = BaseNodeCryptoProvider;
|
|
52
|
-
class NodeCryptoProvider extends BaseNodeCryptoProvider {
|
|
53
|
-
async initialize() {
|
|
54
|
-
//
|
|
55
|
-
const wasmFile = require.resolve('@mtcute/wasm/mtcute.wasm');
|
|
56
|
-
const wasm = await (0, promises_1.readFile)(wasmFile);
|
|
57
|
-
(0, wasm_1.initSync)(wasm);
|
|
58
|
-
}
|
|
59
|
-
createAesIge(key, iv) {
|
|
60
|
-
return {
|
|
61
|
-
encrypt(data) {
|
|
62
|
-
return (0, wasm_1.ige256Encrypt)(data, key, iv);
|
|
63
|
-
},
|
|
64
|
-
decrypt(data) {
|
|
65
|
-
return (0, wasm_1.ige256Decrypt)(data, key, iv);
|
|
66
|
-
},
|
|
67
|
-
};
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
exports.NodeCryptoProvider = NodeCryptoProvider;
|
|
71
|
-
//# sourceMappingURL=crypto.js.map
|
package/cjs/utils/crypto.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"crypto.js","sourceRoot":"","sources":["../../../src/utils/crypto.ts"],"names":[],"mappings":"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","sourcesContent":["import { createCipheriv, createHash, createHmac, pbkdf2, randomFillSync } from 'node:crypto'\nimport { readFile } from 'node:fs/promises'\nimport { createRequire } from 'node:module'\nimport { deflateSync, gunzipSync } from 'node:zlib'\n\nimport type { IAesCtr, ICryptoProvider, IEncryptionScheme } from '@mtcute/core/utils.js'\nimport { BaseCryptoProvider } from '@mtcute/core/utils.js'\nimport { ige256Decrypt, ige256Encrypt, initSync } from '@mtcute/wasm'\n\nexport abstract class BaseNodeCryptoProvider extends BaseCryptoProvider {\n createAesCtr(key: Uint8Array, iv: Uint8Array): IAesCtr {\n const cipher = createCipheriv(`aes-${key.length * 8}-ctr`, key, iv)\n\n const update = (data: Uint8Array) => cipher.update(data)\n\n return {\n process: update,\n }\n }\n\n pbkdf2(\n password: Uint8Array,\n salt: Uint8Array,\n iterations: number,\n keylen = 64,\n algo = 'sha512',\n ): Promise<Uint8Array> {\n return new Promise((resolve, reject) =>\n pbkdf2(password, salt, iterations, keylen, algo, (err: Error | null, buf: Uint8Array) =>\n err !== null ? reject(err) : resolve(buf)),\n )\n }\n\n sha1(data: Uint8Array): Uint8Array {\n return createHash('sha1').update(data).digest()\n }\n\n sha256(data: Uint8Array): Uint8Array {\n return createHash('sha256').update(data).digest()\n }\n\n hmacSha256(data: Uint8Array, key: Uint8Array): Uint8Array {\n return createHmac('sha256', key).update(data).digest()\n }\n\n gzip(data: Uint8Array, maxSize: number): Uint8Array | null {\n try {\n // telegram accepts both zlib and gzip, but zlib is faster and has less overhead, so we use it here\n return deflateSync(data, {\n maxOutputLength: maxSize,\n })\n // hot path, avoid additional runtime checks\n } catch (e: any) {\n if (e.code === 'ERR_BUFFER_TOO_LARGE') {\n return null\n }\n\n throw e\n }\n }\n\n gunzip(data: Uint8Array): Uint8Array {\n return gunzipSync(data)\n }\n\n randomFill(buf: Uint8Array): void {\n randomFillSync(buf)\n }\n}\n\nexport class NodeCryptoProvider extends BaseNodeCryptoProvider implements ICryptoProvider {\n async initialize(): Promise<void> {\n // \n const wasmFile = require.resolve('@mtcute/wasm/mtcute.wasm')\n const wasm = await readFile(wasmFile)\n initSync(wasm)\n }\n\n createAesIge(key: Uint8Array, iv: Uint8Array): IEncryptionScheme {\n return {\n encrypt(data: Uint8Array): Uint8Array {\n return ige256Encrypt(data, key, iv)\n },\n decrypt(data: Uint8Array): Uint8Array {\n return ige256Decrypt(data, key, iv)\n },\n }\n }\n}\n"]}
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.normalizeFile = normalizeFile;
|
|
4
|
-
const node_fs_1 = require("node:fs");
|
|
5
|
-
const promises_1 = require("node:fs/promises");
|
|
6
|
-
const node_path_1 = require("node:path");
|
|
7
|
-
const node_stream_1 = require("node:stream");
|
|
8
|
-
const stream_utils_js_1 = require("./stream-utils.js");
|
|
9
|
-
async function normalizeFile(file) {
|
|
10
|
-
if (typeof file === 'string') {
|
|
11
|
-
file = (0, node_fs_1.createReadStream)(file);
|
|
12
|
-
}
|
|
13
|
-
if (file instanceof node_fs_1.ReadStream) {
|
|
14
|
-
const fileName = (0, node_path_1.basename)(file.path.toString());
|
|
15
|
-
const fileSize = await (0, promises_1.stat)(file.path.toString()).then(stat => stat.size);
|
|
16
|
-
return {
|
|
17
|
-
file: (0, stream_utils_js_1.nodeStreamToWeb)(file),
|
|
18
|
-
fileName,
|
|
19
|
-
fileSize,
|
|
20
|
-
};
|
|
21
|
-
}
|
|
22
|
-
if (file instanceof node_stream_1.Readable) {
|
|
23
|
-
return {
|
|
24
|
-
file: (0, stream_utils_js_1.nodeStreamToWeb)(file),
|
|
25
|
-
};
|
|
26
|
-
}
|
|
27
|
-
// string -> ReadStream, thus already handled
|
|
28
|
-
return null;
|
|
29
|
-
}
|
|
30
|
-
//# sourceMappingURL=normalize-file.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"normalize-file.js","sourceRoot":"","sources":["../../../src/utils/normalize-file.ts"],"names":[],"mappings":";;AASA,sCA4BC;AArCD,qCAAsD;AACtD,+CAAuC;AACvC,yCAAoC;AACpC,6CAAsC;AAItC,uDAAmD;AAE5C,KAAK,UAAU,aAAa,CAAC,IAAoB;IAKpD,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC3B,IAAI,GAAG,IAAA,0BAAgB,EAAC,IAAI,CAAC,CAAA;IACjC,CAAC;IAED,IAAI,IAAI,YAAY,oBAAU,EAAE,CAAC;QAC7B,MAAM,QAAQ,GAAG,IAAA,oBAAQ,EAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAA;QAC/C,MAAM,QAAQ,GAAG,MAAM,IAAA,eAAI,EAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAEzE,OAAO;YACH,IAAI,EAAE,IAAA,iCAAe,EAAC,IAAI,CAAC;YAC3B,QAAQ;YACR,QAAQ;SACX,CAAA;IACL,CAAC;IAED,IAAI,IAAI,YAAY,sBAAQ,EAAE,CAAC;QAC3B,OAAO;YACH,IAAI,EAAE,IAAA,iCAAe,EAAC,IAAI,CAAC;SAC9B,CAAA;IACL,CAAC;IAED,6CAA6C;IAC7C,OAAO,IAAI,CAAA;AACf,CAAC","sourcesContent":["import { ReadStream, createReadStream } from 'node:fs'\nimport { stat } from 'node:fs/promises'\nimport { basename } from 'node:path'\nimport { Readable } from 'node:stream'\n\nimport type { UploadFileLike } from '@mtcute/core'\n\nimport { nodeStreamToWeb } from './stream-utils.js'\n\nexport async function normalizeFile(file: UploadFileLike): Promise<{\n file: UploadFileLike\n fileName?: string | undefined\n fileSize?: number\n} | null> {\n if (typeof file === 'string') {\n file = createReadStream(file)\n }\n\n if (file instanceof ReadStream) {\n const fileName = basename(file.path.toString())\n const fileSize = await stat(file.path.toString()).then(stat => stat.size)\n\n return {\n file: nodeStreamToWeb(file),\n fileName,\n fileSize,\n }\n }\n\n if (file instanceof Readable) {\n return {\n file: nodeStreamToWeb(file),\n }\n }\n\n // string -> ReadStream, thus already handled\n return null\n}\n"]}
|
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.nodeStreamToWeb = nodeStreamToWeb;
|
|
4
|
-
exports.webStreamToNode = webStreamToNode;
|
|
5
|
-
const node_stream_1 = require("node:stream");
|
|
6
|
-
const version_js_1 = require("./version.js");
|
|
7
|
-
function nodeStreamToWeb(stream) {
|
|
8
|
-
if (typeof node_stream_1.Readable.toWeb === 'function') {
|
|
9
|
-
return node_stream_1.Readable.toWeb(stream);
|
|
10
|
-
}
|
|
11
|
-
// otherwise, use a silly little adapter
|
|
12
|
-
stream.pause();
|
|
13
|
-
return new ReadableStream({
|
|
14
|
-
start(c) {
|
|
15
|
-
stream.on('data', (chunk) => {
|
|
16
|
-
c.enqueue(chunk);
|
|
17
|
-
});
|
|
18
|
-
stream.on('end', () => {
|
|
19
|
-
c.close();
|
|
20
|
-
});
|
|
21
|
-
stream.on('error', (err) => {
|
|
22
|
-
c.error(err);
|
|
23
|
-
});
|
|
24
|
-
},
|
|
25
|
-
pull() {
|
|
26
|
-
stream.resume();
|
|
27
|
-
},
|
|
28
|
-
});
|
|
29
|
-
}
|
|
30
|
-
function webStreamToNode(stream) {
|
|
31
|
-
if (typeof node_stream_1.Readable.fromWeb === 'function'
|
|
32
|
-
&& (0, version_js_1.isNodeVersionAfter)(18, 13, 0) // https://github.com/nodejs/node/issues/42694
|
|
33
|
-
) {
|
|
34
|
-
// @ts-expect-error node typings are wrong lmao
|
|
35
|
-
return node_stream_1.Readable.fromWeb(stream);
|
|
36
|
-
}
|
|
37
|
-
const reader = stream.getReader();
|
|
38
|
-
let ended = false;
|
|
39
|
-
const readable = new node_stream_1.Readable({
|
|
40
|
-
async read() {
|
|
41
|
-
try {
|
|
42
|
-
const { done, value } = await reader.read();
|
|
43
|
-
if (done) {
|
|
44
|
-
this.push(null);
|
|
45
|
-
}
|
|
46
|
-
else {
|
|
47
|
-
this.push(Buffer.from(value.buffer, value.byteOffset, value.byteLength));
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
catch (err) {
|
|
51
|
-
this.destroy(err);
|
|
52
|
-
}
|
|
53
|
-
},
|
|
54
|
-
destroy(error, cb) {
|
|
55
|
-
if (!ended) {
|
|
56
|
-
void reader
|
|
57
|
-
.cancel(error)
|
|
58
|
-
.catch(() => { })
|
|
59
|
-
.then(() => {
|
|
60
|
-
cb(error);
|
|
61
|
-
});
|
|
62
|
-
return;
|
|
63
|
-
}
|
|
64
|
-
cb(error);
|
|
65
|
-
},
|
|
66
|
-
});
|
|
67
|
-
reader.closed
|
|
68
|
-
.then(() => {
|
|
69
|
-
ended = true;
|
|
70
|
-
})
|
|
71
|
-
.catch((err) => {
|
|
72
|
-
readable.destroy(err);
|
|
73
|
-
});
|
|
74
|
-
return readable;
|
|
75
|
-
}
|
|
76
|
-
//# sourceMappingURL=stream-utils.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"stream-utils.js","sourceRoot":"","sources":["../../../src/utils/stream-utils.ts"],"names":[],"mappings":";;AAIA,0CAyBC;AAED,0CAmDC;AAlFD,6CAAsC;AAEtC,6CAAiD;AAEjD,SAAgB,eAAe,CAAC,MAAgB;IAC5C,IAAI,OAAO,sBAAQ,CAAC,KAAK,KAAK,UAAU,EAAE,CAAC;QACvC,OAAO,sBAAQ,CAAC,KAAK,CAAC,MAAM,CAA0C,CAAA;IAC1E,CAAC;IAED,wCAAwC;IAExC,MAAM,CAAC,KAAK,EAAE,CAAA;IAEd,OAAO,IAAI,cAAc,CAAC;QACtB,KAAK,CAAC,CAAC;YACH,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;gBACxB,CAAC,CAAC,OAAO,CAAC,KAAmB,CAAC,CAAA;YAClC,CAAC,CAAC,CAAA;YACF,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;gBAClB,CAAC,CAAC,KAAK,EAAE,CAAA;YACb,CAAC,CAAC,CAAA;YACF,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;gBACvB,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;YAChB,CAAC,CAAC,CAAA;QACN,CAAC;QACD,IAAI;YACA,MAAM,CAAC,MAAM,EAAE,CAAA;QACnB,CAAC;KACJ,CAAC,CAAA;AACN,CAAC;AAED,SAAgB,eAAe,CAAC,MAAkC;IAC9D,IACI,OAAO,sBAAQ,CAAC,OAAO,KAAK,UAAU;WACnC,IAAA,+BAAkB,EAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,8CAA8C;MACjF,CAAC;QACC,+CAA+C;QAC/C,OAAO,sBAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;IACnC,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,EAAE,CAAA;IACjC,IAAI,KAAK,GAAG,KAAK,CAAA;IAEjB,MAAM,QAAQ,GAAG,IAAI,sBAAQ,CAAC;QAC1B,KAAK,CAAC,IAAI;YACN,IAAI,CAAC;gBACD,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAA;gBAE3C,IAAI,IAAI,EAAE,CAAC;oBACP,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;gBACnB,CAAC;qBAAM,CAAC;oBACJ,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC,CAAA;gBAC5E,CAAC;YACL,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACX,IAAI,CAAC,OAAO,CAAC,GAAY,CAAC,CAAA;YAC9B,CAAC;QACL,CAAC;QACD,OAAO,CAAC,KAAK,EAAE,EAAE;YACb,IAAI,CAAC,KAAK,EAAE,CAAC;gBACT,KAAK,MAAM;qBACN,MAAM,CAAC,KAAK,CAAC;qBACb,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC;qBACf,IAAI,CAAC,GAAG,EAAE;oBACP,EAAE,CAAC,KAAK,CAAC,CAAA;gBACb,CAAC,CAAC,CAAA;gBAEN,OAAM;YACV,CAAC;YAED,EAAE,CAAC,KAAK,CAAC,CAAA;QACb,CAAC;KACJ,CAAC,CAAA;IAEF,MAAM,CAAC,MAAM;SACR,IAAI,CAAC,GAAG,EAAE;QACP,KAAK,GAAG,IAAI,CAAA;IAChB,CAAC,CAAC;SACD,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;QACX,QAAQ,CAAC,OAAO,CAAC,GAAY,CAAC,CAAA;IAClC,CAAC,CAAC,CAAA;IAEN,OAAO,QAAQ,CAAA;AACnB,CAAC","sourcesContent":["import { Readable } from 'node:stream'\n\nimport { isNodeVersionAfter } from './version.js'\n\nexport function nodeStreamToWeb(stream: Readable): ReadableStream<Uint8Array> {\n if (typeof Readable.toWeb === 'function') {\n return Readable.toWeb(stream) as unknown as ReadableStream<Uint8Array>\n }\n\n // otherwise, use a silly little adapter\n\n stream.pause()\n\n return new ReadableStream({\n start(c) {\n stream.on('data', (chunk) => {\n c.enqueue(chunk as Uint8Array)\n })\n stream.on('end', () => {\n c.close()\n })\n stream.on('error', (err) => {\n c.error(err)\n })\n },\n pull() {\n stream.resume()\n },\n })\n}\n\nexport function webStreamToNode(stream: ReadableStream<Uint8Array>): Readable {\n if (\n typeof Readable.fromWeb === 'function'\n && isNodeVersionAfter(18, 13, 0) // https://github.com/nodejs/node/issues/42694\n ) {\n // @ts-expect-error node typings are wrong lmao\n return Readable.fromWeb(stream)\n }\n\n const reader = stream.getReader()\n let ended = false\n\n const readable = new Readable({\n async read() {\n try {\n const { done, value } = await reader.read()\n\n if (done) {\n this.push(null)\n } else {\n this.push(Buffer.from(value.buffer, value.byteOffset, value.byteLength))\n }\n } catch (err) {\n this.destroy(err as Error)\n }\n },\n destroy(error, cb) {\n if (!ended) {\n void reader\n .cancel(error)\n .catch(() => {})\n .then(() => {\n cb(error)\n })\n\n return\n }\n\n cb(error)\n },\n })\n\n reader.closed\n .then(() => {\n ended = true\n })\n .catch((err) => {\n readable.destroy(err as Error)\n })\n\n return readable\n}\n"]}
|
package/cjs/utils/tcp.js
DELETED
|
@@ -1,126 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.TcpTransport = exports.BaseTcpTransport = void 0;
|
|
7
|
-
const node_events_1 = __importDefault(require("node:events"));
|
|
8
|
-
const node_net_1 = require("node:net");
|
|
9
|
-
const core_1 = require("@mtcute/core");
|
|
10
|
-
/**
|
|
11
|
-
* Base for TCP transports.
|
|
12
|
-
* Subclasses must provide packet codec in `_packetCodec` property
|
|
13
|
-
*/
|
|
14
|
-
class BaseTcpTransport extends node_events_1.default {
|
|
15
|
-
_currentDc = null;
|
|
16
|
-
_state = core_1.TransportState.Idle;
|
|
17
|
-
_socket = null;
|
|
18
|
-
_crypto;
|
|
19
|
-
log;
|
|
20
|
-
packetCodecInitialized = false;
|
|
21
|
-
_updateLogPrefix() {
|
|
22
|
-
if (this._currentDc) {
|
|
23
|
-
this.log.prefix = `[TCP:${this._currentDc.ipAddress}:${this._currentDc.port}] `;
|
|
24
|
-
}
|
|
25
|
-
else {
|
|
26
|
-
this.log.prefix = '[TCP:disconnected] ';
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
setup(crypto, log) {
|
|
30
|
-
this._crypto = crypto;
|
|
31
|
-
this.log = log.create('tcp');
|
|
32
|
-
this._updateLogPrefix();
|
|
33
|
-
}
|
|
34
|
-
state() {
|
|
35
|
-
return this._state;
|
|
36
|
-
}
|
|
37
|
-
currentDc() {
|
|
38
|
-
return this._currentDc;
|
|
39
|
-
}
|
|
40
|
-
// eslint-disable-next-line unused-imports/no-unused-vars
|
|
41
|
-
connect(dc, testMode) {
|
|
42
|
-
if (this._state !== core_1.TransportState.Idle) {
|
|
43
|
-
throw new core_1.MtcuteError('Transport is not IDLE');
|
|
44
|
-
}
|
|
45
|
-
if (!this.packetCodecInitialized) {
|
|
46
|
-
this._packetCodec.setup?.(this._crypto, this.log);
|
|
47
|
-
this._packetCodec.on('error', err => this.emit('error', err));
|
|
48
|
-
this._packetCodec.on('packet', buf => this.emit('message', buf));
|
|
49
|
-
this.packetCodecInitialized = true;
|
|
50
|
-
}
|
|
51
|
-
this._state = core_1.TransportState.Connecting;
|
|
52
|
-
this._currentDc = dc;
|
|
53
|
-
this._updateLogPrefix();
|
|
54
|
-
this.log.debug('connecting to %j', dc);
|
|
55
|
-
this._socket = (0, node_net_1.connect)(dc.port, dc.ipAddress, this.handleConnect.bind(this));
|
|
56
|
-
this._socket.on('data', (data) => {
|
|
57
|
-
this._packetCodec.feed(data);
|
|
58
|
-
});
|
|
59
|
-
this._socket.on('error', this.handleError.bind(this));
|
|
60
|
-
this._socket.on('close', this.close.bind(this));
|
|
61
|
-
}
|
|
62
|
-
close() {
|
|
63
|
-
if (this._state === core_1.TransportState.Idle)
|
|
64
|
-
return;
|
|
65
|
-
this.log.info('connection closed');
|
|
66
|
-
this._state = core_1.TransportState.Idle;
|
|
67
|
-
this._socket.removeAllListeners();
|
|
68
|
-
this._socket.destroy();
|
|
69
|
-
this._socket = null;
|
|
70
|
-
this._currentDc = null;
|
|
71
|
-
this._packetCodec.reset();
|
|
72
|
-
this.emit('close');
|
|
73
|
-
}
|
|
74
|
-
handleError(error) {
|
|
75
|
-
this.log.error('error: %s', error.stack);
|
|
76
|
-
if (this.listenerCount('error') > 0) {
|
|
77
|
-
this.emit('error', error);
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
handleConnect() {
|
|
81
|
-
this.log.info('connected');
|
|
82
|
-
Promise.resolve(this._packetCodec.tag())
|
|
83
|
-
.then((initialMessage) => {
|
|
84
|
-
if (initialMessage.length) {
|
|
85
|
-
this._socket.write(initialMessage, (err) => {
|
|
86
|
-
if (err) {
|
|
87
|
-
this.log.error('failed to write initial message: %s', err.stack);
|
|
88
|
-
this.emit('error');
|
|
89
|
-
this.close();
|
|
90
|
-
}
|
|
91
|
-
else {
|
|
92
|
-
this._state = core_1.TransportState.Ready;
|
|
93
|
-
this.emit('ready');
|
|
94
|
-
}
|
|
95
|
-
});
|
|
96
|
-
}
|
|
97
|
-
else {
|
|
98
|
-
this._state = core_1.TransportState.Ready;
|
|
99
|
-
this.emit('ready');
|
|
100
|
-
}
|
|
101
|
-
})
|
|
102
|
-
.catch(err => this.emit('error', err));
|
|
103
|
-
}
|
|
104
|
-
async send(bytes) {
|
|
105
|
-
const framed = await this._packetCodec.encode(bytes);
|
|
106
|
-
if (this._state !== core_1.TransportState.Ready) {
|
|
107
|
-
throw new core_1.MtcuteError('Transport is not READY');
|
|
108
|
-
}
|
|
109
|
-
return new Promise((resolve, reject) => {
|
|
110
|
-
this._socket.write(framed, (error) => {
|
|
111
|
-
if (error) {
|
|
112
|
-
reject(error);
|
|
113
|
-
}
|
|
114
|
-
else {
|
|
115
|
-
resolve();
|
|
116
|
-
}
|
|
117
|
-
});
|
|
118
|
-
});
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
exports.BaseTcpTransport = BaseTcpTransport;
|
|
122
|
-
class TcpTransport extends BaseTcpTransport {
|
|
123
|
-
_packetCodec = new core_1.IntermediatePacketCodec();
|
|
124
|
-
}
|
|
125
|
-
exports.TcpTransport = TcpTransport;
|
|
126
|
-
//# sourceMappingURL=tcp.js.map
|
package/cjs/utils/tcp.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tcp.js","sourceRoot":"","sources":["../../../src/utils/tcp.ts"],"names":[],"mappings":"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","sourcesContent":["import EventEmitter from 'node:events'\nimport type { Socket } from 'node:net'\nimport { connect } from 'node:net'\n\nimport type { IPacketCodec, ITelegramTransport } from '@mtcute/core'\nimport { IntermediatePacketCodec, MtcuteError, TransportState } from '@mtcute/core'\nimport type { BasicDcOption, ICryptoProvider, Logger } from '@mtcute/core/utils.js'\n\n/**\n * Base for TCP transports.\n * Subclasses must provide packet codec in `_packetCodec` property\n */\nexport abstract class BaseTcpTransport extends EventEmitter implements ITelegramTransport {\n protected _currentDc: BasicDcOption | null = null\n protected _state: TransportState = TransportState.Idle\n protected _socket: Socket | null = null\n\n abstract _packetCodec: IPacketCodec\n protected _crypto!: ICryptoProvider\n protected log!: Logger\n\n packetCodecInitialized = false\n\n private _updateLogPrefix() {\n if (this._currentDc) {\n this.log.prefix = `[TCP:${this._currentDc.ipAddress}:${this._currentDc.port}] `\n } else {\n this.log.prefix = '[TCP:disconnected] '\n }\n }\n\n setup(crypto: ICryptoProvider, log: Logger): void {\n this._crypto = crypto\n this.log = log.create('tcp')\n this._updateLogPrefix()\n }\n\n state(): TransportState {\n return this._state\n }\n\n currentDc(): BasicDcOption | null {\n return this._currentDc\n }\n\n // eslint-disable-next-line unused-imports/no-unused-vars\n connect(dc: BasicDcOption, testMode: boolean): void {\n if (this._state !== TransportState.Idle) {\n throw new MtcuteError('Transport is not IDLE')\n }\n\n if (!this.packetCodecInitialized) {\n this._packetCodec.setup?.(this._crypto, this.log)\n this._packetCodec.on('error', err => this.emit('error', err))\n this._packetCodec.on('packet', buf => this.emit('message', buf))\n this.packetCodecInitialized = true\n }\n\n this._state = TransportState.Connecting\n this._currentDc = dc\n this._updateLogPrefix()\n\n this.log.debug('connecting to %j', dc)\n\n this._socket = connect(dc.port, dc.ipAddress, this.handleConnect.bind(this))\n\n this._socket.on('data', (data) => {\n this._packetCodec.feed(data)\n })\n this._socket.on('error', this.handleError.bind(this))\n this._socket.on('close', this.close.bind(this))\n }\n\n close(): void {\n if (this._state === TransportState.Idle) return\n this.log.info('connection closed')\n\n this._state = TransportState.Idle\n this._socket!.removeAllListeners()\n this._socket!.destroy()\n this._socket = null\n this._currentDc = null\n this._packetCodec.reset()\n this.emit('close')\n }\n\n handleError(error: Error): void {\n this.log.error('error: %s', error.stack)\n\n if (this.listenerCount('error') > 0) {\n this.emit('error', error)\n }\n }\n\n handleConnect(): void {\n this.log.info('connected')\n\n Promise.resolve(this._packetCodec.tag())\n .then((initialMessage) => {\n if (initialMessage.length) {\n this._socket!.write(initialMessage, (err) => {\n if (err) {\n this.log.error('failed to write initial message: %s', err.stack)\n this.emit('error')\n this.close()\n } else {\n this._state = TransportState.Ready\n this.emit('ready')\n }\n })\n } else {\n this._state = TransportState.Ready\n this.emit('ready')\n }\n })\n .catch(err => this.emit('error', err))\n }\n\n async send(bytes: Uint8Array): Promise<void> {\n const framed = await this._packetCodec.encode(bytes)\n\n if (this._state !== TransportState.Ready) {\n throw new MtcuteError('Transport is not READY')\n }\n\n return new Promise((resolve, reject) => {\n this._socket!.write(framed, (error) => {\n if (error) {\n reject(error)\n } else {\n resolve()\n }\n })\n })\n }\n}\n\nexport class TcpTransport extends BaseTcpTransport {\n _packetCodec: IntermediatePacketCodec = new IntermediatePacketCodec()\n}\n"]}
|
package/cjs/utils/version.js
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.NODE_VERSION_TUPLE = exports.NODE_VERSION = void 0;
|
|
4
|
-
exports.isNodeVersionAfter = isNodeVersionAfter;
|
|
5
|
-
exports.NODE_VERSION = typeof process !== 'undefined' && 'node' in process.versions ? process.versions.node : null;
|
|
6
|
-
exports.NODE_VERSION_TUPLE = exports.NODE_VERSION ? /* #__PURE__ */ exports.NODE_VERSION.split('.').map(Number) : null;
|
|
7
|
-
function isNodeVersionAfter(major, minor, patch) {
|
|
8
|
-
if (!exports.NODE_VERSION_TUPLE)
|
|
9
|
-
return true; // assume non-node environment is always "after"
|
|
10
|
-
const [a, b, c] = exports.NODE_VERSION_TUPLE;
|
|
11
|
-
if (a > major)
|
|
12
|
-
return true;
|
|
13
|
-
if (a < major)
|
|
14
|
-
return false;
|
|
15
|
-
if (b > minor)
|
|
16
|
-
return true;
|
|
17
|
-
if (b < minor)
|
|
18
|
-
return false;
|
|
19
|
-
return c >= patch;
|
|
20
|
-
}
|
|
21
|
-
//# sourceMappingURL=version.js.map
|
package/cjs/utils/version.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../../src/utils/version.ts"],"names":[],"mappings":";;;AAKA,gDAUC;AAfY,QAAA,YAAY,GACnB,OAAO,OAAO,KAAK,WAAW,IAAI,MAAM,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAA;AACpF,QAAA,kBAAkB,GACzB,oBAAY,CAAC,CAAC,CAAC,eAAe,CAAC,oBAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;AAE/E,SAAgB,kBAAkB,CAAC,KAAa,EAAE,KAAa,EAAE,KAAa;IAC1E,IAAI,CAAC,0BAAkB;QAAE,OAAO,IAAI,CAAA,CAAC,gDAAgD;IAErF,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,0BAAkB,CAAA;IACpC,IAAI,CAAC,GAAG,KAAK;QAAE,OAAO,IAAI,CAAA;IAC1B,IAAI,CAAC,GAAG,KAAK;QAAE,OAAO,KAAK,CAAA;IAC3B,IAAI,CAAC,GAAG,KAAK;QAAE,OAAO,IAAI,CAAA;IAC1B,IAAI,CAAC,GAAG,KAAK;QAAE,OAAO,KAAK,CAAA;IAE3B,OAAO,CAAC,IAAI,KAAK,CAAA;AACrB,CAAC","sourcesContent":["export const NODE_VERSION: string | null\n = typeof process !== 'undefined' && 'node' in process.versions ? process.versions.node : null\nexport const NODE_VERSION_TUPLE: number[] | null\n = NODE_VERSION ? /* #__PURE__ */ NODE_VERSION.split('.').map(Number) : null\n\nexport function isNodeVersionAfter(major: number, minor: number, patch: number): boolean {\n if (!NODE_VERSION_TUPLE) return true // assume non-node environment is always \"after\"\n\n const [a, b, c] = NODE_VERSION_TUPLE\n if (a > major) return true\n if (a < major) return false\n if (b > minor) return true\n if (b < minor) return false\n\n return c >= patch\n}\n"]}
|
package/cjs/utils.js
DELETED
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
if (typeof globalThis !== 'undefined' && !globalThis._MTCUTE_CJS_DEPRECATION_WARNED) {
|
|
3
|
-
globalThis._MTCUTE_CJS_DEPRECATION_WARNED = true
|
|
4
|
-
console.warn("[@mtcute/node] CommonJS support is deprecated and will be removed soon. Please consider switching to ESM, it's "+(new Date()).getFullYear()+" already.")
|
|
5
|
-
console.warn("[@mtcute/node] Learn more about switching to ESM: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c")
|
|
6
|
-
}
|
|
7
|
-
"use strict";
|
|
8
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
9
|
-
if (k2 === undefined) k2 = k;
|
|
10
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
11
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
12
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
13
|
-
}
|
|
14
|
-
Object.defineProperty(o, k2, desc);
|
|
15
|
-
}) : (function(o, m, k, k2) {
|
|
16
|
-
if (k2 === undefined) k2 = k;
|
|
17
|
-
o[k2] = m[k];
|
|
18
|
-
}));
|
|
19
|
-
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
20
|
-
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
21
|
-
};
|
|
22
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
23
|
-
__exportStar(require("./utils/crypto.js"), exports);
|
|
24
|
-
__exportStar(require("./utils/stream-utils.js"), exports);
|
|
25
|
-
__exportStar(require("@mtcute/core/utils.js"), exports);
|
|
26
|
-
//# sourceMappingURL=utils.js.map
|
package/cjs/utils.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,oDAAiC;AACjC,0DAAuC;AACvC,wDAAqC","sourcesContent":["export * from './utils/crypto.js'\nexport * from './utils/stream-utils.js'\nexport * from '@mtcute/core/utils.js'\n"]}
|
package/cjs/worker.js
DELETED
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.TelegramWorkerPort = exports.TelegramWorker = void 0;
|
|
4
|
-
const node_worker_threads_1 = require("node:worker_threads");
|
|
5
|
-
const platform_js_1 = require("@mtcute/core/platform.js");
|
|
6
|
-
const worker_js_1 = require("@mtcute/core/worker.js");
|
|
7
|
-
const platform_js_2 = require("./common-internals-node/platform.js");
|
|
8
|
-
let _registered = false;
|
|
9
|
-
class TelegramWorker extends worker_js_1.TelegramWorker {
|
|
10
|
-
registerWorker(handler) {
|
|
11
|
-
if (!node_worker_threads_1.parentPort) {
|
|
12
|
-
throw new Error('TelegramWorker must be created from a worker thread');
|
|
13
|
-
}
|
|
14
|
-
if (_registered) {
|
|
15
|
-
throw new Error('TelegramWorker must be created only once');
|
|
16
|
-
}
|
|
17
|
-
_registered = true;
|
|
18
|
-
const port = node_worker_threads_1.parentPort;
|
|
19
|
-
const respond = port.postMessage.bind(port);
|
|
20
|
-
// eslint-disable-next-line ts/no-unsafe-argument
|
|
21
|
-
node_worker_threads_1.parentPort.on('message', message => handler(message, respond));
|
|
22
|
-
return respond;
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
exports.TelegramWorker = TelegramWorker;
|
|
26
|
-
class TelegramWorkerPort extends worker_js_1.TelegramWorkerPort {
|
|
27
|
-
options;
|
|
28
|
-
constructor(options) {
|
|
29
|
-
(0, platform_js_1.setPlatform)(new platform_js_2.NodePlatform());
|
|
30
|
-
super(options);
|
|
31
|
-
this.options = options;
|
|
32
|
-
}
|
|
33
|
-
connectToWorker(worker, handler) {
|
|
34
|
-
if (!(worker instanceof node_worker_threads_1.Worker)) {
|
|
35
|
-
throw new TypeError('Only worker_threads are supported');
|
|
36
|
-
}
|
|
37
|
-
const send = worker.postMessage.bind(worker);
|
|
38
|
-
worker.on('message', handler);
|
|
39
|
-
return [
|
|
40
|
-
send,
|
|
41
|
-
() => {
|
|
42
|
-
worker.off('message', handler);
|
|
43
|
-
},
|
|
44
|
-
];
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
exports.TelegramWorkerPort = TelegramWorkerPort;
|
|
48
|
-
//# sourceMappingURL=worker.js.map
|
package/cjs/worker.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"worker.js","sourceRoot":"","sources":["../../src/worker.ts"],"names":[],"mappings":";;;AAAA,6DAAwD;AAExD,0DAAsD;AAWtD,sDAG+B;AAE/B,qEAAkE;AAIlE,IAAI,WAAW,GAAG,KAAK,CAAA;AAEvB,MAAa,cAA8C,SAAQ,0BAAqB;IACpF,cAAc,CAAC,OAA6B;QACxC,IAAI,CAAC,gCAAU,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAA;QAC1E,CAAC;QACD,IAAI,WAAW,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAA;QAC/D,CAAC;QAED,WAAW,GAAG,IAAI,CAAA;QAElB,MAAM,IAAI,GAAG,gCAAU,CAAA;QAEvB,MAAM,OAAO,GAAc,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAEtD,iDAAiD;QACjD,gCAAU,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAA;QAE9D,OAAO,OAAO,CAAA;IAClB,CAAC;CACJ;AApBD,wCAoBC;AAED,MAAa,kBAAkD,SAAQ,8BAAyB;IACvE;IAArB,YAAqB,OAAkC;QACnD,IAAA,yBAAW,EAAC,IAAI,0BAAY,EAAE,CAAC,CAAA;QAC/B,KAAK,CAAC,OAAO,CAAC,CAAA;QAFG,YAAO,GAAP,OAAO,CAA2B;IAGvD,CAAC;IAED,eAAe,CAAC,MAAkB,EAAE,OAA6B;QAC7D,IAAI,CAAC,CAAC,MAAM,YAAY,4BAAM,CAAC,EAAE,CAAC;YAC9B,MAAM,IAAI,SAAS,CAAC,mCAAmC,CAAC,CAAA;QAC5D,CAAC;QAED,MAAM,IAAI,GAAW,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QAEpD,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;QAE7B,OAAO;YACH,IAAI;YACJ,GAAG,EAAE;gBACD,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;YAClC,CAAC;SACJ,CAAA;IACL,CAAC;CACJ;AAtBD,gDAsBC","sourcesContent":["import { Worker, parentPort } from 'node:worker_threads'\n\nimport { setPlatform } from '@mtcute/core/platform.js'\nimport type {\n ClientMessageHandler,\n RespondFn,\n SendFn,\n SomeWorker,\n TelegramWorkerOptions,\n TelegramWorkerPortOptions,\n WorkerCustomMethods,\n WorkerMessageHandler,\n} from '@mtcute/core/worker.js'\nimport {\n TelegramWorker as TelegramWorkerBase,\n TelegramWorkerPort as TelegramWorkerPortBase,\n} from '@mtcute/core/worker.js'\n\nimport { NodePlatform } from './common-internals-node/platform.js'\n\nexport type { TelegramWorkerOptions, TelegramWorkerPortOptions, WorkerCustomMethods }\n\nlet _registered = false\n\nexport class TelegramWorker<T extends WorkerCustomMethods> extends TelegramWorkerBase<T> {\n registerWorker(handler: WorkerMessageHandler): RespondFn {\n if (!parentPort) {\n throw new Error('TelegramWorker must be created from a worker thread')\n }\n if (_registered) {\n throw new Error('TelegramWorker must be created only once')\n }\n\n _registered = true\n\n const port = parentPort\n\n const respond: RespondFn = port.postMessage.bind(port)\n\n // eslint-disable-next-line ts/no-unsafe-argument\n parentPort.on('message', message => handler(message, respond))\n\n return respond\n }\n}\n\nexport class TelegramWorkerPort<T extends WorkerCustomMethods> extends TelegramWorkerPortBase<T> {\n constructor(readonly options: TelegramWorkerPortOptions) {\n setPlatform(new NodePlatform())\n super(options)\n }\n\n connectToWorker(worker: SomeWorker, handler: ClientMessageHandler): [SendFn, () => void] {\n if (!(worker instanceof Worker)) {\n throw new TypeError('Only worker_threads are supported')\n }\n\n const send: SendFn = worker.postMessage.bind(worker)\n\n worker.on('message', handler)\n\n return [\n send,\n () => {\n worker.off('message', handler)\n },\n ]\n }\n}\n"]}
|
package/esm/client.d.ts
DELETED
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
import type { Readable } from 'node:stream';
|
|
2
|
-
import type { FileDownloadLocation, FileDownloadParameters, ITelegramStorageProvider, PartialOnly, User } from '@mtcute/core';
|
|
3
|
-
import type { BaseTelegramClientOptions as BaseTelegramClientOptionsBase, TelegramClientOptions } from '@mtcute/core/client.js';
|
|
4
|
-
import { BaseTelegramClient as BaseTelegramClientBase, TelegramClient as TelegramClientBase } from '@mtcute/core/client.js';
|
|
5
|
-
export type { TelegramClientOptions };
|
|
6
|
-
export interface BaseTelegramClientOptions extends PartialOnly<Omit<BaseTelegramClientOptionsBase, 'storage'>, 'transport' | 'crypto'> {
|
|
7
|
-
/**
|
|
8
|
-
* Storage to use for this client.
|
|
9
|
-
*
|
|
10
|
-
* If a string is passed, it will be used as
|
|
11
|
-
* a name for an SQLite database file.
|
|
12
|
-
*
|
|
13
|
-
* @default `"client.session"`
|
|
14
|
-
*/
|
|
15
|
-
storage?: string | ITelegramStorageProvider;
|
|
16
|
-
/**
|
|
17
|
-
* **ADVANCED USE ONLY**
|
|
18
|
-
*
|
|
19
|
-
* Whether to not set up the platform.
|
|
20
|
-
* This is useful if you call `setPlatform` yourself.
|
|
21
|
-
*/
|
|
22
|
-
platformless?: boolean;
|
|
23
|
-
}
|
|
24
|
-
export declare class BaseTelegramClient extends BaseTelegramClientBase {
|
|
25
|
-
constructor(opts: BaseTelegramClientOptions);
|
|
26
|
-
}
|
|
27
|
-
/**
|
|
28
|
-
* Telegram client for use in Node.js
|
|
29
|
-
*/
|
|
30
|
-
export declare class TelegramClient extends TelegramClientBase {
|
|
31
|
-
constructor(opts: TelegramClientOptions);
|
|
32
|
-
private _rl?;
|
|
33
|
-
/**
|
|
34
|
-
* Tiny wrapper over Node `readline` package
|
|
35
|
-
* for simpler user input for `.start()` method.
|
|
36
|
-
*
|
|
37
|
-
* Associated `readline` interface is closed
|
|
38
|
-
* after `start()` returns, or with the client.
|
|
39
|
-
*
|
|
40
|
-
* @param text Text of the question
|
|
41
|
-
*/
|
|
42
|
-
input(text: string): Promise<string>;
|
|
43
|
-
close(): Promise<void>;
|
|
44
|
-
start(params?: Parameters<TelegramClientBase['start']>[0]): Promise<User>;
|
|
45
|
-
run(params: Parameters<TelegramClient['start']>[0] | ((user: User) => void | Promise<void>), then?: (user: User) => void | Promise<void>): void;
|
|
46
|
-
downloadToFile(filename: string, location: FileDownloadLocation, params?: FileDownloadParameters | undefined): Promise<void>;
|
|
47
|
-
downloadAsNodeStream(location: FileDownloadLocation, params?: FileDownloadParameters | undefined): Readable;
|
|
48
|
-
}
|
package/esm/client.js
DELETED
|
@@ -1,107 +0,0 @@
|
|
|
1
|
-
import { createInterface } from 'node:readline';
|
|
2
|
-
import { BaseTelegramClient as BaseTelegramClientBase, TelegramClient as TelegramClientBase, } from '@mtcute/core/client.js';
|
|
3
|
-
import { setPlatform } from '@mtcute/core/platform.js';
|
|
4
|
-
import { NodePlatform } from './common-internals-node/platform.js';
|
|
5
|
-
import { downloadToFile } from './methods/download-file.js';
|
|
6
|
-
import { downloadAsNodeStream } from './methods/download-node-stream.js';
|
|
7
|
-
import { SqliteStorage } from './sqlite/index.js';
|
|
8
|
-
import { NodeCryptoProvider } from './utils/crypto.js';
|
|
9
|
-
import { TcpTransport } from './utils/tcp.js';
|
|
10
|
-
let nativeCrypto;
|
|
11
|
-
try {
|
|
12
|
-
/* eslint-disable ts/ban-ts-comment,ts/no-unsafe-assignment */
|
|
13
|
-
// @ts-ignore not in deps
|
|
14
|
-
// @esm-replace-import
|
|
15
|
-
nativeCrypto = (await import('@mtcute/crypto-node')).NodeNativeCryptoProvider;
|
|
16
|
-
/* eslint-enable ts/ban-ts-comment,ts/no-unsafe-assignment */
|
|
17
|
-
}
|
|
18
|
-
catch { }
|
|
19
|
-
export class BaseTelegramClient extends BaseTelegramClientBase {
|
|
20
|
-
constructor(opts) {
|
|
21
|
-
if (!opts.platformless)
|
|
22
|
-
setPlatform(new NodePlatform());
|
|
23
|
-
super({
|
|
24
|
-
// eslint-disable-next-line
|
|
25
|
-
crypto: nativeCrypto ? new nativeCrypto() : new NodeCryptoProvider(),
|
|
26
|
-
transport: () => new TcpTransport(),
|
|
27
|
-
...opts,
|
|
28
|
-
storage: typeof opts.storage === 'string'
|
|
29
|
-
? new SqliteStorage(opts.storage)
|
|
30
|
-
: opts.storage ?? new SqliteStorage('client.session'),
|
|
31
|
-
});
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
/**
|
|
35
|
-
* Telegram client for use in Node.js
|
|
36
|
-
*/
|
|
37
|
-
export class TelegramClient extends TelegramClientBase {
|
|
38
|
-
constructor(opts) {
|
|
39
|
-
if ('client' in opts) {
|
|
40
|
-
super(opts);
|
|
41
|
-
return;
|
|
42
|
-
}
|
|
43
|
-
super({
|
|
44
|
-
client: new BaseTelegramClient(opts),
|
|
45
|
-
disableUpdates: opts.disableUpdates,
|
|
46
|
-
skipConversationUpdates: opts.skipConversationUpdates,
|
|
47
|
-
updates: opts.updates,
|
|
48
|
-
});
|
|
49
|
-
}
|
|
50
|
-
_rl;
|
|
51
|
-
/**
|
|
52
|
-
* Tiny wrapper over Node `readline` package
|
|
53
|
-
* for simpler user input for `.start()` method.
|
|
54
|
-
*
|
|
55
|
-
* Associated `readline` interface is closed
|
|
56
|
-
* after `start()` returns, or with the client.
|
|
57
|
-
*
|
|
58
|
-
* @param text Text of the question
|
|
59
|
-
*/
|
|
60
|
-
input(text) {
|
|
61
|
-
if (!this._rl) {
|
|
62
|
-
this._rl = createInterface({
|
|
63
|
-
input: process.stdin,
|
|
64
|
-
output: process.stdout,
|
|
65
|
-
});
|
|
66
|
-
}
|
|
67
|
-
return new Promise(res => this._rl?.question(text, res));
|
|
68
|
-
}
|
|
69
|
-
close() {
|
|
70
|
-
this._rl?.close();
|
|
71
|
-
return super.close();
|
|
72
|
-
}
|
|
73
|
-
start(params = {}) {
|
|
74
|
-
if (!params.botToken) {
|
|
75
|
-
if (!params.phone)
|
|
76
|
-
params.phone = () => this.input('phone > ');
|
|
77
|
-
if (!params.code)
|
|
78
|
-
params.code = () => this.input('code > ');
|
|
79
|
-
if (!params.password) {
|
|
80
|
-
params.password = () => this.input('2fa password > ');
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
return super.start(params).then((user) => {
|
|
84
|
-
if (this._rl) {
|
|
85
|
-
this._rl.close();
|
|
86
|
-
delete this._rl;
|
|
87
|
-
}
|
|
88
|
-
return user;
|
|
89
|
-
});
|
|
90
|
-
}
|
|
91
|
-
run(params, then) {
|
|
92
|
-
if (typeof params === 'function') {
|
|
93
|
-
then = params;
|
|
94
|
-
params = {};
|
|
95
|
-
}
|
|
96
|
-
this.start(params)
|
|
97
|
-
.then(then)
|
|
98
|
-
.catch(err => this.emitError(err));
|
|
99
|
-
}
|
|
100
|
-
downloadToFile(filename, location, params) {
|
|
101
|
-
return downloadToFile(this, filename, location, params);
|
|
102
|
-
}
|
|
103
|
-
downloadAsNodeStream(location, params) {
|
|
104
|
-
return downloadAsNodeStream(this, location, params);
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
//# sourceMappingURL=client.js.map
|
package/esm/client.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Interface as RlInterface } from 'node:readline'\nimport { createInterface } from 'node:readline'\nimport type { Readable } from 'node:stream'\n\nimport type { FileDownloadLocation, FileDownloadParameters, ITelegramStorageProvider, PartialOnly, User } from '@mtcute/core'\nimport type {\n BaseTelegramClientOptions as BaseTelegramClientOptionsBase,\n TelegramClientOptions,\n} from '@mtcute/core/client.js'\nimport {\n BaseTelegramClient as BaseTelegramClientBase,\n TelegramClient as TelegramClientBase,\n} from '@mtcute/core/client.js'\nimport { setPlatform } from '@mtcute/core/platform.js'\n\nimport { NodePlatform } from './common-internals-node/platform.js'\nimport { downloadToFile } from './methods/download-file.js'\nimport { downloadAsNodeStream } from './methods/download-node-stream.js'\nimport { SqliteStorage } from './sqlite/index.js'\nimport { NodeCryptoProvider } from './utils/crypto.js'\nimport { TcpTransport } from './utils/tcp.js'\n\nexport type { TelegramClientOptions }\n\nlet nativeCrypto: any\n\ntry {\n /* eslint-disable ts/ban-ts-comment,ts/no-unsafe-assignment */\n\n // @ts-ignore not in deps\n // @esm-replace-import\n nativeCrypto = (await import('@mtcute/crypto-node')).NodeNativeCryptoProvider\n /* eslint-enable ts/ban-ts-comment,ts/no-unsafe-assignment */\n} catch {}\n\nexport interface BaseTelegramClientOptions\n extends PartialOnly<Omit<BaseTelegramClientOptionsBase, 'storage'>, 'transport' | 'crypto'> {\n /**\n * Storage to use for this client.\n *\n * If a string is passed, it will be used as\n * a name for an SQLite database file.\n *\n * @default `\"client.session\"`\n */\n storage?: string | ITelegramStorageProvider\n\n /**\n * **ADVANCED USE ONLY**\n *\n * Whether to not set up the platform.\n * This is useful if you call `setPlatform` yourself.\n */\n platformless?: boolean\n}\n\nexport class BaseTelegramClient extends BaseTelegramClientBase {\n constructor(opts: BaseTelegramClientOptions) {\n if (!opts.platformless) setPlatform(new NodePlatform())\n\n super({\n // eslint-disable-next-line\n crypto: nativeCrypto ? new nativeCrypto() : new NodeCryptoProvider(),\n transport: () => new TcpTransport(),\n ...opts,\n storage:\n typeof opts.storage === 'string'\n ? new SqliteStorage(opts.storage)\n : opts.storage ?? new SqliteStorage('client.session'),\n })\n }\n}\n\n/**\n * Telegram client for use in Node.js\n */\nexport class TelegramClient extends TelegramClientBase {\n constructor(opts: TelegramClientOptions) {\n if ('client' in opts) {\n super(opts)\n\n return\n }\n\n super({\n client: new BaseTelegramClient(opts),\n disableUpdates: opts.disableUpdates,\n skipConversationUpdates: opts.skipConversationUpdates,\n updates: opts.updates,\n })\n }\n\n private _rl?: RlInterface\n\n /**\n * Tiny wrapper over Node `readline` package\n * for simpler user input for `.start()` method.\n *\n * Associated `readline` interface is closed\n * after `start()` returns, or with the client.\n *\n * @param text Text of the question\n */\n input(text: string): Promise<string> {\n if (!this._rl) {\n this._rl = createInterface({\n input: process.stdin,\n output: process.stdout,\n })\n }\n\n return new Promise(res => this._rl?.question(text, res))\n }\n\n close(): Promise<void> {\n this._rl?.close()\n\n return super.close()\n }\n\n start(params: Parameters<TelegramClientBase['start']>[0] = {}): Promise<User> {\n if (!params.botToken) {\n if (!params.phone) params.phone = () => this.input('phone > ')\n if (!params.code) params.code = () => this.input('code > ')\n\n if (!params.password) {\n params.password = () => this.input('2fa password > ')\n }\n }\n\n return super.start(params).then((user) => {\n if (this._rl) {\n this._rl.close()\n delete this._rl\n }\n\n return user\n })\n }\n\n run(\n params: Parameters<TelegramClient['start']>[0] | ((user: User) => void | Promise<void>),\n then?: (user: User) => void | Promise<void>,\n ): void {\n if (typeof params === 'function') {\n then = params\n params = {}\n }\n\n this.start(params)\n .then(then)\n .catch(err => this.emitError(err))\n }\n\n downloadToFile(\n filename: string,\n location: FileDownloadLocation,\n params?: FileDownloadParameters | undefined,\n ): Promise<void> {\n return downloadToFile(this, filename, location, params)\n }\n\n downloadAsNodeStream(location: FileDownloadLocation, params?: FileDownloadParameters | undefined): Readable {\n return downloadAsNodeStream(this, location, params)\n }\n}\n"]}
|