@mtcute/bun 0.9.1 → 0.11.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/client.js +3 -2
- package/client.js.map +1 -1
- package/common-internals-node/exit-hook.js.map +1 -1
- package/common-internals-node/logging.js +2 -2
- package/common-internals-node/logging.js.map +1 -1
- package/common-internals-node/platform.js.map +1 -1
- package/index.d.ts +1 -1
- package/index.js +1 -1
- package/index.js.map +1 -1
- package/methods/download-file.js.map +1 -1
- package/package.json +5 -5
- package/platform.d.ts +5 -0
- package/platform.js +6 -0
- package/platform.js.map +1 -0
- package/sqlite/driver.js +2 -0
- package/sqlite/driver.js.map +1 -1
- package/sqlite/index.js +2 -0
- package/sqlite/index.js.map +1 -1
- package/utils/normalize-file.d.ts +7 -0
- package/utils/normalize-file.js +12 -1
- package/utils/normalize-file.js.map +1 -1
- package/utils/tcp.d.ts +1 -0
- package/utils/tcp.js +8 -12
- package/utils/tcp.js.map +1 -1
- package/worker.js +1 -0
- package/worker.js.map +1 -1
package/client.js
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
import { createInterface } from 'readline';
|
|
2
2
|
import { BaseTelegramClient as BaseTelegramClientBase, TelegramClient as TelegramClientBase, } from '@mtcute/core/client.js';
|
|
3
3
|
import { setPlatform } from '@mtcute/core/platform.js';
|
|
4
|
-
import { NodePlatform } from './common-internals-node/platform.js';
|
|
5
4
|
import { downloadToFile } from './methods/download-file.js';
|
|
6
5
|
import { downloadAsNodeStream } from './methods/download-node-stream.js';
|
|
6
|
+
import { BunPlatform } from './platform.js';
|
|
7
7
|
import { SqliteStorage } from './sqlite/index.js';
|
|
8
8
|
import { BunCryptoProvider } from './utils/crypto.js';
|
|
9
9
|
import { TcpTransport } from './utils/tcp.js';
|
|
10
10
|
export class BaseTelegramClient extends BaseTelegramClientBase {
|
|
11
11
|
constructor(opts) {
|
|
12
12
|
if (!opts.platformless)
|
|
13
|
-
setPlatform(new
|
|
13
|
+
setPlatform(new BunPlatform());
|
|
14
14
|
super({
|
|
15
15
|
crypto: new BunCryptoProvider(),
|
|
16
16
|
transport: () => new TcpTransport(),
|
|
@@ -34,6 +34,7 @@ export class TelegramClient extends TelegramClientBase {
|
|
|
34
34
|
client: new BaseTelegramClient(opts),
|
|
35
35
|
});
|
|
36
36
|
}
|
|
37
|
+
_rl;
|
|
37
38
|
/**
|
|
38
39
|
* Tiny wrapper over Node `readline` package
|
|
39
40
|
* for simpler user input for `.run()` method.
|
package/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAA4B,MAAM,UAAU,CAAA;AAGpE,OAAO,EACH,kBAAkB,IAAI,sBAAsB,EAE5C,cAAc,IAAI,kBAAkB,GAEvC,MAAM,wBAAwB,CAAA;AAC/B,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AAEtD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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","sourcesContent":["import { createInterface, Interface as RlInterface } from 'readline'\n\nimport { FileDownloadLocation, FileDownloadParameters, ITelegramStorageProvider, PartialOnly, User } from '@mtcute/core'\nimport {\n BaseTelegramClient as BaseTelegramClientBase,\n BaseTelegramClientOptions as BaseTelegramClientOptionsBase,\n TelegramClient as TelegramClientBase,\n TelegramClientOptions,\n} from '@mtcute/core/client.js'\nimport { setPlatform } from '@mtcute/core/platform.js'\n\nimport { downloadToFile } from './methods/download-file.js'\nimport { downloadAsNodeStream } from './methods/download-node-stream.js'\nimport { BunPlatform } from './platform.js'\nimport { SqliteStorage } from './sqlite/index.js'\nimport { BunCryptoProvider } from './utils/crypto.js'\nimport { TcpTransport } from './utils/tcp.js'\n\nexport type { TelegramClientOptions }\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 BunPlatform())\n\n super({\n crypto: new BunCryptoProvider(),\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 })\n }\n\n private _rl?: RlInterface\n\n /**\n * Tiny wrapper over Node `readline` package\n * for simpler user input for `.run()` method.\n *\n * Associated `readline` interface is closed\n * after `run()` 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) {\n return downloadAsNodeStream(this, location, params)\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exit-hook.js","sourceRoot":"","sources":["../../src/common-internals-node/exit-hook.ts"],"names":[],"mappings":"AAAA,6FAA6F;AAE7F,IAAI,SAAS,GAAG,KAAK,CAAA;AACrB,IAAI,OAAO,GAAG,KAAK,CAAA;AAEnB,MAAM,SAAS,GAAG,IAAI,GAAG,EAAc,CAAA;AAEvC,SAAS,IAAI,CAAC,kBAA2B,EAAE,MAAc,EAAE,KAAa;IACpE,OAAO,SAAS,YAAY;QACxB,IAAI,OAAO,EAAE;
|
|
1
|
+
{"version":3,"file":"exit-hook.js","sourceRoot":"","sources":["../../src/common-internals-node/exit-hook.ts"],"names":[],"mappings":"AAAA,6FAA6F;AAE7F,IAAI,SAAS,GAAG,KAAK,CAAA;AACrB,IAAI,OAAO,GAAG,KAAK,CAAA;AAEnB,MAAM,SAAS,GAAG,IAAI,GAAG,EAAc,CAAA;AAEvC,SAAS,IAAI,CAAC,kBAA2B,EAAE,MAAc,EAAE,KAAa;IACpE,OAAO,SAAS,YAAY;QACxB,IAAI,OAAO,EAAE,CAAC;YACV,OAAM;QACV,CAAC;QAED,OAAO,GAAG,IAAI,CAAA;QAEd,MAAM,QAAQ,GAAG,GAAG,GAAG,MAAM,CAAA;QAE7B,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YAC/B,QAAQ,EAAE,CAAA;QACd,CAAC;QAED,IAAI,kBAAkB,EAAE,CAAC;YACrB,mFAAmF;YAEnF,MAAM,SAAS,GAAG,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,CAAA;YAC7C,MAAM,GAAG,GAAG,SAAS,CAAC,OAAO,CAAC,YAAY,CAAC,CAAA;YAE3C,IAAI,GAAG,KAAK,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC/B,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;YAC1B,CAAC;QACL,CAAC;IACL,CAAC,CAAA;AACL,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,EAAc;IACrC,uBAAuB;IACvB,IAAI,OAAO,OAAO,KAAK,WAAW;QAAE,OAAO,GAAG,EAAE,GAAE,CAAC,CAAA;IAEnD,IAAI,CAAC,SAAS,EAAE,CAAC;QACb,SAAS,GAAG,IAAI,CAAA;QAEhB,OAAO,CAAC,EAAE,CAAC,YAAY,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC,CAAA;QACxD,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAA;QAC7C,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAA;QAC/C,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC,CAAA;IAC/C,CAAC;IAED,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IAEjB,OAAO,GAAG,EAAE;QACR,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;IACxB,CAAC,CAAA;AACL,CAAC","sourcesContent":["// roughly based on https://github.com/sindresorhus/exit-hook/blob/main/index.js, MIT license\n\nlet installed = false\nlet handled = false\n\nconst callbacks = new Set<() => void>()\n\nfunction exit(shouldManuallyExit: boolean, signal: number, event: string) {\n return function eventHandler() {\n if (handled) {\n return\n }\n\n handled = true\n\n const exitCode = 128 + signal\n\n for (const callback of callbacks) {\n callback()\n }\n\n if (shouldManuallyExit) {\n // if the user has some custom handlers after us, we don't want to exit the process\n\n const listeners = process.rawListeners(event)\n const idx = listeners.indexOf(eventHandler)\n\n if (idx === listeners.length - 1) {\n process.exit(exitCode)\n }\n }\n }\n}\n\nexport function beforeExit(fn: () => void): () => void {\n // unsupported platform\n if (typeof process === 'undefined') return () => {}\n\n if (!installed) {\n installed = true\n\n process.on('beforeExit', exit(true, -128, 'beforeExit'))\n process.on('SIGINT', exit(true, 2, 'SIGINT'))\n process.on('SIGTERM', exit(true, 15, 'SIGINT'))\n process.on('exit', exit(false, 15, 'exit'))\n }\n\n callbacks.add(fn)\n\n return () => {\n callbacks.delete(fn)\n }\n}\n"]}
|
|
@@ -2,7 +2,7 @@ const isTty = typeof process === 'object' && Boolean(process.stdout?.isTTY);
|
|
|
2
2
|
const BASE_FORMAT = isTty ? '%s [%s] [%s%s\x1b[0m] ' : '%s [%s] [%s] ';
|
|
3
3
|
const LEVEL_NAMES = isTty ?
|
|
4
4
|
[
|
|
5
|
-
'',
|
|
5
|
+
'', // OFF
|
|
6
6
|
'\x1b[31mERR\x1b[0m',
|
|
7
7
|
'\x1b[33mWRN\x1b[0m',
|
|
8
8
|
'\x1b[34mINF\x1b[0m',
|
|
@@ -10,7 +10,7 @@ const LEVEL_NAMES = isTty ?
|
|
|
10
10
|
'\x1b[35mVRB\x1b[0m',
|
|
11
11
|
] :
|
|
12
12
|
[
|
|
13
|
-
'',
|
|
13
|
+
'', // OFF
|
|
14
14
|
'ERR',
|
|
15
15
|
'WRN',
|
|
16
16
|
'INF',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logging.js","sourceRoot":"","sources":["../../src/common-internals-node/logging.ts"],"names":[],"mappings":"AAAA,MAAM,KAAK,GAAG,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;AAE3E,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,eAAe,CAAA;AACtE,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC;IACvB;QACI,EAAE;
|
|
1
|
+
{"version":3,"file":"logging.js","sourceRoot":"","sources":["../../src/common-internals-node/logging.ts"],"names":[],"mappings":"AAAA,MAAM,KAAK,GAAG,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;AAE3E,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,eAAe,CAAA;AACtE,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC;IACvB;QACI,EAAE,EAAE,MAAM;QACV,oBAAoB;QACpB,oBAAoB;QACpB,oBAAoB;QACpB,oBAAoB;QACpB,oBAAoB;KACvB,CAAC,CAAC;IACH;QACI,EAAE,EAAE,MAAM;QACV,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;KACR,CAAA;AACL,MAAM,UAAU,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;AAEjE,gBAAgB;AAChB,MAAM,CAAC,MAAM,qBAAqB,GAAG,KAAK,CAAC,CAAC;IACxC,CAAC,KAAa,EAAE,KAAa,EAAE,GAAW,EAAE,GAAW,EAAE,IAAe,EAAQ,EAAE;QAC9E,sCAAsC;QACtC,OAAO,CAAC,GAAG,CAAC,WAAW,GAAG,GAAG,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,WAAW,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAA;IACjH,CAAC,CAAC,CAAC;IACH,CAAC,KAAa,EAAE,KAAa,EAAE,GAAW,EAAE,GAAW,EAAE,IAAe,EAAQ,EAAE;QAC9E,sCAAsC;QACtC,OAAO,CAAC,GAAG,CAAC,WAAW,GAAG,GAAG,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,WAAW,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAA;IAC9F,CAAC,CAAA","sourcesContent":["const isTty = typeof process === 'object' && Boolean(process.stdout?.isTTY)\n\nconst BASE_FORMAT = isTty ? '%s [%s] [%s%s\\x1b[0m] ' : '%s [%s] [%s] '\nconst LEVEL_NAMES = isTty ?\n [\n '', // OFF\n '\\x1b[31mERR\\x1b[0m',\n '\\x1b[33mWRN\\x1b[0m',\n '\\x1b[34mINF\\x1b[0m',\n '\\x1b[36mDBG\\x1b[0m',\n '\\x1b[35mVRB\\x1b[0m',\n ] :\n [\n '', // OFF\n 'ERR',\n 'WRN',\n 'INF',\n 'DBG',\n 'VRB',\n ]\nconst TAG_COLORS = [6, 2, 3, 4, 5, 1].map((i) => `\\x1b[3${i};1m`)\n\n/** @internal */\nexport const defaultLoggingHandler = isTty ?\n (color: number, level: number, tag: string, fmt: string, args: unknown[]): void => {\n // eslint-disable-next-line no-console\n console.log(BASE_FORMAT + fmt, new Date().toISOString(), LEVEL_NAMES[level], TAG_COLORS[color], tag, ...args)\n } :\n (color: number, level: number, tag: string, fmt: string, args: unknown[]): void => {\n // eslint-disable-next-line no-console\n console.log(BASE_FORMAT + fmt, new Date().toISOString(), LEVEL_NAMES[level], tag, ...args)\n }\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"platform.js","sourceRoot":"","sources":["../../src/common-internals-node/platform.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAA;AAIxB,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAC3C,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAA;AAEpD,MAAM,2BAA2B,GAAG,OAAO,MAAM,CAAC,UAAU,KAAK,UAAU,IAAI,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,CAAA;AAE7G,MAAM,QAAQ,GAAG,CAAC,GAAe,EAAU,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,UAAU,CAAC,CAAA;AAErG,MAAM,OAAO,YAAY;IAMrB,cAAc;QACV,OAAO,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE,EAAE,CAAA;IACtD,CAAC;IAED,kBAAkB;QACd,MAAM,WAAW,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,EAAE,CAAC,CAAA;QAEhE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE;
|
|
1
|
+
{"version":3,"file":"platform.js","sourceRoot":"","sources":["../../src/common-internals-node/platform.ts"],"names":[],"mappings":"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","sourcesContent":["import * as os from 'os'\n\nimport { ICorePlatform } from '@mtcute/core/platform.js'\n\nimport { normalizeFile } from '../utils/normalize-file.js'\nimport { beforeExit } from './exit-hook.js'\nimport { defaultLoggingHandler } from './logging.js'\n\nconst BUFFER_BASE64_URL_AVAILABLE = typeof Buffer.isEncoding === 'function' && Buffer.isEncoding('base64url')\n\nconst toBuffer = (buf: Uint8Array): Buffer => Buffer.from(buf.buffer, buf.byteOffset, buf.byteLength)\n\nexport class NodePlatform implements ICorePlatform {\n // ICorePlatform\n declare log: typeof defaultLoggingHandler\n declare beforeExit: typeof beforeExit\n declare normalizeFile: typeof normalizeFile\n\n getDeviceModel(): string {\n return `${os.type()} ${os.arch()} ${os.release()}`\n }\n\n getDefaultLogLevel(): number | null {\n const envLogLevel = parseInt(process.env.MTCUTE_LOG_LEVEL ?? '')\n\n if (!isNaN(envLogLevel)) {\n return envLogLevel\n }\n\n return null\n }\n\n // ITlPlatform\n utf8ByteLength(str: string): number {\n return Buffer.byteLength(str, 'utf8')\n }\n utf8Encode(str: string): Uint8Array {\n return Buffer.from(str, 'utf8')\n }\n utf8Decode(buf: Uint8Array): string {\n return toBuffer(buf).toString('utf8')\n }\n\n hexEncode(buf: Uint8Array): string {\n return toBuffer(buf).toString('hex')\n }\n hexDecode(str: string): Uint8Array {\n return Buffer.from(str, 'hex')\n }\n\n base64Encode(buf: Uint8Array, url = false): string {\n const nodeBuffer = toBuffer(buf)\n\n if (url && BUFFER_BASE64_URL_AVAILABLE) return nodeBuffer.toString('base64url')\n\n const str = nodeBuffer.toString('base64')\n if (url) return str.replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=/g, '')\n\n return str\n }\n base64Decode(string: string, url = false): Uint8Array {\n if (url && BUFFER_BASE64_URL_AVAILABLE) {\n return Buffer.from(string, 'base64url')\n }\n\n if (url) {\n string = string.replace(/-/g, '+').replace(/_/g, '/')\n while (string.length % 4) string += '='\n }\n\n return Buffer.from(string, 'base64')\n }\n}\n\nNodePlatform.prototype.log = defaultLoggingHandler\nNodePlatform.prototype.beforeExit = beforeExit\nNodePlatform.prototype.normalizeFile = normalizeFile\n"]}
|
package/index.d.ts
CHANGED
package/index.js
CHANGED
package/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAA;AAC3B,cAAc,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAA;AAC3B,cAAc,eAAe,CAAA;AAC7B,cAAc,mBAAmB,CAAA;AACjC,cAAc,mBAAmB,CAAA;AACjC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,aAAa,CAAA;AAC3B,cAAc,cAAc,CAAA;AAC5B,cAAc,qBAAqB,CAAA;AACnC,cAAc,yBAAyB,CAAA","sourcesContent":["export * from './client.js'\nexport * from './platform.js'\nexport * from './sqlite/index.js'\nexport * from './utils/crypto.js'\nexport * from './utils/tcp.js'\nexport * from './worker.js'\nexport * from '@mtcute/core'\nexport * from '@mtcute/html-parser'\nexport * from '@mtcute/markdown-parser'\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"download-file.js","sourceRoot":"","sources":["../../src/methods/download-file.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAEpC,OAAO,EAAgD,YAAY,EAAmB,MAAM,cAAc,CAAA;AAC1G,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AAE5D;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAChC,MAAuB,EACvB,QAAgB,EAChB,QAA8B,EAC9B,MAA+B;IAE/B,IAAI,QAAQ,YAAY,YAAY,IAAI,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;
|
|
1
|
+
{"version":3,"file":"download-file.js","sourceRoot":"","sources":["../../src/methods/download-file.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAEpC,OAAO,EAAgD,YAAY,EAAmB,MAAM,cAAc,CAAA;AAC1G,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AAE5D;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAChC,MAAuB,EACvB,QAAgB,EAChB,QAA8B,EAC9B,MAA+B;IAE/B,IAAI,QAAQ,YAAY,YAAY,IAAI,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5E,gCAAgC;QAChC,MAAM,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAA;IAChD,CAAC;IAED,MAAM,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE,CAAA;IAE1C,IAAI,MAAM,EAAE,WAAW,EAAE,CAAC;QACtB,MAAM,CAAC,WAAW,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE;YAC9C,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,yCAAyC,EAAE,QAAQ,CAAC,CAAA;YACrE,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;YAC7C,UAAU,CAAC,QAAQ,CAAC,CAAA;QACxB,CAAC,CAAC,CAAA;IACN,CAAC;IAED,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,kBAAkB,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,CAAC;QACrE,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;IACvB,CAAC;IAED,MAAM,MAAM,CAAC,GAAG,EAAE,CAAA;AACtB,CAAC","sourcesContent":["import { unlinkSync } from 'node:fs'\n\nimport { FileDownloadLocation, FileDownloadParameters, FileLocation, ITelegramClient } from '@mtcute/core'\nimport { downloadAsIterable } from '@mtcute/core/methods.js'\n\n/**\n * Download a remote file to a local file (only for NodeJS).\n * Promise will resolve once the download is complete.\n *\n * @param filename Local file name to which the remote file will be downloaded\n * @param params File download parameters\n */\nexport async function downloadToFile(\n client: ITelegramClient,\n filename: string,\n location: FileDownloadLocation,\n params?: FileDownloadParameters,\n): Promise<void> {\n if (location instanceof FileLocation && ArrayBuffer.isView(location.location)) {\n // early return for inline files\n await Bun.write(filename, location.location)\n }\n\n const output = Bun.file(filename).writer()\n\n if (params?.abortSignal) {\n params.abortSignal.addEventListener('abort', () => {\n client.log.debug('aborting file download %s - cleaning up', filename)\n Promise.resolve(output.end()).catch(() => {})\n unlinkSync(filename)\n })\n }\n\n for await (const chunk of downloadAsIterable(client, location, params)) {\n output.write(chunk)\n }\n\n await output.end()\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mtcute/bun",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.11.0",
|
|
4
4
|
"description": "Meta-package for Bun",
|
|
5
5
|
"author": "alina sireneva <alina@tei.su>",
|
|
6
6
|
"license": "MIT",
|
|
@@ -13,9 +13,9 @@
|
|
|
13
13
|
"./utils.js": "./utils.js"
|
|
14
14
|
},
|
|
15
15
|
"dependencies": {
|
|
16
|
-
"@mtcute/core": "^0.
|
|
17
|
-
"@mtcute/wasm": "^0.
|
|
18
|
-
"@mtcute/markdown-parser": "^0.
|
|
19
|
-
"@mtcute/html-parser": "^0.
|
|
16
|
+
"@mtcute/core": "^0.11.0",
|
|
17
|
+
"@mtcute/wasm": "^0.11.0",
|
|
18
|
+
"@mtcute/markdown-parser": "^0.11.0",
|
|
19
|
+
"@mtcute/html-parser": "^0.11.0"
|
|
20
20
|
}
|
|
21
21
|
}
|
package/platform.d.ts
ADDED
package/platform.js
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { NodePlatform } from './common-internals-node/platform.js';
|
|
2
|
+
import { normalizeFile } from './utils/normalize-file.js';
|
|
3
|
+
export class BunPlatform extends NodePlatform {
|
|
4
|
+
}
|
|
5
|
+
BunPlatform.prototype.normalizeFile = normalizeFile;
|
|
6
|
+
//# sourceMappingURL=platform.js.map
|
package/platform.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"platform.js","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAA;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AAEzD,MAAM,OAAO,WAAY,SAAQ,YAAY;CAE5C;AAED,WAAW,CAAC,SAAS,CAAC,aAAa,GAAG,aAAa,CAAA","sourcesContent":["import { NodePlatform } from './common-internals-node/platform.js'\nimport { normalizeFile } from './utils/normalize-file.js'\n\nexport class BunPlatform extends NodePlatform {\n declare normalizeFile: typeof normalizeFile\n}\n\nBunPlatform.prototype.normalizeFile = normalizeFile\n"]}
|
package/sqlite/driver.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { Database } from 'bun:sqlite';
|
|
2
2
|
import { BaseSqliteStorageDriver } from '@mtcute/core';
|
|
3
3
|
export class SqliteStorageDriver extends BaseSqliteStorageDriver {
|
|
4
|
+
filename;
|
|
5
|
+
params;
|
|
4
6
|
constructor(filename = ':memory:', params) {
|
|
5
7
|
super();
|
|
6
8
|
this.filename = filename;
|
package/sqlite/driver.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"driver.js","sourceRoot":"","sources":["../../src/sqlite/driver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAErC,OAAO,EAAE,uBAAuB,EAAmB,MAAM,cAAc,CAAA;AAgBvE,MAAM,OAAO,mBAAoB,SAAQ,uBAAuB;
|
|
1
|
+
{"version":3,"file":"driver.js","sourceRoot":"","sources":["../../src/sqlite/driver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAErC,OAAO,EAAE,uBAAuB,EAAmB,MAAM,cAAc,CAAA;AAgBvE,MAAM,OAAO,mBAAoB,SAAQ,uBAAuB;IAE/C;IACA;IAFb,YACa,WAAW,UAAU,EACrB,MAAmC;QAE5C,KAAK,EAAE,CAAA;QAHE,aAAQ,GAAR,QAAQ,CAAa;QACrB,WAAM,GAAN,MAAM,CAA6B;IAGhD,CAAC;IAED,eAAe;QACX,MAAM,EAAE,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QAEtC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC;YAC3B,EAAE,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAA;QACzC,CAAC;QAED,OAAO,EAAqB,CAAA;IAChC,CAAC;CACJ","sourcesContent":["import { Database } from 'bun:sqlite'\n\nimport { BaseSqliteStorageDriver, ISqliteDatabase } from '@mtcute/core'\n\nexport interface SqliteStorageDriverOptions {\n /**\n * By default, WAL mode is enabled, which\n * significantly improves performance.\n * [Learn more](https://bun.sh/docs/api/sqlite#wal-mode)\n *\n * However, you might encounter some issues,\n * and if you do, you can disable WAL by passing `true`\n *\n * @default false\n */\n disableWal?: boolean\n}\n\nexport class SqliteStorageDriver extends BaseSqliteStorageDriver {\n constructor(\n readonly filename = ':memory:',\n readonly params?: SqliteStorageDriverOptions,\n ) {\n super()\n }\n\n _createDatabase(): ISqliteDatabase {\n const db = new Database(this.filename)\n\n if (!this.params?.disableWal) {\n db.exec('PRAGMA journal_mode = WAL;')\n }\n\n return db as ISqliteDatabase\n }\n}\n"]}
|
package/sqlite/index.js
CHANGED
|
@@ -2,6 +2,8 @@ import { BaseSqliteStorage } from '@mtcute/core';
|
|
|
2
2
|
import { SqliteStorageDriver } from './driver.js';
|
|
3
3
|
export { SqliteStorageDriver } from './driver.js';
|
|
4
4
|
export class SqliteStorage extends BaseSqliteStorage {
|
|
5
|
+
filename;
|
|
6
|
+
params;
|
|
5
7
|
constructor(filename = ':memory:', params) {
|
|
6
8
|
super(new SqliteStorageDriver(filename, params));
|
|
7
9
|
this.filename = filename;
|
package/sqlite/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/sqlite/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AAEhD,OAAO,EAAE,mBAAmB,EAA8B,MAAM,aAAa,CAAA;AAE7E,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAEjD,MAAM,OAAO,aAAc,SAAQ,iBAAiB;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/sqlite/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AAEhD,OAAO,EAAE,mBAAmB,EAA8B,MAAM,aAAa,CAAA;AAE7E,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAEjD,MAAM,OAAO,aAAc,SAAQ,iBAAiB;IAEnC;IACA;IAFb,YACa,WAAW,UAAU,EACrB,MAAmC;QAE5C,KAAK,CAAC,IAAI,mBAAmB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAA;QAHvC,aAAQ,GAAR,QAAQ,CAAa;QACrB,WAAM,GAAN,MAAM,CAA6B;IAGhD,CAAC;CACJ","sourcesContent":["import { BaseSqliteStorage } from '@mtcute/core'\n\nimport { SqliteStorageDriver, SqliteStorageDriverOptions } from './driver.js'\n\nexport { SqliteStorageDriver } from './driver.js'\n\nexport class SqliteStorage extends BaseSqliteStorage {\n constructor(\n readonly filename = ':memory:',\n readonly params?: SqliteStorageDriverOptions,\n ) {\n super(new SqliteStorageDriver(filename, params))\n }\n}\n"]}
|
|
@@ -1,5 +1,12 @@
|
|
|
1
|
+
/// <reference types="bun-types" resolution-mode="require"/>
|
|
2
|
+
/// <reference types="bun-types" resolution-mode="require"/>
|
|
3
|
+
import { BunFile } from 'bun';
|
|
1
4
|
import { UploadFileLike } from '@mtcute/core';
|
|
2
5
|
export declare function normalizeFile(file: UploadFileLike): Promise<{
|
|
6
|
+
file: BunFile;
|
|
7
|
+
fileName: string | undefined;
|
|
8
|
+
fileSize: number;
|
|
9
|
+
} | {
|
|
3
10
|
file: ReadableStream<Uint8Array>;
|
|
4
11
|
fileName: string;
|
|
5
12
|
fileSize: number;
|
package/utils/normalize-file.js
CHANGED
|
@@ -2,10 +2,21 @@ import { ReadStream } from 'fs';
|
|
|
2
2
|
import { stat } from 'fs/promises';
|
|
3
3
|
import { basename } from 'path';
|
|
4
4
|
import { Readable as NodeReadable } from 'stream';
|
|
5
|
+
// https://github.com/oven-sh/bun/issues/10481
|
|
6
|
+
function isBunFile(file) {
|
|
7
|
+
return file instanceof Blob && 'name' in file && file.name.length > 0;
|
|
8
|
+
}
|
|
5
9
|
export async function normalizeFile(file) {
|
|
6
10
|
if (typeof file === 'string') {
|
|
7
11
|
file = Bun.file(file);
|
|
8
12
|
}
|
|
13
|
+
if (isBunFile(file)) {
|
|
14
|
+
return {
|
|
15
|
+
file: file,
|
|
16
|
+
fileName: file.name,
|
|
17
|
+
fileSize: file.size,
|
|
18
|
+
};
|
|
19
|
+
}
|
|
9
20
|
// while these are not Bun-specific, they still may happen
|
|
10
21
|
if (file instanceof ReadStream) {
|
|
11
22
|
const fileName = basename(file.path.toString());
|
|
@@ -21,7 +32,7 @@ export async function normalizeFile(file) {
|
|
|
21
32
|
file: NodeReadable.toWeb(file),
|
|
22
33
|
};
|
|
23
34
|
}
|
|
24
|
-
// string ->
|
|
35
|
+
// string -> BunFile, thus already handled
|
|
25
36
|
return null;
|
|
26
37
|
}
|
|
27
38
|
//# sourceMappingURL=normalize-file.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"normalize-file.js","sourceRoot":"","sources":["../../src/utils/normalize-file.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"normalize-file.js","sourceRoot":"","sources":["../../src/utils/normalize-file.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAA;AAC/B,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAA;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAA;AAC/B,OAAO,EAAE,QAAQ,IAAI,YAAY,EAAE,MAAM,QAAQ,CAAA;AAIjD,8CAA8C;AAC9C,SAAS,SAAS,CAAC,IAAa;IAC5B,OAAO,IAAI,YAAY,IAAI,IAAI,MAAM,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAA;AACzE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,IAAoB;IACpD,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC3B,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACzB,CAAC;IAED,IAAI,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;QAClB,OAAO;YACH,IAAI,EAAE,IAAI;YACV,QAAQ,EAAE,IAAI,CAAC,IAAI;YACnB,QAAQ,EAAE,IAAI,CAAC,IAAI;SACtB,CAAA;IACL,CAAC;IAED,0DAA0D;IAC1D,IAAI,IAAI,YAAY,UAAU,EAAE,CAAC;QAC7B,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAA;QAC/C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAE3E,OAAO;YACH,IAAI,EAAE,YAAY,CAAC,KAAK,CAAC,IAAI,CAA0C;YACvE,QAAQ;YACR,QAAQ;SACX,CAAA;IACL,CAAC;IAED,IAAI,IAAI,YAAY,YAAY,EAAE,CAAC;QAC/B,OAAO;YACH,IAAI,EAAE,YAAY,CAAC,KAAK,CAAC,IAAI,CAA0C;SAC1E,CAAA;IACL,CAAC;IAED,0CAA0C;IAC1C,OAAO,IAAI,CAAA;AACf,CAAC","sourcesContent":["import { BunFile } from 'bun'\nimport { ReadStream } from 'fs'\nimport { stat } from 'fs/promises'\nimport { basename } from 'path'\nimport { Readable as NodeReadable } from 'stream'\n\nimport { UploadFileLike } from '@mtcute/core'\n\n// https://github.com/oven-sh/bun/issues/10481\nfunction isBunFile(file: unknown): file is BunFile {\n return file instanceof Blob && 'name' in file && file.name.length > 0\n}\n\nexport async function normalizeFile(file: UploadFileLike) {\n if (typeof file === 'string') {\n file = Bun.file(file)\n }\n\n if (isBunFile(file)) {\n return {\n file: file,\n fileName: file.name,\n fileSize: file.size,\n }\n }\n\n // while these are not Bun-specific, they still may happen\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: NodeReadable.toWeb(file) as unknown as ReadableStream<Uint8Array>,\n fileName,\n fileSize,\n }\n }\n\n if (file instanceof NodeReadable) {\n return {\n file: NodeReadable.toWeb(file) as unknown as ReadableStream<Uint8Array>,\n }\n }\n\n // string -> BunFile, thus already handled\n return null\n}\n"]}
|
package/utils/tcp.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
/// <reference types="bun-types" resolution-mode="require"/>
|
|
2
2
|
/// <reference types="node" resolution-mode="require"/>
|
|
3
|
+
/// <reference types="bun-types" resolution-mode="require"/>
|
|
3
4
|
import { Socket } from 'bun';
|
|
4
5
|
import EventEmitter from 'events';
|
|
5
6
|
import { IntermediatePacketCodec, IPacketCodec, ITelegramTransport, TransportState } from '@mtcute/core';
|
package/utils/tcp.js
CHANGED
|
@@ -5,14 +5,12 @@ import { IntermediatePacketCodec, MtcuteError, TransportState } from '@mtcute/co
|
|
|
5
5
|
* Subclasses must provide packet codec in `_packetCodec` property
|
|
6
6
|
*/
|
|
7
7
|
export class BaseTcpTransport extends EventEmitter {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
this._sendOnceDrained = [];
|
|
15
|
-
}
|
|
8
|
+
_currentDc = null;
|
|
9
|
+
_state = TransportState.Idle;
|
|
10
|
+
_socket = null;
|
|
11
|
+
_crypto;
|
|
12
|
+
log;
|
|
13
|
+
packetCodecInitialized = false;
|
|
16
14
|
_updateLogPrefix() {
|
|
17
15
|
if (this._currentDc) {
|
|
18
16
|
this.log.prefix = `[TCP:${this._currentDc.ipAddress}:${this._currentDc.port}] `;
|
|
@@ -105,6 +103,7 @@ export class BaseTcpTransport extends EventEmitter {
|
|
|
105
103
|
this._sendOnceDrained.push(framed.subarray(written));
|
|
106
104
|
}
|
|
107
105
|
}
|
|
106
|
+
_sendOnceDrained = [];
|
|
108
107
|
handleDrained() {
|
|
109
108
|
while (this._sendOnceDrained.length) {
|
|
110
109
|
const data = this._sendOnceDrained.shift();
|
|
@@ -117,9 +116,6 @@ export class BaseTcpTransport extends EventEmitter {
|
|
|
117
116
|
}
|
|
118
117
|
}
|
|
119
118
|
export class TcpTransport extends BaseTcpTransport {
|
|
120
|
-
|
|
121
|
-
super(...arguments);
|
|
122
|
-
this._packetCodec = new IntermediatePacketCodec();
|
|
123
|
-
}
|
|
119
|
+
_packetCodec = new IntermediatePacketCodec();
|
|
124
120
|
}
|
|
125
121
|
//# sourceMappingURL=tcp.js.map
|
package/utils/tcp.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tcp.js","sourceRoot":"","sources":["../../src/utils/tcp.ts"],"names":[],"mappings":"AACA,OAAO,YAAY,MAAM,QAAQ,CAAA;AAEjC,OAAO,EAAE,uBAAuB,EAAoC,WAAW,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAGrH;;;GAGG;AACH,MAAM,OAAgB,gBAAiB,SAAQ,YAAY;
|
|
1
|
+
{"version":3,"file":"tcp.js","sourceRoot":"","sources":["../../src/utils/tcp.ts"],"names":[],"mappings":"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","sourcesContent":["import { Socket } from 'bun'\nimport EventEmitter from 'events'\n\nimport { IntermediatePacketCodec, IPacketCodec, ITelegramTransport, MtcuteError, TransportState } from '@mtcute/core'\nimport { 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 @typescript-eslint/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 Bun.connect({\n hostname: dc.ipAddress,\n port: dc.port,\n socket: {\n open: this.handleConnect.bind(this),\n error: this.handleError.bind(this),\n data: (socket, data) => this._packetCodec.feed(data),\n close: this.close.bind(this),\n drain: this.handleDrained.bind(this),\n },\n }).catch((err) => {\n this.handleError(null, err as Error)\n this.close()\n })\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?.end()\n this._socket = null\n this._currentDc = null\n this._packetCodec.reset()\n this._sendOnceDrained = []\n this.emit('close')\n }\n\n handleError(socket: unknown, error: Error): void {\n this.log.error('error: %s', error.stack)\n this.emit('error', error)\n }\n\n handleConnect(socket: Socket): void {\n this._socket = socket\n this.log.info('connected')\n\n Promise.resolve(this._packetCodec.tag())\n .then((initialMessage) => {\n if (initialMessage.length) {\n this._socket!.write(initialMessage)\n this._state = TransportState.Ready\n this.emit('ready')\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 const written = this._socket!.write(framed)\n\n if (written < framed.length) {\n this._sendOnceDrained.push(framed.subarray(written))\n }\n }\n\n private _sendOnceDrained: Uint8Array[] = []\n private handleDrained(): void {\n while (this._sendOnceDrained.length) {\n const data = this._sendOnceDrained.shift()!\n const written = this._socket!.write(data)\n\n if (written < data.length) {\n this._sendOnceDrained.unshift(data.subarray(written))\n break\n }\n }\n }\n}\n\nexport class TcpTransport extends BaseTcpTransport {\n _packetCodec = new IntermediatePacketCodec()\n}\n"]}
|
package/worker.js
CHANGED
package/worker.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker.js","sourceRoot":"","sources":["../src/worker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AAEnD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AACtD,OAAO,EAKH,cAAc,IAAI,kBAAkB,EAEpC,kBAAkB,IAAI,sBAAsB,GAI/C,MAAM,wBAAwB,CAAA;AAE/B,OAAO,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAA;AAIlE,IAAI,WAAW,GAAG,KAAK,CAAA;AAEvB,MAAM,OAAO,cAA8C,SAAQ,kBAAqB;IACpF,cAAc,CAAC,OAA6B;QACxC,IAAI,CAAC,UAAU,EAAE;
|
|
1
|
+
{"version":3,"file":"worker.js","sourceRoot":"","sources":["../src/worker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AAEnD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AACtD,OAAO,EAKH,cAAc,IAAI,kBAAkB,EAEpC,kBAAkB,IAAI,sBAAsB,GAI/C,MAAM,wBAAwB,CAAA;AAE/B,OAAO,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAA;AAIlE,IAAI,WAAW,GAAG,KAAK,CAAA;AAEvB,MAAM,OAAO,cAA8C,SAAQ,kBAAqB;IACpF,cAAc,CAAC,OAA6B;QACxC,IAAI,CAAC,UAAU,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,UAAU,CAAA;QAEvB,MAAM,OAAO,GAAc,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAEtD,iEAAiE;QACjE,UAAU,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAA;QAEhE,OAAO,OAAO,CAAA;IAClB,CAAC;CACJ;AAED,MAAM,OAAO,kBAAkD,SAAQ,sBAAyB;IACvE;IAArB,YAAqB,OAAkC;QACnD,WAAW,CAAC,IAAI,YAAY,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,MAAM,CAAC,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAA;QACxD,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","sourcesContent":["import { parentPort, Worker } from 'worker_threads'\n\nimport { setPlatform } from '@mtcute/core/platform.js'\nimport {\n ClientMessageHandler,\n RespondFn,\n SendFn,\n SomeWorker,\n TelegramWorker as TelegramWorkerBase,\n TelegramWorkerOptions,\n TelegramWorkerPort as TelegramWorkerPortBase,\n TelegramWorkerPortOptions,\n WorkerCustomMethods,\n WorkerMessageHandler,\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 @typescript-eslint/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 Error('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"]}
|