@mtcute/core 0.15.2 → 0.16.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.
Files changed (163) hide show
  1. package/cjs/highlevel/base.d.ts +3 -3
  2. package/cjs/highlevel/base.js.map +1 -1
  3. package/cjs/highlevel/methods/files/download-iterable.js +1 -1
  4. package/cjs/highlevel/methods/files/download-iterable.js.map +1 -1
  5. package/cjs/highlevel/methods/users/resolve-peer-many.js +1 -1
  6. package/cjs/highlevel/methods/users/resolve-peer-many.js.map +1 -1
  7. package/cjs/highlevel/types/messages/dialog.d.ts +4 -2
  8. package/cjs/highlevel/types/messages/dialog.js +4 -2
  9. package/cjs/highlevel/types/messages/dialog.js.map +1 -1
  10. package/cjs/highlevel/types/messages/message-action.d.ts +15 -1
  11. package/cjs/highlevel/types/messages/message-action.js +10 -0
  12. package/cjs/highlevel/types/messages/message-action.js.map +1 -1
  13. package/cjs/highlevel/types/peers/full-chat.d.ts +2 -0
  14. package/cjs/highlevel/types/peers/full-chat.js +4 -0
  15. package/cjs/highlevel/types/peers/full-chat.js.map +1 -1
  16. package/cjs/highlevel/updates/manager.js +3 -3
  17. package/cjs/highlevel/updates/manager.js.map +1 -1
  18. package/cjs/highlevel/worker/invoker.js +2 -1
  19. package/cjs/highlevel/worker/invoker.js.map +1 -1
  20. package/cjs/highlevel/worker/port.js +4 -3
  21. package/cjs/highlevel/worker/port.js.map +1 -1
  22. package/cjs/highlevel/worker/protocol.d.ts +10 -5
  23. package/cjs/highlevel/worker/protocol.js +66 -0
  24. package/cjs/highlevel/worker/protocol.js.map +1 -1
  25. package/cjs/highlevel/worker/worker.js +6 -5
  26. package/cjs/highlevel/worker/worker.js.map +1 -1
  27. package/cjs/network/client.d.ts +0 -16
  28. package/cjs/network/client.js +0 -2
  29. package/cjs/network/client.js.map +1 -1
  30. package/cjs/network/index.d.ts +2 -1
  31. package/cjs/network/index.js +1 -0
  32. package/cjs/network/index.js.map +1 -1
  33. package/cjs/network/middlewares/bundle.d.ts +3 -0
  34. package/cjs/network/middlewares/bundle.js +20 -0
  35. package/cjs/network/middlewares/bundle.js.map +1 -0
  36. package/cjs/network/middlewares/default.d.ts +8 -0
  37. package/cjs/network/middlewares/default.js +10 -0
  38. package/cjs/network/middlewares/default.js.map +1 -0
  39. package/cjs/network/middlewares/flood-waiter.d.ts +37 -0
  40. package/cjs/network/middlewares/flood-waiter.js +70 -0
  41. package/cjs/network/middlewares/flood-waiter.js.map +1 -0
  42. package/cjs/network/middlewares/index.d.ts +2 -0
  43. package/cjs/network/middlewares/index.js +29 -0
  44. package/cjs/network/middlewares/index.js.map +1 -0
  45. package/cjs/network/middlewares/internal-errors.d.ts +17 -0
  46. package/cjs/network/middlewares/internal-errors.js +41 -0
  47. package/cjs/network/middlewares/internal-errors.js.map +1 -0
  48. package/cjs/network/middlewares/on-error.d.ts +30 -0
  49. package/cjs/network/middlewares/on-error.js +44 -0
  50. package/cjs/network/middlewares/on-error.js.map +1 -0
  51. package/cjs/network/middlewares/on-method.d.ts +39 -0
  52. package/cjs/network/middlewares/on-method.js +45 -0
  53. package/cjs/network/middlewares/on-method.js.map +1 -0
  54. package/cjs/network/mtproto-session.js +1 -1
  55. package/cjs/network/mtproto-session.js.map +1 -1
  56. package/cjs/network/multi-session-connection.js +1 -1
  57. package/cjs/network/multi-session-connection.js.map +1 -1
  58. package/cjs/network/network-manager.d.ts +23 -6
  59. package/cjs/network/network-manager.js +55 -102
  60. package/cjs/network/network-manager.js.map +1 -1
  61. package/cjs/network/persistent-connection.js +5 -5
  62. package/cjs/network/persistent-connection.js.map +1 -1
  63. package/cjs/network/session-connection.js +6 -6
  64. package/cjs/network/session-connection.js.map +1 -1
  65. package/cjs/storage/driver.js +1 -1
  66. package/cjs/storage/driver.js.map +1 -1
  67. package/cjs/storage/storage.js +1 -1
  68. package/cjs/storage/storage.js.map +1 -1
  69. package/cjs/utils/abort-signal.d.ts +1 -0
  70. package/cjs/utils/abort-signal.js +13 -0
  71. package/cjs/utils/abort-signal.js.map +1 -0
  72. package/cjs/utils/composer.d.ts +3 -0
  73. package/cjs/utils/composer.js +22 -0
  74. package/cjs/utils/composer.js.map +1 -0
  75. package/cjs/utils/error-reporting.js +1 -1
  76. package/cjs/utils/error-reporting.js.map +1 -1
  77. package/cjs/utils/index.d.ts +1 -0
  78. package/cjs/utils/index.js +1 -0
  79. package/cjs/utils/index.js.map +1 -1
  80. package/cjs/utils/logger.js +15 -3
  81. package/cjs/utils/logger.js.map +1 -1
  82. package/esm/highlevel/base.d.ts +3 -3
  83. package/esm/highlevel/base.js.map +1 -1
  84. package/esm/highlevel/methods/files/download-iterable.js +1 -1
  85. package/esm/highlevel/methods/files/download-iterable.js.map +1 -1
  86. package/esm/highlevel/methods/users/resolve-peer-many.js +1 -1
  87. package/esm/highlevel/methods/users/resolve-peer-many.js.map +1 -1
  88. package/esm/highlevel/types/messages/dialog.d.ts +4 -2
  89. package/esm/highlevel/types/messages/dialog.js +4 -2
  90. package/esm/highlevel/types/messages/dialog.js.map +1 -1
  91. package/esm/highlevel/types/messages/message-action.d.ts +15 -1
  92. package/esm/highlevel/types/messages/message-action.js +10 -0
  93. package/esm/highlevel/types/messages/message-action.js.map +1 -1
  94. package/esm/highlevel/types/peers/full-chat.d.ts +2 -0
  95. package/esm/highlevel/types/peers/full-chat.js +4 -0
  96. package/esm/highlevel/types/peers/full-chat.js.map +1 -1
  97. package/esm/highlevel/updates/manager.js +3 -3
  98. package/esm/highlevel/updates/manager.js.map +1 -1
  99. package/esm/highlevel/worker/invoker.js +2 -1
  100. package/esm/highlevel/worker/invoker.js.map +1 -1
  101. package/esm/highlevel/worker/port.js +4 -3
  102. package/esm/highlevel/worker/port.js.map +1 -1
  103. package/esm/highlevel/worker/protocol.d.ts +10 -5
  104. package/esm/highlevel/worker/protocol.js +60 -1
  105. package/esm/highlevel/worker/protocol.js.map +1 -1
  106. package/esm/highlevel/worker/worker.js +6 -5
  107. package/esm/highlevel/worker/worker.js.map +1 -1
  108. package/esm/network/client.d.ts +0 -16
  109. package/esm/network/client.js +0 -2
  110. package/esm/network/client.js.map +1 -1
  111. package/esm/network/index.d.ts +2 -1
  112. package/esm/network/index.js +1 -0
  113. package/esm/network/index.js.map +1 -1
  114. package/esm/network/middlewares/bundle.d.ts +3 -0
  115. package/esm/network/middlewares/bundle.js +4 -0
  116. package/esm/network/middlewares/bundle.js.map +1 -0
  117. package/esm/network/middlewares/default.d.ts +8 -0
  118. package/esm/network/middlewares/default.js +6 -0
  119. package/esm/network/middlewares/default.js.map +1 -0
  120. package/esm/network/middlewares/flood-waiter.d.ts +37 -0
  121. package/esm/network/middlewares/flood-waiter.js +66 -0
  122. package/esm/network/middlewares/flood-waiter.js.map +1 -0
  123. package/esm/network/middlewares/index.d.ts +2 -0
  124. package/esm/network/middlewares/index.js +3 -0
  125. package/esm/network/middlewares/index.js.map +1 -0
  126. package/esm/network/middlewares/internal-errors.d.ts +17 -0
  127. package/esm/network/middlewares/internal-errors.js +37 -0
  128. package/esm/network/middlewares/internal-errors.js.map +1 -0
  129. package/esm/network/middlewares/on-error.d.ts +30 -0
  130. package/esm/network/middlewares/on-error.js +40 -0
  131. package/esm/network/middlewares/on-error.js.map +1 -0
  132. package/esm/network/middlewares/on-method.d.ts +39 -0
  133. package/esm/network/middlewares/on-method.js +41 -0
  134. package/esm/network/middlewares/on-method.js.map +1 -0
  135. package/esm/network/mtproto-session.js +1 -1
  136. package/esm/network/mtproto-session.js.map +1 -1
  137. package/esm/network/multi-session-connection.js +1 -1
  138. package/esm/network/multi-session-connection.js.map +1 -1
  139. package/esm/network/network-manager.d.ts +23 -6
  140. package/esm/network/network-manager.js +57 -104
  141. package/esm/network/network-manager.js.map +1 -1
  142. package/esm/network/persistent-connection.js +5 -5
  143. package/esm/network/persistent-connection.js.map +1 -1
  144. package/esm/network/session-connection.js +6 -6
  145. package/esm/network/session-connection.js.map +1 -1
  146. package/esm/storage/driver.js +1 -1
  147. package/esm/storage/driver.js.map +1 -1
  148. package/esm/storage/storage.js +1 -1
  149. package/esm/storage/storage.js.map +1 -1
  150. package/esm/utils/abort-signal.d.ts +1 -0
  151. package/esm/utils/abort-signal.js +9 -0
  152. package/esm/utils/abort-signal.js.map +1 -0
  153. package/esm/utils/composer.d.ts +3 -0
  154. package/esm/utils/composer.js +18 -0
  155. package/esm/utils/composer.js.map +1 -0
  156. package/esm/utils/error-reporting.js +1 -1
  157. package/esm/utils/error-reporting.js.map +1 -1
  158. package/esm/utils/index.d.ts +1 -0
  159. package/esm/utils/index.js +1 -0
  160. package/esm/utils/index.js.map +1 -1
  161. package/esm/utils/logger.js +15 -3
  162. package/esm/utils/logger.js.map +1 -1
  163. package/package.json +4 -4
@@ -1 +1 @@
1
- {"version":3,"file":"persistent-connection.js","sourceRoot":"","sources":["../../../src/network/persistent-connection.ts"],"names":[],"mappings":"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","sourcesContent":["import EventEmitter from 'events'\n\nimport { MtcuteError } from '../types/index.js'\nimport { BasicDcOption, ICryptoProvider, Logger } from '../utils/index.js'\nimport { ReconnectionStrategy } from './reconnection.js'\nimport { ITelegramTransport, TransportFactory, TransportState } from './transports/index.js'\n\nexport interface PersistentConnectionParams {\n crypto: ICryptoProvider\n transportFactory: TransportFactory\n dc: BasicDcOption\n testMode: boolean\n reconnectionStrategy: ReconnectionStrategy<PersistentConnectionParams>\n inactivityTimeout?: number\n}\n\nlet nextConnectionUid = 0\n\n/**\n * Base class for persistent connections.\n * Only used for {@link PersistentConnection} and used as a mean of code splitting.\n * This class doesn't know anything about MTProto, it just manages the transport.\n */\nexport abstract class PersistentConnection extends EventEmitter {\n private _uid = nextConnectionUid++\n\n readonly params: PersistentConnectionParams\n protected _transport!: ITelegramTransport\n\n private _sendOnceConnected: Uint8Array[] = []\n\n // reconnection\n private _lastError: Error | null = null\n private _consequentFails = 0\n private _previousWait: number | null = null\n private _reconnectionTimeout: NodeJS.Timeout | null = null\n private _shouldReconnectImmediately = false\n protected _disconnectedManually = false\n\n // inactivity timeout\n private _inactivityTimeout: NodeJS.Timeout | null = null\n private _inactive = true\n\n _destroyed = false\n _usable = false\n\n protected abstract onConnected(): void\n\n protected abstract onError(err: Error): void\n\n protected abstract onMessage(data: Uint8Array): void\n\n protected constructor(\n params: PersistentConnectionParams,\n readonly log: Logger,\n ) {\n super()\n this.params = params\n this.changeTransport(params.transportFactory)\n\n this.log.prefix = `[UID ${this._uid}] `\n\n this._onInactivityTimeout = this._onInactivityTimeout.bind(this)\n }\n\n get isConnected(): boolean {\n return this._transport.state() !== TransportState.Idle\n }\n\n changeTransport(factory: TransportFactory): void {\n if (this._transport) {\n Promise.resolve(this._transport.close()).catch((err) => {\n this.log.warn('error closing previous transport: %s', err)\n })\n }\n\n this._transport = factory()\n this._transport.setup?.(this.params.crypto, this.log)\n\n this._transport.on('ready', this.onTransportReady.bind(this))\n this._transport.on('message', this.onMessage.bind(this))\n this._transport.on('error', this.onTransportError.bind(this))\n this._transport.on('close', this.onTransportClose.bind(this))\n }\n\n onTransportReady(): void {\n // transport ready does not mean actual mtproto is ready\n if (this._sendOnceConnected.length) {\n const sendNext = () => {\n if (!this._sendOnceConnected.length) {\n this.onConnected()\n\n return\n }\n\n const data = this._sendOnceConnected.shift()!\n this._transport\n .send(data)\n .then(sendNext)\n .catch((err) => {\n this.log.error('error sending queued data: %s', err)\n this._sendOnceConnected.unshift(data)\n })\n }\n\n sendNext()\n\n return\n }\n\n this.onConnected()\n }\n\n protected onConnectionUsable(): void {\n const isReconnection = this._consequentFails > 0\n\n // reset reconnection related state\n this._lastError = null\n this._consequentFails = 0\n this._previousWait = null\n this._usable = true\n this.emit('usable', isReconnection)\n this._rescheduleInactivity()\n }\n\n onTransportError(err: Error): void {\n this._lastError = err\n this.onError(err)\n // transport is expected to emit `close` after `error`\n }\n\n onTransportClose(): void {\n // transport closed because of inactivity\n // obviously we dont want to reconnect then\n if (this._inactive || this._disconnectedManually) return\n\n if (this._shouldReconnectImmediately) {\n this._shouldReconnectImmediately = false\n this.connect()\n\n return\n }\n\n this._consequentFails += 1\n\n const wait = this.params.reconnectionStrategy(\n this.params,\n this._lastError,\n this._consequentFails,\n this._previousWait,\n )\n\n if (wait === false) {\n this.destroy().catch((err) => {\n this.log.warn('error destroying connection: %s', err)\n })\n\n return\n }\n\n this.emit('wait', wait)\n\n this._previousWait = wait\n\n if (this._reconnectionTimeout != null) {\n clearTimeout(this._reconnectionTimeout)\n }\n this._reconnectionTimeout = setTimeout(() => {\n if (this._destroyed) return\n this._reconnectionTimeout = null\n this.connect()\n }, wait)\n }\n\n connect(): void {\n if (this.isConnected) {\n throw new MtcuteError('Connection is already opened!')\n }\n if (this._destroyed) {\n throw new MtcuteError('Connection is already destroyed!')\n }\n\n if (this._reconnectionTimeout != null) {\n clearTimeout(this._reconnectionTimeout)\n this._reconnectionTimeout = null\n }\n\n this._inactive = false\n this._disconnectedManually = false\n this._transport.connect(this.params.dc, this.params.testMode)\n }\n\n reconnect(): void {\n if (this._inactive) return\n\n // if we are already connected\n if (this.isConnected) {\n this._shouldReconnectImmediately = true\n Promise.resolve(this._transport.close()).catch((err) => {\n this.log.error('error closing transport: %s', err)\n })\n\n return\n }\n\n // if reconnection timeout is pending, it will be cancelled in connect()\n this.connect()\n }\n\n async disconnectManual(): Promise<void> {\n this._disconnectedManually = true\n await this._transport.close()\n }\n\n async destroy(): Promise<void> {\n if (this._reconnectionTimeout != null) {\n clearTimeout(this._reconnectionTimeout)\n }\n if (this._inactivityTimeout != null) {\n clearTimeout(this._inactivityTimeout)\n }\n\n await this._transport.close()\n this._transport.removeAllListeners()\n this._destroyed = true\n }\n\n protected _rescheduleInactivity(): void {\n if (!this.params.inactivityTimeout) return\n if (this._inactivityTimeout) clearTimeout(this._inactivityTimeout)\n this._inactivityTimeout = setTimeout(this._onInactivityTimeout, this.params.inactivityTimeout)\n }\n\n protected _onInactivityTimeout(): void {\n this.log.info('disconnected because of inactivity for %d', this.params.inactivityTimeout)\n this._inactive = true\n this._inactivityTimeout = null\n Promise.resolve(this._transport.close()).catch((err) => {\n this.log.warn('error closing transport: %s', err)\n })\n }\n\n setInactivityTimeout(timeout?: number): void {\n this.params.inactivityTimeout = timeout\n\n if (this._inactivityTimeout) {\n clearTimeout(this._inactivityTimeout)\n }\n\n if (timeout) {\n this._rescheduleInactivity()\n }\n }\n\n async send(data: Uint8Array): Promise<void> {\n if (this._inactive) {\n this.connect()\n }\n\n if (this._transport.state() === TransportState.Ready) {\n await this._transport.send(data)\n } else {\n this._sendOnceConnected.push(data)\n }\n }\n}\n"]}
1
+ {"version":3,"file":"persistent-connection.js","sourceRoot":"","sources":["../../../src/network/persistent-connection.ts"],"names":[],"mappings":"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","sourcesContent":["import EventEmitter from 'events'\n\nimport { MtcuteError } from '../types/index.js'\nimport { BasicDcOption, ICryptoProvider, Logger } from '../utils/index.js'\nimport { ReconnectionStrategy } from './reconnection.js'\nimport { ITelegramTransport, TransportFactory, TransportState } from './transports/index.js'\n\nexport interface PersistentConnectionParams {\n crypto: ICryptoProvider\n transportFactory: TransportFactory\n dc: BasicDcOption\n testMode: boolean\n reconnectionStrategy: ReconnectionStrategy<PersistentConnectionParams>\n inactivityTimeout?: number\n}\n\nlet nextConnectionUid = 0\n\n/**\n * Base class for persistent connections.\n * Only used for {@link PersistentConnection} and used as a mean of code splitting.\n * This class doesn't know anything about MTProto, it just manages the transport.\n */\nexport abstract class PersistentConnection extends EventEmitter {\n private _uid = nextConnectionUid++\n\n readonly params: PersistentConnectionParams\n protected _transport!: ITelegramTransport\n\n private _sendOnceConnected: Uint8Array[] = []\n\n // reconnection\n private _lastError: Error | null = null\n private _consequentFails = 0\n private _previousWait: number | null = null\n private _reconnectionTimeout: NodeJS.Timeout | null = null\n private _shouldReconnectImmediately = false\n protected _disconnectedManually = false\n\n // inactivity timeout\n private _inactivityTimeout: NodeJS.Timeout | null = null\n private _inactive = true\n\n _destroyed = false\n _usable = false\n\n protected abstract onConnected(): void\n\n protected abstract onError(err: Error): void\n\n protected abstract onMessage(data: Uint8Array): void\n\n protected constructor(\n params: PersistentConnectionParams,\n readonly log: Logger,\n ) {\n super()\n this.params = params\n this.changeTransport(params.transportFactory)\n\n this.log.prefix = `[UID ${this._uid}] `\n\n this._onInactivityTimeout = this._onInactivityTimeout.bind(this)\n }\n\n get isConnected(): boolean {\n return this._transport.state() !== TransportState.Idle\n }\n\n changeTransport(factory: TransportFactory): void {\n if (this._transport) {\n Promise.resolve(this._transport.close()).catch((err) => {\n this.log.warn('error closing previous transport: %e', err)\n })\n }\n\n this._transport = factory()\n this._transport.setup?.(this.params.crypto, this.log)\n\n this._transport.on('ready', this.onTransportReady.bind(this))\n this._transport.on('message', this.onMessage.bind(this))\n this._transport.on('error', this.onTransportError.bind(this))\n this._transport.on('close', this.onTransportClose.bind(this))\n }\n\n onTransportReady(): void {\n // transport ready does not mean actual mtproto is ready\n if (this._sendOnceConnected.length) {\n const sendNext = () => {\n if (!this._sendOnceConnected.length) {\n this.onConnected()\n\n return\n }\n\n const data = this._sendOnceConnected.shift()!\n this._transport\n .send(data)\n .then(sendNext)\n .catch((err) => {\n this.log.error('error sending queued data: %e', err)\n this._sendOnceConnected.unshift(data)\n })\n }\n\n sendNext()\n\n return\n }\n\n this.onConnected()\n }\n\n protected onConnectionUsable(): void {\n const isReconnection = this._consequentFails > 0\n\n // reset reconnection related state\n this._lastError = null\n this._consequentFails = 0\n this._previousWait = null\n this._usable = true\n this.emit('usable', isReconnection)\n this._rescheduleInactivity()\n }\n\n onTransportError(err: Error): void {\n this._lastError = err\n this.onError(err)\n // transport is expected to emit `close` after `error`\n }\n\n onTransportClose(): void {\n // transport closed because of inactivity\n // obviously we dont want to reconnect then\n if (this._inactive || this._disconnectedManually) return\n\n if (this._shouldReconnectImmediately) {\n this._shouldReconnectImmediately = false\n this.connect()\n\n return\n }\n\n this._consequentFails += 1\n\n const wait = this.params.reconnectionStrategy(\n this.params,\n this._lastError,\n this._consequentFails,\n this._previousWait,\n )\n\n if (wait === false) {\n this.destroy().catch((err) => {\n this.log.warn('error destroying connection: %e', err)\n })\n\n return\n }\n\n this.emit('wait', wait)\n\n this._previousWait = wait\n\n if (this._reconnectionTimeout != null) {\n clearTimeout(this._reconnectionTimeout)\n }\n this._reconnectionTimeout = setTimeout(() => {\n if (this._destroyed) return\n this._reconnectionTimeout = null\n this.connect()\n }, wait)\n }\n\n connect(): void {\n if (this.isConnected) {\n throw new MtcuteError('Connection is already opened!')\n }\n if (this._destroyed) {\n throw new MtcuteError('Connection is already destroyed!')\n }\n\n if (this._reconnectionTimeout != null) {\n clearTimeout(this._reconnectionTimeout)\n this._reconnectionTimeout = null\n }\n\n this._inactive = false\n this._disconnectedManually = false\n this._transport.connect(this.params.dc, this.params.testMode)\n }\n\n reconnect(): void {\n if (this._inactive) return\n\n // if we are already connected\n if (this.isConnected) {\n this._shouldReconnectImmediately = true\n Promise.resolve(this._transport.close()).catch((err) => {\n this.log.error('error closing transport: %e', err)\n })\n\n return\n }\n\n // if reconnection timeout is pending, it will be cancelled in connect()\n this.connect()\n }\n\n async disconnectManual(): Promise<void> {\n this._disconnectedManually = true\n await this._transport.close()\n }\n\n async destroy(): Promise<void> {\n if (this._reconnectionTimeout != null) {\n clearTimeout(this._reconnectionTimeout)\n }\n if (this._inactivityTimeout != null) {\n clearTimeout(this._inactivityTimeout)\n }\n\n await this._transport.close()\n this._transport.removeAllListeners()\n this._destroyed = true\n }\n\n protected _rescheduleInactivity(): void {\n if (!this.params.inactivityTimeout) return\n if (this._inactivityTimeout) clearTimeout(this._inactivityTimeout)\n this._inactivityTimeout = setTimeout(this._onInactivityTimeout, this.params.inactivityTimeout)\n }\n\n protected _onInactivityTimeout(): void {\n this.log.info('disconnected because of inactivity for %d', this.params.inactivityTimeout)\n this._inactive = true\n this._inactivityTimeout = null\n Promise.resolve(this._transport.close()).catch((err) => {\n this.log.warn('error closing transport: %e', err)\n })\n }\n\n setInactivityTimeout(timeout?: number): void {\n this.params.inactivityTimeout = timeout\n\n if (this._inactivityTimeout) {\n clearTimeout(this._inactivityTimeout)\n }\n\n if (timeout) {\n this._rescheduleInactivity()\n }\n }\n\n async send(data: Uint8Array): Promise<void> {\n if (this._inactive) {\n this.connect()\n }\n\n if (this._transport.state() === TransportState.Ready) {\n await this._transport.send(data)\n } else {\n this._sendOnceConnected.push(data)\n }\n }\n}\n"]}
@@ -192,7 +192,7 @@ class SessionConnection extends persistent_connection_js_1.PersistentConnection
192
192
  this.sendRpc({ _: 'updates.getState' }).catch((err) => {
193
193
  if (this._destroyed || tl_1.tl.RpcError.is(err, 'AUTH_KEY_UNREGISTERED'))
194
194
  return; // silently fail
195
- this.log.warn('failed to send updates.getState: %s', err.text || err.message);
195
+ this.log.warn('failed to send updates.getState: %e', err);
196
196
  });
197
197
  }
198
198
  // just in case
@@ -227,7 +227,7 @@ class SessionConnection extends persistent_connection_js_1.PersistentConnection
227
227
  this._session.authorizationPending = false;
228
228
  if (this._destroyed)
229
229
  return;
230
- this.log.error('Authorization error: %s', err.message);
230
+ this.log.error('Authorization error: %e', err);
231
231
  this.onError(err);
232
232
  this.reconnect();
233
233
  });
@@ -352,7 +352,7 @@ class SessionConnection extends persistent_connection_js_1.PersistentConnection
352
352
  .catch((err) => {
353
353
  if (this._destroyed)
354
354
  return;
355
- this.log.error('PFS Authorization error: %s', err.message);
355
+ this.log.error('PFS Authorization error: %e', err);
356
356
  if (this._isPfsBindingPendingInBackground) {
357
357
  this._isPfsBindingPendingInBackground = false;
358
358
  // if we are in background, we can just retry
@@ -627,7 +627,7 @@ class SessionConnection extends persistent_connection_js_1.PersistentConnection
627
627
  this.log.debug('additional help.getNearestDc for initConnection ok');
628
628
  })
629
629
  .catch((err) => {
630
- this.log.debug('additional help.getNearestDc for initConnection error: %s', err);
630
+ this.log.debug('additional help.getNearestDc for initConnection error: %e', err);
631
631
  });
632
632
  return;
633
633
  }
@@ -1102,7 +1102,7 @@ class SessionConnection extends persistent_connection_js_1.PersistentConnection
1102
1102
  }
1103
1103
  else {
1104
1104
  this.disconnectManual().catch((err) => {
1105
- this.log.warn('error while disconnecting: %s', err);
1105
+ this.log.warn('error while disconnecting: %e', err);
1106
1106
  });
1107
1107
  }
1108
1108
  }
@@ -1534,7 +1534,7 @@ class SessionConnection extends persistent_connection_js_1.PersistentConnection
1534
1534
  this.log.debug('sending %d messages: size = %db, acks = %L, ping = %b (msg_id = %l), state_req = %L (msg_id = %l), resend = %L (msg_id = %l), cancels = %L (msg_id = %l), salts_req = %b (msg_id = %l), rpc = %s, container = %b, root msg_id = %l', messageCount, packetSize, ackMsgIds, pingRequest, pingMsgId, getStateMsgIds, getStateMsgId, resendMsgIds, cancelRpcs, cancelRpcs, resendMsgId, getFutureSaltsRequest, getFutureSaltsMsgId, rpcToSend.map((it) => it.method), useContainer, rootMsgId);
1535
1535
  const enc = this._session.encryptMessage(result);
1536
1536
  const promise = this.send(enc).catch((err) => {
1537
- this.log.error('error while sending pending messages (root msg_id = %l): %s', rootMsgId, err.stack);
1537
+ this.log.error('error while sending pending messages (root msg_id = %l): %e', rootMsgId, err);
1538
1538
  // put acks in the front so they are the first to be sent
1539
1539
  if (ackMsgIds) {
1540
1540
  this._session.queuedAcks.splice(0, 0, ...ackMsgIds);