@mtcute/core 0.10.1 → 0.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (967) hide show
  1. package/cjs/highlevel/base.d.ts +1 -1
  2. package/cjs/highlevel/base.js +29 -23
  3. package/cjs/highlevel/base.js.map +1 -1
  4. package/cjs/highlevel/client.d.ts +3 -2
  5. package/cjs/highlevel/client.js +1 -0
  6. package/cjs/highlevel/client.js.map +1 -1
  7. package/cjs/highlevel/managers/app-config-manager.js +7 -5
  8. package/cjs/highlevel/managers/app-config-manager.js.map +1 -1
  9. package/cjs/highlevel/methods/_init.js.map +1 -1
  10. package/cjs/highlevel/methods/auth/start-test.js.map +1 -1
  11. package/cjs/highlevel/methods/auth/start.js.map +1 -1
  12. package/cjs/highlevel/methods/auth/utils.js.map +1 -1
  13. package/cjs/highlevel/methods/bots/get-callback-answer.js.map +1 -1
  14. package/cjs/highlevel/methods/bots/get-game-high-scores.js.map +1 -1
  15. package/cjs/highlevel/methods/bots/normalize-command-scope.js.map +1 -1
  16. package/cjs/highlevel/methods/bots/set-my-commands.js.map +1 -1
  17. package/cjs/highlevel/methods/chats/add-chat-members.js.map +1 -1
  18. package/cjs/highlevel/methods/chats/ban-chat-member.js.map +1 -1
  19. package/cjs/highlevel/methods/chats/batched-queries.js.map +1 -1
  20. package/cjs/highlevel/methods/chats/delete-chat-photo.js.map +1 -1
  21. package/cjs/highlevel/methods/chats/delete-history.js.map +1 -1
  22. package/cjs/highlevel/methods/chats/get-chat-event-log.js.map +1 -1
  23. package/cjs/highlevel/methods/chats/get-chat-member.js.map +1 -1
  24. package/cjs/highlevel/methods/chats/get-chat-members.js.map +1 -1
  25. package/cjs/highlevel/methods/chats/get-chat-preview.js.map +1 -1
  26. package/cjs/highlevel/methods/chats/get-chat.js.map +1 -1
  27. package/cjs/highlevel/methods/chats/get-full-chat.js.map +1 -1
  28. package/cjs/highlevel/methods/chats/get-nearby-chats.js.map +1 -1
  29. package/cjs/highlevel/methods/chats/get-similar-channels.js.map +1 -1
  30. package/cjs/highlevel/methods/chats/iter-chat-event-log.js.map +1 -1
  31. package/cjs/highlevel/methods/chats/iter-chat-members.js.map +1 -1
  32. package/cjs/highlevel/methods/chats/join-chat.js.map +1 -1
  33. package/cjs/highlevel/methods/chats/kick-chat-member.js.map +1 -1
  34. package/cjs/highlevel/methods/chats/leave-chat.js.map +1 -1
  35. package/cjs/highlevel/methods/chats/open-chat.js.map +1 -1
  36. package/cjs/highlevel/methods/chats/reorder-usernames.js.map +1 -1
  37. package/cjs/highlevel/methods/chats/restrict-chat-member.js.map +1 -1
  38. package/cjs/highlevel/methods/chats/save-draft.js.map +1 -1
  39. package/cjs/highlevel/methods/chats/set-chat-color.js.map +1 -1
  40. package/cjs/highlevel/methods/chats/set-chat-photo.js.map +1 -1
  41. package/cjs/highlevel/methods/chats/set-chat-title.js.map +1 -1
  42. package/cjs/highlevel/methods/chats/toggle-fragment-username.js.map +1 -1
  43. package/cjs/highlevel/methods/chats/unarchive-chats.js.map +1 -1
  44. package/cjs/highlevel/methods/chats/unban-chat-member.js.map +1 -1
  45. package/cjs/highlevel/methods/contacts/delete-contacts.js.map +1 -1
  46. package/cjs/highlevel/methods/dialogs/create-folder.js.map +1 -1
  47. package/cjs/highlevel/methods/dialogs/edit-folder.js.map +1 -1
  48. package/cjs/highlevel/methods/dialogs/find-folder.js.map +1 -1
  49. package/cjs/highlevel/methods/dialogs/get-folders.js.map +1 -1
  50. package/cjs/highlevel/methods/dialogs/iter-dialogs.js.map +1 -1
  51. package/cjs/highlevel/methods/files/download-buffer.js.map +1 -1
  52. package/cjs/highlevel/methods/files/download-iterable.js +1 -1
  53. package/cjs/highlevel/methods/files/download-iterable.js.map +1 -1
  54. package/cjs/highlevel/methods/files/download-node-stream.js.map +1 -1
  55. package/cjs/highlevel/methods/files/download-stream.js.map +1 -1
  56. package/cjs/highlevel/methods/files/normalize-file-to-document.js.map +1 -1
  57. package/cjs/highlevel/methods/files/normalize-input-file.js.map +1 -1
  58. package/cjs/highlevel/methods/files/normalize-input-media.js +1 -2
  59. package/cjs/highlevel/methods/files/normalize-input-media.js.map +1 -1
  60. package/cjs/highlevel/methods/files/upload-file.js +7 -6
  61. package/cjs/highlevel/methods/files/upload-file.js.map +1 -1
  62. package/cjs/highlevel/methods/files/upload-media.js.map +1 -1
  63. package/cjs/highlevel/methods/forums/iter-forum-topics.js.map +1 -1
  64. package/cjs/highlevel/methods/invite-links/get-primary-invite-link.js.map +1 -1
  65. package/cjs/highlevel/methods/invite-links/iter-invite-link-members.js.map +1 -1
  66. package/cjs/highlevel/methods/invite-links/iter-invite-links.js.map +1 -1
  67. package/cjs/highlevel/methods/messages/close-poll.js.map +1 -1
  68. package/cjs/highlevel/methods/messages/delete-messages.js.map +1 -1
  69. package/cjs/highlevel/methods/messages/edit-inline-message.js.map +1 -1
  70. package/cjs/highlevel/methods/messages/edit-message.js.map +1 -1
  71. package/cjs/highlevel/methods/messages/find-in-update.js.map +1 -1
  72. package/cjs/highlevel/methods/messages/forward-messages.js.map +1 -1
  73. package/cjs/highlevel/methods/messages/get-callback-query-message.js.map +1 -1
  74. package/cjs/highlevel/methods/messages/get-discussion-message.js.map +1 -1
  75. package/cjs/highlevel/methods/messages/get-history.js +5 -1
  76. package/cjs/highlevel/methods/messages/get-history.js.map +1 -1
  77. package/cjs/highlevel/methods/messages/get-message-by-link.js.map +1 -1
  78. package/cjs/highlevel/methods/messages/get-message-group.js.map +1 -1
  79. package/cjs/highlevel/methods/messages/get-message-reactions.js.map +1 -1
  80. package/cjs/highlevel/methods/messages/get-messages.js.map +1 -1
  81. package/cjs/highlevel/methods/messages/get-reply-to.js.map +1 -1
  82. package/cjs/highlevel/methods/messages/iter-history.js.map +1 -1
  83. package/cjs/highlevel/methods/messages/iter-reaction-users.js.map +1 -1
  84. package/cjs/highlevel/methods/messages/iter-search-global.js.map +1 -1
  85. package/cjs/highlevel/methods/messages/iter-search-messages.js.map +1 -1
  86. package/cjs/highlevel/methods/messages/read-history.js.map +1 -1
  87. package/cjs/highlevel/methods/messages/send-answer.js.map +1 -1
  88. package/cjs/highlevel/methods/messages/send-comment.js.map +1 -1
  89. package/cjs/highlevel/methods/messages/send-common.js.map +1 -1
  90. package/cjs/highlevel/methods/messages/send-copy-group.js.map +1 -1
  91. package/cjs/highlevel/methods/messages/send-copy.js.map +1 -1
  92. package/cjs/highlevel/methods/messages/send-media-group.js.map +1 -1
  93. package/cjs/highlevel/methods/messages/send-media.js.map +1 -1
  94. package/cjs/highlevel/methods/messages/send-quote.js.map +1 -1
  95. package/cjs/highlevel/methods/messages/send-text.js.map +1 -1
  96. package/cjs/highlevel/methods/messages/send-typing.js.map +1 -1
  97. package/cjs/highlevel/methods/messages/send-vote.js.map +1 -1
  98. package/cjs/highlevel/methods/messages/translate-text.js.map +1 -1
  99. package/cjs/highlevel/methods/messages/unpin-all-messages.js.map +1 -1
  100. package/cjs/highlevel/methods/misc/normalize-privacy-rules.js.map +1 -1
  101. package/cjs/highlevel/methods/misc/normalize-text.js.map +1 -1
  102. package/cjs/highlevel/methods/misc/with-params.js.map +1 -1
  103. package/cjs/highlevel/methods/password/change-cloud-password.js.map +1 -1
  104. package/cjs/highlevel/methods/password/enable-cloud-password.js.map +1 -1
  105. package/cjs/highlevel/methods/password/remove-cloud-password.js.map +1 -1
  106. package/cjs/highlevel/methods/premium/can-apply-boost.js.map +1 -1
  107. package/cjs/highlevel/methods/premium/iter-boosters.js.map +1 -1
  108. package/cjs/highlevel/methods/stickers/create-sticker-set.js.map +1 -1
  109. package/cjs/highlevel/methods/stickers/delete-sticker-from-set.js.map +1 -1
  110. package/cjs/highlevel/methods/stickers/get-custom-emojis.js.map +1 -1
  111. package/cjs/highlevel/methods/stickers/move-sticker-in-set.js.map +1 -1
  112. package/cjs/highlevel/methods/stories/can-send-story.js.map +1 -1
  113. package/cjs/highlevel/methods/stories/edit-story.js.map +1 -1
  114. package/cjs/highlevel/methods/stories/find-in-update.js.map +1 -1
  115. package/cjs/highlevel/methods/stories/hide-my-stories-views.js.map +1 -1
  116. package/cjs/highlevel/methods/stories/iter-all-stories.js.map +1 -1
  117. package/cjs/highlevel/methods/stories/iter-profile-stories.js.map +1 -1
  118. package/cjs/highlevel/methods/stories/iter-story-viewers.js.map +1 -1
  119. package/cjs/highlevel/methods/stories/send-story.js.map +1 -1
  120. package/cjs/highlevel/methods/users/delete-profile-photos.js.map +1 -1
  121. package/cjs/highlevel/methods/users/get-users.js.map +1 -1
  122. package/cjs/highlevel/methods/users/iter-profile-photos.js.map +1 -1
  123. package/cjs/highlevel/methods/users/resolve-peer-many.js.map +1 -1
  124. package/cjs/highlevel/methods/users/resolve-peer.js.map +1 -1
  125. package/cjs/highlevel/methods/users/set-my-emoji-status.js.map +1 -1
  126. package/cjs/highlevel/methods/users/set-my-profile-photo.js.map +1 -1
  127. package/cjs/highlevel/storage/service/current-user.js +2 -0
  128. package/cjs/highlevel/storage/service/current-user.js.map +1 -1
  129. package/cjs/highlevel/storage/service/peers.js +5 -1
  130. package/cjs/highlevel/storage/service/peers.js.map +1 -1
  131. package/cjs/highlevel/storage/service/ref-messages.js +3 -0
  132. package/cjs/highlevel/storage/service/ref-messages.js.map +1 -1
  133. package/cjs/highlevel/storage/service/updates.js +1 -0
  134. package/cjs/highlevel/storage/service/updates.js.map +1 -1
  135. package/cjs/highlevel/storage/storage.d.ts +1 -1
  136. package/cjs/highlevel/storage/storage.js +17 -4
  137. package/cjs/highlevel/storage/storage.js.map +1 -1
  138. package/cjs/highlevel/types/auth/sent-code.js +1 -0
  139. package/cjs/highlevel/types/auth/sent-code.js.map +1 -1
  140. package/cjs/highlevel/types/bots/game-high-score.js +2 -0
  141. package/cjs/highlevel/types/bots/game-high-score.js.map +1 -1
  142. package/cjs/highlevel/types/bots/inline-message/factories.js.map +1 -1
  143. package/cjs/highlevel/types/bots/inline-result/factories.js.map +1 -1
  144. package/cjs/highlevel/types/bots/keyboards/builder.js +2 -1
  145. package/cjs/highlevel/types/bots/keyboards/builder.js.map +1 -1
  146. package/cjs/highlevel/types/bots/keyboards/factories.js.map +1 -1
  147. package/cjs/highlevel/types/calls/discard-reason.js.map +1 -1
  148. package/cjs/highlevel/types/conversation.js +13 -7
  149. package/cjs/highlevel/types/conversation.js.map +1 -1
  150. package/cjs/highlevel/types/errors.js +3 -0
  151. package/cjs/highlevel/types/errors.js.map +1 -1
  152. package/cjs/highlevel/types/files/file-location.js +3 -0
  153. package/cjs/highlevel/types/files/file-location.js.map +1 -1
  154. package/cjs/highlevel/types/files/uploaded-file.js +1 -1
  155. package/cjs/highlevel/types/files/uploaded-file.js.map +1 -1
  156. package/cjs/highlevel/types/files/utils.d.ts +3 -3
  157. package/cjs/highlevel/types/files/utils.js.map +1 -1
  158. package/cjs/highlevel/types/files/web-document.js +1 -0
  159. package/cjs/highlevel/types/files/web-document.js.map +1 -1
  160. package/cjs/highlevel/types/media/audio.js +3 -2
  161. package/cjs/highlevel/types/media/audio.js.map +1 -1
  162. package/cjs/highlevel/types/media/contact.js +2 -1
  163. package/cjs/highlevel/types/media/contact.js.map +1 -1
  164. package/cjs/highlevel/types/media/dice.js +125 -124
  165. package/cjs/highlevel/types/media/dice.js.map +1 -1
  166. package/cjs/highlevel/types/media/document-utils.js.map +1 -1
  167. package/cjs/highlevel/types/media/document.js +2 -4
  168. package/cjs/highlevel/types/media/document.js.map +1 -1
  169. package/cjs/highlevel/types/media/game.js +2 -1
  170. package/cjs/highlevel/types/media/game.js.map +1 -1
  171. package/cjs/highlevel/types/media/invoice.js +4 -1
  172. package/cjs/highlevel/types/media/invoice.js.map +1 -1
  173. package/cjs/highlevel/types/media/location.js +4 -5
  174. package/cjs/highlevel/types/media/location.js.map +1 -1
  175. package/cjs/highlevel/types/media/photo.js +8 -1
  176. package/cjs/highlevel/types/media/photo.js.map +1 -1
  177. package/cjs/highlevel/types/media/poll.js +4 -1
  178. package/cjs/highlevel/types/media/poll.js.map +1 -1
  179. package/cjs/highlevel/types/media/sticker.js +3 -1
  180. package/cjs/highlevel/types/media/sticker.js.map +1 -1
  181. package/cjs/highlevel/types/media/story.js +3 -1
  182. package/cjs/highlevel/types/media/story.js.map +1 -1
  183. package/cjs/highlevel/types/media/thumbnail.js +35 -22
  184. package/cjs/highlevel/types/media/thumbnail.js.map +1 -1
  185. package/cjs/highlevel/types/media/venue.js +2 -1
  186. package/cjs/highlevel/types/media/venue.js.map +1 -1
  187. package/cjs/highlevel/types/media/video.js +3 -1
  188. package/cjs/highlevel/types/media/video.js.map +1 -1
  189. package/cjs/highlevel/types/media/voice.js +2 -1
  190. package/cjs/highlevel/types/media/voice.js.map +1 -1
  191. package/cjs/highlevel/types/media/web-page.js +2 -1
  192. package/cjs/highlevel/types/media/web-page.js.map +1 -1
  193. package/cjs/highlevel/types/messages/dialog.js +3 -0
  194. package/cjs/highlevel/types/messages/dialog.js.map +1 -1
  195. package/cjs/highlevel/types/messages/draft-message.js +1 -0
  196. package/cjs/highlevel/types/messages/draft-message.js.map +1 -1
  197. package/cjs/highlevel/types/messages/message-action.js.map +1 -1
  198. package/cjs/highlevel/types/messages/message-entity.js +2 -0
  199. package/cjs/highlevel/types/messages/message-entity.js.map +1 -1
  200. package/cjs/highlevel/types/messages/message-forward.js +2 -0
  201. package/cjs/highlevel/types/messages/message-forward.js.map +1 -1
  202. package/cjs/highlevel/types/messages/message-media.js.map +1 -1
  203. package/cjs/highlevel/types/messages/message-reactions.js +4 -0
  204. package/cjs/highlevel/types/messages/message-reactions.js.map +1 -1
  205. package/cjs/highlevel/types/messages/message-replies.js +2 -0
  206. package/cjs/highlevel/types/messages/message-replies.js.map +1 -1
  207. package/cjs/highlevel/types/messages/message.js +6 -0
  208. package/cjs/highlevel/types/messages/message.js.map +1 -1
  209. package/cjs/highlevel/types/messages/replied-message.js +2 -0
  210. package/cjs/highlevel/types/messages/replied-message.js.map +1 -1
  211. package/cjs/highlevel/types/misc/sticker-set.js +7 -1
  212. package/cjs/highlevel/types/misc/sticker-set.js.map +1 -1
  213. package/cjs/highlevel/types/misc/takeout-session.js +5 -0
  214. package/cjs/highlevel/types/misc/takeout-session.js.map +1 -1
  215. package/cjs/highlevel/types/peers/chat-colors.js +2 -0
  216. package/cjs/highlevel/types/peers/chat-colors.js.map +1 -1
  217. package/cjs/highlevel/types/peers/chat-event/actions.js.map +1 -1
  218. package/cjs/highlevel/types/peers/chat-event/filters.js.map +1 -1
  219. package/cjs/highlevel/types/peers/chat-event/index.js +2 -0
  220. package/cjs/highlevel/types/peers/chat-event/index.js.map +1 -1
  221. package/cjs/highlevel/types/peers/chat-invite-link-member.js +2 -0
  222. package/cjs/highlevel/types/peers/chat-invite-link-member.js.map +1 -1
  223. package/cjs/highlevel/types/peers/chat-invite-link.js +2 -0
  224. package/cjs/highlevel/types/peers/chat-invite-link.js.map +1 -1
  225. package/cjs/highlevel/types/peers/chat-location.js +1 -0
  226. package/cjs/highlevel/types/peers/chat-location.js.map +1 -1
  227. package/cjs/highlevel/types/peers/chat-member.js +2 -0
  228. package/cjs/highlevel/types/peers/chat-member.js.map +1 -1
  229. package/cjs/highlevel/types/peers/chat-permissions.js +1 -0
  230. package/cjs/highlevel/types/peers/chat-permissions.js.map +1 -1
  231. package/cjs/highlevel/types/peers/chat-photo.js +5 -0
  232. package/cjs/highlevel/types/peers/chat-photo.js.map +1 -1
  233. package/cjs/highlevel/types/peers/chat-preview.js +2 -0
  234. package/cjs/highlevel/types/peers/chat-preview.js.map +1 -1
  235. package/cjs/highlevel/types/peers/chat.js +12 -1
  236. package/cjs/highlevel/types/peers/chat.js.map +1 -1
  237. package/cjs/highlevel/types/peers/forum-topic.js +9 -6
  238. package/cjs/highlevel/types/peers/forum-topic.js.map +1 -1
  239. package/cjs/highlevel/types/peers/peer.js.map +1 -1
  240. package/cjs/highlevel/types/peers/peers-index.js +3 -1
  241. package/cjs/highlevel/types/peers/peers-index.js.map +1 -1
  242. package/cjs/highlevel/types/peers/user.js +5 -1
  243. package/cjs/highlevel/types/peers/user.js.map +1 -1
  244. package/cjs/highlevel/types/premium/boost-slot.js +2 -0
  245. package/cjs/highlevel/types/premium/boost-slot.js.map +1 -1
  246. package/cjs/highlevel/types/premium/boost-stats.js +1 -0
  247. package/cjs/highlevel/types/premium/boost-stats.js.map +1 -1
  248. package/cjs/highlevel/types/premium/boost.js +2 -0
  249. package/cjs/highlevel/types/premium/boost.js.map +1 -1
  250. package/cjs/highlevel/types/reactions/emoji-status.js +1 -0
  251. package/cjs/highlevel/types/reactions/emoji-status.js.map +1 -1
  252. package/cjs/highlevel/types/reactions/peer-reaction.js +2 -0
  253. package/cjs/highlevel/types/reactions/peer-reaction.js.map +1 -1
  254. package/cjs/highlevel/types/reactions/reaction-count.js +1 -0
  255. package/cjs/highlevel/types/reactions/reaction-count.js.map +1 -1
  256. package/cjs/highlevel/types/reactions/types.js.map +1 -1
  257. package/cjs/highlevel/types/stories/all-stories.d.ts +2 -2
  258. package/cjs/highlevel/types/stories/all-stories.js +3 -1
  259. package/cjs/highlevel/types/stories/all-stories.js.map +1 -1
  260. package/cjs/highlevel/types/stories/interactive/base.js +1 -0
  261. package/cjs/highlevel/types/stories/interactive/base.js.map +1 -1
  262. package/cjs/highlevel/types/stories/interactive/channel-post.js +3 -1
  263. package/cjs/highlevel/types/stories/interactive/channel-post.js.map +1 -1
  264. package/cjs/highlevel/types/stories/interactive/index.js.map +1 -1
  265. package/cjs/highlevel/types/stories/interactive/input.js +1 -0
  266. package/cjs/highlevel/types/stories/interactive/input.js.map +1 -1
  267. package/cjs/highlevel/types/stories/interactive/location.js +2 -1
  268. package/cjs/highlevel/types/stories/interactive/location.js.map +1 -1
  269. package/cjs/highlevel/types/stories/interactive/reaction.js +2 -1
  270. package/cjs/highlevel/types/stories/interactive/reaction.js.map +1 -1
  271. package/cjs/highlevel/types/stories/interactive/venue.js +2 -1
  272. package/cjs/highlevel/types/stories/interactive/venue.js.map +1 -1
  273. package/cjs/highlevel/types/stories/peer-stories.js +2 -0
  274. package/cjs/highlevel/types/stories/peer-stories.js.map +1 -1
  275. package/cjs/highlevel/types/stories/stealth-mode.js +1 -0
  276. package/cjs/highlevel/types/stories/stealth-mode.js.map +1 -1
  277. package/cjs/highlevel/types/stories/story-interactions.js +2 -0
  278. package/cjs/highlevel/types/stories/story-interactions.js.map +1 -1
  279. package/cjs/highlevel/types/stories/story-viewer.d.ts +1 -1
  280. package/cjs/highlevel/types/stories/story-viewer.js +6 -0
  281. package/cjs/highlevel/types/stories/story-viewer.js.map +1 -1
  282. package/cjs/highlevel/types/stories/story.js +2 -0
  283. package/cjs/highlevel/types/stories/story.js.map +1 -1
  284. package/cjs/highlevel/types/updates/bot-chat-join-request.js +2 -0
  285. package/cjs/highlevel/types/updates/bot-chat-join-request.js.map +1 -1
  286. package/cjs/highlevel/types/updates/bot-reaction.js +4 -0
  287. package/cjs/highlevel/types/updates/bot-reaction.js.map +1 -1
  288. package/cjs/highlevel/types/updates/bot-stopped.js +2 -0
  289. package/cjs/highlevel/types/updates/bot-stopped.js.map +1 -1
  290. package/cjs/highlevel/types/updates/callback-query.js +4 -0
  291. package/cjs/highlevel/types/updates/callback-query.js.map +1 -1
  292. package/cjs/highlevel/types/updates/chat-join-request.js +2 -0
  293. package/cjs/highlevel/types/updates/chat-join-request.js.map +1 -1
  294. package/cjs/highlevel/types/updates/chat-member-update.js +2 -0
  295. package/cjs/highlevel/types/updates/chat-member-update.js.map +1 -1
  296. package/cjs/highlevel/types/updates/chosen-inline-result.js +2 -0
  297. package/cjs/highlevel/types/updates/chosen-inline-result.js.map +1 -1
  298. package/cjs/highlevel/types/updates/delete-message-update.js +1 -0
  299. package/cjs/highlevel/types/updates/delete-message-update.js.map +1 -1
  300. package/cjs/highlevel/types/updates/delete-story-update.js +2 -0
  301. package/cjs/highlevel/types/updates/delete-story-update.js.map +1 -1
  302. package/cjs/highlevel/types/updates/history-read-update.js +1 -0
  303. package/cjs/highlevel/types/updates/history-read-update.js.map +1 -1
  304. package/cjs/highlevel/types/updates/inline-query.js +2 -0
  305. package/cjs/highlevel/types/updates/inline-query.js.map +1 -1
  306. package/cjs/highlevel/types/updates/parse-update.js.map +1 -1
  307. package/cjs/highlevel/types/updates/poll-update.js +2 -0
  308. package/cjs/highlevel/types/updates/poll-update.js.map +1 -1
  309. package/cjs/highlevel/types/updates/poll-vote.js +2 -0
  310. package/cjs/highlevel/types/updates/poll-vote.js.map +1 -1
  311. package/cjs/highlevel/types/updates/pre-checkout-query.js +2 -0
  312. package/cjs/highlevel/types/updates/pre-checkout-query.js.map +1 -1
  313. package/cjs/highlevel/types/updates/story-update.js +2 -0
  314. package/cjs/highlevel/types/updates/story-update.js.map +1 -1
  315. package/cjs/highlevel/types/updates/user-status-update.js +1 -0
  316. package/cjs/highlevel/types/updates/user-status-update.js.map +1 -1
  317. package/cjs/highlevel/types/updates/user-typing-update.js +1 -0
  318. package/cjs/highlevel/types/updates/user-typing-update.js.map +1 -1
  319. package/cjs/highlevel/updates/manager.d.ts +1 -1
  320. package/cjs/highlevel/updates/manager.js +50 -28
  321. package/cjs/highlevel/updates/manager.js.map +1 -1
  322. package/cjs/highlevel/updates/parsed.js.map +1 -1
  323. package/cjs/highlevel/updates/utils.js.map +1 -1
  324. package/cjs/highlevel/utils/convert-file-id.js.map +1 -1
  325. package/cjs/highlevel/utils/entities.js.map +1 -1
  326. package/cjs/highlevel/utils/file-type.d.ts +1 -0
  327. package/cjs/highlevel/utils/file-type.js +35 -1
  328. package/cjs/highlevel/utils/file-type.js.map +1 -1
  329. package/cjs/highlevel/utils/file-utils.js +1 -1
  330. package/cjs/highlevel/utils/file-utils.js.map +1 -1
  331. package/cjs/highlevel/utils/inline-utils.js.map +1 -1
  332. package/cjs/highlevel/utils/inspectable.js.map +1 -1
  333. package/cjs/highlevel/utils/memoize.js.map +1 -1
  334. package/cjs/highlevel/utils/peer-utils.js.map +1 -1
  335. package/cjs/highlevel/utils/query-batcher.js.map +1 -1
  336. package/cjs/highlevel/utils/rps-meter.js +3 -0
  337. package/cjs/highlevel/utils/rps-meter.js.map +1 -1
  338. package/cjs/highlevel/utils/stream-utils.js.map +1 -1
  339. package/cjs/highlevel/utils/string-session.d.ts +1 -2
  340. package/cjs/highlevel/utils/string-session.js +27 -7
  341. package/cjs/highlevel/utils/string-session.js.map +1 -1
  342. package/cjs/highlevel/utils/voice-utils.js.map +1 -1
  343. package/cjs/highlevel/worker/app-config.d.ts +2 -3
  344. package/cjs/highlevel/worker/app-config.js +6 -3
  345. package/cjs/highlevel/worker/app-config.js.map +1 -1
  346. package/cjs/highlevel/worker/errors.js.map +1 -1
  347. package/cjs/highlevel/worker/invoker.js +3 -2
  348. package/cjs/highlevel/worker/invoker.js.map +1 -1
  349. package/cjs/highlevel/worker/port.d.ts +16 -17
  350. package/cjs/highlevel/worker/port.js +74 -49
  351. package/cjs/highlevel/worker/port.js.map +1 -1
  352. package/cjs/highlevel/worker/protocol.d.ts +2 -2
  353. package/cjs/highlevel/worker/protocol.js.map +1 -1
  354. package/cjs/highlevel/worker/storage.d.ts +9 -13
  355. package/cjs/highlevel/worker/storage.js +34 -19
  356. package/cjs/highlevel/worker/storage.js.map +1 -1
  357. package/cjs/highlevel/worker/worker.js +3 -0
  358. package/cjs/highlevel/worker/worker.js.map +1 -1
  359. package/cjs/network/auth-key.js +8 -1
  360. package/cjs/network/auth-key.js.map +1 -1
  361. package/cjs/network/authorization.js.map +1 -1
  362. package/cjs/network/client.d.ts +1 -1
  363. package/cjs/network/client.js +39 -14
  364. package/cjs/network/client.js.map +1 -1
  365. package/cjs/network/config-manager.js.map +1 -1
  366. package/cjs/network/mtproto-session.d.ts +1 -1
  367. package/cjs/network/mtproto-session.js +40 -30
  368. package/cjs/network/mtproto-session.js.map +1 -1
  369. package/cjs/network/multi-session-connection.d.ts +2 -2
  370. package/cjs/network/multi-session-connection.js +13 -7
  371. package/cjs/network/multi-session-connection.js.map +1 -1
  372. package/cjs/network/network-manager.d.ts +2 -3
  373. package/cjs/network/network-manager.js +49 -28
  374. package/cjs/network/network-manager.js.map +1 -1
  375. package/cjs/network/persistent-connection.d.ts +3 -3
  376. package/cjs/network/persistent-connection.js +33 -22
  377. package/cjs/network/persistent-connection.js.map +1 -1
  378. package/cjs/network/server-salt.js +4 -5
  379. package/cjs/network/server-salt.js.map +1 -1
  380. package/cjs/network/session-connection.d.ts +1 -1
  381. package/cjs/network/session-connection.js +22 -12
  382. package/cjs/network/session-connection.js.map +1 -1
  383. package/cjs/network/transports/abstract.d.ts +2 -2
  384. package/cjs/network/transports/abstract.js +1 -0
  385. package/cjs/network/transports/abstract.js.map +1 -1
  386. package/cjs/network/transports/intermediate.js +1 -0
  387. package/cjs/network/transports/intermediate.js.map +1 -1
  388. package/cjs/network/transports/obfuscated.js +3 -0
  389. package/cjs/network/transports/obfuscated.js.map +1 -1
  390. package/cjs/network/transports/streamed.d.ts +1 -1
  391. package/cjs/network/transports/streamed.js +1 -4
  392. package/cjs/network/transports/streamed.js.map +1 -1
  393. package/cjs/network/transports/wrapped.d.ts +1 -1
  394. package/cjs/network/transports/wrapped.js +2 -0
  395. package/cjs/network/transports/wrapped.js.map +1 -1
  396. package/cjs/platform.js.map +1 -1
  397. package/cjs/storage/driver.js +3 -4
  398. package/cjs/storage/driver.js.map +1 -1
  399. package/cjs/storage/memory/driver.js +1 -3
  400. package/cjs/storage/memory/driver.js.map +1 -1
  401. package/cjs/storage/memory/index.js +5 -7
  402. package/cjs/storage/memory/index.js.map +1 -1
  403. package/cjs/storage/memory/repository/auth-keys.d.ts +1 -1
  404. package/cjs/storage/memory/repository/auth-keys.js +2 -0
  405. package/cjs/storage/memory/repository/auth-keys.js.map +1 -1
  406. package/cjs/storage/memory/repository/kv.d.ts +1 -1
  407. package/cjs/storage/memory/repository/kv.js +2 -0
  408. package/cjs/storage/memory/repository/kv.js.map +1 -1
  409. package/cjs/storage/memory/repository/peers.d.ts +1 -1
  410. package/cjs/storage/memory/repository/peers.js +2 -0
  411. package/cjs/storage/memory/repository/peers.js.map +1 -1
  412. package/cjs/storage/memory/repository/ref-messages.d.ts +1 -1
  413. package/cjs/storage/memory/repository/ref-messages.js +2 -0
  414. package/cjs/storage/memory/repository/ref-messages.js.map +1 -1
  415. package/cjs/storage/service/auth-keys.js +2 -0
  416. package/cjs/storage/service/auth-keys.js.map +1 -1
  417. package/cjs/storage/service/base.js +4 -0
  418. package/cjs/storage/service/base.js.map +1 -1
  419. package/cjs/storage/service/default-dcs.js +2 -0
  420. package/cjs/storage/service/default-dcs.js.map +1 -1
  421. package/cjs/storage/service/future-salts.js +2 -1
  422. package/cjs/storage/service/future-salts.js.map +1 -1
  423. package/cjs/storage/sqlite/driver.js +10 -10
  424. package/cjs/storage/sqlite/driver.js.map +1 -1
  425. package/cjs/storage/sqlite/index.d.ts +1 -1
  426. package/cjs/storage/sqlite/index.js +5 -0
  427. package/cjs/storage/sqlite/index.js.map +1 -1
  428. package/cjs/storage/sqlite/repository/auth-keys.js +9 -0
  429. package/cjs/storage/sqlite/repository/auth-keys.js.map +1 -1
  430. package/cjs/storage/sqlite/repository/kv.js +5 -0
  431. package/cjs/storage/sqlite/repository/kv.js.map +1 -1
  432. package/cjs/storage/sqlite/repository/peers.js +6 -0
  433. package/cjs/storage/sqlite/repository/peers.js.map +1 -1
  434. package/cjs/storage/sqlite/repository/ref-messages.d.ts +1 -1
  435. package/cjs/storage/sqlite/repository/ref-messages.js +6 -0
  436. package/cjs/storage/sqlite/repository/ref-messages.js.map +1 -1
  437. package/cjs/storage/storage.d.ts +1 -3
  438. package/cjs/storage/storage.js +21 -13
  439. package/cjs/storage/storage.js.map +1 -1
  440. package/cjs/types/errors.js +13 -0
  441. package/cjs/types/errors.js.map +1 -1
  442. package/cjs/types/utils.d.ts +1 -1
  443. package/cjs/types/utils.js.map +1 -1
  444. package/cjs/utils/async-lock.js +1 -3
  445. package/cjs/utils/async-lock.js.map +1 -1
  446. package/cjs/utils/bigint-utils.js.map +1 -1
  447. package/cjs/utils/binary/asn1-parser.js.map +1 -1
  448. package/cjs/utils/buffer-utils.js.map +1 -1
  449. package/cjs/utils/condition-variable.js +2 -0
  450. package/cjs/utils/condition-variable.js.map +1 -1
  451. package/cjs/utils/crypto/factorization.js.map +1 -1
  452. package/cjs/utils/crypto/keys.js.map +1 -1
  453. package/cjs/utils/crypto/miller-rabin.js.map +1 -1
  454. package/cjs/utils/crypto/password.js.map +1 -1
  455. package/cjs/utils/crypto/utils.js.map +1 -1
  456. package/cjs/utils/dcs.js +1 -1
  457. package/cjs/utils/dcs.js.map +1 -1
  458. package/cjs/utils/deque.js +8 -2
  459. package/cjs/utils/deque.js.map +1 -1
  460. package/cjs/utils/early-timer.js +4 -1
  461. package/cjs/utils/early-timer.js.map +1 -1
  462. package/cjs/utils/error-reporting.js.map +1 -1
  463. package/cjs/utils/function-utils.js.map +1 -1
  464. package/cjs/utils/linked-list.js +4 -1
  465. package/cjs/utils/linked-list.js.map +1 -1
  466. package/cjs/utils/links/bots.js.map +1 -1
  467. package/cjs/utils/links/chat.js.map +1 -1
  468. package/cjs/utils/links/common.js.map +1 -1
  469. package/cjs/utils/links/misc.js.map +1 -1
  470. package/cjs/utils/logger.d.ts +2 -2
  471. package/cjs/utils/logger.js +21 -14
  472. package/cjs/utils/logger.js.map +1 -1
  473. package/cjs/utils/long-utils.js +2 -6
  474. package/cjs/utils/long-utils.js.map +1 -1
  475. package/cjs/utils/lru-map.js +5 -1
  476. package/cjs/utils/lru-map.js.map +1 -1
  477. package/cjs/utils/lru-set.js +4 -0
  478. package/cjs/utils/lru-set.js.map +1 -1
  479. package/cjs/utils/peer-utils.js.map +1 -1
  480. package/cjs/utils/reloadable.d.ts +1 -1
  481. package/cjs/utils/reloadable.js +10 -7
  482. package/cjs/utils/reloadable.js.map +1 -1
  483. package/cjs/utils/sorted-array.js +2 -0
  484. package/cjs/utils/sorted-array.js.map +1 -1
  485. package/cjs/utils/tl-json.js.map +1 -1
  486. package/cjs/utils/type-assertions.js.map +1 -1
  487. package/esm/highlevel/base.d.ts +1 -1
  488. package/esm/highlevel/base.js +29 -23
  489. package/esm/highlevel/base.js.map +1 -1
  490. package/esm/highlevel/client.d.ts +2 -1
  491. package/esm/highlevel/client.js +1 -0
  492. package/esm/highlevel/client.js.map +1 -1
  493. package/esm/highlevel/managers/app-config-manager.js +7 -5
  494. package/esm/highlevel/managers/app-config-manager.js.map +1 -1
  495. package/esm/highlevel/methods/_init.js.map +1 -1
  496. package/esm/highlevel/methods/auth/start-test.js.map +1 -1
  497. package/esm/highlevel/methods/auth/start.js.map +1 -1
  498. package/esm/highlevel/methods/auth/utils.js.map +1 -1
  499. package/esm/highlevel/methods/bots/get-callback-answer.js.map +1 -1
  500. package/esm/highlevel/methods/bots/get-game-high-scores.js.map +1 -1
  501. package/esm/highlevel/methods/bots/normalize-command-scope.js.map +1 -1
  502. package/esm/highlevel/methods/bots/set-my-commands.js.map +1 -1
  503. package/esm/highlevel/methods/chats/add-chat-members.js.map +1 -1
  504. package/esm/highlevel/methods/chats/ban-chat-member.js.map +1 -1
  505. package/esm/highlevel/methods/chats/batched-queries.js.map +1 -1
  506. package/esm/highlevel/methods/chats/delete-chat-photo.js.map +1 -1
  507. package/esm/highlevel/methods/chats/delete-history.js.map +1 -1
  508. package/esm/highlevel/methods/chats/get-chat-event-log.js.map +1 -1
  509. package/esm/highlevel/methods/chats/get-chat-member.js.map +1 -1
  510. package/esm/highlevel/methods/chats/get-chat-members.js.map +1 -1
  511. package/esm/highlevel/methods/chats/get-chat-preview.js.map +1 -1
  512. package/esm/highlevel/methods/chats/get-chat.js.map +1 -1
  513. package/esm/highlevel/methods/chats/get-full-chat.js.map +1 -1
  514. package/esm/highlevel/methods/chats/get-nearby-chats.js.map +1 -1
  515. package/esm/highlevel/methods/chats/get-similar-channels.js.map +1 -1
  516. package/esm/highlevel/methods/chats/iter-chat-event-log.js.map +1 -1
  517. package/esm/highlevel/methods/chats/iter-chat-members.js.map +1 -1
  518. package/esm/highlevel/methods/chats/join-chat.js.map +1 -1
  519. package/esm/highlevel/methods/chats/kick-chat-member.js.map +1 -1
  520. package/esm/highlevel/methods/chats/leave-chat.js.map +1 -1
  521. package/esm/highlevel/methods/chats/open-chat.js.map +1 -1
  522. package/esm/highlevel/methods/chats/reorder-usernames.js.map +1 -1
  523. package/esm/highlevel/methods/chats/restrict-chat-member.js.map +1 -1
  524. package/esm/highlevel/methods/chats/save-draft.js.map +1 -1
  525. package/esm/highlevel/methods/chats/set-chat-color.js.map +1 -1
  526. package/esm/highlevel/methods/chats/set-chat-photo.js.map +1 -1
  527. package/esm/highlevel/methods/chats/set-chat-title.js.map +1 -1
  528. package/esm/highlevel/methods/chats/toggle-fragment-username.js.map +1 -1
  529. package/esm/highlevel/methods/chats/unarchive-chats.js.map +1 -1
  530. package/esm/highlevel/methods/chats/unban-chat-member.js.map +1 -1
  531. package/esm/highlevel/methods/contacts/delete-contacts.js.map +1 -1
  532. package/esm/highlevel/methods/dialogs/create-folder.js.map +1 -1
  533. package/esm/highlevel/methods/dialogs/edit-folder.js.map +1 -1
  534. package/esm/highlevel/methods/dialogs/find-folder.js.map +1 -1
  535. package/esm/highlevel/methods/dialogs/get-folders.js.map +1 -1
  536. package/esm/highlevel/methods/dialogs/iter-dialogs.js.map +1 -1
  537. package/esm/highlevel/methods/files/download-buffer.js.map +1 -1
  538. package/esm/highlevel/methods/files/download-iterable.js +1 -1
  539. package/esm/highlevel/methods/files/download-iterable.js.map +1 -1
  540. package/esm/highlevel/methods/files/download-node-stream.js.map +1 -1
  541. package/esm/highlevel/methods/files/download-stream.js.map +1 -1
  542. package/esm/highlevel/methods/files/normalize-file-to-document.js.map +1 -1
  543. package/esm/highlevel/methods/files/normalize-input-file.js.map +1 -1
  544. package/esm/highlevel/methods/files/normalize-input-media.js +1 -2
  545. package/esm/highlevel/methods/files/normalize-input-media.js.map +1 -1
  546. package/esm/highlevel/methods/files/upload-file.js +8 -7
  547. package/esm/highlevel/methods/files/upload-file.js.map +1 -1
  548. package/esm/highlevel/methods/files/upload-media.js.map +1 -1
  549. package/esm/highlevel/methods/forums/iter-forum-topics.js.map +1 -1
  550. package/esm/highlevel/methods/invite-links/get-primary-invite-link.js.map +1 -1
  551. package/esm/highlevel/methods/invite-links/iter-invite-link-members.js.map +1 -1
  552. package/esm/highlevel/methods/invite-links/iter-invite-links.js.map +1 -1
  553. package/esm/highlevel/methods/messages/close-poll.js.map +1 -1
  554. package/esm/highlevel/methods/messages/delete-messages.js.map +1 -1
  555. package/esm/highlevel/methods/messages/edit-inline-message.js.map +1 -1
  556. package/esm/highlevel/methods/messages/edit-message.js.map +1 -1
  557. package/esm/highlevel/methods/messages/find-in-update.js.map +1 -1
  558. package/esm/highlevel/methods/messages/forward-messages.js.map +1 -1
  559. package/esm/highlevel/methods/messages/get-callback-query-message.js.map +1 -1
  560. package/esm/highlevel/methods/messages/get-discussion-message.js.map +1 -1
  561. package/esm/highlevel/methods/messages/get-history.js +5 -1
  562. package/esm/highlevel/methods/messages/get-history.js.map +1 -1
  563. package/esm/highlevel/methods/messages/get-message-by-link.js.map +1 -1
  564. package/esm/highlevel/methods/messages/get-message-group.js.map +1 -1
  565. package/esm/highlevel/methods/messages/get-message-reactions.js.map +1 -1
  566. package/esm/highlevel/methods/messages/get-messages.js.map +1 -1
  567. package/esm/highlevel/methods/messages/get-reply-to.js.map +1 -1
  568. package/esm/highlevel/methods/messages/iter-history.js.map +1 -1
  569. package/esm/highlevel/methods/messages/iter-reaction-users.js.map +1 -1
  570. package/esm/highlevel/methods/messages/iter-search-global.js.map +1 -1
  571. package/esm/highlevel/methods/messages/iter-search-messages.js.map +1 -1
  572. package/esm/highlevel/methods/messages/read-history.js.map +1 -1
  573. package/esm/highlevel/methods/messages/send-answer.js.map +1 -1
  574. package/esm/highlevel/methods/messages/send-comment.js.map +1 -1
  575. package/esm/highlevel/methods/messages/send-common.js.map +1 -1
  576. package/esm/highlevel/methods/messages/send-copy-group.js.map +1 -1
  577. package/esm/highlevel/methods/messages/send-copy.js.map +1 -1
  578. package/esm/highlevel/methods/messages/send-media-group.js.map +1 -1
  579. package/esm/highlevel/methods/messages/send-media.js.map +1 -1
  580. package/esm/highlevel/methods/messages/send-quote.js.map +1 -1
  581. package/esm/highlevel/methods/messages/send-text.js.map +1 -1
  582. package/esm/highlevel/methods/messages/send-typing.js.map +1 -1
  583. package/esm/highlevel/methods/messages/send-vote.js.map +1 -1
  584. package/esm/highlevel/methods/messages/translate-text.js.map +1 -1
  585. package/esm/highlevel/methods/messages/unpin-all-messages.js.map +1 -1
  586. package/esm/highlevel/methods/misc/normalize-privacy-rules.js.map +1 -1
  587. package/esm/highlevel/methods/misc/normalize-text.js.map +1 -1
  588. package/esm/highlevel/methods/misc/with-params.js.map +1 -1
  589. package/esm/highlevel/methods/password/change-cloud-password.js.map +1 -1
  590. package/esm/highlevel/methods/password/enable-cloud-password.js.map +1 -1
  591. package/esm/highlevel/methods/password/remove-cloud-password.js.map +1 -1
  592. package/esm/highlevel/methods/premium/can-apply-boost.js.map +1 -1
  593. package/esm/highlevel/methods/premium/iter-boosters.js.map +1 -1
  594. package/esm/highlevel/methods/stickers/create-sticker-set.js.map +1 -1
  595. package/esm/highlevel/methods/stickers/delete-sticker-from-set.js.map +1 -1
  596. package/esm/highlevel/methods/stickers/get-custom-emojis.js.map +1 -1
  597. package/esm/highlevel/methods/stickers/move-sticker-in-set.js.map +1 -1
  598. package/esm/highlevel/methods/stories/can-send-story.js.map +1 -1
  599. package/esm/highlevel/methods/stories/edit-story.js.map +1 -1
  600. package/esm/highlevel/methods/stories/find-in-update.js.map +1 -1
  601. package/esm/highlevel/methods/stories/hide-my-stories-views.js.map +1 -1
  602. package/esm/highlevel/methods/stories/iter-all-stories.js.map +1 -1
  603. package/esm/highlevel/methods/stories/iter-profile-stories.js.map +1 -1
  604. package/esm/highlevel/methods/stories/iter-story-viewers.js.map +1 -1
  605. package/esm/highlevel/methods/stories/send-story.js.map +1 -1
  606. package/esm/highlevel/methods/users/delete-profile-photos.js.map +1 -1
  607. package/esm/highlevel/methods/users/get-users.js.map +1 -1
  608. package/esm/highlevel/methods/users/iter-profile-photos.js.map +1 -1
  609. package/esm/highlevel/methods/users/resolve-peer-many.js.map +1 -1
  610. package/esm/highlevel/methods/users/resolve-peer.js.map +1 -1
  611. package/esm/highlevel/methods/users/set-my-emoji-status.js.map +1 -1
  612. package/esm/highlevel/methods/users/set-my-profile-photo.js.map +1 -1
  613. package/esm/highlevel/storage/service/current-user.js +2 -0
  614. package/esm/highlevel/storage/service/current-user.js.map +1 -1
  615. package/esm/highlevel/storage/service/peers.js +5 -1
  616. package/esm/highlevel/storage/service/peers.js.map +1 -1
  617. package/esm/highlevel/storage/service/ref-messages.js +3 -0
  618. package/esm/highlevel/storage/service/ref-messages.js.map +1 -1
  619. package/esm/highlevel/storage/service/updates.js +1 -0
  620. package/esm/highlevel/storage/service/updates.js.map +1 -1
  621. package/esm/highlevel/storage/storage.d.ts +1 -1
  622. package/esm/highlevel/storage/storage.js +17 -4
  623. package/esm/highlevel/storage/storage.js.map +1 -1
  624. package/esm/highlevel/types/auth/sent-code.js +1 -0
  625. package/esm/highlevel/types/auth/sent-code.js.map +1 -1
  626. package/esm/highlevel/types/bots/game-high-score.js +2 -0
  627. package/esm/highlevel/types/bots/game-high-score.js.map +1 -1
  628. package/esm/highlevel/types/bots/inline-message/factories.js.map +1 -1
  629. package/esm/highlevel/types/bots/inline-result/factories.js.map +1 -1
  630. package/esm/highlevel/types/bots/keyboards/builder.js +2 -1
  631. package/esm/highlevel/types/bots/keyboards/builder.js.map +1 -1
  632. package/esm/highlevel/types/bots/keyboards/factories.js.map +1 -1
  633. package/esm/highlevel/types/calls/discard-reason.js.map +1 -1
  634. package/esm/highlevel/types/conversation.js +13 -7
  635. package/esm/highlevel/types/conversation.js.map +1 -1
  636. package/esm/highlevel/types/errors.js +3 -0
  637. package/esm/highlevel/types/errors.js.map +1 -1
  638. package/esm/highlevel/types/files/file-location.js +3 -0
  639. package/esm/highlevel/types/files/file-location.js.map +1 -1
  640. package/esm/highlevel/types/files/uploaded-file.js +1 -1
  641. package/esm/highlevel/types/files/uploaded-file.js.map +1 -1
  642. package/esm/highlevel/types/files/utils.d.ts +1 -1
  643. package/esm/highlevel/types/files/utils.js.map +1 -1
  644. package/esm/highlevel/types/files/web-document.js +1 -0
  645. package/esm/highlevel/types/files/web-document.js.map +1 -1
  646. package/esm/highlevel/types/media/audio.js +3 -2
  647. package/esm/highlevel/types/media/audio.js.map +1 -1
  648. package/esm/highlevel/types/media/contact.js +2 -1
  649. package/esm/highlevel/types/media/contact.js.map +1 -1
  650. package/esm/highlevel/types/media/dice.js +125 -124
  651. package/esm/highlevel/types/media/dice.js.map +1 -1
  652. package/esm/highlevel/types/media/document-utils.js.map +1 -1
  653. package/esm/highlevel/types/media/document.js +2 -4
  654. package/esm/highlevel/types/media/document.js.map +1 -1
  655. package/esm/highlevel/types/media/game.js +2 -1
  656. package/esm/highlevel/types/media/game.js.map +1 -1
  657. package/esm/highlevel/types/media/invoice.js +4 -1
  658. package/esm/highlevel/types/media/invoice.js.map +1 -1
  659. package/esm/highlevel/types/media/location.js +4 -5
  660. package/esm/highlevel/types/media/location.js.map +1 -1
  661. package/esm/highlevel/types/media/photo.js +8 -1
  662. package/esm/highlevel/types/media/photo.js.map +1 -1
  663. package/esm/highlevel/types/media/poll.js +4 -1
  664. package/esm/highlevel/types/media/poll.js.map +1 -1
  665. package/esm/highlevel/types/media/sticker.js +3 -1
  666. package/esm/highlevel/types/media/sticker.js.map +1 -1
  667. package/esm/highlevel/types/media/story.js +3 -1
  668. package/esm/highlevel/types/media/story.js.map +1 -1
  669. package/esm/highlevel/types/media/thumbnail.js +35 -22
  670. package/esm/highlevel/types/media/thumbnail.js.map +1 -1
  671. package/esm/highlevel/types/media/venue.js +2 -1
  672. package/esm/highlevel/types/media/venue.js.map +1 -1
  673. package/esm/highlevel/types/media/video.js +3 -1
  674. package/esm/highlevel/types/media/video.js.map +1 -1
  675. package/esm/highlevel/types/media/voice.js +2 -1
  676. package/esm/highlevel/types/media/voice.js.map +1 -1
  677. package/esm/highlevel/types/media/web-page.js +2 -1
  678. package/esm/highlevel/types/media/web-page.js.map +1 -1
  679. package/esm/highlevel/types/messages/dialog.js +3 -0
  680. package/esm/highlevel/types/messages/dialog.js.map +1 -1
  681. package/esm/highlevel/types/messages/draft-message.js +1 -0
  682. package/esm/highlevel/types/messages/draft-message.js.map +1 -1
  683. package/esm/highlevel/types/messages/message-action.js.map +1 -1
  684. package/esm/highlevel/types/messages/message-entity.js +2 -0
  685. package/esm/highlevel/types/messages/message-entity.js.map +1 -1
  686. package/esm/highlevel/types/messages/message-forward.js +2 -0
  687. package/esm/highlevel/types/messages/message-forward.js.map +1 -1
  688. package/esm/highlevel/types/messages/message-media.js.map +1 -1
  689. package/esm/highlevel/types/messages/message-reactions.js +4 -0
  690. package/esm/highlevel/types/messages/message-reactions.js.map +1 -1
  691. package/esm/highlevel/types/messages/message-replies.js +2 -0
  692. package/esm/highlevel/types/messages/message-replies.js.map +1 -1
  693. package/esm/highlevel/types/messages/message.js +6 -0
  694. package/esm/highlevel/types/messages/message.js.map +1 -1
  695. package/esm/highlevel/types/messages/replied-message.js +2 -0
  696. package/esm/highlevel/types/messages/replied-message.js.map +1 -1
  697. package/esm/highlevel/types/misc/sticker-set.js +7 -1
  698. package/esm/highlevel/types/misc/sticker-set.js.map +1 -1
  699. package/esm/highlevel/types/misc/takeout-session.js +5 -0
  700. package/esm/highlevel/types/misc/takeout-session.js.map +1 -1
  701. package/esm/highlevel/types/peers/chat-colors.js +2 -0
  702. package/esm/highlevel/types/peers/chat-colors.js.map +1 -1
  703. package/esm/highlevel/types/peers/chat-event/actions.js.map +1 -1
  704. package/esm/highlevel/types/peers/chat-event/filters.js.map +1 -1
  705. package/esm/highlevel/types/peers/chat-event/index.js +2 -0
  706. package/esm/highlevel/types/peers/chat-event/index.js.map +1 -1
  707. package/esm/highlevel/types/peers/chat-invite-link-member.js +2 -0
  708. package/esm/highlevel/types/peers/chat-invite-link-member.js.map +1 -1
  709. package/esm/highlevel/types/peers/chat-invite-link.js +2 -0
  710. package/esm/highlevel/types/peers/chat-invite-link.js.map +1 -1
  711. package/esm/highlevel/types/peers/chat-location.js +1 -0
  712. package/esm/highlevel/types/peers/chat-location.js.map +1 -1
  713. package/esm/highlevel/types/peers/chat-member.js +2 -0
  714. package/esm/highlevel/types/peers/chat-member.js.map +1 -1
  715. package/esm/highlevel/types/peers/chat-permissions.js +1 -0
  716. package/esm/highlevel/types/peers/chat-permissions.js.map +1 -1
  717. package/esm/highlevel/types/peers/chat-photo.js +5 -0
  718. package/esm/highlevel/types/peers/chat-photo.js.map +1 -1
  719. package/esm/highlevel/types/peers/chat-preview.js +2 -0
  720. package/esm/highlevel/types/peers/chat-preview.js.map +1 -1
  721. package/esm/highlevel/types/peers/chat.js +12 -1
  722. package/esm/highlevel/types/peers/chat.js.map +1 -1
  723. package/esm/highlevel/types/peers/forum-topic.js +9 -6
  724. package/esm/highlevel/types/peers/forum-topic.js.map +1 -1
  725. package/esm/highlevel/types/peers/peer.js.map +1 -1
  726. package/esm/highlevel/types/peers/peers-index.js +3 -1
  727. package/esm/highlevel/types/peers/peers-index.js.map +1 -1
  728. package/esm/highlevel/types/peers/user.js +5 -1
  729. package/esm/highlevel/types/peers/user.js.map +1 -1
  730. package/esm/highlevel/types/premium/boost-slot.js +2 -0
  731. package/esm/highlevel/types/premium/boost-slot.js.map +1 -1
  732. package/esm/highlevel/types/premium/boost-stats.js +1 -0
  733. package/esm/highlevel/types/premium/boost-stats.js.map +1 -1
  734. package/esm/highlevel/types/premium/boost.js +2 -0
  735. package/esm/highlevel/types/premium/boost.js.map +1 -1
  736. package/esm/highlevel/types/reactions/emoji-status.js +1 -0
  737. package/esm/highlevel/types/reactions/emoji-status.js.map +1 -1
  738. package/esm/highlevel/types/reactions/peer-reaction.js +2 -0
  739. package/esm/highlevel/types/reactions/peer-reaction.js.map +1 -1
  740. package/esm/highlevel/types/reactions/reaction-count.js +1 -0
  741. package/esm/highlevel/types/reactions/reaction-count.js.map +1 -1
  742. package/esm/highlevel/types/reactions/types.js.map +1 -1
  743. package/esm/highlevel/types/stories/all-stories.d.ts +2 -2
  744. package/esm/highlevel/types/stories/all-stories.js +3 -1
  745. package/esm/highlevel/types/stories/all-stories.js.map +1 -1
  746. package/esm/highlevel/types/stories/interactive/base.js +1 -0
  747. package/esm/highlevel/types/stories/interactive/base.js.map +1 -1
  748. package/esm/highlevel/types/stories/interactive/channel-post.js +3 -1
  749. package/esm/highlevel/types/stories/interactive/channel-post.js.map +1 -1
  750. package/esm/highlevel/types/stories/interactive/index.js.map +1 -1
  751. package/esm/highlevel/types/stories/interactive/input.js +1 -0
  752. package/esm/highlevel/types/stories/interactive/input.js.map +1 -1
  753. package/esm/highlevel/types/stories/interactive/location.js +2 -1
  754. package/esm/highlevel/types/stories/interactive/location.js.map +1 -1
  755. package/esm/highlevel/types/stories/interactive/reaction.js +2 -1
  756. package/esm/highlevel/types/stories/interactive/reaction.js.map +1 -1
  757. package/esm/highlevel/types/stories/interactive/venue.js +2 -1
  758. package/esm/highlevel/types/stories/interactive/venue.js.map +1 -1
  759. package/esm/highlevel/types/stories/peer-stories.js +2 -0
  760. package/esm/highlevel/types/stories/peer-stories.js.map +1 -1
  761. package/esm/highlevel/types/stories/stealth-mode.js +1 -0
  762. package/esm/highlevel/types/stories/stealth-mode.js.map +1 -1
  763. package/esm/highlevel/types/stories/story-interactions.js +2 -0
  764. package/esm/highlevel/types/stories/story-interactions.js.map +1 -1
  765. package/esm/highlevel/types/stories/story-viewer.d.ts +1 -1
  766. package/esm/highlevel/types/stories/story-viewer.js +6 -0
  767. package/esm/highlevel/types/stories/story-viewer.js.map +1 -1
  768. package/esm/highlevel/types/stories/story.js +2 -0
  769. package/esm/highlevel/types/stories/story.js.map +1 -1
  770. package/esm/highlevel/types/updates/bot-chat-join-request.js +2 -0
  771. package/esm/highlevel/types/updates/bot-chat-join-request.js.map +1 -1
  772. package/esm/highlevel/types/updates/bot-reaction.js +4 -0
  773. package/esm/highlevel/types/updates/bot-reaction.js.map +1 -1
  774. package/esm/highlevel/types/updates/bot-stopped.js +2 -0
  775. package/esm/highlevel/types/updates/bot-stopped.js.map +1 -1
  776. package/esm/highlevel/types/updates/callback-query.js +4 -0
  777. package/esm/highlevel/types/updates/callback-query.js.map +1 -1
  778. package/esm/highlevel/types/updates/chat-join-request.js +2 -0
  779. package/esm/highlevel/types/updates/chat-join-request.js.map +1 -1
  780. package/esm/highlevel/types/updates/chat-member-update.js +2 -0
  781. package/esm/highlevel/types/updates/chat-member-update.js.map +1 -1
  782. package/esm/highlevel/types/updates/chosen-inline-result.js +2 -0
  783. package/esm/highlevel/types/updates/chosen-inline-result.js.map +1 -1
  784. package/esm/highlevel/types/updates/delete-message-update.js +1 -0
  785. package/esm/highlevel/types/updates/delete-message-update.js.map +1 -1
  786. package/esm/highlevel/types/updates/delete-story-update.js +2 -0
  787. package/esm/highlevel/types/updates/delete-story-update.js.map +1 -1
  788. package/esm/highlevel/types/updates/history-read-update.js +1 -0
  789. package/esm/highlevel/types/updates/history-read-update.js.map +1 -1
  790. package/esm/highlevel/types/updates/inline-query.js +2 -0
  791. package/esm/highlevel/types/updates/inline-query.js.map +1 -1
  792. package/esm/highlevel/types/updates/parse-update.js.map +1 -1
  793. package/esm/highlevel/types/updates/poll-update.js +2 -0
  794. package/esm/highlevel/types/updates/poll-update.js.map +1 -1
  795. package/esm/highlevel/types/updates/poll-vote.js +2 -0
  796. package/esm/highlevel/types/updates/poll-vote.js.map +1 -1
  797. package/esm/highlevel/types/updates/pre-checkout-query.js +2 -0
  798. package/esm/highlevel/types/updates/pre-checkout-query.js.map +1 -1
  799. package/esm/highlevel/types/updates/story-update.js +2 -0
  800. package/esm/highlevel/types/updates/story-update.js.map +1 -1
  801. package/esm/highlevel/types/updates/user-status-update.js +1 -0
  802. package/esm/highlevel/types/updates/user-status-update.js.map +1 -1
  803. package/esm/highlevel/types/updates/user-typing-update.js +1 -0
  804. package/esm/highlevel/types/updates/user-typing-update.js.map +1 -1
  805. package/esm/highlevel/updates/manager.js +50 -28
  806. package/esm/highlevel/updates/manager.js.map +1 -1
  807. package/esm/highlevel/updates/parsed.js.map +1 -1
  808. package/esm/highlevel/updates/utils.js.map +1 -1
  809. package/esm/highlevel/utils/convert-file-id.js.map +1 -1
  810. package/esm/highlevel/utils/entities.js.map +1 -1
  811. package/esm/highlevel/utils/file-type.d.ts +1 -0
  812. package/esm/highlevel/utils/file-type.js +34 -0
  813. package/esm/highlevel/utils/file-type.js.map +1 -1
  814. package/esm/highlevel/utils/file-utils.js +1 -1
  815. package/esm/highlevel/utils/file-utils.js.map +1 -1
  816. package/esm/highlevel/utils/inline-utils.js.map +1 -1
  817. package/esm/highlevel/utils/inspectable.js.map +1 -1
  818. package/esm/highlevel/utils/memoize.js.map +1 -1
  819. package/esm/highlevel/utils/peer-utils.js.map +1 -1
  820. package/esm/highlevel/utils/query-batcher.js.map +1 -1
  821. package/esm/highlevel/utils/rps-meter.js +3 -0
  822. package/esm/highlevel/utils/rps-meter.js.map +1 -1
  823. package/esm/highlevel/utils/stream-utils.js.map +1 -1
  824. package/esm/highlevel/utils/string-session.d.ts +1 -2
  825. package/esm/highlevel/utils/string-session.js +27 -7
  826. package/esm/highlevel/utils/string-session.js.map +1 -1
  827. package/esm/highlevel/utils/voice-utils.js.map +1 -1
  828. package/esm/highlevel/worker/app-config.d.ts +2 -3
  829. package/esm/highlevel/worker/app-config.js +6 -3
  830. package/esm/highlevel/worker/app-config.js.map +1 -1
  831. package/esm/highlevel/worker/errors.js.map +1 -1
  832. package/esm/highlevel/worker/invoker.js +3 -2
  833. package/esm/highlevel/worker/invoker.js.map +1 -1
  834. package/esm/highlevel/worker/port.d.ts +16 -17
  835. package/esm/highlevel/worker/port.js +74 -49
  836. package/esm/highlevel/worker/port.js.map +1 -1
  837. package/esm/highlevel/worker/protocol.d.ts +1 -1
  838. package/esm/highlevel/worker/protocol.js.map +1 -1
  839. package/esm/highlevel/worker/storage.d.ts +9 -13
  840. package/esm/highlevel/worker/storage.js +34 -19
  841. package/esm/highlevel/worker/storage.js.map +1 -1
  842. package/esm/highlevel/worker/worker.js +3 -0
  843. package/esm/highlevel/worker/worker.js.map +1 -1
  844. package/esm/network/auth-key.js +8 -1
  845. package/esm/network/auth-key.js.map +1 -1
  846. package/esm/network/authorization.js.map +1 -1
  847. package/esm/network/client.js +39 -14
  848. package/esm/network/client.js.map +1 -1
  849. package/esm/network/config-manager.js.map +1 -1
  850. package/esm/network/mtproto-session.js +40 -30
  851. package/esm/network/mtproto-session.js.map +1 -1
  852. package/esm/network/multi-session-connection.d.ts +1 -1
  853. package/esm/network/multi-session-connection.js +13 -7
  854. package/esm/network/multi-session-connection.js.map +1 -1
  855. package/esm/network/network-manager.d.ts +2 -3
  856. package/esm/network/network-manager.js +49 -28
  857. package/esm/network/network-manager.js.map +1 -1
  858. package/esm/network/persistent-connection.d.ts +2 -2
  859. package/esm/network/persistent-connection.js +33 -22
  860. package/esm/network/persistent-connection.js.map +1 -1
  861. package/esm/network/server-salt.js +4 -5
  862. package/esm/network/server-salt.js.map +1 -1
  863. package/esm/network/session-connection.d.ts +1 -1
  864. package/esm/network/session-connection.js +22 -12
  865. package/esm/network/session-connection.js.map +1 -1
  866. package/esm/network/transports/abstract.d.ts +1 -1
  867. package/esm/network/transports/abstract.js +1 -0
  868. package/esm/network/transports/abstract.js.map +1 -1
  869. package/esm/network/transports/intermediate.js +1 -0
  870. package/esm/network/transports/intermediate.js.map +1 -1
  871. package/esm/network/transports/obfuscated.js +3 -0
  872. package/esm/network/transports/obfuscated.js.map +1 -1
  873. package/esm/network/transports/streamed.js +1 -4
  874. package/esm/network/transports/streamed.js.map +1 -1
  875. package/esm/network/transports/wrapped.js +2 -0
  876. package/esm/network/transports/wrapped.js.map +1 -1
  877. package/esm/platform.js.map +1 -1
  878. package/esm/storage/driver.js +3 -4
  879. package/esm/storage/driver.js.map +1 -1
  880. package/esm/storage/memory/driver.js +1 -3
  881. package/esm/storage/memory/driver.js.map +1 -1
  882. package/esm/storage/memory/index.js +5 -7
  883. package/esm/storage/memory/index.js.map +1 -1
  884. package/esm/storage/memory/repository/auth-keys.d.ts +1 -1
  885. package/esm/storage/memory/repository/auth-keys.js +2 -0
  886. package/esm/storage/memory/repository/auth-keys.js.map +1 -1
  887. package/esm/storage/memory/repository/kv.d.ts +1 -1
  888. package/esm/storage/memory/repository/kv.js +2 -0
  889. package/esm/storage/memory/repository/kv.js.map +1 -1
  890. package/esm/storage/memory/repository/peers.d.ts +1 -1
  891. package/esm/storage/memory/repository/peers.js +2 -0
  892. package/esm/storage/memory/repository/peers.js.map +1 -1
  893. package/esm/storage/memory/repository/ref-messages.d.ts +1 -1
  894. package/esm/storage/memory/repository/ref-messages.js +2 -0
  895. package/esm/storage/memory/repository/ref-messages.js.map +1 -1
  896. package/esm/storage/service/auth-keys.js +2 -0
  897. package/esm/storage/service/auth-keys.js.map +1 -1
  898. package/esm/storage/service/base.js +4 -0
  899. package/esm/storage/service/base.js.map +1 -1
  900. package/esm/storage/service/default-dcs.js +2 -0
  901. package/esm/storage/service/default-dcs.js.map +1 -1
  902. package/esm/storage/service/future-salts.js +2 -1
  903. package/esm/storage/service/future-salts.js.map +1 -1
  904. package/esm/storage/sqlite/driver.js +10 -10
  905. package/esm/storage/sqlite/driver.js.map +1 -1
  906. package/esm/storage/sqlite/index.d.ts +1 -1
  907. package/esm/storage/sqlite/index.js +5 -0
  908. package/esm/storage/sqlite/index.js.map +1 -1
  909. package/esm/storage/sqlite/repository/auth-keys.js +9 -0
  910. package/esm/storage/sqlite/repository/auth-keys.js.map +1 -1
  911. package/esm/storage/sqlite/repository/kv.js +5 -0
  912. package/esm/storage/sqlite/repository/kv.js.map +1 -1
  913. package/esm/storage/sqlite/repository/peers.js +6 -0
  914. package/esm/storage/sqlite/repository/peers.js.map +1 -1
  915. package/esm/storage/sqlite/repository/ref-messages.d.ts +1 -1
  916. package/esm/storage/sqlite/repository/ref-messages.js +6 -0
  917. package/esm/storage/sqlite/repository/ref-messages.js.map +1 -1
  918. package/esm/storage/storage.d.ts +1 -3
  919. package/esm/storage/storage.js +21 -13
  920. package/esm/storage/storage.js.map +1 -1
  921. package/esm/types/errors.js +13 -0
  922. package/esm/types/errors.js.map +1 -1
  923. package/esm/types/utils.d.ts +1 -1
  924. package/esm/types/utils.js.map +1 -1
  925. package/esm/utils/async-lock.js +1 -3
  926. package/esm/utils/async-lock.js.map +1 -1
  927. package/esm/utils/bigint-utils.js.map +1 -1
  928. package/esm/utils/binary/asn1-parser.js.map +1 -1
  929. package/esm/utils/buffer-utils.js.map +1 -1
  930. package/esm/utils/condition-variable.js +2 -0
  931. package/esm/utils/condition-variable.js.map +1 -1
  932. package/esm/utils/crypto/factorization.js.map +1 -1
  933. package/esm/utils/crypto/keys.js.map +1 -1
  934. package/esm/utils/crypto/miller-rabin.js.map +1 -1
  935. package/esm/utils/crypto/password.js.map +1 -1
  936. package/esm/utils/crypto/utils.js.map +1 -1
  937. package/esm/utils/dcs.js +1 -1
  938. package/esm/utils/dcs.js.map +1 -1
  939. package/esm/utils/deque.js +8 -2
  940. package/esm/utils/deque.js.map +1 -1
  941. package/esm/utils/early-timer.js +4 -1
  942. package/esm/utils/early-timer.js.map +1 -1
  943. package/esm/utils/error-reporting.js.map +1 -1
  944. package/esm/utils/function-utils.js.map +1 -1
  945. package/esm/utils/linked-list.js +4 -1
  946. package/esm/utils/linked-list.js.map +1 -1
  947. package/esm/utils/links/bots.js.map +1 -1
  948. package/esm/utils/links/chat.js.map +1 -1
  949. package/esm/utils/links/common.js.map +1 -1
  950. package/esm/utils/links/misc.js.map +1 -1
  951. package/esm/utils/logger.d.ts +2 -2
  952. package/esm/utils/logger.js +21 -14
  953. package/esm/utils/logger.js.map +1 -1
  954. package/esm/utils/long-utils.js +2 -6
  955. package/esm/utils/long-utils.js.map +1 -1
  956. package/esm/utils/lru-map.js +5 -1
  957. package/esm/utils/lru-map.js.map +1 -1
  958. package/esm/utils/lru-set.js +4 -0
  959. package/esm/utils/lru-set.js.map +1 -1
  960. package/esm/utils/peer-utils.js.map +1 -1
  961. package/esm/utils/reloadable.js +10 -7
  962. package/esm/utils/reloadable.js.map +1 -1
  963. package/esm/utils/sorted-array.js +2 -0
  964. package/esm/utils/sorted-array.js.map +1 -1
  965. package/esm/utils/tl-json.js.map +1 -1
  966. package/esm/utils/type-assertions.js.map +1 -1
  967. package/package.json +11 -11
@@ -8,43 +8,53 @@ import { AuthKey } from './auth-key.js';
8
8
  * all the relevant state
9
9
  */
10
10
  export class MtprotoSession {
11
+ _crypto;
12
+ log;
13
+ _readerMap;
14
+ _writerMap;
15
+ _salts;
16
+ _sessionId = randomLong();
17
+ _authKey;
18
+ _authKeyTemp;
19
+ _authKeyTempSecondary;
20
+ _timeOffset = 0;
21
+ _lastMessageId = Long.ZERO;
22
+ _seqNo = 0;
23
+ /// state ///
24
+ // recent msg ids
25
+ recentOutgoingMsgIds = new LruSet(1000, true);
26
+ recentIncomingMsgIds = new LruSet(1000, true);
27
+ // queues
28
+ queuedRpc = new Deque();
29
+ queuedAcks = [];
30
+ queuedStateReq = [];
31
+ queuedResendReq = [];
32
+ queuedCancelReq = [];
33
+ getStateSchedule = new SortedArray([], (a, b) => a.getState - b.getState);
34
+ chains = new Map();
35
+ chainsPendingFails = new Map();
36
+ // requests info
37
+ pendingMessages = new LongMap();
38
+ destroySessionIdToMsgId = new LongMap();
39
+ lastPingRtt = NaN;
40
+ lastPingTime = 0;
41
+ lastPingMsgId = Long.ZERO;
42
+ lastSessionCreatedUid = Long.ZERO;
43
+ initConnectionCalled = false;
44
+ authorizationPending = false;
45
+ next429Timeout = 1000;
46
+ current429Timeout;
47
+ next429ResetTimeout;
11
48
  constructor(_crypto, log, _readerMap, _writerMap, _salts) {
12
49
  this._crypto = _crypto;
13
50
  this.log = log;
14
51
  this._readerMap = _readerMap;
15
52
  this._writerMap = _writerMap;
16
53
  this._salts = _salts;
17
- this._sessionId = randomLong();
18
- this._authKey = new AuthKey(this._crypto, this.log, this._readerMap);
19
- this._authKeyTemp = new AuthKey(this._crypto, this.log, this._readerMap);
20
- this._authKeyTempSecondary = new AuthKey(this._crypto, this.log, this._readerMap);
21
- this._timeOffset = 0;
22
- this._lastMessageId = Long.ZERO;
23
- this._seqNo = 0;
24
- /// state ///
25
- // recent msg ids
26
- this.recentOutgoingMsgIds = new LruSet(1000, true);
27
- this.recentIncomingMsgIds = new LruSet(1000, true);
28
- // queues
29
- this.queuedRpc = new Deque();
30
- this.queuedAcks = [];
31
- this.queuedStateReq = [];
32
- this.queuedResendReq = [];
33
- this.queuedCancelReq = [];
34
- this.getStateSchedule = new SortedArray([], (a, b) => a.getState - b.getState);
35
- this.chains = new Map();
36
- this.chainsPendingFails = new Map();
37
- // requests info
38
- this.pendingMessages = new LongMap();
39
- this.destroySessionIdToMsgId = new LongMap();
40
- this.lastPingRtt = NaN;
41
- this.lastPingTime = 0;
42
- this.lastPingMsgId = Long.ZERO;
43
- this.lastSessionCreatedUid = Long.ZERO;
44
- this.initConnectionCalled = false;
45
- this.authorizationPending = false;
46
- this.next429Timeout = 1000;
47
54
  this.log.prefix = `[SESSION ${this._sessionId.toString(16)}] `;
55
+ this._authKey = new AuthKey(_crypto, log, _readerMap);
56
+ this._authKeyTemp = new AuthKey(_crypto, log, _readerMap);
57
+ this._authKeyTempSecondary = new AuthKey(_crypto, log, _readerMap);
48
58
  }
49
59
  get hasPendingMessages() {
50
60
  return Boolean(this.queuedRpc.length ||
@@ -1 +1 @@
1
- {"version":3,"file":"mtproto-session.js","sourceRoot":"","sources":["../../../src/network/mtproto-session.ts"],"names":[],"mappings":"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","sourcesContent":["import Long from 'long'\n\nimport { mtp, tl } from '@mtcute/tl'\nimport { TlBinaryWriter, TlReaderMap, TlSerializationCounter, TlWriterMap } from '@mtcute/tl-runtime'\n\nimport { MtcuteError } from '../types/index.js'\nimport {\n compareLongs,\n ControllablePromise,\n Deque,\n getRandomInt,\n ICryptoProvider,\n Logger,\n LongMap,\n LruSet,\n randomLong,\n SortedArray,\n} from '../utils/index.js'\nimport { AuthKey } from './auth-key.js'\nimport { ServerSaltManager } from './server-salt.js'\n\nexport interface PendingRpc {\n method: string\n data: Uint8Array\n promise: ControllablePromise\n stack?: string\n gzipOverhead?: number\n\n chainId?: string | number\n invokeAfter?: Long\n\n sent?: boolean\n done?: boolean\n msgId?: Long\n seqNo?: number\n containerId?: Long\n acked?: boolean\n initConn?: boolean\n getState?: number\n cancelled?: boolean\n timeout?: NodeJS.Timeout\n}\n\nexport type PendingMessage =\n | {\n _: 'rpc'\n rpc: PendingRpc\n }\n | {\n _: 'container'\n msgIds: Long[]\n }\n | {\n _: 'state'\n msgIds: Long[]\n containerId: Long\n }\n | {\n _: 'resend'\n msgIds: Long[]\n containerId: Long\n }\n | {\n _: 'ping'\n pingId: Long\n containerId: Long\n }\n | {\n _: 'destroy_session'\n sessionId: Long\n containerId: Long\n }\n | {\n _: 'cancel'\n msgId: Long\n containerId: Long\n }\n | {\n _: 'future_salts'\n containerId: Long\n }\n | {\n _: 'bind'\n promise: ControllablePromise\n }\n\n/**\n * Class encapsulating a single MTProto session and storing\n * all the relevant state\n */\nexport class MtprotoSession {\n _sessionId = randomLong()\n\n _authKey = new AuthKey(this._crypto, this.log, this._readerMap)\n _authKeyTemp = new AuthKey(this._crypto, this.log, this._readerMap)\n _authKeyTempSecondary = new AuthKey(this._crypto, this.log, this._readerMap)\n\n _timeOffset = 0\n _lastMessageId = Long.ZERO\n _seqNo = 0\n\n /// state ///\n // recent msg ids\n recentOutgoingMsgIds = new LruSet<Long>(1000, true)\n recentIncomingMsgIds = new LruSet<Long>(1000, true)\n\n // queues\n queuedRpc = new Deque<PendingRpc>()\n queuedAcks: Long[] = []\n queuedStateReq: Long[] = []\n queuedResendReq: Long[] = []\n queuedCancelReq: Long[] = []\n getStateSchedule = new SortedArray<PendingRpc>([], (a, b) => a.getState! - b.getState!)\n\n chains = new Map<string | number, Long>()\n chainsPendingFails = new Map<string | number, SortedArray<PendingRpc>>()\n\n // requests info\n pendingMessages = new LongMap<PendingMessage>()\n destroySessionIdToMsgId = new LongMap<Long>()\n\n lastPingRtt = NaN\n lastPingTime = 0\n lastPingMsgId = Long.ZERO\n lastSessionCreatedUid = Long.ZERO\n\n initConnectionCalled = false\n authorizationPending = false\n\n next429Timeout = 1000\n current429Timeout?: NodeJS.Timeout\n next429ResetTimeout?: NodeJS.Timeout\n\n constructor(\n readonly _crypto: ICryptoProvider,\n readonly log: Logger,\n readonly _readerMap: TlReaderMap,\n readonly _writerMap: TlWriterMap,\n readonly _salts: ServerSaltManager,\n ) {\n this.log.prefix = `[SESSION ${this._sessionId.toString(16)}] `\n }\n\n get hasPendingMessages(): boolean {\n return Boolean(\n this.queuedRpc.length ||\n this.queuedAcks.length ||\n this.queuedStateReq.length ||\n this.queuedResendReq.length,\n )\n }\n\n /**\n * Reset session by resetting auth key(s) and session state\n */\n reset(withAuthKey = false): void {\n if (withAuthKey) {\n this.resetAuthKey()\n }\n\n clearTimeout(this.current429Timeout)\n this.resetState(withAuthKey)\n this.resetLastPing(true)\n }\n\n resetAuthKey(): void {\n this._authKey.reset()\n this._authKeyTemp.reset()\n this._authKeyTempSecondary.reset()\n }\n\n updateTimeOffset(offset: number) {\n this.log.debug('time offset updated: %d', offset)\n this._timeOffset = offset\n // lastMessageId was generated with (potentially) wrong time\n // reset it to avoid bigger issues - at worst, we'll get bad_msg_notification\n this._lastMessageId = Long.ZERO\n }\n\n /**\n * Reset session state and generate a new session ID.\n *\n * By default, also cancels any pending RPC requests.\n * If `keepPending` is set to `true`, pending requests will be kept\n */\n resetState(keepPending = false): void {\n this._lastMessageId = Long.ZERO\n this._seqNo = 0\n\n this._sessionId = randomLong()\n this.log.debug('session reset, new sid = %h', this._sessionId)\n this.log.prefix = `[SESSION ${this._sessionId.toString(16)}] `\n\n // reset session state\n\n if (!keepPending) {\n for (const info of this.pendingMessages.values()) {\n if (info._ === 'rpc') {\n info.rpc.promise.reject(new MtcuteError('Session is reset'))\n }\n }\n this.pendingMessages.clear()\n }\n\n this.recentOutgoingMsgIds.clear()\n this.recentIncomingMsgIds.clear()\n\n if (!keepPending) {\n while (this.queuedRpc.length) {\n const rpc = this.queuedRpc.popFront()!\n\n if (rpc.sent === false) {\n rpc.promise.reject(new MtcuteError('Session is reset'))\n }\n }\n }\n\n this.queuedAcks.length = 0\n this.queuedStateReq.length = 0\n this.queuedResendReq.length = 0\n this.queuedCancelReq.length = 0\n this.getStateSchedule.clear()\n this.chains.clear()\n this.chainsPendingFails.clear()\n }\n\n enqueueRpc(rpc: PendingRpc, force?: boolean): boolean {\n // already queued or cancelled\n if ((!force && !rpc.sent) || rpc.cancelled) return false\n\n rpc.sent = false\n rpc.containerId = undefined\n this.log.debug('enqueued %s for sending (msg_id = %s)', rpc.method, rpc.msgId || 'n/a')\n this.queuedRpc.pushBack(rpc)\n\n return true\n }\n\n getMessageId(): Long {\n const timeTicks = Date.now()\n const timeSec = Math.floor(timeTicks / 1000) - this._timeOffset\n const timeMSec = timeTicks % 1000\n const random = getRandomInt(0xffff)\n\n let messageId = new Long((timeMSec << 21) | (random << 3) | 4, timeSec)\n\n if (this._lastMessageId.ge(messageId)) {\n messageId = this._lastMessageId.add(4)\n }\n\n this._lastMessageId = messageId\n\n return messageId\n }\n\n getSeqNo(isContentRelated = true): number {\n let seqNo = this._seqNo\n\n if (isContentRelated) {\n seqNo += 1\n this._seqNo += 2\n }\n\n return seqNo\n }\n\n /** Encrypt a single MTProto message using session's keys */\n encryptMessage(message: Uint8Array): Uint8Array {\n const key = this._authKeyTemp.ready ? this._authKeyTemp : this._authKey\n\n return key.encryptMessage(message, this._salts.currentSalt, this._sessionId)\n }\n\n /** Decrypt a single MTProto message using session's keys */\n decryptMessage(data: Uint8Array, callback: Parameters<AuthKey['decryptMessage']>[2]): void {\n if (!this._authKey.ready) throw new MtcuteError('Keys are not set up!')\n\n const authKeyId = data.subarray(0, 8)\n\n let key: AuthKey\n\n if (this._authKey.match(authKeyId)) {\n key = this._authKey\n } else if (this._authKeyTemp.match(authKeyId)) {\n key = this._authKeyTemp\n } else if (this._authKeyTempSecondary.match(authKeyId)) {\n key = this._authKeyTempSecondary\n } else {\n this.log.warn(\n 'received message with unknown authKey = %h (expected %h or %h or %h)',\n authKeyId,\n this._authKey.id,\n this._authKeyTemp.id,\n this._authKeyTempSecondary.id,\n )\n\n return\n }\n\n return key.decryptMessage(data, this._sessionId, callback)\n }\n\n writeMessage(\n writer: TlBinaryWriter,\n content: tl.TlObject | mtp.TlObject | Uint8Array,\n isContentRelated = true,\n ): Long {\n const messageId = this.getMessageId()\n const seqNo = this.getSeqNo(isContentRelated)\n\n const length = ArrayBuffer.isView(content) ?\n content.length :\n TlSerializationCounter.countNeededBytes(writer.objectMap!, content)\n\n writer.long(messageId)\n writer.int(seqNo)\n writer.uint(length)\n if (ArrayBuffer.isView(content)) writer.raw(content)\n else writer.object(content as tl.TlObject)\n\n return messageId\n }\n\n onTransportFlood(callback: () => void) {\n if (this.current429Timeout) return // already waiting\n\n // all active queries must be resent after a timeout\n this.resetLastPing(true)\n\n const timeout = this.next429Timeout\n\n this.next429Timeout = Math.min(this.next429Timeout * 2, 32000)\n clearTimeout(this.current429Timeout)\n clearTimeout(this.next429ResetTimeout)\n\n this.current429Timeout = setTimeout(() => {\n this.current429Timeout = undefined\n callback()\n }, timeout)\n this.next429ResetTimeout = setTimeout(() => {\n this.next429ResetTimeout = undefined\n this.next429Timeout = 1000\n }, 60000)\n\n this.log.debug('transport flood, waiting for %d ms before proceeding', timeout)\n\n return Date.now() + timeout\n }\n\n resetLastPing(withTime = false): void {\n if (withTime) this.lastPingTime = 0\n\n if (!this.lastPingMsgId.isZero()) {\n this.pendingMessages.delete(this.lastPingMsgId)\n }\n\n this.lastPingMsgId = Long.ZERO\n }\n\n addToChain(chainId: string | number, msgId: Long): Long | undefined {\n const prevMsgId = this.chains.get(chainId)\n this.chains.set(chainId, msgId)\n\n this.log.debug('added message %l to chain %s (prev: %l)', msgId, chainId, prevMsgId)\n\n return prevMsgId\n }\n\n removeFromChain(chainId: string | number, msgId: Long): void {\n const lastMsgId = this.chains.get(chainId)\n\n if (!lastMsgId) {\n this.log.warn('tried to remove message %l from empty chain %s', msgId, chainId)\n\n return\n }\n\n if (lastMsgId.eq(msgId)) {\n // last message of the chain, remove it\n this.log.debug('chain %s: exhausted, last message %l', msgId, chainId)\n this.chains.delete(chainId)\n }\n\n // do nothing\n }\n\n getPendingChainedFails(chainId: string | number): SortedArray<PendingRpc> {\n let arr = this.chainsPendingFails.get(chainId)\n\n if (!arr) {\n arr = new SortedArray<PendingRpc>([], (a, b) => compareLongs(a.invokeAfter!, b.invokeAfter!))\n this.chainsPendingFails.set(chainId, arr)\n }\n\n return arr\n }\n}\n"]}
1
+ {"version":3,"file":"mtproto-session.js","sourceRoot":"","sources":["../../../src/network/mtproto-session.ts"],"names":[],"mappings":"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","sourcesContent":["import Long from 'long'\n\nimport { mtp, tl } from '@mtcute/tl'\nimport { TlBinaryWriter, TlReaderMap, TlSerializationCounter, TlWriterMap } from '@mtcute/tl-runtime'\n\nimport { MtcuteError } from '../types/index.js'\nimport {\n compareLongs,\n ControllablePromise,\n Deque,\n getRandomInt,\n ICryptoProvider,\n Logger,\n LongMap,\n LruSet,\n randomLong,\n SortedArray,\n} from '../utils/index.js'\nimport { AuthKey } from './auth-key.js'\nimport { ServerSaltManager } from './server-salt.js'\n\nexport interface PendingRpc {\n method: string\n data: Uint8Array\n promise: ControllablePromise\n stack?: string\n gzipOverhead?: number\n\n chainId?: string | number\n invokeAfter?: Long\n\n sent?: boolean\n done?: boolean\n msgId?: Long\n seqNo?: number\n containerId?: Long\n acked?: boolean\n initConn?: boolean\n getState?: number\n cancelled?: boolean\n timeout?: NodeJS.Timeout\n}\n\nexport type PendingMessage =\n | {\n _: 'rpc'\n rpc: PendingRpc\n }\n | {\n _: 'container'\n msgIds: Long[]\n }\n | {\n _: 'state'\n msgIds: Long[]\n containerId: Long\n }\n | {\n _: 'resend'\n msgIds: Long[]\n containerId: Long\n }\n | {\n _: 'ping'\n pingId: Long\n containerId: Long\n }\n | {\n _: 'destroy_session'\n sessionId: Long\n containerId: Long\n }\n | {\n _: 'cancel'\n msgId: Long\n containerId: Long\n }\n | {\n _: 'future_salts'\n containerId: Long\n }\n | {\n _: 'bind'\n promise: ControllablePromise\n }\n\n/**\n * Class encapsulating a single MTProto session and storing\n * all the relevant state\n */\nexport class MtprotoSession {\n _sessionId = randomLong()\n\n _authKey: AuthKey\n _authKeyTemp: AuthKey\n _authKeyTempSecondary: AuthKey\n\n _timeOffset = 0\n _lastMessageId = Long.ZERO\n _seqNo = 0\n\n /// state ///\n // recent msg ids\n recentOutgoingMsgIds = new LruSet<Long>(1000, true)\n recentIncomingMsgIds = new LruSet<Long>(1000, true)\n\n // queues\n queuedRpc = new Deque<PendingRpc>()\n queuedAcks: Long[] = []\n queuedStateReq: Long[] = []\n queuedResendReq: Long[] = []\n queuedCancelReq: Long[] = []\n getStateSchedule = new SortedArray<PendingRpc>([], (a, b) => a.getState! - b.getState!)\n\n chains = new Map<string | number, Long>()\n chainsPendingFails = new Map<string | number, SortedArray<PendingRpc>>()\n\n // requests info\n pendingMessages = new LongMap<PendingMessage>()\n destroySessionIdToMsgId = new LongMap<Long>()\n\n lastPingRtt = NaN\n lastPingTime = 0\n lastPingMsgId = Long.ZERO\n lastSessionCreatedUid = Long.ZERO\n\n initConnectionCalled = false\n authorizationPending = false\n\n next429Timeout = 1000\n current429Timeout?: NodeJS.Timeout\n next429ResetTimeout?: NodeJS.Timeout\n\n constructor(\n readonly _crypto: ICryptoProvider,\n readonly log: Logger,\n readonly _readerMap: TlReaderMap,\n readonly _writerMap: TlWriterMap,\n readonly _salts: ServerSaltManager,\n ) {\n this.log.prefix = `[SESSION ${this._sessionId.toString(16)}] `\n\n this._authKey = new AuthKey(_crypto, log, _readerMap)\n this._authKeyTemp = new AuthKey(_crypto, log, _readerMap)\n this._authKeyTempSecondary = new AuthKey(_crypto, log, _readerMap)\n }\n\n get hasPendingMessages(): boolean {\n return Boolean(\n this.queuedRpc.length ||\n this.queuedAcks.length ||\n this.queuedStateReq.length ||\n this.queuedResendReq.length,\n )\n }\n\n /**\n * Reset session by resetting auth key(s) and session state\n */\n reset(withAuthKey = false): void {\n if (withAuthKey) {\n this.resetAuthKey()\n }\n\n clearTimeout(this.current429Timeout)\n this.resetState(withAuthKey)\n this.resetLastPing(true)\n }\n\n resetAuthKey(): void {\n this._authKey.reset()\n this._authKeyTemp.reset()\n this._authKeyTempSecondary.reset()\n }\n\n updateTimeOffset(offset: number) {\n this.log.debug('time offset updated: %d', offset)\n this._timeOffset = offset\n // lastMessageId was generated with (potentially) wrong time\n // reset it to avoid bigger issues - at worst, we'll get bad_msg_notification\n this._lastMessageId = Long.ZERO\n }\n\n /**\n * Reset session state and generate a new session ID.\n *\n * By default, also cancels any pending RPC requests.\n * If `keepPending` is set to `true`, pending requests will be kept\n */\n resetState(keepPending = false): void {\n this._lastMessageId = Long.ZERO\n this._seqNo = 0\n\n this._sessionId = randomLong()\n this.log.debug('session reset, new sid = %h', this._sessionId)\n this.log.prefix = `[SESSION ${this._sessionId.toString(16)}] `\n\n // reset session state\n\n if (!keepPending) {\n for (const info of this.pendingMessages.values()) {\n if (info._ === 'rpc') {\n info.rpc.promise.reject(new MtcuteError('Session is reset'))\n }\n }\n this.pendingMessages.clear()\n }\n\n this.recentOutgoingMsgIds.clear()\n this.recentIncomingMsgIds.clear()\n\n if (!keepPending) {\n while (this.queuedRpc.length) {\n const rpc = this.queuedRpc.popFront()!\n\n if (rpc.sent === false) {\n rpc.promise.reject(new MtcuteError('Session is reset'))\n }\n }\n }\n\n this.queuedAcks.length = 0\n this.queuedStateReq.length = 0\n this.queuedResendReq.length = 0\n this.queuedCancelReq.length = 0\n this.getStateSchedule.clear()\n this.chains.clear()\n this.chainsPendingFails.clear()\n }\n\n enqueueRpc(rpc: PendingRpc, force?: boolean): boolean {\n // already queued or cancelled\n if ((!force && !rpc.sent) || rpc.cancelled) return false\n\n rpc.sent = false\n rpc.containerId = undefined\n this.log.debug('enqueued %s for sending (msg_id = %s)', rpc.method, rpc.msgId || 'n/a')\n this.queuedRpc.pushBack(rpc)\n\n return true\n }\n\n getMessageId(): Long {\n const timeTicks = Date.now()\n const timeSec = Math.floor(timeTicks / 1000) - this._timeOffset\n const timeMSec = timeTicks % 1000\n const random = getRandomInt(0xffff)\n\n let messageId = new Long((timeMSec << 21) | (random << 3) | 4, timeSec)\n\n if (this._lastMessageId.ge(messageId)) {\n messageId = this._lastMessageId.add(4)\n }\n\n this._lastMessageId = messageId\n\n return messageId\n }\n\n getSeqNo(isContentRelated = true): number {\n let seqNo = this._seqNo\n\n if (isContentRelated) {\n seqNo += 1\n this._seqNo += 2\n }\n\n return seqNo\n }\n\n /** Encrypt a single MTProto message using session's keys */\n encryptMessage(message: Uint8Array): Uint8Array {\n const key = this._authKeyTemp.ready ? this._authKeyTemp : this._authKey\n\n return key.encryptMessage(message, this._salts.currentSalt, this._sessionId)\n }\n\n /** Decrypt a single MTProto message using session's keys */\n decryptMessage(data: Uint8Array, callback: Parameters<AuthKey['decryptMessage']>[2]): void {\n if (!this._authKey.ready) throw new MtcuteError('Keys are not set up!')\n\n const authKeyId = data.subarray(0, 8)\n\n let key: AuthKey\n\n if (this._authKey.match(authKeyId)) {\n key = this._authKey\n } else if (this._authKeyTemp.match(authKeyId)) {\n key = this._authKeyTemp\n } else if (this._authKeyTempSecondary.match(authKeyId)) {\n key = this._authKeyTempSecondary\n } else {\n this.log.warn(\n 'received message with unknown authKey = %h (expected %h or %h or %h)',\n authKeyId,\n this._authKey.id,\n this._authKeyTemp.id,\n this._authKeyTempSecondary.id,\n )\n\n return\n }\n\n return key.decryptMessage(data, this._sessionId, callback)\n }\n\n writeMessage(\n writer: TlBinaryWriter,\n content: tl.TlObject | mtp.TlObject | Uint8Array,\n isContentRelated = true,\n ): Long {\n const messageId = this.getMessageId()\n const seqNo = this.getSeqNo(isContentRelated)\n\n const length = ArrayBuffer.isView(content) ?\n content.length :\n TlSerializationCounter.countNeededBytes(writer.objectMap!, content)\n\n writer.long(messageId)\n writer.int(seqNo)\n writer.uint(length)\n if (ArrayBuffer.isView(content)) writer.raw(content)\n else writer.object(content as tl.TlObject)\n\n return messageId\n }\n\n onTransportFlood(callback: () => void) {\n if (this.current429Timeout) return // already waiting\n\n // all active queries must be resent after a timeout\n this.resetLastPing(true)\n\n const timeout = this.next429Timeout\n\n this.next429Timeout = Math.min(this.next429Timeout * 2, 32000)\n clearTimeout(this.current429Timeout)\n clearTimeout(this.next429ResetTimeout)\n\n this.current429Timeout = setTimeout(() => {\n this.current429Timeout = undefined\n callback()\n }, timeout)\n this.next429ResetTimeout = setTimeout(() => {\n this.next429ResetTimeout = undefined\n this.next429Timeout = 1000\n }, 60000)\n\n this.log.debug('transport flood, waiting for %d ms before proceeding', timeout)\n\n return Date.now() + timeout\n }\n\n resetLastPing(withTime = false): void {\n if (withTime) this.lastPingTime = 0\n\n if (!this.lastPingMsgId.isZero()) {\n this.pendingMessages.delete(this.lastPingMsgId)\n }\n\n this.lastPingMsgId = Long.ZERO\n }\n\n addToChain(chainId: string | number, msgId: Long): Long | undefined {\n const prevMsgId = this.chains.get(chainId)\n this.chains.set(chainId, msgId)\n\n this.log.debug('added message %l to chain %s (prev: %l)', msgId, chainId, prevMsgId)\n\n return prevMsgId\n }\n\n removeFromChain(chainId: string | number, msgId: Long): void {\n const lastMsgId = this.chains.get(chainId)\n\n if (!lastMsgId) {\n this.log.warn('tried to remove message %l from empty chain %s', msgId, chainId)\n\n return\n }\n\n if (lastMsgId.eq(msgId)) {\n // last message of the chain, remove it\n this.log.debug('chain %s: exhausted, last message %l', msgId, chainId)\n this.chains.delete(chainId)\n }\n\n // do nothing\n }\n\n getPendingChainedFails(chainId: string | number): SortedArray<PendingRpc> {\n let arr = this.chainsPendingFails.get(chainId)\n\n if (!arr) {\n arr = new SortedArray<PendingRpc>([], (a, b) => compareLongs(a.invokeAfter!, b.invokeAfter!))\n this.chainsPendingFails.set(chainId, arr)\n }\n\n return arr\n }\n}\n"]}
@@ -17,7 +17,7 @@ export declare class MultiSessionConnection extends EventEmitter {
17
17
  private _updateSessions;
18
18
  private _updateConnections;
19
19
  _destroyed: boolean;
20
- destroy(): void;
20
+ destroy(): Promise<void>;
21
21
  private _nextConnection;
22
22
  sendRpc<T extends tl.RpcMethod>(request: T, stack?: string, timeout?: number, abortSignal?: AbortSignal, chainId?: string | number): Promise<tl.RpcCallReturn[T['_']]>;
23
23
  connect(): void;
@@ -3,14 +3,15 @@ import { createControllablePromise } from '../utils/index.js';
3
3
  import { MtprotoSession } from './mtproto-session.js';
4
4
  import { SessionConnection } from './session-connection.js';
5
5
  export class MultiSessionConnection extends EventEmitter {
6
+ params;
7
+ _count;
8
+ _log;
9
+ _sessions;
10
+ _enforcePfs = false;
6
11
  constructor(params, _count, log, logPrefix = '') {
7
12
  super();
8
13
  this.params = params;
9
14
  this._count = _count;
10
- this._enforcePfs = false;
11
- this._connections = [];
12
- this._destroyed = false;
13
- this._nextConnection = 0;
14
15
  this._log = log.create('multi');
15
16
  if (logPrefix)
16
17
  this._log.prefix = `[${logPrefix}] `;
@@ -18,6 +19,7 @@ export class MultiSessionConnection extends EventEmitter {
18
19
  this._sessions = [];
19
20
  this._updateConnections();
20
21
  }
22
+ _connections = [];
21
23
  setCount(count, connect = this.params.isMainConnection) {
22
24
  this._count = count;
23
25
  this._updateConnections(connect);
@@ -87,7 +89,9 @@ export class MultiSessionConnection extends EventEmitter {
87
89
  // destroy extra connections
88
90
  for (let i = this._connections.length - 1; i >= this._count; i--) {
89
91
  this._connections[i].removeAllListeners();
90
- this._connections[i].destroy();
92
+ this._connections[i].destroy().catch((err) => {
93
+ this._log.warn('error destroying connection: %s', err);
94
+ });
91
95
  }
92
96
  this._connections.splice(this._count);
93
97
  return;
@@ -156,12 +160,14 @@ export class MultiSessionConnection extends EventEmitter {
156
160
  conn.connect();
157
161
  }
158
162
  }
159
- destroy() {
160
- this._connections.forEach((conn) => conn.destroy());
163
+ _destroyed = false;
164
+ async destroy() {
165
+ await Promise.all(this._connections.map((conn) => conn.destroy()));
161
166
  this._sessions.forEach((sess) => sess.reset());
162
167
  this.removeAllListeners();
163
168
  this._destroyed = true;
164
169
  }
170
+ _nextConnection = 0;
165
171
  sendRpc(request, stack, timeout, abortSignal, chainId) {
166
172
  // if (this.params.isMainConnection) {
167
173
  // find the least loaded connection
@@ -1 +1 @@
1
- {"version":3,"file":"multi-session-connection.js","sourceRoot":"","sources":["../../../src/network/multi-session-connection.ts"],"names":[],"mappings":"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","sourcesContent":["import EventEmitter from 'events'\n\nimport { tl } from '@mtcute/tl'\n\nimport { createControllablePromise, Logger } from '../utils/index.js'\nimport { MtprotoSession } from './mtproto-session.js'\nimport { SessionConnection, SessionConnectionParams } from './session-connection.js'\nimport { TransportFactory } from './transports/index.js'\n\nexport class MultiSessionConnection extends EventEmitter {\n private _log: Logger\n readonly _sessions: MtprotoSession[]\n private _enforcePfs = false\n\n constructor(\n readonly params: SessionConnectionParams,\n private _count: number,\n log: Logger,\n logPrefix = '',\n ) {\n super()\n this._log = log.create('multi')\n if (logPrefix) this._log.prefix = `[${logPrefix}] `\n this._enforcePfs = _count > 1 && params.isMainConnection\n\n this._sessions = []\n this._updateConnections()\n }\n\n protected _connections: SessionConnection[] = []\n\n setCount(count: number, connect = this.params.isMainConnection): void {\n this._count = count\n\n this._updateConnections(connect)\n }\n\n private _updateSessions(): void {\n // there are two cases\n // 1. this msc is main, in which case every connection should have its own session\n // 2. this msc is not main, in which case all connections should share the same session\n // if (!this.params.isMainConnection) {\n // // case 2\n // this._log.debug(\n // 'updating sessions count: %d -> 1',\n // this._sessions.length,\n // )\n //\n // if (this._sessions.length === 0) {\n // this._sessions.push(\n // new MtprotoSession(\n // this.params.crypto,\n // this._log.create('session'),\n // this.params.readerMap,\n // this.params.writerMap,\n // ),\n // )\n // }\n //\n // // shouldn't happen, but just in case\n // while (this._sessions.length > 1) {\n // this._sessions.pop()!.reset()\n // }\n //\n // return\n // }\n\n this._log.debug('updating sessions count: %d -> %d', this._sessions.length, this._count)\n\n // case 1\n if (this._sessions.length === this._count) return\n\n if (this._sessions.length > this._count) {\n // destroy extra sessions\n for (let i = this._sessions.length - 1; i >= this._count; i--) {\n this._sessions[i].reset()\n }\n\n this._sessions.splice(this._count)\n\n return\n }\n\n while (this._sessions.length < this._count) {\n const idx = this._sessions.length\n const session = new MtprotoSession(\n this.params.crypto,\n this._log.create('session'),\n this.params.readerMap,\n this.params.writerMap,\n this.params.salts,\n )\n\n // brvh\n if (idx !== 0) session._authKey = this._sessions[0]._authKey\n\n this._sessions.push(session)\n }\n }\n\n private _updateConnections(connect = false): void {\n this._updateSessions()\n if (this._connections.length === this._count) return\n\n this._log.debug('updating connections count: %d -> %d', this._connections.length, this._count)\n\n const newEnforcePfs = this._count > 1 && this.params.isMainConnection\n const enforcePfsChanged = newEnforcePfs !== this._enforcePfs\n\n if (enforcePfsChanged) {\n this._log.debug('enforcePfs changed: %s -> %s', this._enforcePfs, newEnforcePfs)\n this._enforcePfs = newEnforcePfs\n }\n\n if (this._connections.length > this._count) {\n // destroy extra connections\n for (let i = this._connections.length - 1; i >= this._count; i--) {\n this._connections[i].removeAllListeners()\n this._connections[i].destroy()\n }\n\n this._connections.splice(this._count)\n\n return\n }\n\n if (enforcePfsChanged) {\n // we need to fetch new auth keys first\n const promise = createControllablePromise<void>()\n this.emit('request-keys', promise)\n\n promise\n .then(() => {\n this._connections.forEach((conn) => {\n conn.setUsePfs(this.params.usePfs || this._enforcePfs)\n\n if (connect) conn.connect()\n })\n })\n .catch((err) => {\n this.emit('error', err)\n })\n }\n\n // create new connections\n for (let i = this._connections.length; i < this._count; i++) {\n const session = this._sessions[i] // this.params.isMainConnection ? // :\n // this._sessions[0]\n const conn = new SessionConnection(\n {\n ...this.params,\n usePfs: this.params.usePfs || this._enforcePfs,\n isMainConnection: this.params.isMainConnection && i === 0,\n withUpdates:\n this.params.isMainConnection && this.params.isMainDcConnection && !this.params.disableUpdates,\n },\n session,\n )\n\n if (this.params.isMainConnection && this.params.isMainDcConnection) {\n conn.on('update', (update) => this.emit('update', update))\n }\n conn.on('error', (err) => this.emit('error', err, conn))\n conn.on('key-change', (key) => {\n this.emit('key-change', i, key)\n\n // notify other connections\n for (const conn_ of this._connections) {\n if (conn_ === conn) continue\n conn_.onConnected()\n }\n })\n conn.on('tmp-key-change', (key, expires) => this.emit('tmp-key-change', i, key, expires))\n conn.on('future-salts', (salts) => this.emit('future-salts', salts))\n conn.on('auth-begin', () => {\n this._log.debug('received auth-begin from connection %d', i)\n this.emit('auth-begin', i)\n\n // we need to reset temp auth keys if there are any left\n\n this._connections.forEach((conn_) => {\n conn_._session._authKeyTemp.reset()\n if (conn_ !== conn) conn_.reconnect()\n })\n })\n conn.on('usable', () => this.emit('usable', i))\n conn.on('wait', () => this.emit('wait', i))\n conn.on('request-auth', () => this.emit('request-auth', i))\n conn.on('flood-done', () => {\n this._log.debug('received flood-done from connection %d', i)\n\n this._connections.forEach((it) => it.flushWhenIdle())\n })\n\n this._connections.push(conn)\n // if enforcePfsChanged, we need to connect after setting the new auth key\n if (connect && !enforcePfsChanged) conn.connect()\n }\n }\n\n _destroyed = false\n destroy(): void {\n this._connections.forEach((conn) => conn.destroy())\n this._sessions.forEach((sess) => sess.reset())\n this.removeAllListeners()\n\n this._destroyed = true\n }\n\n private _nextConnection = 0\n\n sendRpc<T extends tl.RpcMethod>(\n request: T,\n stack?: string,\n timeout?: number,\n abortSignal?: AbortSignal,\n chainId?: string | number,\n ): Promise<tl.RpcCallReturn[T['_']]> {\n // if (this.params.isMainConnection) {\n // find the least loaded connection\n let min = Infinity\n let minIdx = 0\n\n for (let i = 0; i < this._connections.length; i++) {\n const conn = this._connections[i]\n const total = conn._session.queuedRpc.length + conn._session.pendingMessages.size()\n\n if (total < min) {\n min = total\n minIdx = i\n }\n }\n\n return this._connections[minIdx].sendRpc(request, stack, timeout, abortSignal, chainId)\n // }\n\n // round-robin connections\n // since they all share the same session, it doesn't matter which one we use\n // the connection chosen here will only affect the first attempt at sending\n // return this._connections[\n // this._nextConnection++ % this._connections.length\n // ].sendRpc(request, stack, timeout)\n }\n\n connect(): void {\n for (const conn of this._connections) {\n conn.connect()\n }\n }\n\n ensureConnected(): void {\n if (this._connections[0].isConnected) return\n\n this.connect()\n }\n\n setAuthKey(authKey: Uint8Array | null, temp = false, idx = 0): void {\n const session = this._sessions[idx]\n const key = temp ? session._authKeyTemp : session._authKey\n key.setup(authKey)\n }\n\n resetAuthKeys(): void {\n for (const session of this._sessions) {\n session.reset(true)\n }\n this.notifyKeyChange()\n }\n\n setInactivityTimeout(timeout?: number): void {\n this._log.debug('setting inactivity timeout to %s', timeout)\n\n // for future connections (if any)\n this.params.inactivityTimeout = timeout\n\n // for current connections\n for (const conn of this._connections) {\n conn.setInactivityTimeout(timeout)\n }\n }\n\n notifyKeyChange(): void {\n // only expected to be called on non-main connections\n const session = this._sessions[0]\n\n if (this.params.usePfs && !session._authKeyTemp.ready) {\n this._log.debug('temp auth key needed but not ready, ignoring key change')\n\n return\n }\n\n if (this._sessions[0].queuedRpc.length) {\n // there are pending requests, we need to reconnect.\n this._log.debug('notifying key change on the connection due to queued rpc')\n this._connections[0].onConnected()\n }\n\n // connection is idle, we don't need to notify it\n }\n\n notifyNetworkChanged(connected: boolean): void {\n for (const conn of this._connections) {\n conn.notifyNetworkChanged(connected)\n }\n }\n\n requestAuth(): void {\n this._connections[0]._authorize()\n }\n\n resetSessions(): void {\n if (this.params.isMainConnection) {\n for (const conn of this._connections) {\n conn._resetSession()\n }\n } else {\n this._connections[0]._resetSession()\n }\n }\n\n changeTransport(factory: TransportFactory): void {\n this._connections.forEach((conn) => conn.changeTransport(factory))\n }\n\n getPoolSize(): number {\n return this._connections.length\n }\n}\n"]}
1
+ {"version":3,"file":"multi-session-connection.js","sourceRoot":"","sources":["../../../src/network/multi-session-connection.ts"],"names":[],"mappings":"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","sourcesContent":["import EventEmitter from 'events'\n\nimport { tl } from '@mtcute/tl'\n\nimport { createControllablePromise, Logger } from '../utils/index.js'\nimport { MtprotoSession } from './mtproto-session.js'\nimport { SessionConnection, SessionConnectionParams } from './session-connection.js'\nimport { TransportFactory } from './transports/index.js'\n\nexport class MultiSessionConnection extends EventEmitter {\n private _log: Logger\n readonly _sessions: MtprotoSession[]\n private _enforcePfs = false\n\n constructor(\n readonly params: SessionConnectionParams,\n private _count: number,\n log: Logger,\n logPrefix = '',\n ) {\n super()\n this._log = log.create('multi')\n if (logPrefix) this._log.prefix = `[${logPrefix}] `\n this._enforcePfs = _count > 1 && params.isMainConnection\n\n this._sessions = []\n this._updateConnections()\n }\n\n protected _connections: SessionConnection[] = []\n\n setCount(count: number, connect = this.params.isMainConnection): void {\n this._count = count\n\n this._updateConnections(connect)\n }\n\n private _updateSessions(): void {\n // there are two cases\n // 1. this msc is main, in which case every connection should have its own session\n // 2. this msc is not main, in which case all connections should share the same session\n // if (!this.params.isMainConnection) {\n // // case 2\n // this._log.debug(\n // 'updating sessions count: %d -> 1',\n // this._sessions.length,\n // )\n //\n // if (this._sessions.length === 0) {\n // this._sessions.push(\n // new MtprotoSession(\n // this.params.crypto,\n // this._log.create('session'),\n // this.params.readerMap,\n // this.params.writerMap,\n // ),\n // )\n // }\n //\n // // shouldn't happen, but just in case\n // while (this._sessions.length > 1) {\n // this._sessions.pop()!.reset()\n // }\n //\n // return\n // }\n\n this._log.debug('updating sessions count: %d -> %d', this._sessions.length, this._count)\n\n // case 1\n if (this._sessions.length === this._count) return\n\n if (this._sessions.length > this._count) {\n // destroy extra sessions\n for (let i = this._sessions.length - 1; i >= this._count; i--) {\n this._sessions[i].reset()\n }\n\n this._sessions.splice(this._count)\n\n return\n }\n\n while (this._sessions.length < this._count) {\n const idx = this._sessions.length\n const session = new MtprotoSession(\n this.params.crypto,\n this._log.create('session'),\n this.params.readerMap,\n this.params.writerMap,\n this.params.salts,\n )\n\n // brvh\n if (idx !== 0) session._authKey = this._sessions[0]._authKey\n\n this._sessions.push(session)\n }\n }\n\n private _updateConnections(connect = false): void {\n this._updateSessions()\n if (this._connections.length === this._count) return\n\n this._log.debug('updating connections count: %d -> %d', this._connections.length, this._count)\n\n const newEnforcePfs = this._count > 1 && this.params.isMainConnection\n const enforcePfsChanged = newEnforcePfs !== this._enforcePfs\n\n if (enforcePfsChanged) {\n this._log.debug('enforcePfs changed: %s -> %s', this._enforcePfs, newEnforcePfs)\n this._enforcePfs = newEnforcePfs\n }\n\n if (this._connections.length > this._count) {\n // destroy extra connections\n for (let i = this._connections.length - 1; i >= this._count; i--) {\n this._connections[i].removeAllListeners()\n this._connections[i].destroy().catch((err) => {\n this._log.warn('error destroying connection: %s', err)\n })\n }\n\n this._connections.splice(this._count)\n\n return\n }\n\n if (enforcePfsChanged) {\n // we need to fetch new auth keys first\n const promise = createControllablePromise<void>()\n this.emit('request-keys', promise)\n\n promise\n .then(() => {\n this._connections.forEach((conn) => {\n conn.setUsePfs(this.params.usePfs || this._enforcePfs)\n\n if (connect) conn.connect()\n })\n })\n .catch((err) => {\n this.emit('error', err)\n })\n }\n\n // create new connections\n for (let i = this._connections.length; i < this._count; i++) {\n const session = this._sessions[i] // this.params.isMainConnection ? // :\n // this._sessions[0]\n const conn = new SessionConnection(\n {\n ...this.params,\n usePfs: this.params.usePfs || this._enforcePfs,\n isMainConnection: this.params.isMainConnection && i === 0,\n withUpdates:\n this.params.isMainConnection && this.params.isMainDcConnection && !this.params.disableUpdates,\n },\n session,\n )\n\n if (this.params.isMainConnection && this.params.isMainDcConnection) {\n conn.on('update', (update) => this.emit('update', update))\n }\n conn.on('error', (err) => this.emit('error', err, conn))\n conn.on('key-change', (key) => {\n this.emit('key-change', i, key)\n\n // notify other connections\n for (const conn_ of this._connections) {\n if (conn_ === conn) continue\n conn_.onConnected()\n }\n })\n conn.on('tmp-key-change', (key, expires) => this.emit('tmp-key-change', i, key, expires))\n conn.on('future-salts', (salts) => this.emit('future-salts', salts))\n conn.on('auth-begin', () => {\n this._log.debug('received auth-begin from connection %d', i)\n this.emit('auth-begin', i)\n\n // we need to reset temp auth keys if there are any left\n\n this._connections.forEach((conn_) => {\n conn_._session._authKeyTemp.reset()\n if (conn_ !== conn) conn_.reconnect()\n })\n })\n conn.on('usable', () => this.emit('usable', i))\n conn.on('wait', () => this.emit('wait', i))\n conn.on('request-auth', () => this.emit('request-auth', i))\n conn.on('flood-done', () => {\n this._log.debug('received flood-done from connection %d', i)\n\n this._connections.forEach((it) => it.flushWhenIdle())\n })\n\n this._connections.push(conn)\n // if enforcePfsChanged, we need to connect after setting the new auth key\n if (connect && !enforcePfsChanged) conn.connect()\n }\n }\n\n _destroyed = false\n async destroy(): Promise<void> {\n await Promise.all(this._connections.map((conn) => conn.destroy()))\n this._sessions.forEach((sess) => sess.reset())\n this.removeAllListeners()\n\n this._destroyed = true\n }\n\n private _nextConnection = 0\n\n sendRpc<T extends tl.RpcMethod>(\n request: T,\n stack?: string,\n timeout?: number,\n abortSignal?: AbortSignal,\n chainId?: string | number,\n ): Promise<tl.RpcCallReturn[T['_']]> {\n // if (this.params.isMainConnection) {\n // find the least loaded connection\n let min = Infinity\n let minIdx = 0\n\n for (let i = 0; i < this._connections.length; i++) {\n const conn = this._connections[i]\n const total = conn._session.queuedRpc.length + conn._session.pendingMessages.size()\n\n if (total < min) {\n min = total\n minIdx = i\n }\n }\n\n return this._connections[minIdx].sendRpc(request, stack, timeout, abortSignal, chainId)\n // }\n\n // round-robin connections\n // since they all share the same session, it doesn't matter which one we use\n // the connection chosen here will only affect the first attempt at sending\n // return this._connections[\n // this._nextConnection++ % this._connections.length\n // ].sendRpc(request, stack, timeout)\n }\n\n connect(): void {\n for (const conn of this._connections) {\n conn.connect()\n }\n }\n\n ensureConnected(): void {\n if (this._connections[0].isConnected) return\n\n this.connect()\n }\n\n setAuthKey(authKey: Uint8Array | null, temp = false, idx = 0): void {\n const session = this._sessions[idx]\n const key = temp ? session._authKeyTemp : session._authKey\n key.setup(authKey)\n }\n\n resetAuthKeys(): void {\n for (const session of this._sessions) {\n session.reset(true)\n }\n this.notifyKeyChange()\n }\n\n setInactivityTimeout(timeout?: number): void {\n this._log.debug('setting inactivity timeout to %s', timeout)\n\n // for future connections (if any)\n this.params.inactivityTimeout = timeout\n\n // for current connections\n for (const conn of this._connections) {\n conn.setInactivityTimeout(timeout)\n }\n }\n\n notifyKeyChange(): void {\n // only expected to be called on non-main connections\n const session = this._sessions[0]\n\n if (this.params.usePfs && !session._authKeyTemp.ready) {\n this._log.debug('temp auth key needed but not ready, ignoring key change')\n\n return\n }\n\n if (this._sessions[0].queuedRpc.length) {\n // there are pending requests, we need to reconnect.\n this._log.debug('notifying key change on the connection due to queued rpc')\n this._connections[0].onConnected()\n }\n\n // connection is idle, we don't need to notify it\n }\n\n notifyNetworkChanged(connected: boolean): void {\n for (const conn of this._connections) {\n conn.notifyNetworkChanged(connected)\n }\n }\n\n requestAuth(): void {\n this._connections[0]._authorize()\n }\n\n resetSessions(): void {\n if (this.params.isMainConnection) {\n for (const conn of this._connections) {\n conn._resetSession()\n }\n } else {\n this._connections[0]._resetSession()\n }\n }\n\n changeTransport(factory: TransportFactory): void {\n this._connections.forEach((conn) => conn.changeTransport(factory))\n }\n\n getPoolSize(): number {\n return this._connections.length\n }\n}\n"]}
@@ -144,7 +144,6 @@ export declare class DcConnectionManager {
144
144
  /** Whether this DC is the primary one */
145
145
  isPrimary: boolean;
146
146
  private _salts;
147
- private __baseConnectionParams;
148
147
  private _log;
149
148
  /** Main connection pool */
150
149
  main: MultiSessionConnection;
@@ -168,7 +167,7 @@ export declare class DcConnectionManager {
168
167
  setIsPrimary(isPrimary: boolean): void;
169
168
  setIsPremium(isPremium: boolean): void;
170
169
  loadKeys(forcePfs?: boolean): Promise<boolean>;
171
- destroy(): void;
170
+ destroy(): Promise<void>;
172
171
  }
173
172
  /**
174
173
  * Class that manages all connections to Telegram servers.
@@ -211,5 +210,5 @@ export declare class NetworkManager {
211
210
  changeTransport(factory: TransportFactory): void;
212
211
  getPoolSize(kind: ConnectionKind, dcId?: number): number;
213
212
  getPrimaryDcId(): number;
214
- destroy(): void;
213
+ destroy(): Promise<void>;
215
214
  }
@@ -31,6 +31,20 @@ const defaultConnectionCountDelegate = (kind, dcId, isPremium) => {
31
31
  * Wrapper over all connection pools for a single DC.
32
32
  */
33
33
  export class DcConnectionManager {
34
+ manager;
35
+ dcId;
36
+ _dcs;
37
+ isPrimary;
38
+ _salts = new ServerSaltManager();
39
+ _log;
40
+ /** Main connection pool */
41
+ main;
42
+ /** Upload connection pool */
43
+ upload;
44
+ /** Download connection pool */
45
+ download;
46
+ /** Download connection pool (for small files) */
47
+ downloadSmall;
34
48
  get _mainConnectionCount() {
35
49
  if (!this.isPrimary)
36
50
  return 1;
@@ -49,8 +63,9 @@ export class DcConnectionManager {
49
63
  this.dcId = dcId;
50
64
  this._dcs = _dcs;
51
65
  this.isPrimary = isPrimary;
52
- this._salts = new ServerSaltManager();
53
- this.__baseConnectionParams = () => ({
66
+ this._log = this.manager._log.create('dc-manager');
67
+ this._log.prefix = `[DC ${dcId}] `;
68
+ const baseConnectionParams = () => ({
54
69
  crypto: this.manager.params.crypto,
55
70
  initConnection: this.manager._initConnectionParams,
56
71
  transportFactory: this.manager._transportFactory,
@@ -64,25 +79,20 @@ export class DcConnectionManager {
64
79
  usePfs: this.manager.params.usePfs,
65
80
  isMainConnection: false,
66
81
  isMainDcConnection: this.isPrimary,
67
- inactivityTimeout: this.manager.params.inactivityTimeout ?? 60000,
82
+ inactivityTimeout: this.manager.params.inactivityTimeout ?? 60_000,
68
83
  enableErrorReporting: this.manager.params.enableErrorReporting,
69
84
  salts: this._salts,
70
85
  });
71
- this._log = this.manager._log.create('dc-manager');
72
- /** Upload connection pool */
73
- this.upload = new MultiSessionConnection(this.__baseConnectionParams(), this.manager._connectionCount('upload', this.dcId, this.manager.params.isPremium), this._log, 'UPLOAD');
74
- /** Download connection pool */
75
- this.download = new MultiSessionConnection(this.__baseConnectionParams(), this.manager._connectionCount('download', this.dcId, this.manager.params.isPremium), this._log, 'DOWNLOAD');
76
- /** Download connection pool (for small files) */
77
- this.downloadSmall = new MultiSessionConnection(this.__baseConnectionParams(), this.manager._connectionCount('downloadSmall', this.dcId, this.manager.params.isPremium), this._log, 'DOWNLOAD_SMALL');
78
- this._log.prefix = `[DC ${dcId}] `;
79
- const mainParams = this.__baseConnectionParams();
86
+ const mainParams = baseConnectionParams();
80
87
  mainParams.isMainConnection = true;
81
88
  mainParams.dc = _dcs.main;
82
89
  if (isPrimary) {
83
90
  mainParams.inactivityTimeout = undefined;
84
91
  }
85
92
  this.main = new MultiSessionConnection(mainParams, this._mainConnectionCount, this._log, 'MAIN');
93
+ this.upload = new MultiSessionConnection(baseConnectionParams(), this.manager._connectionCount('upload', this.dcId, this.manager.params.isPremium), this._log, 'UPLOAD');
94
+ this.download = new MultiSessionConnection(baseConnectionParams(), this.manager._connectionCount('download', this.dcId, this.manager.params.isPremium), this._log, 'DOWNLOAD');
95
+ this.downloadSmall = new MultiSessionConnection(baseConnectionParams(), this.manager._connectionCount('downloadSmall', this.dcId, this.manager.params.isPremium), this._log, 'DOWNLOAD_SMALL');
86
96
  this._setupMulti('main');
87
97
  this._setupMulti('upload');
88
98
  this._setupMulti('download');
@@ -166,7 +176,7 @@ export class DcConnectionManager {
166
176
  this.main.setInactivityTimeout(undefined);
167
177
  }
168
178
  else {
169
- this.main.setInactivityTimeout(this.manager.params.inactivityTimeout ?? 60000);
179
+ this.main.setInactivityTimeout(this.manager.params.inactivityTimeout ?? 60_000);
170
180
  }
171
181
  }
172
182
  setIsPremium(isPremium) {
@@ -203,11 +213,11 @@ export class DcConnectionManager {
203
213
  }
204
214
  return true;
205
215
  }
206
- destroy() {
207
- this.main.destroy();
208
- this.upload.destroy();
209
- this.download.destroy();
210
- this.downloadSmall.destroy();
216
+ async destroy() {
217
+ await this.main.destroy();
218
+ await this.upload.destroy();
219
+ await this.download.destroy();
220
+ await this.downloadSmall.destroy();
211
221
  this._salts.destroy();
212
222
  }
213
223
  }
@@ -215,23 +225,28 @@ export class DcConnectionManager {
215
225
  * Class that manages all connections to Telegram servers.
216
226
  */
217
227
  export class NetworkManager {
228
+ params;
229
+ config;
230
+ _log;
231
+ _storage;
232
+ _initConnectionParams;
233
+ _transportFactory;
234
+ _reconnectionStrategy;
235
+ _connectionCount;
236
+ _dcConnections = new Map();
237
+ _primaryDc;
238
+ _updateHandler;
218
239
  constructor(params, config) {
219
240
  this.params = params;
220
241
  this.config = config;
221
- this._log = this.params.log.create('network');
222
- this._storage = this.params.storage;
223
- this._dcConnections = new Map();
224
- this._dcCreationPromise = new Map();
225
- this._pendingExports = {};
226
- this._floodWaitedRequests = new Map();
227
242
  const deviceModel = `mtcute on ${getPlatform().getDeviceModel()}`;
228
243
  this._initConnectionParams = {
229
244
  _: 'initConnection',
230
245
  deviceModel,
231
246
  systemVersion: '1.0',
232
- appVersion: '0.10.1',
247
+ appVersion: '0.11.0',
233
248
  systemLangCode: 'en',
234
- langPack: '',
249
+ langPack: '', // "langPacks are for official apps only"
235
250
  langCode: 'en',
236
251
  ...(params.initConnectionOptions ?? {}),
237
252
  apiId: params.apiId,
@@ -244,6 +259,8 @@ export class NetworkManager {
244
259
  this._updateHandler = params.onUpdate;
245
260
  this._onConfigChanged = this._onConfigChanged.bind(this);
246
261
  config.onReload(this._onConfigChanged);
262
+ this._log = params.log.create('network');
263
+ this._storage = params.storage;
247
264
  }
248
265
  async _findDcOptions(dcId) {
249
266
  const main = await this.config.findOption({
@@ -266,6 +283,7 @@ export class NetworkManager {
266
283
  }
267
284
  return { main, media };
268
285
  }
286
+ _resetOnNetworkChange;
269
287
  _switchPrimaryDc(dc) {
270
288
  if (this._primaryDc && this._primaryDc !== dc) {
271
289
  this._primaryDc.setIsPrimary(false);
@@ -288,6 +306,7 @@ export class NetworkManager {
288
306
  });
289
307
  return dc.loadKeys().then(() => dc.main.ensureConnected());
290
308
  }
309
+ _dcCreationPromise = new Map();
291
310
  async _getOtherDc(dcId) {
292
311
  if (!this._dcConnections.has(dcId)) {
293
312
  if (this._dcCreationPromise.has(dcId)) {
@@ -331,6 +350,7 @@ export class NetworkManager {
331
350
  this._dcConnections.set(defaultDcs.main.id, dc);
332
351
  await this._switchPrimaryDc(dc);
333
352
  }
353
+ _pendingExports = {};
334
354
  async _exportAuthTo(manager) {
335
355
  if (manager.dcId in this._pendingExports) {
336
356
  this._log.debug('waiting for auth export to dc %d', manager.dcId);
@@ -429,6 +449,7 @@ export class NetworkManager {
429
449
  await this._storage.dcs.store(options);
430
450
  await this._switchPrimaryDc(this._dcConnections.get(newDc));
431
451
  }
452
+ _floodWaitedRequests = new Map();
432
453
  async call(message, params, stack) {
433
454
  if (!this._primaryDc) {
434
455
  throw new MtcuteError('Not connected to any DC');
@@ -550,9 +571,9 @@ export class NetworkManager {
550
571
  throw new MtcuteError('Not connected to any DC');
551
572
  return this._primaryDc.dcId;
552
573
  }
553
- destroy() {
574
+ async destroy() {
554
575
  for (const dc of this._dcConnections.values()) {
555
- dc.destroy();
576
+ await dc.destroy();
556
577
  }
557
578
  this.config.offReload(this._onConfigChanged);
558
579
  this._resetOnNetworkChange?.();