@mtcute/core 0.7.2 → 0.8.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 (1132) hide show
  1. package/README.md +26 -3
  2. package/cjs/highlevel/base.d.ts +3 -1
  3. package/cjs/highlevel/base.js +18 -0
  4. package/cjs/highlevel/base.js.map +1 -1
  5. package/cjs/highlevel/client.d.ts +23 -10
  6. package/cjs/highlevel/client.js +26 -19
  7. package/cjs/highlevel/client.js.map +1 -1
  8. package/cjs/highlevel/client.types.d.ts +14 -0
  9. package/cjs/highlevel/client.types.js.map +1 -1
  10. package/cjs/highlevel/index.d.ts +0 -2
  11. package/cjs/highlevel/index.js +0 -2
  12. package/cjs/highlevel/index.js.map +1 -1
  13. package/cjs/highlevel/methods/_imports.js.map +1 -1
  14. package/cjs/highlevel/methods/_init.js +4 -29
  15. package/cjs/highlevel/methods/_init.js.map +1 -1
  16. package/cjs/highlevel/methods/bots/get-callback-answer.js +2 -2
  17. package/cjs/highlevel/methods/bots/get-callback-answer.js.map +1 -1
  18. package/cjs/highlevel/methods/dialogs/create-folder.js +1 -1
  19. package/cjs/highlevel/methods/dialogs/create-folder.js.map +1 -1
  20. package/cjs/highlevel/methods/dialogs/edit-folder.js +1 -1
  21. package/cjs/highlevel/methods/dialogs/edit-folder.js.map +1 -1
  22. package/cjs/highlevel/methods/dialogs/find-folder.js +1 -1
  23. package/cjs/highlevel/methods/dialogs/find-folder.js.map +1 -1
  24. package/cjs/highlevel/methods/dialogs/get-folders.d.ts +1 -1
  25. package/cjs/highlevel/methods/dialogs/get-folders.js +1 -1
  26. package/cjs/highlevel/methods/dialogs/get-folders.js.map +1 -1
  27. package/cjs/highlevel/methods/files/download-file.d.ts +1 -10
  28. package/cjs/highlevel/methods/files/download-file.js +1 -32
  29. package/cjs/highlevel/methods/files/download-file.js.map +1 -1
  30. package/cjs/highlevel/methods/files/download-iterable.js +2 -1
  31. package/cjs/highlevel/methods/files/download-iterable.js.map +1 -1
  32. package/cjs/highlevel/methods/files/download-node-stream.js +4 -0
  33. package/cjs/highlevel/methods/files/download-node-stream.js.map +1 -0
  34. package/cjs/highlevel/methods/files/normalize-input-media.d.ts +1 -1
  35. package/cjs/highlevel/methods/files/normalize-input-media.js +2 -1
  36. package/cjs/highlevel/methods/files/normalize-input-media.js.map +1 -1
  37. package/cjs/highlevel/methods/files/upload-file.d.ts +0 -3
  38. package/cjs/highlevel/methods/files/upload-file.js +17 -13
  39. package/cjs/highlevel/methods/files/upload-file.js.map +1 -1
  40. package/cjs/highlevel/methods/messages/find-in-update.js +23 -8
  41. package/cjs/highlevel/methods/messages/find-in-update.js.map +1 -1
  42. package/cjs/highlevel/methods/messages/send-media-group.d.ts +1 -1
  43. package/cjs/highlevel/methods/messages/send-media-group.js.map +1 -1
  44. package/cjs/highlevel/methods/messages/send-media.d.ts +2 -2
  45. package/cjs/highlevel/methods/messages/send-media.js +5 -4
  46. package/cjs/highlevel/methods/messages/send-media.js.map +1 -1
  47. package/cjs/highlevel/methods/messages/send-text.d.ts +1 -1
  48. package/cjs/highlevel/methods/messages/send-text.js +7 -6
  49. package/cjs/highlevel/methods/messages/send-text.js.map +1 -1
  50. package/cjs/highlevel/methods/misc/with-params.d.ts +10 -0
  51. package/cjs/highlevel/methods/misc/with-params.js +32 -0
  52. package/cjs/highlevel/methods/misc/with-params.js.map +1 -0
  53. package/cjs/highlevel/methods.d.ts +13 -1
  54. package/cjs/highlevel/methods.js +4 -6
  55. package/cjs/highlevel/methods.js.map +1 -1
  56. package/cjs/highlevel/types/bots/command-scope/index.d.ts +10 -0
  57. package/cjs/highlevel/types/bots/command-scope/index.js +29 -0
  58. package/cjs/highlevel/types/bots/command-scope/index.js.map +1 -0
  59. package/cjs/highlevel/types/bots/command-scope/inner.d.ts +54 -0
  60. package/cjs/highlevel/types/bots/command-scope/inner.js +76 -0
  61. package/cjs/highlevel/types/bots/command-scope/inner.js.map +1 -0
  62. package/cjs/highlevel/types/bots/index.d.ts +4 -4
  63. package/cjs/highlevel/types/bots/index.js +4 -4
  64. package/cjs/highlevel/types/bots/index.js.map +1 -1
  65. package/cjs/highlevel/types/bots/inline-message/factories.d.ts +43 -0
  66. package/cjs/highlevel/types/bots/inline-message/factories.js +175 -0
  67. package/cjs/highlevel/types/bots/inline-message/factories.js.map +1 -0
  68. package/cjs/highlevel/types/bots/inline-message/index.d.ts +3 -0
  69. package/cjs/highlevel/types/bots/inline-message/index.js +33 -0
  70. package/cjs/highlevel/types/bots/inline-message/index.js.map +1 -0
  71. package/{esm/highlevel/types/bots/input/input-inline-message.d.ts → cjs/highlevel/types/bots/inline-message/types.d.ts} +2 -45
  72. package/cjs/highlevel/types/bots/inline-message/types.js +3 -0
  73. package/cjs/highlevel/types/bots/inline-message/types.js.map +1 -0
  74. package/cjs/highlevel/types/bots/inline-result/factories.d.ts +94 -0
  75. package/cjs/highlevel/types/bots/inline-result/factories.js +486 -0
  76. package/cjs/highlevel/types/bots/inline-result/factories.js.map +1 -0
  77. package/cjs/highlevel/types/bots/inline-result/index.d.ts +3 -0
  78. package/cjs/highlevel/types/bots/inline-result/index.js +33 -0
  79. package/cjs/highlevel/types/bots/inline-result/index.js.map +1 -0
  80. package/{esm/highlevel/types/bots/input/input-inline-result.d.ts → cjs/highlevel/types/bots/inline-result/types.d.ts} +1 -95
  81. package/cjs/highlevel/types/bots/inline-result/types.js +3 -0
  82. package/cjs/highlevel/types/bots/inline-result/types.js.map +1 -0
  83. package/cjs/highlevel/types/bots/{keyboard-builder.d.ts → keyboards/builder.d.ts} +1 -1
  84. package/cjs/highlevel/types/bots/{keyboard-builder.js → keyboards/builder.js} +1 -1
  85. package/cjs/highlevel/types/bots/keyboards/builder.js.map +1 -0
  86. package/cjs/highlevel/types/bots/keyboards/factories.d.ts +195 -0
  87. package/cjs/highlevel/types/bots/keyboards/factories.js +366 -0
  88. package/cjs/highlevel/types/bots/keyboards/factories.js.map +1 -0
  89. package/cjs/highlevel/types/bots/keyboards/index.d.ts +14 -0
  90. package/cjs/highlevel/types/bots/keyboards/index.js +33 -0
  91. package/cjs/highlevel/types/bots/keyboards/index.js.map +1 -0
  92. package/cjs/highlevel/types/bots/keyboards/types.d.ts +34 -0
  93. package/cjs/highlevel/types/bots/keyboards/types.js +3 -0
  94. package/cjs/highlevel/types/bots/keyboards/types.js.map +1 -0
  95. package/cjs/highlevel/types/media/document.js +3 -2
  96. package/cjs/highlevel/types/media/document.js.map +1 -1
  97. package/cjs/highlevel/types/media/index.d.ts +1 -1
  98. package/cjs/highlevel/types/media/index.js +1 -1
  99. package/cjs/highlevel/types/media/index.js.map +1 -1
  100. package/cjs/highlevel/types/media/input-media/factories.d.ts +141 -0
  101. package/cjs/highlevel/types/media/input-media/factories.js +250 -0
  102. package/cjs/highlevel/types/media/input-media/factories.js.map +1 -0
  103. package/cjs/highlevel/types/media/input-media/index.d.ts +3 -0
  104. package/cjs/highlevel/types/media/input-media/index.js +33 -0
  105. package/cjs/highlevel/types/media/input-media/index.js.map +1 -0
  106. package/cjs/highlevel/types/media/{input-media.d.ts → input-media/types.d.ts} +5 -145
  107. package/cjs/highlevel/types/media/input-media/types.js +3 -0
  108. package/cjs/highlevel/types/media/input-media/types.js.map +1 -0
  109. package/cjs/highlevel/types/media/thumbnail.js +5 -4
  110. package/cjs/highlevel/types/media/thumbnail.js.map +1 -1
  111. package/cjs/highlevel/types/messages/message.d.ts +1 -1
  112. package/cjs/highlevel/types/messages/message.js +3 -3
  113. package/cjs/highlevel/types/messages/message.js.map +1 -1
  114. package/cjs/highlevel/types/misc/index.d.ts +1 -1
  115. package/cjs/highlevel/types/misc/index.js +1 -1
  116. package/cjs/highlevel/types/misc/index.js.map +1 -1
  117. package/cjs/highlevel/types/misc/input-privacy-rule/allow.d.ts +22 -0
  118. package/cjs/highlevel/types/misc/input-privacy-rule/allow.js +36 -0
  119. package/cjs/highlevel/types/misc/input-privacy-rule/allow.js.map +1 -0
  120. package/cjs/highlevel/types/misc/input-privacy-rule/bundle.d.ts +3 -0
  121. package/cjs/highlevel/types/misc/input-privacy-rule/bundle.js +31 -0
  122. package/cjs/highlevel/types/misc/input-privacy-rule/bundle.js.map +1 -0
  123. package/cjs/highlevel/types/misc/input-privacy-rule/disallow.d.ts +20 -0
  124. package/cjs/highlevel/types/misc/input-privacy-rule/disallow.js +32 -0
  125. package/cjs/highlevel/types/misc/input-privacy-rule/disallow.js.map +1 -0
  126. package/cjs/highlevel/types/misc/input-privacy-rule/index.d.ts +3 -0
  127. package/cjs/highlevel/types/misc/input-privacy-rule/index.js +33 -0
  128. package/cjs/highlevel/types/misc/input-privacy-rule/index.js.map +1 -0
  129. package/cjs/highlevel/types/misc/input-privacy-rule/types.d.ts +11 -0
  130. package/cjs/highlevel/types/misc/input-privacy-rule/types.js +3 -0
  131. package/cjs/highlevel/types/misc/input-privacy-rule/types.js.map +1 -0
  132. package/cjs/highlevel/types/peers/chat-photo.js +3 -2
  133. package/cjs/highlevel/types/peers/chat-photo.js.map +1 -1
  134. package/cjs/highlevel/types/updates/callback-query.js +2 -2
  135. package/cjs/highlevel/types/updates/callback-query.js.map +1 -1
  136. package/cjs/highlevel/types/updates/user-status-update.js +1 -1
  137. package/cjs/highlevel/types/updates/user-status-update.js.map +1 -1
  138. package/cjs/highlevel/updates/manager.d.ts +5 -3
  139. package/cjs/highlevel/updates/manager.js +81 -67
  140. package/cjs/highlevel/updates/manager.js.map +1 -1
  141. package/cjs/highlevel/utils/convert-file-id.js +7 -6
  142. package/cjs/highlevel/utils/convert-file-id.js.map +1 -1
  143. package/cjs/highlevel/utils/file-utils.js +8 -4
  144. package/cjs/highlevel/utils/file-utils.js.map +1 -1
  145. package/cjs/highlevel/utils/inline-utils.js +3 -2
  146. package/cjs/highlevel/utils/inline-utils.js.map +1 -1
  147. package/cjs/highlevel/utils/inspectable.d.ts +1 -1
  148. package/cjs/highlevel/utils/inspectable.js +3 -2
  149. package/cjs/highlevel/utils/inspectable.js.map +1 -1
  150. package/cjs/highlevel/utils/memoize.d.ts +1 -1
  151. package/cjs/highlevel/utils/memoize.js +1 -0
  152. package/cjs/highlevel/utils/memoize.js.map +1 -1
  153. package/cjs/highlevel/utils/stream-utils.d.ts +0 -2
  154. package/cjs/highlevel/utils/stream-utils.js +1 -28
  155. package/cjs/highlevel/utils/stream-utils.js.map +1 -1
  156. package/cjs/highlevel/utils/string-session.js +3 -2
  157. package/cjs/highlevel/utils/string-session.js.map +1 -1
  158. package/cjs/highlevel/worker/index.d.ts +3 -0
  159. package/cjs/highlevel/{types/bots/input → worker}/index.js +3 -2
  160. package/cjs/highlevel/worker/index.js.map +1 -0
  161. package/cjs/highlevel/worker/port.d.ts +6 -3
  162. package/cjs/highlevel/worker/port.js +8 -2
  163. package/cjs/highlevel/worker/port.js.map +1 -1
  164. package/cjs/highlevel/worker/protocol.d.ts +5 -1
  165. package/cjs/highlevel/worker/protocol.js.map +1 -1
  166. package/cjs/highlevel/worker/worker.d.ts +11 -4
  167. package/cjs/highlevel/worker/worker.js +53 -49
  168. package/cjs/highlevel/worker/worker.js.map +1 -1
  169. package/cjs/network/authorization.js +1 -0
  170. package/cjs/network/authorization.js.map +1 -1
  171. package/cjs/network/client.d.ts +4 -4
  172. package/cjs/network/client.js +3 -1
  173. package/cjs/network/client.js.map +1 -1
  174. package/cjs/network/mtproto-session.d.ts +1 -0
  175. package/cjs/network/mtproto-session.js +7 -1
  176. package/cjs/network/mtproto-session.js.map +1 -1
  177. package/cjs/network/multi-session-connection.d.ts +1 -0
  178. package/cjs/network/multi-session-connection.js +6 -0
  179. package/cjs/network/multi-session-connection.js.map +1 -1
  180. package/cjs/network/network-manager.d.ts +5 -1
  181. package/cjs/network/network-manager.js +24 -15
  182. package/cjs/network/network-manager.js.map +1 -1
  183. package/cjs/network/persistent-connection.d.ts +3 -0
  184. package/cjs/network/persistent-connection.js +23 -1
  185. package/cjs/network/persistent-connection.js.map +1 -1
  186. package/cjs/network/session-connection.d.ts +2 -0
  187. package/cjs/network/session-connection.js +21 -7
  188. package/cjs/network/session-connection.js.map +1 -1
  189. package/cjs/network/transports/index.d.ts +0 -3
  190. package/cjs/network/transports/index.js +0 -4
  191. package/cjs/network/transports/index.js.map +1 -1
  192. package/cjs/platform.d.ts +18 -0
  193. package/cjs/platform.js +36 -0
  194. package/cjs/platform.js.map +1 -0
  195. package/cjs/storage/index.d.ts +1 -2
  196. package/cjs/storage/index.js +1 -2
  197. package/cjs/storage/index.js.map +1 -1
  198. package/{esm/storage/providers → cjs/storage}/memory/driver.d.ts +1 -1
  199. package/cjs/storage/memory/driver.js.map +1 -0
  200. package/{esm/storage/providers → cjs/storage}/memory/index.d.ts +2 -2
  201. package/cjs/storage/memory/index.js.map +1 -0
  202. package/cjs/storage/{providers/memory → memory}/repository/auth-keys.d.ts +1 -1
  203. package/cjs/storage/memory/repository/auth-keys.js.map +1 -0
  204. package/{esm/storage/providers → cjs/storage}/memory/repository/kv.d.ts +1 -1
  205. package/cjs/storage/memory/repository/kv.js.map +1 -0
  206. package/{esm/storage/providers → cjs/storage}/memory/repository/peers.d.ts +1 -1
  207. package/cjs/storage/memory/repository/peers.js.map +1 -0
  208. package/{esm/storage/providers → cjs/storage}/memory/repository/ref-messages.d.ts +1 -1
  209. package/cjs/storage/memory/repository/ref-messages.js.map +1 -0
  210. package/cjs/storage/storage.js +2 -1
  211. package/cjs/storage/storage.js.map +1 -1
  212. package/cjs/utils/binary/asn1-parser.js +3 -3
  213. package/cjs/utils/binary/asn1-parser.js.map +1 -1
  214. package/cjs/utils/crypto/abstract.d.ts +0 -1
  215. package/cjs/utils/crypto/abstract.js.map +1 -1
  216. package/cjs/utils/crypto/index.d.ts +0 -2
  217. package/cjs/utils/crypto/index.js +0 -3
  218. package/cjs/utils/crypto/index.js.map +1 -1
  219. package/cjs/utils/crypto/keys.js +5 -3
  220. package/cjs/utils/crypto/keys.js.map +1 -1
  221. package/cjs/utils/crypto/password.js +3 -3
  222. package/cjs/utils/crypto/password.js.map +1 -1
  223. package/cjs/utils/dcs.d.ts +4 -0
  224. package/cjs/utils/dcs.js +0 -4
  225. package/cjs/utils/dcs.js.map +1 -1
  226. package/cjs/utils/{platform/error-reporting.d.ts → error-reporting.d.ts} +1 -1
  227. package/cjs/utils/error-reporting.js.map +1 -0
  228. package/cjs/utils/index.d.ts +4 -1
  229. package/cjs/utils/index.js +6 -1
  230. package/cjs/utils/index.js.map +1 -1
  231. package/cjs/utils/links/common.js +1 -1
  232. package/cjs/utils/links/common.js.map +1 -1
  233. package/cjs/utils/logger.d.ts +1 -0
  234. package/cjs/utils/logger.js +9 -22
  235. package/cjs/utils/logger.js.map +1 -1
  236. package/esm/highlevel/base.d.ts +3 -1
  237. package/esm/highlevel/base.js +18 -0
  238. package/esm/highlevel/base.js.map +1 -1
  239. package/esm/highlevel/client.d.ts +23 -10
  240. package/esm/highlevel/client.js +12 -19
  241. package/esm/highlevel/client.js.map +1 -1
  242. package/esm/highlevel/client.types.d.ts +14 -0
  243. package/esm/highlevel/client.types.js.map +1 -1
  244. package/esm/highlevel/index.d.ts +0 -2
  245. package/esm/highlevel/index.js +0 -2
  246. package/esm/highlevel/index.js.map +1 -1
  247. package/esm/highlevel/methods/_imports.js.map +1 -1
  248. package/esm/highlevel/methods/_init.js +4 -29
  249. package/esm/highlevel/methods/_init.js.map +1 -1
  250. package/esm/highlevel/methods/bots/get-callback-answer.js +2 -2
  251. package/esm/highlevel/methods/bots/get-callback-answer.js.map +1 -1
  252. package/esm/highlevel/methods/dialogs/create-folder.js +1 -1
  253. package/esm/highlevel/methods/dialogs/create-folder.js.map +1 -1
  254. package/esm/highlevel/methods/dialogs/edit-folder.js +1 -1
  255. package/esm/highlevel/methods/dialogs/edit-folder.js.map +1 -1
  256. package/esm/highlevel/methods/dialogs/find-folder.js +1 -1
  257. package/esm/highlevel/methods/dialogs/find-folder.js.map +1 -1
  258. package/esm/highlevel/methods/dialogs/get-folders.d.ts +1 -1
  259. package/esm/highlevel/methods/dialogs/get-folders.js +1 -1
  260. package/esm/highlevel/methods/dialogs/get-folders.js.map +1 -1
  261. package/esm/highlevel/methods/files/download-file.d.ts +1 -10
  262. package/esm/highlevel/methods/files/download-file.js +2 -30
  263. package/esm/highlevel/methods/files/download-file.js.map +1 -1
  264. package/esm/highlevel/methods/files/download-iterable.js +2 -1
  265. package/esm/highlevel/methods/files/download-iterable.js.map +1 -1
  266. package/esm/highlevel/methods/files/download-node-stream.js +3 -0
  267. package/esm/highlevel/methods/files/download-node-stream.js.map +1 -0
  268. package/esm/highlevel/methods/files/normalize-input-media.d.ts +1 -1
  269. package/esm/highlevel/methods/files/normalize-input-media.js +2 -1
  270. package/esm/highlevel/methods/files/normalize-input-media.js.map +1 -1
  271. package/esm/highlevel/methods/files/upload-file.d.ts +0 -3
  272. package/esm/highlevel/methods/files/upload-file.js +17 -13
  273. package/esm/highlevel/methods/files/upload-file.js.map +1 -1
  274. package/esm/highlevel/methods/messages/find-in-update.js +23 -8
  275. package/esm/highlevel/methods/messages/find-in-update.js.map +1 -1
  276. package/esm/highlevel/methods/messages/send-media-group.d.ts +1 -1
  277. package/esm/highlevel/methods/messages/send-media-group.js.map +1 -1
  278. package/esm/highlevel/methods/messages/send-media.d.ts +2 -2
  279. package/esm/highlevel/methods/messages/send-media.js +4 -3
  280. package/esm/highlevel/methods/messages/send-media.js.map +1 -1
  281. package/esm/highlevel/methods/messages/send-text.d.ts +1 -1
  282. package/esm/highlevel/methods/messages/send-text.js +4 -3
  283. package/esm/highlevel/methods/messages/send-text.js.map +1 -1
  284. package/esm/highlevel/methods/misc/with-params.d.ts +10 -0
  285. package/esm/highlevel/methods/misc/with-params.js +28 -0
  286. package/esm/highlevel/methods/misc/with-params.js.map +1 -0
  287. package/esm/highlevel/methods.d.ts +13 -1
  288. package/esm/highlevel/methods.js +0 -1
  289. package/esm/highlevel/methods.js.map +1 -1
  290. package/esm/highlevel/types/auth/sent-code.js +4 -3
  291. package/esm/highlevel/types/bots/command-scope/index.d.ts +10 -0
  292. package/esm/highlevel/types/bots/command-scope/index.js +11 -0
  293. package/esm/highlevel/types/bots/command-scope/index.js.map +1 -0
  294. package/esm/highlevel/types/bots/command-scope/inner.d.ts +54 -0
  295. package/esm/highlevel/types/bots/command-scope/inner.js +69 -0
  296. package/esm/highlevel/types/bots/command-scope/inner.js.map +1 -0
  297. package/esm/highlevel/types/bots/game-high-score.js +5 -4
  298. package/esm/highlevel/types/bots/index.d.ts +4 -4
  299. package/esm/highlevel/types/bots/index.js +4 -4
  300. package/esm/highlevel/types/bots/index.js.map +1 -1
  301. package/esm/highlevel/types/bots/inline-message/factories.d.ts +43 -0
  302. package/esm/highlevel/types/bots/inline-message/factories.js +163 -0
  303. package/esm/highlevel/types/bots/inline-message/factories.js.map +1 -0
  304. package/esm/highlevel/types/bots/inline-message/index.d.ts +3 -0
  305. package/esm/highlevel/types/bots/inline-message/index.js +4 -0
  306. package/esm/highlevel/types/bots/inline-message/index.js.map +1 -0
  307. package/{cjs/highlevel/types/bots/input/input-inline-message.d.ts → esm/highlevel/types/bots/inline-message/types.d.ts} +2 -45
  308. package/esm/highlevel/types/bots/inline-message/types.js +2 -0
  309. package/esm/highlevel/types/bots/inline-message/types.js.map +1 -0
  310. package/esm/highlevel/types/bots/inline-result/factories.d.ts +94 -0
  311. package/esm/highlevel/types/bots/inline-result/factories.js +470 -0
  312. package/esm/highlevel/types/bots/inline-result/factories.js.map +1 -0
  313. package/esm/highlevel/types/bots/inline-result/index.d.ts +3 -0
  314. package/esm/highlevel/types/bots/inline-result/index.js +4 -0
  315. package/esm/highlevel/types/bots/inline-result/index.js.map +1 -0
  316. package/{cjs/highlevel/types/bots/input/input-inline-result.d.ts → esm/highlevel/types/bots/inline-result/types.d.ts} +1 -95
  317. package/esm/highlevel/types/bots/inline-result/types.js +2 -0
  318. package/esm/highlevel/types/bots/inline-result/types.js.map +1 -0
  319. package/esm/highlevel/types/bots/{keyboard-builder.d.ts → keyboards/builder.d.ts} +1 -1
  320. package/esm/highlevel/types/bots/{keyboard-builder.js → keyboards/builder.js} +1 -1
  321. package/esm/highlevel/types/bots/keyboards/builder.js.map +1 -0
  322. package/esm/highlevel/types/bots/keyboards/factories.d.ts +195 -0
  323. package/esm/highlevel/types/bots/keyboards/factories.js +341 -0
  324. package/esm/highlevel/types/bots/keyboards/factories.js.map +1 -0
  325. package/esm/highlevel/types/bots/keyboards/index.d.ts +14 -0
  326. package/esm/highlevel/types/bots/keyboards/index.js +15 -0
  327. package/esm/highlevel/types/bots/keyboards/index.js.map +1 -0
  328. package/esm/highlevel/types/bots/keyboards/types.d.ts +34 -0
  329. package/esm/highlevel/types/bots/keyboards/types.js +2 -0
  330. package/esm/highlevel/types/bots/keyboards/types.js.map +1 -0
  331. package/esm/highlevel/types/files/file-location.js +4 -3
  332. package/esm/highlevel/types/files/web-document.js +4 -3
  333. package/esm/highlevel/types/media/audio.js +5 -4
  334. package/esm/highlevel/types/media/contact.js +4 -3
  335. package/esm/highlevel/types/media/dice.js +4 -3
  336. package/esm/highlevel/types/media/document.js +8 -6
  337. package/esm/highlevel/types/media/document.js.map +1 -1
  338. package/esm/highlevel/types/media/game.js +5 -4
  339. package/esm/highlevel/types/media/index.d.ts +1 -1
  340. package/esm/highlevel/types/media/index.js +1 -1
  341. package/esm/highlevel/types/media/index.js.map +1 -1
  342. package/esm/highlevel/types/media/input-media/factories.d.ts +141 -0
  343. package/esm/highlevel/types/media/input-media/factories.js +228 -0
  344. package/esm/highlevel/types/media/input-media/factories.js.map +1 -0
  345. package/esm/highlevel/types/media/input-media/index.d.ts +3 -0
  346. package/esm/highlevel/types/media/input-media/index.js +4 -0
  347. package/esm/highlevel/types/media/input-media/index.js.map +1 -0
  348. package/esm/highlevel/types/media/{input-media.d.ts → input-media/types.d.ts} +5 -145
  349. package/esm/highlevel/types/media/input-media/types.js +2 -0
  350. package/esm/highlevel/types/media/input-media/types.js.map +1 -0
  351. package/esm/highlevel/types/media/invoice.js +9 -7
  352. package/esm/highlevel/types/media/location.js +7 -5
  353. package/esm/highlevel/types/media/photo.js +5 -4
  354. package/esm/highlevel/types/media/poll.js +5 -4
  355. package/esm/highlevel/types/media/sticker.js +5 -4
  356. package/esm/highlevel/types/media/story.js +4 -3
  357. package/esm/highlevel/types/media/thumbnail.js +10 -8
  358. package/esm/highlevel/types/media/thumbnail.js.map +1 -1
  359. package/esm/highlevel/types/media/venue.js +5 -4
  360. package/esm/highlevel/types/media/video.js +5 -4
  361. package/esm/highlevel/types/media/voice.js +5 -4
  362. package/esm/highlevel/types/media/web-page.js +5 -4
  363. package/esm/highlevel/types/messages/dialog.js +5 -4
  364. package/esm/highlevel/types/messages/draft-message.js +5 -4
  365. package/esm/highlevel/types/messages/message-entity.js +5 -4
  366. package/esm/highlevel/types/messages/message-forward.js +5 -4
  367. package/esm/highlevel/types/messages/message-reactions.js +5 -4
  368. package/esm/highlevel/types/messages/message-replies.js +5 -4
  369. package/esm/highlevel/types/messages/message.d.ts +1 -1
  370. package/esm/highlevel/types/messages/message.js +6 -5
  371. package/esm/highlevel/types/messages/message.js.map +1 -1
  372. package/esm/highlevel/types/messages/replied-message.js +5 -4
  373. package/esm/highlevel/types/misc/index.d.ts +1 -1
  374. package/esm/highlevel/types/misc/index.js +1 -1
  375. package/esm/highlevel/types/misc/index.js.map +1 -1
  376. package/esm/highlevel/types/misc/input-privacy-rule/allow.d.ts +22 -0
  377. package/esm/highlevel/types/misc/input-privacy-rule/allow.js +31 -0
  378. package/esm/highlevel/types/misc/input-privacy-rule/allow.js.map +1 -0
  379. package/esm/highlevel/types/misc/input-privacy-rule/bundle.d.ts +3 -0
  380. package/esm/highlevel/types/misc/input-privacy-rule/bundle.js +4 -0
  381. package/esm/highlevel/types/misc/input-privacy-rule/bundle.js.map +1 -0
  382. package/esm/highlevel/types/misc/input-privacy-rule/disallow.d.ts +20 -0
  383. package/esm/highlevel/types/misc/input-privacy-rule/disallow.js +27 -0
  384. package/esm/highlevel/types/misc/input-privacy-rule/disallow.js.map +1 -0
  385. package/esm/highlevel/types/misc/input-privacy-rule/index.d.ts +3 -0
  386. package/esm/highlevel/types/misc/input-privacy-rule/index.js +4 -0
  387. package/esm/highlevel/types/misc/input-privacy-rule/index.js.map +1 -0
  388. package/esm/highlevel/types/misc/input-privacy-rule/types.d.ts +11 -0
  389. package/esm/highlevel/types/misc/input-privacy-rule/types.js +2 -0
  390. package/esm/highlevel/types/misc/input-privacy-rule/types.js.map +1 -0
  391. package/esm/highlevel/types/misc/sticker-set.js +5 -4
  392. package/esm/highlevel/types/misc/takeout-session.js +4 -3
  393. package/esm/highlevel/types/peers/chat-colors.js +4 -3
  394. package/esm/highlevel/types/peers/chat-event/index.js +5 -4
  395. package/esm/highlevel/types/peers/chat-invite-link-member.js +5 -4
  396. package/esm/highlevel/types/peers/chat-invite-link.js +5 -4
  397. package/esm/highlevel/types/peers/chat-location.js +5 -4
  398. package/esm/highlevel/types/peers/chat-member.js +5 -4
  399. package/esm/highlevel/types/peers/chat-permissions.js +4 -3
  400. package/esm/highlevel/types/peers/chat-photo.js +12 -9
  401. package/esm/highlevel/types/peers/chat-photo.js.map +1 -1
  402. package/esm/highlevel/types/peers/chat-preview.js +5 -4
  403. package/esm/highlevel/types/peers/chat.js +5 -4
  404. package/esm/highlevel/types/peers/forum-topic.js +5 -4
  405. package/esm/highlevel/types/peers/user.js +5 -4
  406. package/esm/highlevel/types/premium/boost-slot.js +5 -4
  407. package/esm/highlevel/types/premium/boost-stats.js +4 -3
  408. package/esm/highlevel/types/premium/boost.js +5 -4
  409. package/esm/highlevel/types/reactions/emoji-status.js +4 -3
  410. package/esm/highlevel/types/reactions/peer-reaction.js +5 -4
  411. package/esm/highlevel/types/reactions/reaction-count.js +4 -3
  412. package/esm/highlevel/types/stories/all-stories.js +5 -4
  413. package/esm/highlevel/types/stories/interactive/channel-post.js +5 -4
  414. package/esm/highlevel/types/stories/interactive/location.js +5 -4
  415. package/esm/highlevel/types/stories/interactive/reaction.js +4 -3
  416. package/esm/highlevel/types/stories/interactive/venue.js +5 -4
  417. package/esm/highlevel/types/stories/peer-stories.js +5 -4
  418. package/esm/highlevel/types/stories/stealth-mode.js +4 -3
  419. package/esm/highlevel/types/stories/story-interactions.js +5 -4
  420. package/esm/highlevel/types/stories/story-viewer.js +9 -7
  421. package/esm/highlevel/types/stories/story.js +5 -4
  422. package/esm/highlevel/types/updates/bot-chat-join-request.js +5 -4
  423. package/esm/highlevel/types/updates/bot-reaction.js +9 -7
  424. package/esm/highlevel/types/updates/bot-stopped.js +5 -4
  425. package/esm/highlevel/types/updates/callback-query.js +11 -9
  426. package/esm/highlevel/types/updates/callback-query.js.map +1 -1
  427. package/esm/highlevel/types/updates/chat-join-request.js +5 -4
  428. package/esm/highlevel/types/updates/chat-member-update.js +5 -4
  429. package/esm/highlevel/types/updates/chosen-inline-result.js +5 -4
  430. package/esm/highlevel/types/updates/delete-message-update.js +4 -3
  431. package/esm/highlevel/types/updates/delete-story-update.js +5 -4
  432. package/esm/highlevel/types/updates/history-read-update.js +4 -3
  433. package/esm/highlevel/types/updates/inline-query.js +5 -4
  434. package/esm/highlevel/types/updates/poll-update.js +5 -4
  435. package/esm/highlevel/types/updates/poll-vote.js +5 -4
  436. package/esm/highlevel/types/updates/pre-checkout-query.js +5 -4
  437. package/esm/highlevel/types/updates/story-update.js +5 -4
  438. package/esm/highlevel/types/updates/user-status-update.js +5 -4
  439. package/esm/highlevel/types/updates/user-status-update.js.map +1 -1
  440. package/esm/highlevel/types/updates/user-typing-update.js +4 -3
  441. package/esm/highlevel/updates/manager.d.ts +5 -3
  442. package/esm/highlevel/updates/manager.js +81 -67
  443. package/esm/highlevel/updates/manager.js.map +1 -1
  444. package/esm/highlevel/utils/convert-file-id.js +7 -6
  445. package/esm/highlevel/utils/convert-file-id.js.map +1 -1
  446. package/esm/highlevel/utils/file-utils.js +8 -4
  447. package/esm/highlevel/utils/file-utils.js.map +1 -1
  448. package/esm/highlevel/utils/inline-utils.js +4 -3
  449. package/esm/highlevel/utils/inline-utils.js.map +1 -1
  450. package/esm/highlevel/utils/inspectable.d.ts +1 -1
  451. package/esm/highlevel/utils/inspectable.js +3 -2
  452. package/esm/highlevel/utils/inspectable.js.map +1 -1
  453. package/esm/highlevel/utils/memoize.d.ts +1 -1
  454. package/esm/highlevel/utils/memoize.js +1 -0
  455. package/esm/highlevel/utils/memoize.js.map +1 -1
  456. package/esm/highlevel/utils/stream-utils.d.ts +0 -2
  457. package/esm/highlevel/utils/stream-utils.js +0 -26
  458. package/esm/highlevel/utils/stream-utils.js.map +1 -1
  459. package/esm/highlevel/utils/string-session.js +4 -3
  460. package/esm/highlevel/utils/string-session.js.map +1 -1
  461. package/esm/highlevel/worker/index.d.ts +3 -0
  462. package/esm/highlevel/worker/index.js +4 -0
  463. package/esm/highlevel/worker/index.js.map +1 -0
  464. package/esm/highlevel/worker/port.d.ts +6 -3
  465. package/esm/highlevel/worker/port.js +8 -2
  466. package/esm/highlevel/worker/port.js.map +1 -1
  467. package/esm/highlevel/worker/protocol.d.ts +5 -1
  468. package/esm/highlevel/worker/protocol.js.map +1 -1
  469. package/esm/highlevel/worker/worker.d.ts +11 -4
  470. package/esm/highlevel/worker/worker.js +51 -47
  471. package/esm/highlevel/worker/worker.js.map +1 -1
  472. package/esm/network/authorization.js +1 -0
  473. package/esm/network/authorization.js.map +1 -1
  474. package/esm/network/client.d.ts +4 -4
  475. package/esm/network/client.js +4 -2
  476. package/esm/network/client.js.map +1 -1
  477. package/esm/network/mtproto-session.d.ts +1 -0
  478. package/esm/network/mtproto-session.js +7 -1
  479. package/esm/network/mtproto-session.js.map +1 -1
  480. package/esm/network/multi-session-connection.d.ts +1 -0
  481. package/esm/network/multi-session-connection.js +6 -0
  482. package/esm/network/multi-session-connection.js.map +1 -1
  483. package/esm/network/network-manager.d.ts +5 -1
  484. package/esm/network/network-manager.js +24 -15
  485. package/esm/network/network-manager.js.map +1 -1
  486. package/esm/network/persistent-connection.d.ts +3 -0
  487. package/esm/network/persistent-connection.js +23 -1
  488. package/esm/network/persistent-connection.js.map +1 -1
  489. package/esm/network/session-connection.d.ts +2 -0
  490. package/esm/network/session-connection.js +21 -7
  491. package/esm/network/session-connection.js.map +1 -1
  492. package/esm/network/transports/index.d.ts +0 -3
  493. package/esm/network/transports/index.js +0 -3
  494. package/esm/network/transports/index.js.map +1 -1
  495. package/esm/platform.d.ts +18 -0
  496. package/esm/platform.js +31 -0
  497. package/esm/platform.js.map +1 -0
  498. package/esm/storage/index.d.ts +1 -2
  499. package/esm/storage/index.js +1 -2
  500. package/esm/storage/index.js.map +1 -1
  501. package/{cjs/storage/providers → esm/storage}/memory/driver.d.ts +1 -1
  502. package/esm/storage/memory/driver.js.map +1 -0
  503. package/{cjs/storage/providers → esm/storage}/memory/index.d.ts +2 -2
  504. package/esm/storage/memory/index.js.map +1 -0
  505. package/esm/storage/{providers/memory → memory}/repository/auth-keys.d.ts +1 -1
  506. package/esm/storage/memory/repository/auth-keys.js.map +1 -0
  507. package/{cjs/storage/providers → esm/storage}/memory/repository/kv.d.ts +1 -1
  508. package/esm/storage/memory/repository/kv.js.map +1 -0
  509. package/{cjs/storage/providers → esm/storage}/memory/repository/peers.d.ts +1 -1
  510. package/esm/storage/memory/repository/peers.js.map +1 -0
  511. package/{cjs/storage/providers → esm/storage}/memory/repository/ref-messages.d.ts +1 -1
  512. package/esm/storage/memory/repository/ref-messages.js.map +1 -0
  513. package/esm/storage/storage.js +3 -2
  514. package/esm/storage/storage.js.map +1 -1
  515. package/esm/utils/binary/asn1-parser.js +3 -3
  516. package/esm/utils/binary/asn1-parser.js.map +1 -1
  517. package/esm/utils/crypto/abstract.d.ts +0 -1
  518. package/esm/utils/crypto/abstract.js.map +1 -1
  519. package/esm/utils/crypto/index.d.ts +0 -2
  520. package/esm/utils/crypto/index.js +0 -2
  521. package/esm/utils/crypto/index.js.map +1 -1
  522. package/esm/utils/crypto/keys.js +6 -4
  523. package/esm/utils/crypto/keys.js.map +1 -1
  524. package/esm/utils/crypto/password.js +3 -3
  525. package/esm/utils/crypto/password.js.map +1 -1
  526. package/esm/utils/dcs.d.ts +4 -0
  527. package/esm/utils/dcs.js +0 -4
  528. package/esm/utils/dcs.js.map +1 -1
  529. package/esm/utils/{platform/error-reporting.d.ts → error-reporting.d.ts} +1 -1
  530. package/esm/utils/error-reporting.js.map +1 -0
  531. package/esm/utils/index.d.ts +4 -1
  532. package/esm/utils/index.js +6 -1
  533. package/esm/utils/index.js.map +1 -1
  534. package/esm/utils/links/common.js +1 -1
  535. package/esm/utils/links/common.js.map +1 -1
  536. package/esm/utils/logger.d.ts +1 -0
  537. package/esm/utils/logger.js +9 -22
  538. package/esm/utils/logger.js.map +1 -1
  539. package/package.json +24 -52
  540. package/cjs/highlevel/base.test.js +0 -14
  541. package/cjs/highlevel/base.test.js.map +0 -1
  542. package/cjs/highlevel/methods/files/_platform.js +0 -33
  543. package/cjs/highlevel/methods/files/_platform.js.map +0 -1
  544. package/cjs/highlevel/methods/files/_platform.web.d.ts +0 -1
  545. package/cjs/highlevel/methods/files/_platform.web.js +0 -26
  546. package/cjs/highlevel/methods/files/_platform.web.js.map +0 -1
  547. package/cjs/highlevel/methods/files/download-file.web.d.ts +0 -1
  548. package/cjs/highlevel/methods/files/download-file.web.js +0 -9
  549. package/cjs/highlevel/methods/files/download-file.web.js.map +0 -1
  550. package/cjs/highlevel/methods/messages/send-text.test.d.ts +0 -1
  551. package/cjs/highlevel/methods/messages/send-text.test.js +0 -140
  552. package/cjs/highlevel/methods/messages/send-text.test.js.map +0 -1
  553. package/cjs/highlevel/methods/users/get-users.test.d.ts +0 -1
  554. package/cjs/highlevel/methods/users/get-users.test.js +0 -33
  555. package/cjs/highlevel/methods/users/get-users.test.js.map +0 -1
  556. package/cjs/highlevel/methods/users/resolve-peer.test.d.ts +0 -1
  557. package/cjs/highlevel/methods/users/resolve-peer.test.js +0 -307
  558. package/cjs/highlevel/methods/users/resolve-peer.test.js.map +0 -1
  559. package/cjs/highlevel/types/bots/command-scope.d.ts +0 -63
  560. package/cjs/highlevel/types/bots/command-scope.js +0 -87
  561. package/cjs/highlevel/types/bots/command-scope.js.map +0 -1
  562. package/cjs/highlevel/types/bots/input/index.d.ts +0 -2
  563. package/cjs/highlevel/types/bots/input/index.js.map +0 -1
  564. package/cjs/highlevel/types/bots/input/input-inline-message.js +0 -179
  565. package/cjs/highlevel/types/bots/input/input-inline-message.js.map +0 -1
  566. package/cjs/highlevel/types/bots/input/input-inline-result.js +0 -490
  567. package/cjs/highlevel/types/bots/input/input-inline-result.js.map +0 -1
  568. package/cjs/highlevel/types/bots/keyboard-builder.js.map +0 -1
  569. package/cjs/highlevel/types/bots/keyboard-builder.test.d.ts +0 -1
  570. package/cjs/highlevel/types/bots/keyboard-builder.test.js +0 -162
  571. package/cjs/highlevel/types/bots/keyboard-builder.test.js.map +0 -1
  572. package/cjs/highlevel/types/bots/keyboards.d.ts +0 -239
  573. package/cjs/highlevel/types/bots/keyboards.js +0 -380
  574. package/cjs/highlevel/types/bots/keyboards.js.map +0 -1
  575. package/cjs/highlevel/types/bots/keyboards.test.d.ts +0 -1
  576. package/cjs/highlevel/types/bots/keyboards.test.js +0 -146
  577. package/cjs/highlevel/types/bots/keyboards.test.js.map +0 -1
  578. package/cjs/highlevel/types/media/input-media.js +0 -254
  579. package/cjs/highlevel/types/media/input-media.js.map +0 -1
  580. package/cjs/highlevel/types/misc/input-privacy-rule.d.ts +0 -63
  581. package/cjs/highlevel/types/misc/input-privacy-rule.js +0 -85
  582. package/cjs/highlevel/types/misc/input-privacy-rule.js.map +0 -1
  583. package/cjs/highlevel/types/peers/peers-index.test.d.ts +0 -1
  584. package/cjs/highlevel/types/peers/peers-index.test.js +0 -71
  585. package/cjs/highlevel/types/peers/peers-index.test.js.map +0 -1
  586. package/cjs/highlevel/types/peers/user.test.d.ts +0 -1
  587. package/cjs/highlevel/types/peers/user.test.js +0 -176
  588. package/cjs/highlevel/types/peers/user.test.js.map +0 -1
  589. package/cjs/highlevel/utils/file-type.test.d.ts +0 -1
  590. package/cjs/highlevel/utils/file-type.test.js +0 -64
  591. package/cjs/highlevel/utils/file-type.test.js.map +0 -1
  592. package/cjs/highlevel/utils/file-utils.test.d.ts +0 -1
  593. package/cjs/highlevel/utils/file-utils.test.js +0 -126
  594. package/cjs/highlevel/utils/file-utils.test.js.map +0 -1
  595. package/cjs/highlevel/utils/inline-utils.test.d.ts +0 -1
  596. package/cjs/highlevel/utils/inline-utils.test.js +0 -47
  597. package/cjs/highlevel/utils/inline-utils.test.js.map +0 -1
  598. package/cjs/highlevel/utils/inspectable.test.d.ts +0 -1
  599. package/cjs/highlevel/utils/inspectable.test.js +0 -97
  600. package/cjs/highlevel/utils/inspectable.test.js.map +0 -1
  601. package/cjs/highlevel/utils/memoize.test.d.ts +0 -1
  602. package/cjs/highlevel/utils/memoize.test.js +0 -60
  603. package/cjs/highlevel/utils/memoize.test.js.map +0 -1
  604. package/cjs/highlevel/utils/peer-utils.test.d.ts +0 -1
  605. package/cjs/highlevel/utils/peer-utils.test.js +0 -109
  606. package/cjs/highlevel/utils/peer-utils.test.js.map +0 -1
  607. package/cjs/highlevel/utils/platform/storage.d.ts +0 -1
  608. package/cjs/highlevel/utils/platform/storage.js +0 -10
  609. package/cjs/highlevel/utils/platform/storage.js.map +0 -1
  610. package/cjs/highlevel/utils/platform/storage.web.d.ts +0 -1
  611. package/cjs/highlevel/utils/platform/storage.web.js +0 -14
  612. package/cjs/highlevel/utils/platform/storage.web.js.map +0 -1
  613. package/cjs/highlevel/utils/query-batcher.test.d.ts +0 -1
  614. package/cjs/highlevel/utils/query-batcher.test.js +0 -502
  615. package/cjs/highlevel/utils/query-batcher.test.js.map +0 -1
  616. package/cjs/highlevel/utils/stream-utils.test.d.ts +0 -1
  617. package/cjs/highlevel/utils/stream-utils.test.js +0 -98
  618. package/cjs/highlevel/utils/stream-utils.test.js.map +0 -1
  619. package/cjs/highlevel/utils/string-session.test.d.ts +0 -1
  620. package/cjs/highlevel/utils/string-session.test.js +0 -198
  621. package/cjs/highlevel/utils/string-session.test.js.map +0 -1
  622. package/cjs/highlevel/utils/voice-utils.test.d.ts +0 -1
  623. package/cjs/highlevel/utils/voice-utils.test.js +0 -28
  624. package/cjs/highlevel/utils/voice-utils.test.js.map +0 -1
  625. package/cjs/highlevel/worker/platform/connect.d.ts +0 -2
  626. package/cjs/highlevel/worker/platform/connect.js +0 -19
  627. package/cjs/highlevel/worker/platform/connect.js.map +0 -1
  628. package/cjs/highlevel/worker/platform/connect.web.d.ts +0 -2
  629. package/cjs/highlevel/worker/platform/connect.web.js +0 -51
  630. package/cjs/highlevel/worker/platform/connect.web.js.map +0 -1
  631. package/cjs/highlevel/worker/platform/register.d.ts +0 -2
  632. package/cjs/highlevel/worker/platform/register.js +0 -20
  633. package/cjs/highlevel/worker/platform/register.js.map +0 -1
  634. package/cjs/highlevel/worker/platform/register.web.d.ts +0 -2
  635. package/cjs/highlevel/worker/platform/register.web.js +0 -64
  636. package/cjs/highlevel/worker/platform/register.web.js.map +0 -1
  637. package/cjs/network/auth-key.test.d.ts +0 -1
  638. package/cjs/network/auth-key.test.js +0 -111
  639. package/cjs/network/auth-key.test.js.map +0 -1
  640. package/cjs/network/config-manager.test.d.ts +0 -1
  641. package/cjs/network/config-manager.test.js +0 -174
  642. package/cjs/network/config-manager.test.js.map +0 -1
  643. package/cjs/network/persistent-connection.test.d.ts +0 -1
  644. package/cjs/network/persistent-connection.test.js +0 -157
  645. package/cjs/network/persistent-connection.test.js.map +0 -1
  646. package/cjs/network/transports/intermediate.test.d.ts +0 -1
  647. package/cjs/network/transports/intermediate.test.js +0 -84
  648. package/cjs/network/transports/intermediate.test.js.map +0 -1
  649. package/cjs/network/transports/obfuscated.test.d.ts +0 -1
  650. package/cjs/network/transports/obfuscated.test.js +0 -131
  651. package/cjs/network/transports/obfuscated.test.js.map +0 -1
  652. package/cjs/network/transports/tcp.d.ts +0 -32
  653. package/cjs/network/transports/tcp.js +0 -130
  654. package/cjs/network/transports/tcp.js.map +0 -1
  655. package/cjs/network/transports/tcp.test.d.ts +0 -1
  656. package/cjs/network/transports/tcp.test.js +0 -103
  657. package/cjs/network/transports/tcp.test.js.map +0 -1
  658. package/cjs/network/transports/websocket.d.ts +0 -46
  659. package/cjs/network/transports/websocket.js +0 -124
  660. package/cjs/network/transports/websocket.js.map +0 -1
  661. package/cjs/network/transports/websocket.test.d.ts +0 -1
  662. package/cjs/network/transports/websocket.test.js +0 -91
  663. package/cjs/network/transports/websocket.test.js.map +0 -1
  664. package/cjs/storage/providers/idb/driver.d.ts +0 -18
  665. package/cjs/storage/providers/idb/driver.js +0 -138
  666. package/cjs/storage/providers/idb/driver.js.map +0 -1
  667. package/cjs/storage/providers/idb/idb.test.d.ts +0 -1
  668. package/cjs/storage/providers/idb/idb.test.js +0 -29
  669. package/cjs/storage/providers/idb/idb.test.js.map +0 -1
  670. package/cjs/storage/providers/idb/index.d.ts +0 -22
  671. package/cjs/storage/providers/idb/index.js +0 -28
  672. package/cjs/storage/providers/idb/index.js.map +0 -1
  673. package/cjs/storage/providers/idb/repository/auth-keys.d.ts +0 -14
  674. package/cjs/storage/providers/idb/repository/auth-keys.js +0 -70
  675. package/cjs/storage/providers/idb/repository/auth-keys.js.map +0 -1
  676. package/cjs/storage/providers/idb/repository/kv.d.ts +0 -11
  677. package/cjs/storage/providers/idb/repository/kv.js +0 -34
  678. package/cjs/storage/providers/idb/repository/kv.js.map +0 -1
  679. package/cjs/storage/providers/idb/repository/peers.d.ts +0 -12
  680. package/cjs/storage/providers/idb/repository/peers.js +0 -38
  681. package/cjs/storage/providers/idb/repository/peers.js.map +0 -1
  682. package/cjs/storage/providers/idb/repository/ref-messages.d.ts +0 -12
  683. package/cjs/storage/providers/idb/repository/ref-messages.js +0 -57
  684. package/cjs/storage/providers/idb/repository/ref-messages.js.map +0 -1
  685. package/cjs/storage/providers/idb/utils.d.ts +0 -3
  686. package/cjs/storage/providers/idb/utils.js +0 -27
  687. package/cjs/storage/providers/idb/utils.js.map +0 -1
  688. package/cjs/storage/providers/memory/driver.js.map +0 -1
  689. package/cjs/storage/providers/memory/index.js.map +0 -1
  690. package/cjs/storage/providers/memory/memory.test.d.ts +0 -1
  691. package/cjs/storage/providers/memory/memory.test.js +0 -13
  692. package/cjs/storage/providers/memory/memory.test.js.map +0 -1
  693. package/cjs/storage/providers/memory/repository/auth-keys.js.map +0 -1
  694. package/cjs/storage/providers/memory/repository/kv.js.map +0 -1
  695. package/cjs/storage/providers/memory/repository/peers.js.map +0 -1
  696. package/cjs/storage/providers/memory/repository/ref-messages.js.map +0 -1
  697. package/cjs/storage/service/auth-keys.test.d.ts +0 -1
  698. package/cjs/storage/service/auth-keys.test.js +0 -22
  699. package/cjs/storage/service/auth-keys.test.js.map +0 -1
  700. package/cjs/storage/service/updates.test.d.ts +0 -1
  701. package/cjs/storage/service/updates.test.js +0 -60
  702. package/cjs/storage/service/updates.test.js.map +0 -1
  703. package/cjs/storage/service/utils.test-utils.d.ts +0 -2
  704. package/cjs/storage/service/utils.test-utils.js +0 -19
  705. package/cjs/storage/service/utils.test-utils.js.map +0 -1
  706. package/cjs/utils/async-lock.test.d.ts +0 -1
  707. package/cjs/utils/async-lock.test.js +0 -25
  708. package/cjs/utils/async-lock.test.js.map +0 -1
  709. package/cjs/utils/bigint-utils.test.d.ts +0 -1
  710. package/cjs/utils/bigint-utils.test.js +0 -150
  711. package/cjs/utils/bigint-utils.test.js.map +0 -1
  712. package/cjs/utils/buffer-utils.test.d.ts +0 -1
  713. package/cjs/utils/buffer-utils.test.js +0 -69
  714. package/cjs/utils/buffer-utils.test.js.map +0 -1
  715. package/cjs/utils/condition-variable.test.d.ts +0 -1
  716. package/cjs/utils/condition-variable.test.js +0 -27
  717. package/cjs/utils/condition-variable.test.js.map +0 -1
  718. package/cjs/utils/controllable-promise.test.d.ts +0 -1
  719. package/cjs/utils/controllable-promise.test.js +0 -17
  720. package/cjs/utils/controllable-promise.test.js.map +0 -1
  721. package/cjs/utils/crypto/factorization.test.d.ts +0 -1
  722. package/cjs/utils/crypto/factorization.test.js +0 -19
  723. package/cjs/utils/crypto/factorization.test.js.map +0 -1
  724. package/cjs/utils/crypto/keys.test.d.ts +0 -1
  725. package/cjs/utils/crypto/keys.test.js +0 -40
  726. package/cjs/utils/crypto/keys.test.js.map +0 -1
  727. package/cjs/utils/crypto/miller-rabin.test.d.ts +0 -1
  728. package/cjs/utils/crypto/miller-rabin.test.js +0 -60
  729. package/cjs/utils/crypto/miller-rabin.test.js.map +0 -1
  730. package/cjs/utils/crypto/mtproto.test.d.ts +0 -1
  731. package/cjs/utils/crypto/mtproto.test.js +0 -50
  732. package/cjs/utils/crypto/mtproto.test.js.map +0 -1
  733. package/cjs/utils/crypto/node.d.ts +0 -21
  734. package/cjs/utils/crypto/node.js +0 -74
  735. package/cjs/utils/crypto/node.js.map +0 -1
  736. package/cjs/utils/crypto/node.test.d.ts +0 -1
  737. package/cjs/utils/crypto/node.test.js +0 -14
  738. package/cjs/utils/crypto/node.test.js.map +0 -1
  739. package/cjs/utils/crypto/password.test.d.ts +0 -1
  740. package/cjs/utils/crypto/password.test.js +0 -95
  741. package/cjs/utils/crypto/password.test.js.map +0 -1
  742. package/cjs/utils/crypto/utils.test.d.ts +0 -1
  743. package/cjs/utils/crypto/utils.test.js +0 -49
  744. package/cjs/utils/crypto/utils.test.js.map +0 -1
  745. package/cjs/utils/crypto/wasm.d.ts +0 -22
  746. package/cjs/utils/crypto/wasm.js +0 -41
  747. package/cjs/utils/crypto/wasm.js.map +0 -1
  748. package/cjs/utils/crypto/web.d.ts +0 -11
  749. package/cjs/utils/crypto/web.js +0 -40
  750. package/cjs/utils/crypto/web.js.map +0 -1
  751. package/cjs/utils/crypto/web.test.d.ts +0 -1
  752. package/cjs/utils/crypto/web.test.js +0 -17
  753. package/cjs/utils/crypto/web.test.js.map +0 -1
  754. package/cjs/utils/deque.test.d.ts +0 -1
  755. package/cjs/utils/deque.test.js +0 -128
  756. package/cjs/utils/deque.test.js.map +0 -1
  757. package/cjs/utils/function-utils.test.d.ts +0 -1
  758. package/cjs/utils/function-utils.test.js +0 -23
  759. package/cjs/utils/function-utils.test.js.map +0 -1
  760. package/cjs/utils/linked-list.test.d.ts +0 -1
  761. package/cjs/utils/linked-list.test.js +0 -36
  762. package/cjs/utils/linked-list.test.js.map +0 -1
  763. package/cjs/utils/links/bots.test.d.ts +0 -1
  764. package/cjs/utils/links/bots.test.js +0 -152
  765. package/cjs/utils/links/bots.test.js.map +0 -1
  766. package/cjs/utils/links/chat.test.d.ts +0 -1
  767. package/cjs/utils/links/chat.test.js +0 -84
  768. package/cjs/utils/links/chat.test.js.map +0 -1
  769. package/cjs/utils/links/misc.test.d.ts +0 -1
  770. package/cjs/utils/links/misc.test.js +0 -153
  771. package/cjs/utils/links/misc.test.js.map +0 -1
  772. package/cjs/utils/links/proxy.test.d.ts +0 -1
  773. package/cjs/utils/links/proxy.test.js +0 -74
  774. package/cjs/utils/links/proxy.test.js.map +0 -1
  775. package/cjs/utils/links/user.test.d.ts +0 -1
  776. package/cjs/utils/links/user.test.js +0 -63
  777. package/cjs/utils/links/user.test.js.map +0 -1
  778. package/cjs/utils/logger.test.d.ts +0 -1
  779. package/cjs/utils/logger.test.js +0 -139
  780. package/cjs/utils/logger.test.js.map +0 -1
  781. package/cjs/utils/long-utils.test.d.ts +0 -1
  782. package/cjs/utils/long-utils.test.js +0 -158
  783. package/cjs/utils/long-utils.test.js.map +0 -1
  784. package/cjs/utils/lru-map.test.d.ts +0 -1
  785. package/cjs/utils/lru-map.test.js +0 -96
  786. package/cjs/utils/lru-map.test.js.map +0 -1
  787. package/cjs/utils/lru-set.test.d.ts +0 -1
  788. package/cjs/utils/lru-set.test.js +0 -77
  789. package/cjs/utils/lru-set.test.js.map +0 -1
  790. package/cjs/utils/peer-utils.test.d.ts +0 -1
  791. package/cjs/utils/peer-utils.test.js +0 -110
  792. package/cjs/utils/peer-utils.test.js.map +0 -1
  793. package/cjs/utils/platform/crypto.d.ts +0 -1
  794. package/cjs/utils/platform/crypto.js +0 -8
  795. package/cjs/utils/platform/crypto.js.map +0 -1
  796. package/cjs/utils/platform/crypto.web.d.ts +0 -1
  797. package/cjs/utils/platform/crypto.web.js +0 -14
  798. package/cjs/utils/platform/crypto.web.js.map +0 -1
  799. package/cjs/utils/platform/error-reporting.js.map +0 -1
  800. package/cjs/utils/platform/exit-hook.d.ts +0 -1
  801. package/cjs/utils/platform/exit-hook.js +0 -45
  802. package/cjs/utils/platform/exit-hook.js.map +0 -1
  803. package/cjs/utils/platform/exit-hook.web.d.ts +0 -1
  804. package/cjs/utils/platform/exit-hook.web.js +0 -21
  805. package/cjs/utils/platform/exit-hook.web.js.map +0 -1
  806. package/cjs/utils/platform/logging.d.ts +0 -1
  807. package/cjs/utils/platform/logging.js +0 -34
  808. package/cjs/utils/platform/logging.js.map +0 -1
  809. package/cjs/utils/platform/logging.web.d.ts +0 -1
  810. package/cjs/utils/platform/logging.web.js +0 -35
  811. package/cjs/utils/platform/logging.web.js.map +0 -1
  812. package/cjs/utils/platform/transport.d.ts +0 -1
  813. package/cjs/utils/platform/transport.js +0 -8
  814. package/cjs/utils/platform/transport.js.map +0 -1
  815. package/cjs/utils/platform/transport.web.d.ts +0 -1
  816. package/cjs/utils/platform/transport.web.js +0 -15
  817. package/cjs/utils/platform/transport.web.js.map +0 -1
  818. package/cjs/utils/sorted-array.test.d.ts +0 -1
  819. package/cjs/utils/sorted-array.test.js +0 -66
  820. package/cjs/utils/sorted-array.test.js.map +0 -1
  821. package/cjs/utils/tl-json.test.d.ts +0 -1
  822. package/cjs/utils/tl-json.test.js +0 -83
  823. package/cjs/utils/tl-json.test.js.map +0 -1
  824. package/cjs/utils/type-assertions.test.d.ts +0 -1
  825. package/cjs/utils/type-assertions.test.js +0 -67
  826. package/cjs/utils/type-assertions.test.js.map +0 -1
  827. package/esm/highlevel/base.test.d.ts +0 -1
  828. package/esm/highlevel/base.test.js +0 -12
  829. package/esm/highlevel/base.test.js.map +0 -1
  830. package/esm/highlevel/methods/files/_platform.d.ts +0 -1
  831. package/esm/highlevel/methods/files/_platform.js +0 -26
  832. package/esm/highlevel/methods/files/_platform.js.map +0 -1
  833. package/esm/highlevel/methods/files/_platform.web.d.ts +0 -1
  834. package/esm/highlevel/methods/files/_platform.web.js +0 -19
  835. package/esm/highlevel/methods/files/_platform.web.js.map +0 -1
  836. package/esm/highlevel/methods/files/download-file.web.d.ts +0 -1
  837. package/esm/highlevel/methods/files/download-file.web.js +0 -5
  838. package/esm/highlevel/methods/files/download-file.web.js.map +0 -1
  839. package/esm/highlevel/methods/messages/send-text.test.d.ts +0 -1
  840. package/esm/highlevel/methods/messages/send-text.test.js +0 -135
  841. package/esm/highlevel/methods/messages/send-text.test.js.map +0 -1
  842. package/esm/highlevel/methods/users/get-users.test.d.ts +0 -1
  843. package/esm/highlevel/methods/users/get-users.test.js +0 -28
  844. package/esm/highlevel/methods/users/get-users.test.js.map +0 -1
  845. package/esm/highlevel/methods/users/resolve-peer.test.d.ts +0 -1
  846. package/esm/highlevel/methods/users/resolve-peer.test.js +0 -302
  847. package/esm/highlevel/methods/users/resolve-peer.test.js.map +0 -1
  848. package/esm/highlevel/types/bots/command-scope.d.ts +0 -63
  849. package/esm/highlevel/types/bots/command-scope.js +0 -84
  850. package/esm/highlevel/types/bots/command-scope.js.map +0 -1
  851. package/esm/highlevel/types/bots/input/index.d.ts +0 -2
  852. package/esm/highlevel/types/bots/input/index.js +0 -3
  853. package/esm/highlevel/types/bots/input/index.js.map +0 -1
  854. package/esm/highlevel/types/bots/input/input-inline-message.js +0 -176
  855. package/esm/highlevel/types/bots/input/input-inline-message.js.map +0 -1
  856. package/esm/highlevel/types/bots/input/input-inline-result.js +0 -487
  857. package/esm/highlevel/types/bots/input/input-inline-result.js.map +0 -1
  858. package/esm/highlevel/types/bots/keyboard-builder.js.map +0 -1
  859. package/esm/highlevel/types/bots/keyboard-builder.test.d.ts +0 -1
  860. package/esm/highlevel/types/bots/keyboard-builder.test.js +0 -160
  861. package/esm/highlevel/types/bots/keyboard-builder.test.js.map +0 -1
  862. package/esm/highlevel/types/bots/keyboards.d.ts +0 -239
  863. package/esm/highlevel/types/bots/keyboards.js +0 -377
  864. package/esm/highlevel/types/bots/keyboards.js.map +0 -1
  865. package/esm/highlevel/types/bots/keyboards.test.d.ts +0 -1
  866. package/esm/highlevel/types/bots/keyboards.test.js +0 -144
  867. package/esm/highlevel/types/bots/keyboards.test.js.map +0 -1
  868. package/esm/highlevel/types/media/input-media.js +0 -251
  869. package/esm/highlevel/types/media/input-media.js.map +0 -1
  870. package/esm/highlevel/types/misc/input-privacy-rule.d.ts +0 -63
  871. package/esm/highlevel/types/misc/input-privacy-rule.js +0 -82
  872. package/esm/highlevel/types/misc/input-privacy-rule.js.map +0 -1
  873. package/esm/highlevel/types/peers/peers-index.test.d.ts +0 -1
  874. package/esm/highlevel/types/peers/peers-index.test.js +0 -69
  875. package/esm/highlevel/types/peers/peers-index.test.js.map +0 -1
  876. package/esm/highlevel/types/peers/user.test.d.ts +0 -1
  877. package/esm/highlevel/types/peers/user.test.js +0 -171
  878. package/esm/highlevel/types/peers/user.test.js.map +0 -1
  879. package/esm/highlevel/utils/file-type.test.d.ts +0 -1
  880. package/esm/highlevel/utils/file-type.test.js +0 -62
  881. package/esm/highlevel/utils/file-type.test.js.map +0 -1
  882. package/esm/highlevel/utils/file-utils.test.d.ts +0 -1
  883. package/esm/highlevel/utils/file-utils.test.js +0 -124
  884. package/esm/highlevel/utils/file-utils.test.js.map +0 -1
  885. package/esm/highlevel/utils/inline-utils.test.d.ts +0 -1
  886. package/esm/highlevel/utils/inline-utils.test.js +0 -42
  887. package/esm/highlevel/utils/inline-utils.test.js.map +0 -1
  888. package/esm/highlevel/utils/inspectable.test.d.ts +0 -1
  889. package/esm/highlevel/utils/inspectable.test.js +0 -95
  890. package/esm/highlevel/utils/inspectable.test.js.map +0 -1
  891. package/esm/highlevel/utils/memoize.test.d.ts +0 -1
  892. package/esm/highlevel/utils/memoize.test.js +0 -58
  893. package/esm/highlevel/utils/memoize.test.js.map +0 -1
  894. package/esm/highlevel/utils/peer-utils.test.d.ts +0 -1
  895. package/esm/highlevel/utils/peer-utils.test.js +0 -107
  896. package/esm/highlevel/utils/peer-utils.test.js.map +0 -1
  897. package/esm/highlevel/utils/platform/storage.d.ts +0 -1
  898. package/esm/highlevel/utils/platform/storage.js +0 -6
  899. package/esm/highlevel/utils/platform/storage.js.map +0 -1
  900. package/esm/highlevel/utils/platform/storage.web.d.ts +0 -1
  901. package/esm/highlevel/utils/platform/storage.web.js +0 -10
  902. package/esm/highlevel/utils/platform/storage.web.js.map +0 -1
  903. package/esm/highlevel/utils/query-batcher.test.d.ts +0 -1
  904. package/esm/highlevel/utils/query-batcher.test.js +0 -500
  905. package/esm/highlevel/utils/query-batcher.test.js.map +0 -1
  906. package/esm/highlevel/utils/stream-utils.test.d.ts +0 -1
  907. package/esm/highlevel/utils/stream-utils.test.js +0 -96
  908. package/esm/highlevel/utils/stream-utils.test.js.map +0 -1
  909. package/esm/highlevel/utils/string-session.test.d.ts +0 -1
  910. package/esm/highlevel/utils/string-session.test.js +0 -196
  911. package/esm/highlevel/utils/string-session.test.js.map +0 -1
  912. package/esm/highlevel/utils/voice-utils.test.d.ts +0 -1
  913. package/esm/highlevel/utils/voice-utils.test.js +0 -26
  914. package/esm/highlevel/utils/voice-utils.test.js.map +0 -1
  915. package/esm/highlevel/worker/platform/connect.d.ts +0 -2
  916. package/esm/highlevel/worker/platform/connect.js +0 -15
  917. package/esm/highlevel/worker/platform/connect.js.map +0 -1
  918. package/esm/highlevel/worker/platform/connect.web.d.ts +0 -2
  919. package/esm/highlevel/worker/platform/connect.web.js +0 -47
  920. package/esm/highlevel/worker/platform/connect.web.js.map +0 -1
  921. package/esm/highlevel/worker/platform/register.d.ts +0 -2
  922. package/esm/highlevel/worker/platform/register.js +0 -16
  923. package/esm/highlevel/worker/platform/register.js.map +0 -1
  924. package/esm/highlevel/worker/platform/register.web.d.ts +0 -2
  925. package/esm/highlevel/worker/platform/register.web.js +0 -60
  926. package/esm/highlevel/worker/platform/register.web.js.map +0 -1
  927. package/esm/network/auth-key.test.d.ts +0 -1
  928. package/esm/network/auth-key.test.js +0 -106
  929. package/esm/network/auth-key.test.js.map +0 -1
  930. package/esm/network/config-manager.test.d.ts +0 -1
  931. package/esm/network/config-manager.test.js +0 -172
  932. package/esm/network/config-manager.test.js.map +0 -1
  933. package/esm/network/persistent-connection.test.d.ts +0 -1
  934. package/esm/network/persistent-connection.test.js +0 -155
  935. package/esm/network/persistent-connection.test.js.map +0 -1
  936. package/esm/network/transports/intermediate.test.d.ts +0 -1
  937. package/esm/network/transports/intermediate.test.js +0 -82
  938. package/esm/network/transports/intermediate.test.js.map +0 -1
  939. package/esm/network/transports/obfuscated.test.d.ts +0 -1
  940. package/esm/network/transports/obfuscated.test.js +0 -129
  941. package/esm/network/transports/obfuscated.test.js.map +0 -1
  942. package/esm/network/transports/tcp.d.ts +0 -32
  943. package/esm/network/transports/tcp.js +0 -122
  944. package/esm/network/transports/tcp.js.map +0 -1
  945. package/esm/network/transports/tcp.test.d.ts +0 -1
  946. package/esm/network/transports/tcp.test.js +0 -101
  947. package/esm/network/transports/tcp.test.js.map +0 -1
  948. package/esm/network/transports/websocket.d.ts +0 -46
  949. package/esm/network/transports/websocket.js +0 -116
  950. package/esm/network/transports/websocket.js.map +0 -1
  951. package/esm/network/transports/websocket.test.d.ts +0 -1
  952. package/esm/network/transports/websocket.test.js +0 -89
  953. package/esm/network/transports/websocket.test.js.map +0 -1
  954. package/esm/storage/providers/idb/driver.d.ts +0 -18
  955. package/esm/storage/providers/idb/driver.js +0 -134
  956. package/esm/storage/providers/idb/driver.js.map +0 -1
  957. package/esm/storage/providers/idb/idb.test.d.ts +0 -1
  958. package/esm/storage/providers/idb/idb.test.js +0 -27
  959. package/esm/storage/providers/idb/idb.test.js.map +0 -1
  960. package/esm/storage/providers/idb/index.d.ts +0 -22
  961. package/esm/storage/providers/idb/index.js +0 -23
  962. package/esm/storage/providers/idb/index.js.map +0 -1
  963. package/esm/storage/providers/idb/repository/auth-keys.d.ts +0 -14
  964. package/esm/storage/providers/idb/repository/auth-keys.js +0 -66
  965. package/esm/storage/providers/idb/repository/auth-keys.js.map +0 -1
  966. package/esm/storage/providers/idb/repository/kv.d.ts +0 -11
  967. package/esm/storage/providers/idb/repository/kv.js +0 -30
  968. package/esm/storage/providers/idb/repository/kv.js.map +0 -1
  969. package/esm/storage/providers/idb/repository/peers.d.ts +0 -12
  970. package/esm/storage/providers/idb/repository/peers.js +0 -34
  971. package/esm/storage/providers/idb/repository/peers.js.map +0 -1
  972. package/esm/storage/providers/idb/repository/ref-messages.d.ts +0 -12
  973. package/esm/storage/providers/idb/repository/ref-messages.js +0 -53
  974. package/esm/storage/providers/idb/repository/ref-messages.js.map +0 -1
  975. package/esm/storage/providers/idb/utils.d.ts +0 -3
  976. package/esm/storage/providers/idb/utils.js +0 -21
  977. package/esm/storage/providers/idb/utils.js.map +0 -1
  978. package/esm/storage/providers/memory/driver.js.map +0 -1
  979. package/esm/storage/providers/memory/index.js.map +0 -1
  980. package/esm/storage/providers/memory/memory.test.d.ts +0 -1
  981. package/esm/storage/providers/memory/memory.test.js +0 -11
  982. package/esm/storage/providers/memory/memory.test.js.map +0 -1
  983. package/esm/storage/providers/memory/repository/auth-keys.js.map +0 -1
  984. package/esm/storage/providers/memory/repository/kv.js.map +0 -1
  985. package/esm/storage/providers/memory/repository/peers.js.map +0 -1
  986. package/esm/storage/providers/memory/repository/ref-messages.js.map +0 -1
  987. package/esm/storage/service/auth-keys.test.d.ts +0 -1
  988. package/esm/storage/service/auth-keys.test.js +0 -20
  989. package/esm/storage/service/auth-keys.test.js.map +0 -1
  990. package/esm/storage/service/updates.test.d.ts +0 -1
  991. package/esm/storage/service/updates.test.js +0 -58
  992. package/esm/storage/service/updates.test.js.map +0 -1
  993. package/esm/storage/service/utils.test-utils.d.ts +0 -2
  994. package/esm/storage/service/utils.test-utils.js +0 -15
  995. package/esm/storage/service/utils.test-utils.js.map +0 -1
  996. package/esm/utils/async-lock.test.d.ts +0 -1
  997. package/esm/utils/async-lock.test.js +0 -23
  998. package/esm/utils/async-lock.test.js.map +0 -1
  999. package/esm/utils/bigint-utils.test.d.ts +0 -1
  1000. package/esm/utils/bigint-utils.test.js +0 -148
  1001. package/esm/utils/bigint-utils.test.js.map +0 -1
  1002. package/esm/utils/buffer-utils.test.d.ts +0 -1
  1003. package/esm/utils/buffer-utils.test.js +0 -67
  1004. package/esm/utils/buffer-utils.test.js.map +0 -1
  1005. package/esm/utils/condition-variable.test.d.ts +0 -1
  1006. package/esm/utils/condition-variable.test.js +0 -25
  1007. package/esm/utils/condition-variable.test.js.map +0 -1
  1008. package/esm/utils/controllable-promise.test.d.ts +0 -1
  1009. package/esm/utils/controllable-promise.test.js +0 -15
  1010. package/esm/utils/controllable-promise.test.js.map +0 -1
  1011. package/esm/utils/crypto/factorization.test.d.ts +0 -1
  1012. package/esm/utils/crypto/factorization.test.js +0 -17
  1013. package/esm/utils/crypto/factorization.test.js.map +0 -1
  1014. package/esm/utils/crypto/keys.test.d.ts +0 -1
  1015. package/esm/utils/crypto/keys.test.js +0 -38
  1016. package/esm/utils/crypto/keys.test.js.map +0 -1
  1017. package/esm/utils/crypto/miller-rabin.test.d.ts +0 -1
  1018. package/esm/utils/crypto/miller-rabin.test.js +0 -58
  1019. package/esm/utils/crypto/miller-rabin.test.js.map +0 -1
  1020. package/esm/utils/crypto/mtproto.test.d.ts +0 -1
  1021. package/esm/utils/crypto/mtproto.test.js +0 -48
  1022. package/esm/utils/crypto/mtproto.test.js.map +0 -1
  1023. package/esm/utils/crypto/node.d.ts +0 -21
  1024. package/esm/utils/crypto/node.js +0 -69
  1025. package/esm/utils/crypto/node.js.map +0 -1
  1026. package/esm/utils/crypto/node.test.d.ts +0 -1
  1027. package/esm/utils/crypto/node.test.js +0 -12
  1028. package/esm/utils/crypto/node.test.js.map +0 -1
  1029. package/esm/utils/crypto/password.test.d.ts +0 -1
  1030. package/esm/utils/crypto/password.test.js +0 -90
  1031. package/esm/utils/crypto/password.test.js.map +0 -1
  1032. package/esm/utils/crypto/utils.test.d.ts +0 -1
  1033. package/esm/utils/crypto/utils.test.js +0 -47
  1034. package/esm/utils/crypto/utils.test.js.map +0 -1
  1035. package/esm/utils/crypto/wasm.d.ts +0 -22
  1036. package/esm/utils/crypto/wasm.js +0 -37
  1037. package/esm/utils/crypto/wasm.js.map +0 -1
  1038. package/esm/utils/crypto/web.d.ts +0 -11
  1039. package/esm/utils/crypto/web.js +0 -36
  1040. package/esm/utils/crypto/web.js.map +0 -1
  1041. package/esm/utils/crypto/web.test.d.ts +0 -1
  1042. package/esm/utils/crypto/web.test.js +0 -15
  1043. package/esm/utils/crypto/web.test.js.map +0 -1
  1044. package/esm/utils/deque.test.d.ts +0 -1
  1045. package/esm/utils/deque.test.js +0 -126
  1046. package/esm/utils/deque.test.js.map +0 -1
  1047. package/esm/utils/function-utils.test.d.ts +0 -1
  1048. package/esm/utils/function-utils.test.js +0 -21
  1049. package/esm/utils/function-utils.test.js.map +0 -1
  1050. package/esm/utils/linked-list.test.d.ts +0 -1
  1051. package/esm/utils/linked-list.test.js +0 -34
  1052. package/esm/utils/linked-list.test.js.map +0 -1
  1053. package/esm/utils/links/bots.test.d.ts +0 -1
  1054. package/esm/utils/links/bots.test.js +0 -150
  1055. package/esm/utils/links/bots.test.js.map +0 -1
  1056. package/esm/utils/links/chat.test.d.ts +0 -1
  1057. package/esm/utils/links/chat.test.js +0 -82
  1058. package/esm/utils/links/chat.test.js.map +0 -1
  1059. package/esm/utils/links/misc.test.d.ts +0 -1
  1060. package/esm/utils/links/misc.test.js +0 -151
  1061. package/esm/utils/links/misc.test.js.map +0 -1
  1062. package/esm/utils/links/proxy.test.d.ts +0 -1
  1063. package/esm/utils/links/proxy.test.js +0 -72
  1064. package/esm/utils/links/proxy.test.js.map +0 -1
  1065. package/esm/utils/links/user.test.d.ts +0 -1
  1066. package/esm/utils/links/user.test.js +0 -61
  1067. package/esm/utils/links/user.test.js.map +0 -1
  1068. package/esm/utils/logger.test.d.ts +0 -1
  1069. package/esm/utils/logger.test.js +0 -134
  1070. package/esm/utils/logger.test.js.map +0 -1
  1071. package/esm/utils/long-utils.test.d.ts +0 -1
  1072. package/esm/utils/long-utils.test.js +0 -153
  1073. package/esm/utils/long-utils.test.js.map +0 -1
  1074. package/esm/utils/lru-map.test.d.ts +0 -1
  1075. package/esm/utils/lru-map.test.js +0 -94
  1076. package/esm/utils/lru-map.test.js.map +0 -1
  1077. package/esm/utils/lru-set.test.d.ts +0 -1
  1078. package/esm/utils/lru-set.test.js +0 -72
  1079. package/esm/utils/lru-set.test.js.map +0 -1
  1080. package/esm/utils/peer-utils.test.d.ts +0 -1
  1081. package/esm/utils/peer-utils.test.js +0 -105
  1082. package/esm/utils/peer-utils.test.js.map +0 -1
  1083. package/esm/utils/platform/crypto.d.ts +0 -1
  1084. package/esm/utils/platform/crypto.js +0 -4
  1085. package/esm/utils/platform/crypto.js.map +0 -1
  1086. package/esm/utils/platform/crypto.web.d.ts +0 -1
  1087. package/esm/utils/platform/crypto.web.js +0 -10
  1088. package/esm/utils/platform/crypto.web.js.map +0 -1
  1089. package/esm/utils/platform/error-reporting.js.map +0 -1
  1090. package/esm/utils/platform/exit-hook.d.ts +0 -1
  1091. package/esm/utils/platform/exit-hook.js +0 -41
  1092. package/esm/utils/platform/exit-hook.js.map +0 -1
  1093. package/esm/utils/platform/exit-hook.web.d.ts +0 -1
  1094. package/esm/utils/platform/exit-hook.web.js +0 -17
  1095. package/esm/utils/platform/exit-hook.web.js.map +0 -1
  1096. package/esm/utils/platform/logging.d.ts +0 -1
  1097. package/esm/utils/platform/logging.js +0 -31
  1098. package/esm/utils/platform/logging.js.map +0 -1
  1099. package/esm/utils/platform/logging.web.d.ts +0 -1
  1100. package/esm/utils/platform/logging.web.js +0 -31
  1101. package/esm/utils/platform/logging.web.js.map +0 -1
  1102. package/esm/utils/platform/transport.d.ts +0 -1
  1103. package/esm/utils/platform/transport.js +0 -4
  1104. package/esm/utils/platform/transport.js.map +0 -1
  1105. package/esm/utils/platform/transport.web.d.ts +0 -1
  1106. package/esm/utils/platform/transport.web.js +0 -12
  1107. package/esm/utils/platform/transport.web.js.map +0 -1
  1108. package/esm/utils/sorted-array.test.d.ts +0 -1
  1109. package/esm/utils/sorted-array.test.js +0 -64
  1110. package/esm/utils/sorted-array.test.js.map +0 -1
  1111. package/esm/utils/tl-json.test.d.ts +0 -1
  1112. package/esm/utils/tl-json.test.js +0 -81
  1113. package/esm/utils/tl-json.test.js.map +0 -1
  1114. package/esm/utils/type-assertions.test.d.ts +0 -1
  1115. package/esm/utils/type-assertions.test.js +0 -65
  1116. package/esm/utils/type-assertions.test.js.map +0 -1
  1117. /package/cjs/highlevel/{base.test.d.ts → methods/files/download-node-stream.d.ts} +0 -0
  1118. /package/cjs/storage/{providers/memory → memory}/driver.js +0 -0
  1119. /package/cjs/storage/{providers/memory → memory}/index.js +0 -0
  1120. /package/cjs/storage/{providers/memory → memory}/repository/auth-keys.js +0 -0
  1121. /package/cjs/storage/{providers/memory → memory}/repository/kv.js +0 -0
  1122. /package/cjs/storage/{providers/memory → memory}/repository/peers.js +0 -0
  1123. /package/cjs/storage/{providers/memory → memory}/repository/ref-messages.js +0 -0
  1124. /package/cjs/utils/{platform/error-reporting.js → error-reporting.js} +0 -0
  1125. /package/{cjs/highlevel/methods/files/_platform.d.ts → esm/highlevel/methods/files/download-node-stream.d.ts} +0 -0
  1126. /package/esm/storage/{providers/memory → memory}/driver.js +0 -0
  1127. /package/esm/storage/{providers/memory → memory}/index.js +0 -0
  1128. /package/esm/storage/{providers/memory → memory}/repository/auth-keys.js +0 -0
  1129. /package/esm/storage/{providers/memory → memory}/repository/kv.js +0 -0
  1130. /package/esm/storage/{providers/memory → memory}/repository/peers.js +0 -0
  1131. /package/esm/storage/{providers/memory → memory}/repository/ref-messages.js +0 -0
  1132. /package/esm/utils/{platform/error-reporting.js → error-reporting.js} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"network-manager.js","sourceRoot":"","sources":["../../../src/network/network-manager.ts"],"names":[],"mappings":"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","sourcesContent":["import { mtp, tl } from '@mtcute/tl'\nimport { TlReaderMap, TlWriterMap } from '@mtcute/tl-runtime'\n\nimport { StorageManager } from '../storage/storage.js'\nimport { MtArgumentError, MtcuteError, MtTimeoutError, MtUnsupportedError } from '../types/index.js'\nimport {\n ControllablePromise,\n createControllablePromise,\n DcOptions,\n ICryptoProvider,\n Logger,\n sleep,\n} from '../utils/index.js'\nimport { assertTypeIs } from '../utils/type-assertions.js'\nimport { ConfigManager } from './config-manager.js'\nimport { MultiSessionConnection } from './multi-session-connection.js'\nimport { PersistentConnectionParams } from './persistent-connection.js'\nimport { defaultReconnectionStrategy, ReconnectionStrategy } from './reconnection.js'\nimport { ServerSaltManager } from './server-salt.js'\nimport { SessionConnection, SessionConnectionParams } from './session-connection.js'\nimport { defaultTransportFactory, TransportFactory } from './transports/index.js'\n\nexport type ConnectionKind = 'main' | 'upload' | 'download' | 'downloadSmall'\n\nconst CLIENT_ERRORS = {\n [tl.RpcError.BAD_REQUEST]: 1,\n [tl.RpcError.UNAUTHORIZED]: 1,\n [tl.RpcError.FORBIDDEN]: 1,\n [tl.RpcError.NOT_FOUND]: 1,\n [tl.RpcError.FLOOD]: 1,\n [tl.RpcError.SEE_OTHER]: 1,\n [tl.RpcError.NOT_ACCEPTABLE]: 1,\n}\n\n/**\n * Params passed into {@link NetworkManager} by {@link TelegramClient}.\n * This type is intended for internal usage only.\n */\nexport interface NetworkManagerParams {\n storage: StorageManager\n crypto: ICryptoProvider\n log: Logger\n\n enableErrorReporting: boolean\n apiId: number\n initConnectionOptions?: Partial<Omit<tl.RawInitConnectionRequest, 'apiId' | 'query'>>\n transport?: TransportFactory\n reconnectionStrategy?: ReconnectionStrategy<PersistentConnectionParams>\n floodSleepThreshold: number\n maxRetryCount: number\n disableUpdates?: boolean\n testMode: boolean\n layer: number\n useIpv6: boolean\n readerMap: TlReaderMap\n writerMap: TlWriterMap\n isPremium: boolean\n emitError: (err: Error, connection?: SessionConnection) => void\n onUpdate: (upd: tl.TypeUpdates) => void\n onUsable: () => void\n}\n\nexport type ConnectionCountDelegate = (kind: ConnectionKind, dcId: number, isPremium: boolean) => number\n\nconst defaultConnectionCountDelegate: ConnectionCountDelegate = (kind, dcId, isPremium) => {\n switch (kind) {\n case 'main':\n return 1\n case 'upload':\n return isPremium || (dcId !== 2 && dcId !== 4) ? 8 : 4\n case 'download':\n return isPremium ? 8 : 2\n case 'downloadSmall':\n return 2\n }\n}\n\n/**\n * Additional params passed into {@link NetworkManager} by the user\n * that customize the behavior of the manager\n */\nexport interface NetworkManagerExtraParams {\n /**\n * Whether to use PFS (Perfect Forward Secrecy) for all connections.\n * This is disabled by default\n */\n usePfs?: boolean\n\n /**\n * Connection count for each connection kind.\n * The function should be pure to avoid unexpected behavior.\n *\n * Defaults to TDLib logic:\n * - main: handled internally, **cannot be changed here**\n * - upload: if premium or dc id is other than 2 or 4, then 8, otherwise 4\n * - download: if premium then 8, otherwise 2\n * - downloadSmall: 2\n */\n connectionCount?: ConnectionCountDelegate\n\n /**\n * Idle timeout for non-main connections, in ms\n *\n * @default 60000 (60 seconds).\n */\n inactivityTimeout?: number\n}\n\n/** Options that can be customized when making an RPC call */\nexport interface RpcCallOptions {\n /**\n * If the call results in a `FLOOD_WAIT_X` error,\n * the maximum amount of time to wait before retrying.\n *\n * If set to `0`, the call will not be retried.\n *\n * @default {@link BaseTelegramClientOptions.floodSleepThreshold}\n */\n floodSleepThreshold?: number\n\n /**\n * If the call results in an internal server error or a flood wait,\n * the maximum amount of times to retry the call.\n *\n * @default {@link BaseTelegramClientOptions.maxRetryCount}\n */\n maxRetryCount?: number\n\n /**\n * Timeout for the call, in milliseconds.\n *\n * @default Infinity\n */\n timeout?: number\n\n /**\n * **ADVANCED**\n *\n * Kind of connection to use for this call.\n *\n * @default 'main'\n */\n kind?: ConnectionKind\n\n /**\n * **ADVANCED**\n *\n * ID of the DC to use for this call\n */\n dcId?: number\n\n /**\n * **ADVANCED**\n *\n * DC connection manager to use for this call.\n * Overrides `dcId` if set.\n */\n manager?: DcConnectionManager\n\n /**\n * Abort signal for the call.\n */\n abortSignal?: AbortSignal\n\n /**\n * Whether we should not retry on -503 errors and throw {@link MtTimeoutError} immediately instead.\n *\n * Useful for methods like `messages.getBotCallbackAnswer` that reliably return\n * -503 in case the upstream bot failed to respond.\n */\n throw503?: boolean\n\n /**\n * Some requests should be processed consecutively, and not in parallel.\n * Using the same `chainId` for multiple requests will ensure that they are processed in the order\n * of calling `.call()`.\n *\n * Particularly useful for `messages.sendMessage` and alike.\n */\n chainId?: string | number\n}\n\n/**\n * Wrapper over all connection pools for a single DC.\n */\nexport class DcConnectionManager {\n private _salts = new ServerSaltManager()\n private __baseConnectionParams = (): SessionConnectionParams => ({\n crypto: this.manager.params.crypto,\n initConnection: this.manager._initConnectionParams,\n transportFactory: this.manager._transportFactory,\n dc: this._dcs.media,\n testMode: this.manager.params.testMode,\n reconnectionStrategy: this.manager._reconnectionStrategy,\n layer: this.manager.params.layer,\n disableUpdates: this.manager.params.disableUpdates,\n readerMap: this.manager.params.readerMap,\n writerMap: this.manager.params.writerMap,\n usePfs: this.manager.params.usePfs,\n isMainConnection: false,\n isMainDcConnection: this.isPrimary,\n inactivityTimeout: this.manager.params.inactivityTimeout ?? 60_000,\n enableErrorReporting: this.manager.params.enableErrorReporting,\n salts: this._salts,\n })\n\n private _log = this.manager._log.create('dc-manager')\n\n /** Main connection pool */\n main: MultiSessionConnection\n\n /** Upload connection pool */\n upload = new MultiSessionConnection(\n this.__baseConnectionParams(),\n this.manager._connectionCount('upload', this.dcId, this.manager.params.isPremium),\n this._log,\n 'UPLOAD',\n )\n\n /** Download connection pool */\n download = new MultiSessionConnection(\n this.__baseConnectionParams(),\n this.manager._connectionCount('download', this.dcId, this.manager.params.isPremium),\n this._log,\n 'DOWNLOAD',\n )\n\n /** Download connection pool (for small files) */\n downloadSmall = new MultiSessionConnection(\n this.__baseConnectionParams(),\n this.manager._connectionCount('downloadSmall', this.dcId, this.manager.params.isPremium),\n this._log,\n 'DOWNLOAD_SMALL',\n )\n\n private get _mainConnectionCount() {\n if (!this.isPrimary) return 1\n\n return this.manager.config.getNow()?.tmpSessions ?? 1\n }\n\n constructor(\n /** Network manager instance */\n readonly manager: NetworkManager,\n /** DC ID */\n readonly dcId: number,\n /** DC options to use */\n readonly _dcs: DcOptions,\n /** Whether this DC is the primary one */\n public isPrimary = false,\n ) {\n this._log.prefix = `[DC ${dcId}] `\n\n const mainParams = this.__baseConnectionParams()\n mainParams.isMainConnection = true\n mainParams.dc = _dcs.main\n\n if (isPrimary) {\n mainParams.inactivityTimeout = undefined\n }\n\n this.main = new MultiSessionConnection(mainParams, this._mainConnectionCount, this._log, 'MAIN')\n\n this._setupMulti('main')\n this._setupMulti('upload')\n this._setupMulti('download')\n this._setupMulti('downloadSmall')\n }\n\n private _setupMulti(kind: ConnectionKind): void {\n const connection = this[kind]\n\n connection.on('key-change', (idx, key: Uint8Array | null) => {\n if (kind !== 'main') {\n // main connection is responsible for authorization,\n // and keys are then sent to other connections\n this.manager._log.warn('got key-change from non-main connection, ignoring')\n\n return\n }\n\n this.manager._log.debug('key change for dc %d from connection %d', this.dcId, idx)\n\n // send key to other connections\n this.upload.setAuthKey(key)\n this.download.setAuthKey(key)\n this.downloadSmall.setAuthKey(key)\n Promise.resolve(this.manager._storage.provider.authKeys.set(this.dcId, key))\n .then(() => {\n this.upload.notifyKeyChange()\n this.download.notifyKeyChange()\n this.downloadSmall.notifyKeyChange()\n })\n .catch((e: Error) => this.manager.params.emitError(e))\n })\n connection.on('tmp-key-change', (idx: number, key: Uint8Array | null, expires: number) => {\n if (kind !== 'main') {\n this.manager._log.warn('got tmp-key-change from non-main connection, ignoring')\n\n return\n }\n\n this.manager._log.debug('temp key change for dc %d from connection %d', this.dcId, idx)\n\n // send key to other connections\n this.upload.setAuthKey(key, true)\n this.download.setAuthKey(key, true)\n this.downloadSmall.setAuthKey(key, true)\n\n Promise.resolve(this.manager._storage.provider.authKeys.setTemp(this.dcId, idx, key, expires * 1000))\n .then(() => {\n this.upload.notifyKeyChange()\n this.download.notifyKeyChange()\n this.downloadSmall.notifyKeyChange()\n })\n .catch((e: Error) => this.manager.params.emitError(e))\n })\n connection.on('future-salts', (salts: mtp.RawMt_future_salt[]) => {\n Promise.resolve(this.manager._storage.salts.store(this.dcId, salts)).catch((e: Error) =>\n this.manager.params.emitError(e),\n )\n })\n\n connection.on('auth-begin', () => {\n // we need to propagate auth-begin to all connections\n // to avoid them sending requests before auth is complete\n if (kind !== 'main') {\n this.manager._log.warn('got auth-begin from non-main connection, ignoring')\n\n return\n }\n\n // reset key on non-main connections\n // this event was already propagated to additional main connections\n this.upload.resetAuthKeys()\n this.download.resetAuthKeys()\n this.downloadSmall.resetAuthKeys()\n })\n\n connection.on('request-auth', () => {\n this.main.requestAuth()\n })\n\n // fucking awesome architecture, but whatever\n connection.on('request-keys', (promise: ControllablePromise<void>) => {\n this.loadKeys(true)\n .then(() => promise.resolve())\n .catch((e: Error) => promise.reject(e))\n })\n\n connection.on('error', (err: Error, conn: SessionConnection) => {\n this.manager.params.emitError(err, conn)\n })\n }\n\n setIsPrimary(isPrimary: boolean): void {\n if (this.isPrimary === isPrimary) return\n this.isPrimary = isPrimary\n this.main.params.isMainDcConnection = isPrimary\n\n if (isPrimary) {\n this.main.setInactivityTimeout(undefined)\n } else {\n this.main.setInactivityTimeout(this.manager.params.inactivityTimeout ?? 60_000)\n }\n }\n\n setIsPremium(isPremium: boolean): void {\n this.upload.setCount(this.manager._connectionCount('upload', this.dcId, isPremium))\n this.download.setCount(this.manager._connectionCount('download', this.dcId, isPremium))\n this.downloadSmall.setCount(this.manager._connectionCount('downloadSmall', this.dcId, isPremium))\n }\n\n async loadKeys(forcePfs = false): Promise<boolean> {\n const [permanent, salts] = await Promise.all([\n this.manager._storage.provider.authKeys.get(this.dcId),\n this.manager._storage.salts.fetch(this.dcId),\n ])\n\n this.main.setAuthKey(permanent)\n this.upload.setAuthKey(permanent)\n this.download.setAuthKey(permanent)\n this.downloadSmall.setAuthKey(permanent)\n\n if (salts) {\n this._salts.setFutureSalts(salts)\n }\n\n if (!permanent) {\n return false\n }\n\n if (this.manager.params.usePfs || forcePfs) {\n const now = Date.now()\n await Promise.all(\n this.main._sessions.map(async (_, i) => {\n const temp = await this.manager._storage.provider.authKeys.getTemp(this.dcId, i, now)\n this.main.setAuthKey(temp, true, i)\n\n if (i === 0) {\n this.upload.setAuthKey(temp, true)\n this.download.setAuthKey(temp, true)\n this.downloadSmall.setAuthKey(temp, true)\n }\n }),\n )\n }\n\n return true\n }\n\n destroy() {\n this.main.destroy()\n this.upload.destroy()\n this.download.destroy()\n this.downloadSmall.destroy()\n this._salts.destroy()\n }\n}\n\n/**\n * Class that manages all connections to Telegram servers.\n */\nexport class NetworkManager {\n readonly _log = this.params.log.create('network')\n readonly _storage = this.params.storage\n\n readonly _initConnectionParams: tl.RawInitConnectionRequest\n readonly _transportFactory: TransportFactory\n readonly _reconnectionStrategy: ReconnectionStrategy<PersistentConnectionParams>\n readonly _connectionCount: ConnectionCountDelegate\n\n protected readonly _dcConnections = new Map<number, DcConnectionManager>()\n protected _primaryDc?: DcConnectionManager\n\n private _updateHandler: (upd: tl.TypeUpdates, fromClient: boolean) => void\n\n constructor(\n readonly params: NetworkManagerParams & NetworkManagerExtraParams,\n readonly config: ConfigManager,\n ) {\n let deviceModel = 'mtcute on '\n /* eslint-disable no-restricted-globals */\n if (typeof process !== 'undefined' && typeof require !== 'undefined') {\n const os = require('os') as typeof import('os')\n deviceModel += `${os.type()} ${os.arch()} ${os.release()}`\n /* eslint-enable no-restricted-globals */\n } else if (typeof navigator !== 'undefined') {\n deviceModel += navigator.userAgent\n } else deviceModel += 'unknown'\n\n this._initConnectionParams = {\n _: 'initConnection',\n deviceModel,\n systemVersion: '1.0',\n appVersion: '%VERSION%',\n systemLangCode: 'en',\n langPack: '', // \"langPacks are for official apps only\"\n langCode: 'en',\n ...(params.initConnectionOptions ?? {}),\n apiId: params.apiId,\n // eslint-disable-next-line\n query: null as any,\n }\n\n this._transportFactory = params.transport ?? defaultTransportFactory\n this._reconnectionStrategy = params.reconnectionStrategy ?? defaultReconnectionStrategy\n this._connectionCount = params.connectionCount ?? defaultConnectionCountDelegate\n this._updateHandler = params.onUpdate\n\n this._onConfigChanged = this._onConfigChanged.bind(this)\n config.onReload(this._onConfigChanged)\n }\n\n private async _findDcOptions(dcId: number): Promise<DcOptions> {\n const main = await this.config.findOption({\n dcId,\n allowIpv6: this.params.useIpv6,\n preferIpv6: this.params.useIpv6,\n allowMedia: false,\n cdn: false,\n })\n\n const media = await this.config.findOption({\n dcId,\n allowIpv6: this.params.useIpv6,\n preferIpv6: this.params.useIpv6,\n allowMedia: true,\n preferMedia: true,\n cdn: false,\n })\n\n if (!main || !media) {\n throw new MtArgumentError(`Could not find DC ${dcId}`)\n }\n\n return { main, media }\n }\n\n private _switchPrimaryDc(dc: DcConnectionManager) {\n if (this._primaryDc && this._primaryDc !== dc) {\n this._primaryDc.setIsPrimary(false)\n }\n\n this._primaryDc = dc\n dc.setIsPrimary(true)\n\n dc.main.on('usable', () => {\n this.params.onUsable()\n })\n dc.main.on('update', (update: tl.TypeUpdates) => {\n this._updateHandler(update, false)\n })\n\n return dc.loadKeys().then(() => dc.main.ensureConnected())\n }\n\n private _dcCreationPromise = new Map<number, Promise<void>>()\n async _getOtherDc(dcId: number): Promise<DcConnectionManager> {\n if (!this._dcConnections.has(dcId)) {\n if (this._dcCreationPromise.has(dcId)) {\n this._log.debug('waiting for DC %d to be created', dcId)\n await this._dcCreationPromise.get(dcId)\n\n return this._dcConnections.get(dcId)!\n }\n\n const promise = createControllablePromise<void>()\n this._dcCreationPromise.set(dcId, promise)\n\n this._log.debug('creating new DC %d', dcId)\n\n try {\n const dcOptions = await this._findDcOptions(dcId)\n\n const dc = new DcConnectionManager(this, dcId, dcOptions)\n\n if (!(await dc.loadKeys())) {\n dc.main.requestAuth()\n }\n\n this._dcConnections.set(dcId, dc)\n promise.resolve()\n } catch (e) {\n promise.reject(e)\n }\n }\n\n return this._dcConnections.get(dcId)!\n }\n\n /**\n * Perform initial connection to the default DC\n *\n * @param defaultDcs Default DCs to connect to\n */\n async connect(defaultDcs: DcOptions): Promise<void> {\n if (defaultDcs.main.id !== defaultDcs.media.id) {\n throw new MtArgumentError('Default DCs must be the same')\n }\n\n if (this._dcConnections.has(defaultDcs.main.id)) {\n // shouldn't happen\n throw new MtArgumentError('DC manager already exists')\n }\n\n const dc = new DcConnectionManager(this, defaultDcs.main.id, defaultDcs, true)\n this._dcConnections.set(defaultDcs.main.id, dc)\n await this._switchPrimaryDc(dc)\n }\n\n private _pendingExports: Record<number, Promise<void>> = {}\n private async _exportAuthTo(manager: DcConnectionManager): Promise<void> {\n if (manager.dcId in this._pendingExports) {\n this._log.debug('waiting for auth export to dc %d', manager.dcId)\n\n return this._pendingExports[manager.dcId]\n }\n\n this._log.debug('exporting auth to dc %d', manager.dcId)\n const promise = createControllablePromise<void>()\n this._pendingExports[manager.dcId] = promise\n\n try {\n const auth = await this.call({\n _: 'auth.exportAuthorization',\n dcId: manager.dcId,\n })\n\n const res = await this.call(\n {\n _: 'auth.importAuthorization',\n id: auth.id,\n bytes: auth.bytes,\n },\n { manager },\n )\n\n assertTypeIs('auth.importAuthorization', res, 'auth.authorization')\n\n promise.resolve()\n delete this._pendingExports[manager.dcId]\n } catch (e) {\n this._log.warn('failed to export auth to dc %d: %s', manager.dcId, e)\n promise.reject(e)\n throw e\n }\n }\n\n setIsPremium(isPremium: boolean): void {\n this._log.debug('setting isPremium to %s', isPremium)\n this.params.isPremium = isPremium\n\n for (const dc of this._dcConnections.values()) {\n dc.setIsPremium(isPremium)\n }\n }\n\n notifyLoggedIn(auth: tl.auth.TypeAuthorization | tl.RawUser): tl.RawUser {\n if (auth._ === 'auth.authorizationSignUpRequired') {\n throw new MtUnsupportedError(\n 'Signup is no longer supported by Telegram for non-official clients. Please use your mobile device to sign up.',\n )\n }\n\n let user: tl.RawUser\n\n if (auth._ === 'auth.authorization') {\n if (auth.tmpSessions) {\n this._primaryDc?.main.setCount(auth.tmpSessions)\n }\n\n user = auth.user as tl.RawUser\n } else {\n if (auth.bot) {\n // bots may receive tmpSessions, which we should respect\n this.config.update(true).catch((e: Error) => this.params.emitError(e))\n }\n\n user = auth\n }\n\n this.setIsPremium(user.premium!)\n\n // telegram ignores invokeWithoutUpdates for auth methods\n if (auth._ === 'auth.authorization' && this.params.disableUpdates) {\n this.resetSessions()\n }\n\n return user\n }\n\n notifyLoggedOut(): void {\n this.setIsPremium(false)\n this.resetSessions()\n }\n\n resetSessions(): void {\n const dc = this._primaryDc\n if (!dc) return\n\n dc.main.resetSessions()\n dc.upload.resetSessions()\n dc.download.resetSessions()\n dc.downloadSmall.resetSessions()\n }\n\n private _onConfigChanged(config: tl.RawConfig): void {\n if (config.tmpSessions) {\n this._primaryDc?.main.setCount(config.tmpSessions)\n }\n }\n\n async changePrimaryDc(newDc: number): Promise<void> {\n if (newDc === this._primaryDc?.dcId) return\n\n const options = await this._findDcOptions(newDc)\n\n if (!this._dcConnections.has(newDc)) {\n this._dcConnections.set(newDc, new DcConnectionManager(this, newDc, options, true))\n }\n\n await this._storage.dcs.store(options)\n\n await this._switchPrimaryDc(this._dcConnections.get(newDc)!)\n }\n\n private _floodWaitedRequests = new Map<string, number>()\n async call<T extends tl.RpcMethod>(\n message: T,\n params?: RpcCallOptions,\n stack?: string,\n ): Promise<tl.RpcCallReturn[T['_']]> {\n if (!this._primaryDc) {\n throw new MtcuteError('Not connected to any DC')\n }\n\n const floodSleepThreshold = params?.floodSleepThreshold ?? this.params.floodSleepThreshold\n const maxRetryCount = params?.maxRetryCount ?? this.params.maxRetryCount\n const throw503 = params?.throw503 ?? false\n\n // do not send requests that are in flood wait\n if (this._floodWaitedRequests.has(message._)) {\n const delta = this._floodWaitedRequests.get(message._)! - Date.now()\n\n if (delta <= 3000) {\n // flood waits below 3 seconds are \"ignored\"\n this._floodWaitedRequests.delete(message._)\n } else if (delta <= this.params.floodSleepThreshold) {\n await sleep(delta)\n this._floodWaitedRequests.delete(message._)\n } else {\n const err = tl.RpcError.create(tl.RpcError.FLOOD, 'FLOOD_WAIT_%d')\n err.seconds = Math.ceil(delta / 1000)\n throw err\n }\n }\n\n let lastError: Error | null = null\n\n const kind = params?.kind ?? 'main'\n let manager: DcConnectionManager\n\n if (params?.manager) {\n manager = params.manager\n } else if (params?.dcId && params.dcId !== this._primaryDc.dcId) {\n manager = await this._getOtherDc(params.dcId)\n } else {\n manager = this._primaryDc\n }\n\n let multi = manager[kind]\n\n for (let i = 0; i < maxRetryCount; i++) {\n try {\n const res = await multi.sendRpc(message, stack, params?.timeout, params?.abortSignal, params?.chainId)\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return res\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } catch (e: any) {\n lastError = e as Error\n\n if (!tl.RpcError.is(e)) {\n throw e\n }\n\n if (!(e.code in CLIENT_ERRORS)) {\n if (throw503 && e.code === -503) {\n throw new MtTimeoutError()\n }\n\n this._log.warn(\n 'Telegram is having internal issues: %d:%s (%s), retrying',\n e.code,\n e.text,\n e.message,\n )\n\n if (e.text === 'WORKER_BUSY_TOO_LONG_RETRY') {\n // according to tdlib, \"it is dangerous to resend query without timeout, so use 1\"\n await sleep(1000)\n }\n continue\n }\n\n if (e.is('FLOOD_WAIT_%d') || e.is('SLOWMODE_WAIT_%d') || e.is('FLOOD_TEST_PHONE_WAIT_%d')) {\n if (e.text !== 'SLOWMODE_WAIT_%d') {\n // SLOW_MODE_WAIT is chat-specific, not request-specific\n this._floodWaitedRequests.set(message._, Date.now() + e.seconds * 1000)\n }\n\n // In test servers, FLOOD_WAIT_0 has been observed, and sleeping for\n // such a short amount will cause retries very fast leading to issues\n if (e.seconds === 0) {\n e.seconds = 1\n }\n\n if (e.seconds <= floodSleepThreshold) {\n this._log.info('Flood wait for %d seconds', e.seconds)\n await sleep(e.seconds * 1000)\n continue\n }\n }\n\n if (manager === this._primaryDc) {\n if (e.is('PHONE_MIGRATE_%d') || e.is('NETWORK_MIGRATE_%d') || e.is('USER_MIGRATE_%d')) {\n this._log.info('Migrate error, new dc = %d', e.newDc)\n\n await this.changePrimaryDc(e.newDc)\n manager = this._primaryDc!\n multi = manager[kind]\n\n continue\n }\n } else if (e.is('AUTH_KEY_UNREGISTERED')) {\n // we can try re-exporting auth from the primary connection\n this._log.warn('exported auth key error, trying re-exporting..')\n\n await this._exportAuthTo(manager)\n continue\n }\n\n throw e\n }\n }\n\n throw lastError!\n }\n\n changeTransport(factory: TransportFactory): void {\n for (const dc of this._dcConnections.values()) {\n dc.main.changeTransport(factory)\n dc.upload.changeTransport(factory)\n dc.download.changeTransport(factory)\n dc.downloadSmall.changeTransport(factory)\n }\n }\n\n getPoolSize(kind: ConnectionKind, dcId?: number) {\n const dc = dcId ? this._dcConnections.get(dcId) : this._primaryDc\n\n if (!dc) {\n if (!this._primaryDc) {\n throw new MtcuteError('Not connected to any DC')\n }\n\n // guess based on the provided delegate. it is most likely correct,\n // but we should give actual values if possible\n return this._connectionCount(kind, dcId ?? this._primaryDc.dcId, this.params.isPremium)\n }\n\n return dc[kind].getPoolSize()\n }\n\n getPrimaryDcId() {\n if (!this._primaryDc) throw new MtcuteError('Not connected to any DC')\n\n return this._primaryDc.dcId\n }\n\n destroy(): void {\n for (const dc of this._dcConnections.values()) {\n dc.destroy()\n }\n this.config.offReload(this._onConfigChanged)\n }\n}\n"]}
1
+ {"version":3,"file":"network-manager.js","sourceRoot":"","sources":["../../../src/network/network-manager.ts"],"names":[],"mappings":"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","sourcesContent":["import { mtp, tl } from '@mtcute/tl'\nimport { TlReaderMap, TlWriterMap } from '@mtcute/tl-runtime'\n\nimport { getPlatform } from '../platform.js'\nimport { StorageManager } from '../storage/storage.js'\nimport { MtArgumentError, MtcuteError, MtTimeoutError, MtUnsupportedError } from '../types/index.js'\nimport {\n ControllablePromise,\n createControllablePromise,\n DcOptions,\n ICryptoProvider,\n Logger,\n sleep,\n} from '../utils/index.js'\nimport { assertTypeIs } from '../utils/type-assertions.js'\nimport { ConfigManager } from './config-manager.js'\nimport { MultiSessionConnection } from './multi-session-connection.js'\nimport { PersistentConnectionParams } from './persistent-connection.js'\nimport { defaultReconnectionStrategy, ReconnectionStrategy } from './reconnection.js'\nimport { ServerSaltManager } from './server-salt.js'\nimport { SessionConnection, SessionConnectionParams } from './session-connection.js'\nimport { TransportFactory } from './transports/index.js'\n\nexport type ConnectionKind = 'main' | 'upload' | 'download' | 'downloadSmall'\n\nconst CLIENT_ERRORS = {\n [tl.RpcError.BAD_REQUEST]: 1,\n [tl.RpcError.UNAUTHORIZED]: 1,\n [tl.RpcError.FORBIDDEN]: 1,\n [tl.RpcError.NOT_FOUND]: 1,\n [tl.RpcError.FLOOD]: 1,\n [tl.RpcError.SEE_OTHER]: 1,\n [tl.RpcError.NOT_ACCEPTABLE]: 1,\n}\n\n/**\n * Params passed into {@link NetworkManager} by {@link TelegramClient}.\n * This type is intended for internal usage only.\n */\nexport interface NetworkManagerParams {\n storage: StorageManager\n crypto: ICryptoProvider\n log: Logger\n\n enableErrorReporting: boolean\n apiId: number\n initConnectionOptions?: Partial<Omit<tl.RawInitConnectionRequest, 'apiId' | 'query'>>\n transport: TransportFactory\n reconnectionStrategy?: ReconnectionStrategy<PersistentConnectionParams>\n floodSleepThreshold: number\n maxRetryCount: number\n disableUpdates?: boolean\n testMode: boolean\n layer: number\n useIpv6: boolean\n readerMap: TlReaderMap\n writerMap: TlWriterMap\n isPremium: boolean\n emitError: (err: Error, connection?: SessionConnection) => void\n onUpdate: (upd: tl.TypeUpdates) => void\n onUsable: () => void\n onConnecting: () => void\n onNetworkChanged: (connected: boolean) => void\n}\n\nexport type ConnectionCountDelegate = (kind: ConnectionKind, dcId: number, isPremium: boolean) => number\n\nconst defaultConnectionCountDelegate: ConnectionCountDelegate = (kind, dcId, isPremium) => {\n switch (kind) {\n case 'main':\n return 1\n case 'upload':\n return isPremium || (dcId !== 2 && dcId !== 4) ? 8 : 4\n case 'download':\n return isPremium ? 8 : 2\n case 'downloadSmall':\n return 2\n }\n}\n\n/**\n * Additional params passed into {@link NetworkManager} by the user\n * that customize the behavior of the manager\n */\nexport interface NetworkManagerExtraParams {\n /**\n * Whether to use PFS (Perfect Forward Secrecy) for all connections.\n * This is disabled by default\n */\n usePfs?: boolean\n\n /**\n * Connection count for each connection kind.\n * The function should be pure to avoid unexpected behavior.\n *\n * Defaults to TDLib logic:\n * - main: handled internally, **cannot be changed here**\n * - upload: if premium or dc id is other than 2 or 4, then 8, otherwise 4\n * - download: if premium then 8, otherwise 2\n * - downloadSmall: 2\n */\n connectionCount?: ConnectionCountDelegate\n\n /**\n * Idle timeout for non-main connections, in ms\n *\n * @default 60000 (60 seconds).\n */\n inactivityTimeout?: number\n}\n\n/** Options that can be customized when making an RPC call */\nexport interface RpcCallOptions {\n /**\n * If the call results in a `FLOOD_WAIT_X` error,\n * the maximum amount of time to wait before retrying.\n *\n * If set to `0`, the call will not be retried.\n *\n * @default {@link BaseTelegramClientOptions.floodSleepThreshold}\n */\n floodSleepThreshold?: number\n\n /**\n * If the call results in an internal server error or a flood wait,\n * the maximum amount of times to retry the call.\n *\n * @default {@link BaseTelegramClientOptions.maxRetryCount}\n */\n maxRetryCount?: number\n\n /**\n * Timeout for the call, in milliseconds.\n *\n * @default Infinity\n */\n timeout?: number\n\n /**\n * **ADVANCED**\n *\n * Kind of connection to use for this call.\n *\n * @default 'main'\n */\n kind?: ConnectionKind\n\n /**\n * **ADVANCED**\n *\n * ID of the DC to use for this call\n */\n dcId?: number\n\n /**\n * **ADVANCED**\n *\n * DC connection manager to use for this call.\n * Overrides `dcId` if set.\n */\n manager?: DcConnectionManager\n\n /**\n * Abort signal for the call.\n */\n abortSignal?: AbortSignal\n\n /**\n * Whether we should not retry on -503 errors and throw {@link MtTimeoutError} immediately instead.\n *\n * Useful for methods like `messages.getBotCallbackAnswer` that reliably return\n * -503 in case the upstream bot failed to respond.\n */\n throw503?: boolean\n\n /**\n * Some requests should be processed consecutively, and not in parallel.\n * Using the same `chainId` for multiple requests will ensure that they are processed in the order\n * of calling `.call()`.\n *\n * Particularly useful for `messages.sendMessage` and alike.\n */\n chainId?: string | number\n}\n\n/**\n * Wrapper over all connection pools for a single DC.\n */\nexport class DcConnectionManager {\n private _salts = new ServerSaltManager()\n private __baseConnectionParams = (): SessionConnectionParams => ({\n crypto: this.manager.params.crypto,\n initConnection: this.manager._initConnectionParams,\n transportFactory: this.manager._transportFactory,\n dc: this._dcs.media,\n testMode: this.manager.params.testMode,\n reconnectionStrategy: this.manager._reconnectionStrategy,\n layer: this.manager.params.layer,\n disableUpdates: this.manager.params.disableUpdates,\n readerMap: this.manager.params.readerMap,\n writerMap: this.manager.params.writerMap,\n usePfs: this.manager.params.usePfs,\n isMainConnection: false,\n isMainDcConnection: this.isPrimary,\n inactivityTimeout: this.manager.params.inactivityTimeout ?? 60_000,\n enableErrorReporting: this.manager.params.enableErrorReporting,\n salts: this._salts,\n })\n\n private _log = this.manager._log.create('dc-manager')\n\n /** Main connection pool */\n main: MultiSessionConnection\n\n /** Upload connection pool */\n upload = new MultiSessionConnection(\n this.__baseConnectionParams(),\n this.manager._connectionCount('upload', this.dcId, this.manager.params.isPremium),\n this._log,\n 'UPLOAD',\n )\n\n /** Download connection pool */\n download = new MultiSessionConnection(\n this.__baseConnectionParams(),\n this.manager._connectionCount('download', this.dcId, this.manager.params.isPremium),\n this._log,\n 'DOWNLOAD',\n )\n\n /** Download connection pool (for small files) */\n downloadSmall = new MultiSessionConnection(\n this.__baseConnectionParams(),\n this.manager._connectionCount('downloadSmall', this.dcId, this.manager.params.isPremium),\n this._log,\n 'DOWNLOAD_SMALL',\n )\n\n private get _mainConnectionCount() {\n if (!this.isPrimary) return 1\n\n return this.manager.config.getNow()?.tmpSessions ?? 1\n }\n\n constructor(\n /** Network manager instance */\n readonly manager: NetworkManager,\n /** DC ID */\n readonly dcId: number,\n /** DC options to use */\n readonly _dcs: DcOptions,\n /** Whether this DC is the primary one */\n public isPrimary = false,\n ) {\n this._log.prefix = `[DC ${dcId}] `\n\n const mainParams = this.__baseConnectionParams()\n mainParams.isMainConnection = true\n mainParams.dc = _dcs.main\n\n if (isPrimary) {\n mainParams.inactivityTimeout = undefined\n }\n\n this.main = new MultiSessionConnection(mainParams, this._mainConnectionCount, this._log, 'MAIN')\n\n this._setupMulti('main')\n this._setupMulti('upload')\n this._setupMulti('download')\n this._setupMulti('downloadSmall')\n }\n\n private _setupMulti(kind: ConnectionKind): void {\n const connection = this[kind]\n\n connection.on('key-change', (idx, key: Uint8Array | null) => {\n if (kind !== 'main') {\n // main connection is responsible for authorization,\n // and keys are then sent to other connections\n this.manager._log.warn('got key-change from non-main connection, ignoring')\n\n return\n }\n\n this.manager._log.debug('key change for dc %d from connection %d', this.dcId, idx)\n\n // send key to other connections\n this.upload.setAuthKey(key)\n this.download.setAuthKey(key)\n this.downloadSmall.setAuthKey(key)\n Promise.resolve(this.manager._storage.provider.authKeys.set(this.dcId, key))\n .then(() => {\n this.upload.notifyKeyChange()\n this.download.notifyKeyChange()\n this.downloadSmall.notifyKeyChange()\n })\n .catch((e: Error) => this.manager.params.emitError(e))\n })\n connection.on('tmp-key-change', (idx: number, key: Uint8Array | null, expires: number) => {\n if (kind !== 'main') {\n this.manager._log.warn('got tmp-key-change from non-main connection, ignoring')\n\n return\n }\n\n this.manager._log.debug('temp key change for dc %d from connection %d', this.dcId, idx)\n\n // send key to other connections\n this.upload.setAuthKey(key, true)\n this.download.setAuthKey(key, true)\n this.downloadSmall.setAuthKey(key, true)\n\n Promise.resolve(this.manager._storage.provider.authKeys.setTemp(this.dcId, idx, key, expires * 1000))\n .then(() => {\n this.upload.notifyKeyChange()\n this.download.notifyKeyChange()\n this.downloadSmall.notifyKeyChange()\n })\n .catch((e: Error) => this.manager.params.emitError(e))\n })\n connection.on('future-salts', (salts: mtp.RawMt_future_salt[]) => {\n Promise.resolve(this.manager._storage.salts.store(this.dcId, salts)).catch((e: Error) =>\n this.manager.params.emitError(e),\n )\n })\n\n connection.on('auth-begin', () => {\n // we need to propagate auth-begin to all connections\n // to avoid them sending requests before auth is complete\n if (kind !== 'main') {\n this.manager._log.warn('got auth-begin from non-main connection, ignoring')\n\n return\n }\n\n // reset key on non-main connections\n // this event was already propagated to additional main connections\n this.upload.resetAuthKeys()\n this.download.resetAuthKeys()\n this.downloadSmall.resetAuthKeys()\n })\n\n connection.on('request-auth', () => {\n this.main.requestAuth()\n })\n\n // fucking awesome architecture, but whatever\n connection.on('request-keys', (promise: ControllablePromise<void>) => {\n this.loadKeys(true)\n .then(() => promise.resolve())\n .catch((e: Error) => promise.reject(e))\n })\n\n connection.on('error', (err: Error, conn: SessionConnection) => {\n this.manager.params.emitError(err, conn)\n })\n }\n\n setIsPrimary(isPrimary: boolean): void {\n if (this.isPrimary === isPrimary) return\n this.isPrimary = isPrimary\n this.main.params.isMainDcConnection = isPrimary\n\n if (isPrimary) {\n this.main.setInactivityTimeout(undefined)\n } else {\n this.main.setInactivityTimeout(this.manager.params.inactivityTimeout ?? 60_000)\n }\n }\n\n setIsPremium(isPremium: boolean): void {\n this.upload.setCount(this.manager._connectionCount('upload', this.dcId, isPremium))\n this.download.setCount(this.manager._connectionCount('download', this.dcId, isPremium))\n this.downloadSmall.setCount(this.manager._connectionCount('downloadSmall', this.dcId, isPremium))\n }\n\n async loadKeys(forcePfs = false): Promise<boolean> {\n const [permanent, salts] = await Promise.all([\n this.manager._storage.provider.authKeys.get(this.dcId),\n this.manager._storage.salts.fetch(this.dcId),\n ])\n\n this.main.setAuthKey(permanent)\n this.upload.setAuthKey(permanent)\n this.download.setAuthKey(permanent)\n this.downloadSmall.setAuthKey(permanent)\n\n if (salts) {\n this._salts.setFutureSalts(salts)\n }\n\n if (!permanent) {\n return false\n }\n\n if (this.manager.params.usePfs || forcePfs) {\n const now = Date.now()\n await Promise.all(\n this.main._sessions.map(async (_, i) => {\n const temp = await this.manager._storage.provider.authKeys.getTemp(this.dcId, i, now)\n this.main.setAuthKey(temp, true, i)\n\n if (i === 0) {\n this.upload.setAuthKey(temp, true)\n this.download.setAuthKey(temp, true)\n this.downloadSmall.setAuthKey(temp, true)\n }\n }),\n )\n }\n\n return true\n }\n\n destroy() {\n this.main.destroy()\n this.upload.destroy()\n this.download.destroy()\n this.downloadSmall.destroy()\n this._salts.destroy()\n }\n}\n\n/**\n * Class that manages all connections to Telegram servers.\n */\nexport class NetworkManager {\n readonly _log = this.params.log.create('network')\n readonly _storage = this.params.storage\n\n readonly _initConnectionParams: tl.RawInitConnectionRequest\n readonly _transportFactory: TransportFactory\n readonly _reconnectionStrategy: ReconnectionStrategy<PersistentConnectionParams>\n readonly _connectionCount: ConnectionCountDelegate\n\n protected readonly _dcConnections = new Map<number, DcConnectionManager>()\n protected _primaryDc?: DcConnectionManager\n\n private _updateHandler: (upd: tl.TypeUpdates, fromClient: boolean) => void\n\n constructor(\n readonly params: NetworkManagerParams & NetworkManagerExtraParams,\n readonly config: ConfigManager,\n ) {\n const deviceModel = `mtcute on ${getPlatform().getDeviceModel()}`\n\n this._initConnectionParams = {\n _: 'initConnection',\n deviceModel,\n systemVersion: '1.0',\n appVersion: '%VERSION%',\n systemLangCode: 'en',\n langPack: '', // \"langPacks are for official apps only\"\n langCode: 'en',\n ...(params.initConnectionOptions ?? {}),\n apiId: params.apiId,\n // eslint-disable-next-line\n query: null as any,\n }\n\n this._transportFactory = params.transport\n this._reconnectionStrategy = params.reconnectionStrategy ?? defaultReconnectionStrategy\n this._connectionCount = params.connectionCount ?? defaultConnectionCountDelegate\n this._updateHandler = params.onUpdate\n\n this._onConfigChanged = this._onConfigChanged.bind(this)\n config.onReload(this._onConfigChanged)\n }\n\n private async _findDcOptions(dcId: number): Promise<DcOptions> {\n const main = await this.config.findOption({\n dcId,\n allowIpv6: this.params.useIpv6,\n preferIpv6: this.params.useIpv6,\n allowMedia: false,\n cdn: false,\n })\n\n const media = await this.config.findOption({\n dcId,\n allowIpv6: this.params.useIpv6,\n preferIpv6: this.params.useIpv6,\n allowMedia: true,\n preferMedia: true,\n cdn: false,\n })\n\n if (!main || !media) {\n throw new MtArgumentError(`Could not find DC ${dcId}`)\n }\n\n return { main, media }\n }\n\n private _resetOnNetworkChange?: () => void\n\n private _switchPrimaryDc(dc: DcConnectionManager) {\n if (this._primaryDc && this._primaryDc !== dc) {\n this._primaryDc.setIsPrimary(false)\n }\n\n this._primaryDc = dc\n dc.setIsPrimary(true)\n\n this.params.onConnecting()\n\n dc.main.on('usable', () => {\n if (dc !== this._primaryDc) return\n this.params.onUsable()\n })\n dc.main.on('wait', () => {\n if (dc !== this._primaryDc) return\n this.params.onConnecting()\n })\n dc.main.on('update', (update: tl.TypeUpdates) => {\n this._updateHandler(update, false)\n })\n\n return dc.loadKeys().then(() => dc.main.ensureConnected())\n }\n\n private _dcCreationPromise = new Map<number, Promise<void>>()\n async _getOtherDc(dcId: number): Promise<DcConnectionManager> {\n if (!this._dcConnections.has(dcId)) {\n if (this._dcCreationPromise.has(dcId)) {\n this._log.debug('waiting for DC %d to be created', dcId)\n await this._dcCreationPromise.get(dcId)\n\n return this._dcConnections.get(dcId)!\n }\n\n const promise = createControllablePromise<void>()\n this._dcCreationPromise.set(dcId, promise)\n\n this._log.debug('creating new DC %d', dcId)\n\n try {\n const dcOptions = await this._findDcOptions(dcId)\n\n const dc = new DcConnectionManager(this, dcId, dcOptions)\n\n if (!(await dc.loadKeys())) {\n dc.main.requestAuth()\n }\n\n this._dcConnections.set(dcId, dc)\n promise.resolve()\n } catch (e) {\n promise.reject(e)\n }\n }\n\n return this._dcConnections.get(dcId)!\n }\n\n /**\n * Perform initial connection to the default DC\n *\n * @param defaultDcs Default DCs to connect to\n */\n async connect(defaultDcs: DcOptions): Promise<void> {\n if (defaultDcs.main.id !== defaultDcs.media.id) {\n throw new MtArgumentError('Default DCs must be the same')\n }\n\n if (this._dcConnections.has(defaultDcs.main.id)) {\n // shouldn't happen\n throw new MtArgumentError('DC manager already exists')\n }\n\n this._resetOnNetworkChange = getPlatform().onNetworkChanged?.(this.notifyNetworkChanged.bind(this))\n\n const dc = new DcConnectionManager(this, defaultDcs.main.id, defaultDcs, true)\n this._dcConnections.set(defaultDcs.main.id, dc)\n await this._switchPrimaryDc(dc)\n }\n\n private _pendingExports: Record<number, Promise<void>> = {}\n private async _exportAuthTo(manager: DcConnectionManager): Promise<void> {\n if (manager.dcId in this._pendingExports) {\n this._log.debug('waiting for auth export to dc %d', manager.dcId)\n\n return this._pendingExports[manager.dcId]\n }\n\n this._log.debug('exporting auth to dc %d', manager.dcId)\n const promise = createControllablePromise<void>()\n this._pendingExports[manager.dcId] = promise\n\n try {\n const auth = await this.call({\n _: 'auth.exportAuthorization',\n dcId: manager.dcId,\n })\n\n const res = await this.call(\n {\n _: 'auth.importAuthorization',\n id: auth.id,\n bytes: auth.bytes,\n },\n { manager },\n )\n\n assertTypeIs('auth.importAuthorization', res, 'auth.authorization')\n\n promise.resolve()\n delete this._pendingExports[manager.dcId]\n } catch (e) {\n this._log.warn('failed to export auth to dc %d: %s', manager.dcId, e)\n promise.reject(e)\n throw e\n }\n }\n\n setIsPremium(isPremium: boolean): void {\n this._log.debug('setting isPremium to %s', isPremium)\n this.params.isPremium = isPremium\n\n for (const dc of this._dcConnections.values()) {\n dc.setIsPremium(isPremium)\n }\n }\n\n notifyLoggedIn(auth: tl.auth.TypeAuthorization | tl.RawUser): tl.RawUser {\n if (auth._ === 'auth.authorizationSignUpRequired') {\n throw new MtUnsupportedError(\n 'Signup is no longer supported by Telegram for non-official clients. Please use your mobile device to sign up.',\n )\n }\n\n let user: tl.RawUser\n\n if (auth._ === 'auth.authorization') {\n if (auth.tmpSessions) {\n this._primaryDc?.main.setCount(auth.tmpSessions)\n }\n\n user = auth.user as tl.RawUser\n } else {\n if (auth.bot) {\n // bots may receive tmpSessions, which we should respect\n this.config.update(true).catch((e: Error) => this.params.emitError(e))\n }\n\n user = auth\n }\n\n this.setIsPremium(user.premium!)\n\n // telegram ignores invokeWithoutUpdates for auth methods\n if (auth._ === 'auth.authorization' && this.params.disableUpdates) {\n this.resetSessions()\n }\n\n return user\n }\n\n notifyLoggedOut(): void {\n this.setIsPremium(false)\n this.resetSessions()\n }\n\n notifyNetworkChanged(connected: boolean): void {\n this._log.debug('network changed: %s', connected ? 'connected' : 'disconnected')\n this.params.onNetworkChanged(connected)\n\n for (const dc of this._dcConnections.values()) {\n dc.main.notifyNetworkChanged(connected)\n dc.upload.notifyNetworkChanged(connected)\n dc.download.notifyNetworkChanged(connected)\n dc.downloadSmall.notifyNetworkChanged(connected)\n }\n }\n\n resetSessions(): void {\n const dc = this._primaryDc\n if (!dc) return\n\n dc.main.resetSessions()\n dc.upload.resetSessions()\n dc.download.resetSessions()\n dc.downloadSmall.resetSessions()\n }\n\n private _onConfigChanged(config: tl.RawConfig): void {\n if (config.tmpSessions) {\n this._primaryDc?.main.setCount(config.tmpSessions)\n }\n }\n\n async changePrimaryDc(newDc: number): Promise<void> {\n if (newDc === this._primaryDc?.dcId) return\n\n const options = await this._findDcOptions(newDc)\n\n if (!this._dcConnections.has(newDc)) {\n this._dcConnections.set(newDc, new DcConnectionManager(this, newDc, options, true))\n }\n\n await this._storage.dcs.store(options)\n\n await this._switchPrimaryDc(this._dcConnections.get(newDc)!)\n }\n\n private _floodWaitedRequests = new Map<string, number>()\n async call<T extends tl.RpcMethod>(\n message: T,\n params?: RpcCallOptions,\n stack?: string,\n ): Promise<tl.RpcCallReturn[T['_']]> {\n if (!this._primaryDc) {\n throw new MtcuteError('Not connected to any DC')\n }\n\n const floodSleepThreshold = params?.floodSleepThreshold ?? this.params.floodSleepThreshold\n const maxRetryCount = params?.maxRetryCount ?? this.params.maxRetryCount\n const throw503 = params?.throw503 ?? false\n\n // do not send requests that are in flood wait\n if (this._floodWaitedRequests.has(message._)) {\n const delta = this._floodWaitedRequests.get(message._)! - Date.now()\n\n if (delta <= 3000) {\n // flood waits below 3 seconds are \"ignored\"\n this._floodWaitedRequests.delete(message._)\n } else if (delta <= this.params.floodSleepThreshold) {\n await sleep(delta)\n this._floodWaitedRequests.delete(message._)\n } else {\n const err = tl.RpcError.create(tl.RpcError.FLOOD, 'FLOOD_WAIT_%d')\n err.seconds = Math.ceil(delta / 1000)\n throw err\n }\n }\n\n let lastError: Error | null = null\n\n const kind = params?.kind ?? 'main'\n let manager: DcConnectionManager\n\n if (params?.manager) {\n manager = params.manager\n } else if (params?.dcId && params.dcId !== this._primaryDc.dcId) {\n manager = await this._getOtherDc(params.dcId)\n } else {\n manager = this._primaryDc\n }\n\n let multi = manager[kind]\n\n for (let i = 0; i < maxRetryCount; i++) {\n try {\n const res = await multi.sendRpc(message, stack, params?.timeout, params?.abortSignal, params?.chainId)\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return res\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } catch (e: any) {\n lastError = e as Error\n\n if (!tl.RpcError.is(e)) {\n throw e\n }\n\n if (!(e.code in CLIENT_ERRORS)) {\n if (throw503 && e.code === -503) {\n throw new MtTimeoutError()\n }\n\n this._log.warn(\n 'Telegram is having internal issues: %d:%s (%s), retrying',\n e.code,\n e.text,\n e.message,\n )\n\n if (e.text === 'WORKER_BUSY_TOO_LONG_RETRY') {\n // according to tdlib, \"it is dangerous to resend query without timeout, so use 1\"\n await sleep(1000)\n }\n continue\n }\n\n if (e.is('FLOOD_WAIT_%d') || e.is('SLOWMODE_WAIT_%d') || e.is('FLOOD_TEST_PHONE_WAIT_%d')) {\n if (e.text !== 'SLOWMODE_WAIT_%d') {\n // SLOW_MODE_WAIT is chat-specific, not request-specific\n this._floodWaitedRequests.set(message._, Date.now() + e.seconds * 1000)\n }\n\n // In test servers, FLOOD_WAIT_0 has been observed, and sleeping for\n // such a short amount will cause retries very fast leading to issues\n if (e.seconds === 0) {\n e.seconds = 1\n }\n\n if (e.seconds <= floodSleepThreshold) {\n this._log.info('Flood wait for %d seconds', e.seconds)\n await sleep(e.seconds * 1000)\n continue\n }\n }\n\n if (manager === this._primaryDc) {\n if (e.is('PHONE_MIGRATE_%d') || e.is('NETWORK_MIGRATE_%d') || e.is('USER_MIGRATE_%d')) {\n this._log.info('Migrate error, new dc = %d', e.newDc)\n\n await this.changePrimaryDc(e.newDc)\n manager = this._primaryDc!\n multi = manager[kind]\n\n continue\n }\n } else if (e.is('AUTH_KEY_UNREGISTERED')) {\n // we can try re-exporting auth from the primary connection\n this._log.warn('exported auth key error, trying re-exporting..')\n\n await this._exportAuthTo(manager)\n continue\n }\n\n throw e\n }\n }\n\n throw lastError!\n }\n\n changeTransport(factory: TransportFactory): void {\n for (const dc of this._dcConnections.values()) {\n dc.main.changeTransport(factory)\n dc.upload.changeTransport(factory)\n dc.download.changeTransport(factory)\n dc.downloadSmall.changeTransport(factory)\n }\n }\n\n getPoolSize(kind: ConnectionKind, dcId?: number) {\n const dc = dcId ? this._dcConnections.get(dcId) : this._primaryDc\n\n if (!dc) {\n if (!this._primaryDc) {\n throw new MtcuteError('Not connected to any DC')\n }\n\n // guess based on the provided delegate. it is most likely correct,\n // but we should give actual values if possible\n return this._connectionCount(kind, dcId ?? this._primaryDc.dcId, this.params.isPremium)\n }\n\n return dc[kind].getPoolSize()\n }\n\n getPrimaryDcId() {\n if (!this._primaryDc) throw new MtcuteError('Not connected to any DC')\n\n return this._primaryDc.dcId\n }\n\n destroy(): void {\n for (const dc of this._dcConnections.values()) {\n dc.destroy()\n }\n this.config.offReload(this._onConfigChanged)\n this._resetOnNetworkChange?.()\n }\n}\n"]}
@@ -26,6 +26,8 @@ export declare abstract class PersistentConnection extends EventEmitter {
26
26
  private _consequentFails;
27
27
  private _previousWait;
28
28
  private _reconnectionTimeout;
29
+ private _shouldReconnectImmediately;
30
+ protected _disconnectedManually: boolean;
29
31
  private _inactivityTimeout;
30
32
  private _inactive;
31
33
  _destroyed: boolean;
@@ -42,6 +44,7 @@ export declare abstract class PersistentConnection extends EventEmitter {
42
44
  onTransportClose(): void;
43
45
  connect(): void;
44
46
  reconnect(): void;
47
+ disconnectManual(): void;
45
48
  destroy(): void;
46
49
  protected _rescheduleInactivity(): void;
47
50
  protected _onInactivityTimeout(): void;
@@ -24,6 +24,8 @@ class PersistentConnection extends events_1.default {
24
24
  this._consequentFails = 0;
25
25
  this._previousWait = null;
26
26
  this._reconnectionTimeout = null;
27
+ this._shouldReconnectImmediately = false;
28
+ this._disconnectedManually = false;
27
29
  // inactivity timeout
28
30
  this._inactivityTimeout = null;
29
31
  this._inactive = true;
@@ -88,8 +90,13 @@ class PersistentConnection extends events_1.default {
88
90
  onTransportClose() {
89
91
  // transport closed because of inactivity
90
92
  // obviously we dont want to reconnect then
91
- if (this._inactive)
93
+ if (this._inactive || this._disconnectedManually)
94
+ return;
95
+ if (this._shouldReconnectImmediately) {
96
+ this._shouldReconnectImmediately = false;
97
+ this.connect();
92
98
  return;
99
+ }
93
100
  this._consequentFails += 1;
94
101
  const wait = this.params.reconnectionStrategy(this.params, this._lastError, this._consequentFails, this._previousWait);
95
102
  if (wait === false) {
@@ -117,11 +124,26 @@ class PersistentConnection extends events_1.default {
117
124
  }
118
125
  if (this._reconnectionTimeout != null) {
119
126
  clearTimeout(this._reconnectionTimeout);
127
+ this._reconnectionTimeout = null;
120
128
  }
121
129
  this._inactive = false;
130
+ this._disconnectedManually = false;
122
131
  this._transport.connect(this.params.dc, this.params.testMode);
123
132
  }
124
133
  reconnect() {
134
+ if (this._inactive)
135
+ return;
136
+ // if we are already connected
137
+ if (this.isConnected) {
138
+ this._shouldReconnectImmediately = true;
139
+ this._transport.close();
140
+ return;
141
+ }
142
+ // if reconnection timeout is pending, it will be cancelled in connect()
143
+ this.connect();
144
+ }
145
+ disconnectManual() {
146
+ this._disconnectedManually = true;
125
147
  this._transport.close();
126
148
  }
127
149
  destroy() {
@@ -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\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 this._transport.close()\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) return\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()\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 }\n\n this._inactive = false\n this._transport.connect(this.params.dc, this.params.testMode)\n }\n\n reconnect(): void {\n this._transport.close()\n }\n\n destroy(): void {\n if (this._reconnectionTimeout != null) {\n clearTimeout(this._reconnectionTimeout)\n }\n if (this._inactivityTimeout != null) {\n clearTimeout(this._inactivityTimeout)\n }\n\n 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 this._transport.close()\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 this._transport.close()\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()\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 this._transport.close()\n\n return\n }\n\n // if reconnection timeout is pending, it will be cancelled in connect()\n this.connect()\n }\n\n disconnectManual(): void {\n this._disconnectedManually = true\n this._transport.close()\n }\n\n destroy(): void {\n if (this._reconnectionTimeout != null) {\n clearTimeout(this._reconnectionTimeout)\n }\n if (this._inactivityTimeout != null) {\n clearTimeout(this._inactivityTimeout)\n }\n\n 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 this._transport.close()\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"]}
@@ -37,6 +37,7 @@ export declare class SessionConnection extends PersistentConnection {
37
37
  private _crypto;
38
38
  private _salts;
39
39
  constructor(params: SessionConnectionParams, _session: MtprotoSession);
40
+ private _online;
40
41
  getAuthKey(temp?: boolean): Uint8Array | null;
41
42
  setUsePfs(usePfs: boolean): void;
42
43
  onTransportClose(): void;
@@ -70,6 +71,7 @@ export declare class SessionConnection extends PersistentConnection {
70
71
  _resetSession(): void;
71
72
  private _sendAck;
72
73
  sendRpc<T extends tl.RpcMethod>(request: T, stack?: string, timeout?: number, abortSignal?: AbortSignal, chainId?: string | number): Promise<tl.RpcCallReturn[T['_']]>;
74
+ notifyNetworkChanged(online: boolean): void;
73
75
  private _cancelRpc;
74
76
  protected _onInactivityTimeout(): void;
75
77
  flushWhenIdle(): void;
@@ -9,10 +9,11 @@ exports.SessionConnection = void 0;
9
9
  const long_1 = __importDefault(require("long"));
10
10
  const tl_1 = require("@mtcute/tl");
11
11
  const tl_runtime_1 = require("@mtcute/tl-runtime");
12
+ const platform_js_1 = require("../platform.js");
12
13
  const index_js_1 = require("../types/index.js");
13
14
  const mtproto_js_1 = require("../utils/crypto/mtproto.js");
15
+ const error_reporting_js_1 = require("../utils/error-reporting.js");
14
16
  const index_js_2 = require("../utils/index.js");
15
- const error_reporting_js_1 = require("../utils/platform/error-reporting.js");
16
17
  const authorization_js_1 = require("./authorization.js");
17
18
  const persistent_connection_js_1 = require("./persistent-connection.js");
18
19
  const abstract_js_1 = require("./transports/abstract.js");
@@ -51,6 +52,7 @@ class SessionConnection extends persistent_connection_js_1.PersistentConnection
51
52
  this._isPfsBindingPending = false;
52
53
  this._isPfsBindingPendingInBackground = false;
53
54
  this._inactivityPendingFlush = false;
55
+ this._online = (0, platform_js_1.getPlatform)().isOnline?.() ?? true;
54
56
  this._flushTimer.onTimeout(this._flush.bind(this));
55
57
  this._readerMap = params.readerMap;
56
58
  this._writerMap = params.writerMap;
@@ -198,7 +200,7 @@ class SessionConnection extends persistent_connection_js_1.PersistentConnection
198
200
  .then(([authKey, serverSalt, timeOffset]) => {
199
201
  this._session._authKey.setup(authKey);
200
202
  this._salts.currentSalt = serverSalt;
201
- this._session._timeOffset = timeOffset;
203
+ this._session.updateTimeOffset(timeOffset);
202
204
  this._session.authorizationPending = false;
203
205
  this.emit('key-change', authKey);
204
206
  if (this._usePfs) {
@@ -566,7 +568,7 @@ class SessionConnection extends persistent_connection_js_1.PersistentConnection
566
568
  this._session.initConnectionCalled = true;
567
569
  }
568
570
  rpc.done = true;
569
- this.log.verbose('<<< (%s) %j', rpc.method, result);
571
+ this.log.verbose('<<< (%s:%l) %j', rpc.method, reqMsgId, result);
570
572
  if (result._ === 'mt_rpc_error') {
571
573
  const res = result;
572
574
  this.log.debug('received rpc_error [%d:%s] for %l (%s)', res.errorCode, res.errorMessage, reqMsgId, rpc.method);
@@ -818,9 +820,9 @@ class SessionConnection extends persistent_connection_js_1.PersistentConnection
818
820
  // msg_id is either too high or too low
819
821
  // code 20 means msg_id is too old,
820
822
  // we just need to resend the message
821
- const serverTime = msgId.low >>> 0;
823
+ const serverTime = msgId.high >>> 0;
822
824
  const timeOffset = Math.floor(Date.now() / 1000) - serverTime;
823
- this._session._timeOffset = timeOffset;
825
+ this._session.updateTimeOffset(timeOffset);
824
826
  this.log.debug('server time: %d, corrected offset to %d', serverTime, timeOffset);
825
827
  }
826
828
  this._onMessageFailed(msg.badMsgId, `bad_msg_notification ${msg.errorCode}`);
@@ -1072,6 +1074,15 @@ class SessionConnection extends persistent_connection_js_1.PersistentConnection
1072
1074
  this._enqueueRpc(pending, true);
1073
1075
  return pending.promise;
1074
1076
  }
1077
+ notifyNetworkChanged(online) {
1078
+ this._online = online;
1079
+ if (online) {
1080
+ this.reconnect();
1081
+ }
1082
+ else {
1083
+ this.disconnectManual();
1084
+ }
1085
+ }
1075
1086
  _cancelRpc(rpc, onTimeout = false, abortSignal) {
1076
1087
  if (rpc.done)
1077
1088
  return;
@@ -1133,8 +1144,11 @@ class SessionConnection extends persistent_connection_js_1.PersistentConnection
1133
1144
  this._flushTimer.emitWhenIdle();
1134
1145
  }
1135
1146
  _flush() {
1136
- if (!this._session._authKey.ready || this._isPfsBindingPending || this._session.current429Timeout) {
1137
- this.log.debug('skipping flush, connection is not usable (auth key ready = %b, pfs binding pending = %b, 429 timeout = %b)', this._session._authKey.ready, this._isPfsBindingPending, Boolean(this._session.current429Timeout));
1147
+ if (this._disconnectedManually ||
1148
+ !this._session._authKey.ready ||
1149
+ this._isPfsBindingPending ||
1150
+ this._session.current429Timeout) {
1151
+ this.log.debug('skipping flush, connection is not usable (offline = %b, auth key ready = %b, pfs binding pending = %b, 429 timeout = %b)', this._disconnectedManually, this._session._authKey.ready, this._isPfsBindingPending, this._session.current429Timeout);
1138
1152
  // it will be flushed once connection is usable
1139
1153
  return;
1140
1154
  }