@mtcute/node 0.16.3 → 0.16.7

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.
Files changed (77) hide show
  1. package/cjs/client.d.ts +5 -3
  2. package/cjs/client.js +13 -14
  3. package/cjs/client.js.map +1 -1
  4. package/cjs/common-internals-node/exit-hook.js +1 -3
  5. package/cjs/common-internals-node/exit-hook.js.map +1 -1
  6. package/cjs/common-internals-node/logging.js +15 -15
  7. package/cjs/common-internals-node/logging.js.map +1 -1
  8. package/cjs/common-internals-node/platform.d.ts +1 -1
  9. package/cjs/common-internals-node/platform.js +3 -3
  10. package/cjs/common-internals-node/platform.js.map +1 -1
  11. package/cjs/methods/download-file.d.ts +1 -1
  12. package/cjs/methods/download-file.js +5 -6
  13. package/cjs/methods/download-file.js.map +1 -1
  14. package/cjs/methods/download-node-stream.d.ts +2 -2
  15. package/cjs/methods/download-node-stream.js +1 -2
  16. package/cjs/methods/download-node-stream.js.map +1 -1
  17. package/cjs/methods.js +6 -0
  18. package/cjs/sqlite/driver.d.ts +3 -2
  19. package/cjs/sqlite/driver.js.map +1 -1
  20. package/cjs/sqlite/index.d.ts +1 -1
  21. package/cjs/sqlite/index.js.map +1 -1
  22. package/cjs/utils/crypto.d.ts +2 -1
  23. package/cjs/utils/crypto.js +11 -13
  24. package/cjs/utils/crypto.js.map +1 -1
  25. package/cjs/utils/normalize-file.d.ts +4 -8
  26. package/cjs/utils/normalize-file.js +10 -11
  27. package/cjs/utils/normalize-file.js.map +1 -1
  28. package/cjs/utils/stream-utils.d.ts +1 -1
  29. package/cjs/utils/stream-utils.js +9 -10
  30. package/cjs/utils/stream-utils.js.map +1 -1
  31. package/cjs/utils/tcp.d.ts +5 -4
  32. package/cjs/utils/tcp.js +8 -8
  33. package/cjs/utils/tcp.js.map +1 -1
  34. package/cjs/utils/version.js +3 -3
  35. package/cjs/utils/version.js.map +1 -1
  36. package/cjs/worker.d.ts +2 -1
  37. package/cjs/worker.js +7 -7
  38. package/cjs/worker.js.map +1 -1
  39. package/esm/client.d.ts +5 -3
  40. package/esm/client.js +12 -13
  41. package/esm/client.js.map +1 -1
  42. package/esm/common-internals-node/exit-hook.js +0 -1
  43. package/esm/common-internals-node/exit-hook.js.map +1 -1
  44. package/esm/common-internals-node/logging.js +15 -15
  45. package/esm/common-internals-node/logging.js.map +1 -1
  46. package/esm/common-internals-node/platform.d.ts +1 -1
  47. package/esm/common-internals-node/platform.js +3 -3
  48. package/esm/common-internals-node/platform.js.map +1 -1
  49. package/esm/methods/download-file.d.ts +1 -1
  50. package/esm/methods/download-file.js +2 -2
  51. package/esm/methods/download-file.js.map +1 -1
  52. package/esm/methods/download-node-stream.d.ts +2 -2
  53. package/esm/methods/download-node-stream.js.map +1 -1
  54. package/esm/sqlite/driver.d.ts +3 -2
  55. package/esm/sqlite/driver.js.map +1 -1
  56. package/esm/sqlite/index.d.ts +1 -1
  57. package/esm/sqlite/index.js.map +1 -1
  58. package/esm/utils/crypto.d.ts +2 -1
  59. package/esm/utils/crypto.js +4 -6
  60. package/esm/utils/crypto.js.map +1 -1
  61. package/esm/utils/normalize-file.d.ts +4 -8
  62. package/esm/utils/normalize-file.js +5 -5
  63. package/esm/utils/normalize-file.js.map +1 -1
  64. package/esm/utils/stream-utils.d.ts +1 -1
  65. package/esm/utils/stream-utils.js +3 -3
  66. package/esm/utils/stream-utils.js.map +1 -1
  67. package/esm/utils/tcp.d.ts +5 -4
  68. package/esm/utils/tcp.js +6 -6
  69. package/esm/utils/tcp.js.map +1 -1
  70. package/esm/utils/version.js +1 -1
  71. package/esm/utils/version.js.map +1 -1
  72. package/esm/worker.d.ts +2 -1
  73. package/esm/worker.js +4 -4
  74. package/esm/worker.js.map +1 -1
  75. package/methods.d.ts +1 -0
  76. package/methods.js +1 -0
  77. package/package.json +11 -7
@@ -1 +1 @@
1
- {"version":3,"file":"download-node-stream.js","sourceRoot":"","sources":["../../../src/methods/download-node-stream.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AAE1D,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAA;AAE1D;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAChC,MAAuB,EACvB,QAA8B,EAC9B,MAA+B;IAE/B,OAAO,eAAe,CAAC,gBAAgB,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAA;AACtE,CAAC","sourcesContent":["import { Readable } from 'stream'\n\nimport { FileDownloadLocation, FileDownloadParameters, ITelegramClient } from '@mtcute/core'\nimport { downloadAsStream } from '@mtcute/core/methods.js'\n\nimport { webStreamToNode } from '../utils/stream-utils.js'\n\n/**\n * Download a remote file as a Node.js Readable stream.\n *\n * @param params File download parameters\n */\nexport function downloadAsNodeStream(\n client: ITelegramClient,\n location: FileDownloadLocation,\n params?: FileDownloadParameters,\n): Readable {\n return webStreamToNode(downloadAsStream(client, location, params))\n}\n"]}
1
+ {"version":3,"file":"download-node-stream.js","sourceRoot":"","sources":["../../../src/methods/download-node-stream.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AAE1D,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAA;AAE1D;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAChC,MAAuB,EACvB,QAA8B,EAC9B,MAA+B;IAE/B,OAAO,eAAe,CAAC,gBAAgB,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAA;AACtE,CAAC","sourcesContent":["import type { Readable } from 'node:stream'\n\nimport type { FileDownloadLocation, FileDownloadParameters, ITelegramClient } from '@mtcute/core'\nimport { downloadAsStream } from '@mtcute/core/methods.js'\n\nimport { webStreamToNode } from '../utils/stream-utils.js'\n\n/**\n * Download a remote file as a Node.js Readable stream.\n *\n * @param params File download parameters\n */\nexport function downloadAsNodeStream(\n client: ITelegramClient,\n location: FileDownloadLocation,\n params?: FileDownloadParameters,\n): Readable {\n return webStreamToNode(downloadAsStream(client, location, params))\n}\n"]}
@@ -1,5 +1,6 @@
1
- import { Options } from 'better-sqlite3';
2
- import { BaseSqliteStorageDriver, ISqliteDatabase } from '@mtcute/core';
1
+ import type { Options } from 'better-sqlite3';
2
+ import type { ISqliteDatabase } from '@mtcute/core';
3
+ import { BaseSqliteStorageDriver } from '@mtcute/core';
3
4
  export interface SqliteStorageDriverOptions {
4
5
  /**
5
6
  * By default, WAL mode is enabled, which
@@ -1 +1 @@
1
- {"version":3,"file":"driver.js","sourceRoot":"","sources":["../../../src/sqlite/driver.ts"],"names":[],"mappings":"AAAA,OAAO,OAAoB,MAAM,gBAAgB,CAAA;AAEjD,OAAO,EAAE,uBAAuB,EAAmB,MAAM,cAAc,CAAA;AAqBvE,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,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE;YAC9B,GAAG,IAAI,CAAC,MAAM,EAAE,OAAO;YACvB,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,CAAE,IAAI,CAAC,IAAI,CAAC,OAA8B,CAAC,CAAC,CAAC,SAAS;SAC5F,CAAC,CAAA;QAEF,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC;YAC3B,EAAE,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAA;QACnC,CAAC;QAED,OAAO,EAAqB,CAAA;IAChC,CAAC;CACJ","sourcesContent":["import sqlite3, { Options } from 'better-sqlite3'\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://github.com/JoshuaWise/better-sqlite3/blob/master/docs/performance.md)\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 /**\n * Additional options to pass to `better-sqlite3`\n */\n options?: Options\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 = sqlite3(this.filename, {\n ...this.params?.options,\n verbose: this._log.mgr.level >= 5 ? (this._log.verbose as Options['verbose']) : undefined,\n })\n\n if (!this.params?.disableWal) {\n db.pragma('journal_mode = WAL')\n }\n\n return db as ISqliteDatabase\n }\n}\n"]}
1
+ {"version":3,"file":"driver.js","sourceRoot":"","sources":["../../../src/sqlite/driver.ts"],"names":[],"mappings":"AACA,OAAO,OAAO,MAAM,gBAAgB,CAAA;AAEpC,OAAO,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAA;AAqBtD,MAAM,OAAO,mBAAoB,SAAQ,uBAAuB;IAE/C;IACA;IAFb,YACa,WAAW,UAAU,EACrB,MAA+C;QAExD,KAAK,EAAE,CAAA;QAHE,aAAQ,GAAR,QAAQ,CAAa;QACrB,WAAM,GAAN,MAAM,CAAyC;IAG5D,CAAC;IAED,eAAe;QACX,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE;YAC9B,GAAG,IAAI,CAAC,MAAM,EAAE,OAAO;YACvB,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,CAAE,IAAI,CAAC,IAAI,CAAC,OAA8B,CAAC,CAAC,CAAC,SAAS;SAC5F,CAAC,CAAA;QAEF,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC;YAC3B,EAAE,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAA;QACnC,CAAC;QAED,OAAO,EAAqB,CAAA;IAChC,CAAC;CACJ","sourcesContent":["import type { Options } from 'better-sqlite3'\nimport sqlite3 from 'better-sqlite3'\nimport type { ISqliteDatabase } from '@mtcute/core'\nimport { BaseSqliteStorageDriver } from '@mtcute/core'\n\nexport interface SqliteStorageDriverOptions {\n /**\n * By default, WAL mode is enabled, which\n * significantly improves performance.\n * [Learn more](https://github.com/JoshuaWise/better-sqlite3/blob/master/docs/performance.md)\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 /**\n * Additional options to pass to `better-sqlite3`\n */\n options?: Options\n}\n\nexport class SqliteStorageDriver extends BaseSqliteStorageDriver {\n constructor(\n readonly filename = ':memory:',\n readonly params?: SqliteStorageDriverOptions | undefined,\n ) {\n super()\n }\n\n _createDatabase(): ISqliteDatabase {\n const db = sqlite3(this.filename, {\n ...this.params?.options,\n verbose: this._log.mgr.level >= 5 ? (this._log.verbose as Options['verbose']) : undefined,\n })\n\n if (!this.params?.disableWal) {\n db.pragma('journal_mode = WAL')\n }\n\n return db as ISqliteDatabase\n }\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  import { BaseSqliteStorage } from '@mtcute/core';
2
- import { SqliteStorageDriverOptions } from './driver.js';
2
+ import type { SqliteStorageDriverOptions } from './driver.js';
3
3
  export { SqliteStorageDriver } from './driver.js';
4
4
  export declare class SqliteStorage extends BaseSqliteStorage {
5
5
  readonly filename: string;
@@ -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;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
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/sqlite/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AAGhD,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAEjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAEjD,MAAM,OAAO,aAAc,SAAQ,iBAAiB;IAEnC;IACA;IAFb,YACa,WAAW,UAAU,EACrB,MAA+C;QAExD,KAAK,CAAC,IAAI,mBAAmB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAA;QAHvC,aAAQ,GAAR,QAAQ,CAAa;QACrB,WAAM,GAAN,MAAM,CAAyC;IAG5D,CAAC;CACJ","sourcesContent":["import { BaseSqliteStorage } from '@mtcute/core'\n\nimport type { SqliteStorageDriverOptions } from './driver.js'\nimport { SqliteStorageDriver } 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 | undefined,\n ) {\n super(new SqliteStorageDriver(filename, params))\n }\n}\n"]}
@@ -1,4 +1,5 @@
1
- import { BaseCryptoProvider, IAesCtr, ICryptoProvider, IEncryptionScheme } from '@mtcute/core/utils.js';
1
+ import type { IAesCtr, ICryptoProvider, IEncryptionScheme } from '@mtcute/core/utils.js';
2
+ import { BaseCryptoProvider } from '@mtcute/core/utils.js';
2
3
  export declare abstract class BaseNodeCryptoProvider extends BaseCryptoProvider {
3
4
  createAesCtr(key: Uint8Array, iv: Uint8Array): IAesCtr;
4
5
  pbkdf2(password: Uint8Array, salt: Uint8Array, iterations: number, keylen?: number, algo?: string): Promise<Uint8Array>;
@@ -1,8 +1,7 @@
1
- // eslint-disable-next-line no-restricted-imports
2
- import { createCipheriv, createHash, createHmac, pbkdf2, randomFillSync } from 'crypto';
3
- import { readFile } from 'fs/promises';
4
- import { createRequire } from 'module';
5
- import { deflateSync, gunzipSync } from 'zlib';
1
+ import { createCipheriv, createHash, createHmac, pbkdf2, randomFillSync } from 'node:crypto';
2
+ import { readFile } from 'node:fs/promises';
3
+ import { createRequire } from 'node:module';
4
+ import { deflateSync, gunzipSync } from 'node:zlib';
6
5
  import { BaseCryptoProvider } from '@mtcute/core/utils.js';
7
6
  import { ige256Decrypt, ige256Encrypt, initSync } from '@mtcute/wasm';
8
7
  export class BaseNodeCryptoProvider extends BaseCryptoProvider {
@@ -32,7 +31,6 @@ export class BaseNodeCryptoProvider extends BaseCryptoProvider {
32
31
  maxOutputLength: maxSize,
33
32
  });
34
33
  // hot path, avoid additional runtime checks
35
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
36
34
  }
37
35
  catch (e) {
38
36
  if (e.code === 'ERR_BUFFER_TOO_LARGE') {
@@ -1 +1 @@
1
- {"version":3,"file":"crypto.js","sourceRoot":"","sources":["../../../src/utils/crypto.ts"],"names":[],"mappings":"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","sourcesContent":["// eslint-disable-next-line no-restricted-imports\nimport { createCipheriv, createHash, createHmac, pbkdf2, randomFillSync } from 'crypto'\nimport { readFile } from 'fs/promises'\nimport { createRequire } from 'module'\nimport { deflateSync, gunzipSync } from 'zlib'\n\nimport { BaseCryptoProvider, IAesCtr, ICryptoProvider, IEncryptionScheme } 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\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 // eslint-disable-next-line @typescript-eslint/no-explicit-any\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) {\n randomFillSync(buf)\n }\n}\n\nexport class NodeCryptoProvider extends BaseNodeCryptoProvider implements ICryptoProvider {\n async initialize(): Promise<void> {\n // @only-if-esm\n const require = createRequire(import.meta.url)\n // @/only-if-esm\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
+ {"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 // @only-if-esm\n const require = createRequire(import.meta.url)\n // @/only-if-esm\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,10 +1,6 @@
1
- import { UploadFileLike } from '@mtcute/core';
1
+ import type { UploadFileLike } from '@mtcute/core';
2
2
  export declare function normalizeFile(file: UploadFileLike): Promise<{
3
- file: ReadableStream<Uint8Array>;
4
- fileName: string;
5
- fileSize: number;
6
- } | {
7
- file: ReadableStream<Uint8Array>;
8
- fileName?: undefined;
9
- fileSize?: undefined;
3
+ file: UploadFileLike;
4
+ fileName?: string | undefined;
5
+ fileSize?: number;
10
6
  } | null>;
@@ -1,7 +1,7 @@
1
- import { createReadStream, ReadStream } from 'fs';
2
- import { stat } from 'fs/promises';
3
- import { basename } from 'path';
4
- import { Readable } from 'stream';
1
+ import { ReadStream, createReadStream } from 'node:fs';
2
+ import { stat } from 'node:fs/promises';
3
+ import { basename } from 'node:path';
4
+ import { Readable } from 'node:stream';
5
5
  import { nodeStreamToWeb } from './stream-utils.js';
6
6
  export async function normalizeFile(file) {
7
7
  if (typeof file === 'string') {
@@ -9,7 +9,7 @@ export async function normalizeFile(file) {
9
9
  }
10
10
  if (file instanceof ReadStream) {
11
11
  const fileName = basename(file.path.toString());
12
- const fileSize = await stat(file.path.toString()).then((stat) => stat.size);
12
+ const fileSize = await stat(file.path.toString()).then(stat => stat.size);
13
13
  return {
14
14
  file: nodeStreamToWeb(file),
15
15
  fileName,
@@ -1 +1 @@
1
- {"version":3,"file":"normalize-file.js","sourceRoot":"","sources":["../../../src/utils/normalize-file.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,IAAI,CAAA;AACjD,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAA;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAA;AAC/B,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAA;AAIjC,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAEnD,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,IAAoB;IACpD,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC3B,IAAI,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAA;IACjC,CAAC;IAED,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,eAAe,CAAC,IAAI,CAAC;YAC3B,QAAQ;YACR,QAAQ;SACX,CAAA;IACL,CAAC;IAED,IAAI,IAAI,YAAY,QAAQ,EAAE,CAAC;QAC3B,OAAO;YACH,IAAI,EAAE,eAAe,CAAC,IAAI,CAAC;SAC9B,CAAA;IACL,CAAC;IAED,6CAA6C;IAC7C,OAAO,IAAI,CAAA;AACf,CAAC","sourcesContent":["import { createReadStream, ReadStream } from 'fs'\nimport { stat } from 'fs/promises'\nimport { basename } from 'path'\nimport { Readable } from 'stream'\n\nimport { UploadFileLike } from '@mtcute/core'\n\nimport { nodeStreamToWeb } from './stream-utils.js'\n\nexport async function normalizeFile(file: UploadFileLike) {\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
+ {"version":3,"file":"normalize-file.js","sourceRoot":"","sources":["../../../src/utils/normalize-file.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AACtD,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAA;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAItC,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAEnD,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,IAAoB;IAKpD,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC3B,IAAI,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAA;IACjC,CAAC;IAED,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,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAEzE,OAAO;YACH,IAAI,EAAE,eAAe,CAAC,IAAI,CAAC;YAC3B,QAAQ;YACR,QAAQ;SACX,CAAA;IACL,CAAC;IAED,IAAI,IAAI,YAAY,QAAQ,EAAE,CAAC;QAC3B,OAAO;YACH,IAAI,EAAE,eAAe,CAAC,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,3 +1,3 @@
1
- import { Readable } from 'stream';
1
+ import { Readable } from 'node:stream';
2
2
  export declare function nodeStreamToWeb(stream: Readable): ReadableStream<Uint8Array>;
3
3
  export declare function webStreamToNode(stream: ReadableStream<Uint8Array>): Readable;
@@ -1,4 +1,4 @@
1
- import { Readable } from 'stream';
1
+ import { Readable } from 'node:stream';
2
2
  import { isNodeVersionAfter } from './version.js';
3
3
  export function nodeStreamToWeb(stream) {
4
4
  if (typeof Readable.toWeb === 'function') {
@@ -24,8 +24,8 @@ export function nodeStreamToWeb(stream) {
24
24
  });
25
25
  }
26
26
  export function webStreamToNode(stream) {
27
- if (typeof Readable.fromWeb === 'function' &&
28
- isNodeVersionAfter(18, 13, 0) // https://github.com/nodejs/node/issues/42694
27
+ if (typeof Readable.fromWeb === 'function'
28
+ && isNodeVersionAfter(18, 13, 0) // https://github.com/nodejs/node/issues/42694
29
29
  ) {
30
30
  // @ts-expect-error node typings are wrong lmao
31
31
  return Readable.fromWeb(stream);
@@ -1 +1 @@
1
- {"version":3,"file":"stream-utils.js","sourceRoot":"","sources":["../../../src/utils/stream-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAA;AAEjC,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AAEjD,MAAM,UAAU,eAAe,CAAC,MAAgB;IAC5C,IAAI,OAAO,QAAQ,CAAC,KAAK,KAAK,UAAU,EAAE,CAAC;QACvC,OAAO,QAAQ,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,MAAM,UAAU,eAAe,CAAC,MAAkC;IAC9D,IACI,OAAO,QAAQ,CAAC,OAAO,KAAK,UAAU;QACtC,kBAAkB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,8CAA8C;MAC9E,CAAC;QACC,+CAA+C;QAC/C,OAAO,QAAQ,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,QAAQ,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 '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"]}
1
+ {"version":3,"file":"stream-utils.js","sourceRoot":"","sources":["../../../src/utils/stream-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAEtC,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AAEjD,MAAM,UAAU,eAAe,CAAC,MAAgB;IAC5C,IAAI,OAAO,QAAQ,CAAC,KAAK,KAAK,UAAU,EAAE,CAAC;QACvC,OAAO,QAAQ,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,MAAM,UAAU,eAAe,CAAC,MAAkC;IAC9D,IACI,OAAO,QAAQ,CAAC,OAAO,KAAK,UAAU;WACnC,kBAAkB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,8CAA8C;MACjF,CAAC;QACC,+CAA+C;QAC/C,OAAO,QAAQ,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,QAAQ,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"]}
@@ -1,7 +1,8 @@
1
- import EventEmitter from 'events';
2
- import { Socket } from 'net';
3
- import { IntermediatePacketCodec, IPacketCodec, ITelegramTransport, TransportState } from '@mtcute/core';
4
- import { BasicDcOption, ICryptoProvider, Logger } from '@mtcute/core/utils.js';
1
+ import EventEmitter from 'node:events';
2
+ import type { Socket } from 'node:net';
3
+ import type { IPacketCodec, ITelegramTransport } from '@mtcute/core';
4
+ import { IntermediatePacketCodec, TransportState } from '@mtcute/core';
5
+ import type { BasicDcOption, ICryptoProvider, Logger } from '@mtcute/core/utils.js';
5
6
  /**
6
7
  * Base for TCP transports.
7
8
  * Subclasses must provide packet codec in `_packetCodec` property
package/esm/utils/tcp.js CHANGED
@@ -1,5 +1,5 @@
1
- import EventEmitter from 'events';
2
- import { connect } from 'net';
1
+ import EventEmitter from 'node:events';
2
+ import { connect } from 'node:net';
3
3
  import { IntermediatePacketCodec, MtcuteError, TransportState } from '@mtcute/core';
4
4
  /**
5
5
  * Base for TCP transports.
@@ -31,15 +31,15 @@ export class BaseTcpTransport extends EventEmitter {
31
31
  currentDc() {
32
32
  return this._currentDc;
33
33
  }
34
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
34
+ // eslint-disable-next-line unused-imports/no-unused-vars
35
35
  connect(dc, testMode) {
36
36
  if (this._state !== TransportState.Idle) {
37
37
  throw new MtcuteError('Transport is not IDLE');
38
38
  }
39
39
  if (!this.packetCodecInitialized) {
40
40
  this._packetCodec.setup?.(this._crypto, this.log);
41
- this._packetCodec.on('error', (err) => this.emit('error', err));
42
- this._packetCodec.on('packet', (buf) => this.emit('message', buf));
41
+ this._packetCodec.on('error', err => this.emit('error', err));
42
+ this._packetCodec.on('packet', buf => this.emit('message', buf));
43
43
  this.packetCodecInitialized = true;
44
44
  }
45
45
  this._state = TransportState.Connecting;
@@ -93,7 +93,7 @@ export class BaseTcpTransport extends EventEmitter {
93
93
  this.emit('ready');
94
94
  }
95
95
  })
96
- .catch((err) => this.emit('error', err));
96
+ .catch(err => this.emit('error', err));
97
97
  }
98
98
  async send(bytes) {
99
99
  const framed = await this._packetCodec.encode(bytes);
@@ -1 +1 @@
1
- {"version":3,"file":"tcp.js","sourceRoot":"","sources":["../../../src/utils/tcp.ts"],"names":[],"mappings":"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","sourcesContent":["import EventEmitter from 'events'\nimport { connect, Socket } from 'net'\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 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 = new IntermediatePacketCodec()\n}\n"]}
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"]}
@@ -1,5 +1,5 @@
1
1
  export const NODE_VERSION = typeof process !== 'undefined' && 'node' in process.versions ? process.versions.node : null;
2
- export const NODE_VERSION_TUPLE = NODE_VERSION ? /*#__PURE__*/ NODE_VERSION.split('.').map(Number) : null;
2
+ export const NODE_VERSION_TUPLE = NODE_VERSION ? /* #__PURE__ */ NODE_VERSION.split('.').map(Number) : null;
3
3
  export function isNodeVersionAfter(major, minor, patch) {
4
4
  if (!NODE_VERSION_TUPLE)
5
5
  return true; // assume non-node environment is always "after"
@@ -1 +1 @@
1
- {"version":3,"file":"version.js","sourceRoot":"","sources":["../../../src/utils/version.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,YAAY,GAAG,OAAO,OAAO,KAAK,WAAW,IAAI,MAAM,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAA;AACvH,MAAM,CAAC,MAAM,kBAAkB,GAAG,YAAY,CAAC,CAAC,CAAC,aAAa,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;AAEzG,MAAM,UAAU,kBAAkB,CAAC,KAAa,EAAE,KAAa,EAAE,KAAa;IAC1E,IAAI,CAAC,kBAAkB;QAAE,OAAO,IAAI,CAAA,CAAC,gDAAgD;IAErF,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,kBAAkB,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 = typeof process !== 'undefined' && 'node' in process.versions ? process.versions.node : null\nexport const NODE_VERSION_TUPLE = 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"]}
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../../../src/utils/version.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,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;AACjG,MAAM,CAAC,MAAM,kBAAkB,GACzB,YAAY,CAAC,CAAC,CAAC,eAAe,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;AAE/E,MAAM,UAAU,kBAAkB,CAAC,KAAa,EAAE,KAAa,EAAE,KAAa;IAC1E,IAAI,CAAC,kBAAkB;QAAE,OAAO,IAAI,CAAA,CAAC,gDAAgD;IAErF,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,kBAAkB,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/esm/worker.d.ts CHANGED
@@ -1,4 +1,5 @@
1
- import { ClientMessageHandler, RespondFn, SendFn, SomeWorker, TelegramWorker as TelegramWorkerBase, TelegramWorkerOptions, TelegramWorkerPort as TelegramWorkerPortBase, TelegramWorkerPortOptions, WorkerCustomMethods, WorkerMessageHandler } from '@mtcute/core/worker.js';
1
+ import type { ClientMessageHandler, RespondFn, SendFn, SomeWorker, TelegramWorkerOptions, TelegramWorkerPortOptions, WorkerCustomMethods, WorkerMessageHandler } from '@mtcute/core/worker.js';
2
+ import { TelegramWorker as TelegramWorkerBase, TelegramWorkerPort as TelegramWorkerPortBase } from '@mtcute/core/worker.js';
2
3
  export type { TelegramWorkerOptions, TelegramWorkerPortOptions, WorkerCustomMethods };
3
4
  export declare class TelegramWorker<T extends WorkerCustomMethods> extends TelegramWorkerBase<T> {
4
5
  registerWorker(handler: WorkerMessageHandler): RespondFn;
package/esm/worker.js CHANGED
@@ -1,4 +1,4 @@
1
- import { parentPort, Worker } from 'worker_threads';
1
+ import { Worker, parentPort } from 'node:worker_threads';
2
2
  import { setPlatform } from '@mtcute/core/platform.js';
3
3
  import { TelegramWorker as TelegramWorkerBase, TelegramWorkerPort as TelegramWorkerPortBase, } from '@mtcute/core/worker.js';
4
4
  import { NodePlatform } from './common-internals-node/platform.js';
@@ -14,8 +14,8 @@ export class TelegramWorker extends TelegramWorkerBase {
14
14
  _registered = true;
15
15
  const port = parentPort;
16
16
  const respond = port.postMessage.bind(port);
17
- // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
18
- parentPort.on('message', (message) => handler(message, respond));
17
+ // eslint-disable-next-line ts/no-unsafe-argument
18
+ parentPort.on('message', message => handler(message, respond));
19
19
  return respond;
20
20
  }
21
21
  }
@@ -28,7 +28,7 @@ export class TelegramWorkerPort extends TelegramWorkerPortBase {
28
28
  }
29
29
  connectToWorker(worker, handler) {
30
30
  if (!(worker instanceof Worker)) {
31
- throw new Error('Only worker_threads are supported');
31
+ throw new TypeError('Only worker_threads are supported');
32
32
  }
33
33
  const send = worker.postMessage.bind(worker);
34
34
  worker.on('message', handler);
package/esm/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,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"]}
1
+ {"version":3,"file":"worker.js","sourceRoot":"","sources":["../../src/worker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAExD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AAWtD,OAAO,EACH,cAAc,IAAI,kBAAkB,EACpC,kBAAkB,IAAI,sBAAsB,GAC/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,iDAAiD;QACjD,UAAU,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAA;QAE9D,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,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","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/methods.d.ts ADDED
@@ -0,0 +1 @@
1
+ export * from './esm/methods.js'
package/methods.js ADDED
@@ -0,0 +1 @@
1
+ export * from './esm/methods.js'
package/package.json CHANGED
@@ -1,12 +1,11 @@
1
1
  {
2
2
  "name": "@mtcute/node",
3
- "version": "0.16.3",
3
+ "type": "module",
4
+ "version": "0.16.7",
4
5
  "description": "Meta-package for Node.js",
5
6
  "author": "alina sireneva <alina@tei.su>",
6
7
  "license": "MIT",
7
- "type": "module",
8
8
  "sideEffects": false,
9
- "scripts": {},
10
9
  "exports": {
11
10
  ".": {
12
11
  "import": "./esm/index.js",
@@ -15,13 +14,18 @@
15
14
  "./utils.js": {
16
15
  "import": "./esm/utils.js",
17
16
  "require": "./cjs/utils.js"
17
+ },
18
+ "./methods.js": {
19
+ "import": "./esm/methods.js",
20
+ "require": "./cjs/methods.js"
18
21
  }
19
22
  },
23
+ "scripts": {},
20
24
  "dependencies": {
21
- "@mtcute/core": "^0.16.3",
22
- "@mtcute/wasm": "^0.16.0",
23
- "@mtcute/markdown-parser": "^0.16.3",
24
- "@mtcute/html-parser": "^0.16.0",
25
+ "@mtcute/core": "^0.16.7",
26
+ "@mtcute/html-parser": "^0.16.7",
27
+ "@mtcute/markdown-parser": "^0.16.7",
28
+ "@mtcute/wasm": "^0.16.7",
25
29
  "better-sqlite3": "9.5.0"
26
30
  },
27
31
  "main": "cjs/index.js",