@mtcute/core 0.11.0 → 0.12.1

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 (471) hide show
  1. package/cjs/highlevel/client.d.ts +198 -18
  2. package/cjs/highlevel/client.js +53 -0
  3. package/cjs/highlevel/client.js.map +1 -1
  4. package/cjs/highlevel/methods/_imports.js.map +1 -1
  5. package/cjs/highlevel/methods/auth/utils.d.ts +3 -0
  6. package/cjs/highlevel/methods/bots/normalize-command-scope.d.ts +5 -1
  7. package/cjs/highlevel/methods/chats/batched-queries.d.ts +10 -1
  8. package/cjs/highlevel/methods/chats/get-full-chat.d.ts +2 -2
  9. package/cjs/highlevel/methods/chats/get-full-chat.js +1 -1
  10. package/cjs/highlevel/methods/chats/get-full-chat.js.map +1 -1
  11. package/cjs/highlevel/methods/dialogs/get-folders.d.ts +3 -0
  12. package/cjs/highlevel/methods/files/normalize-file-to-document.d.ts +9 -1
  13. package/cjs/highlevel/methods/files/normalize-input-media.d.ts +1 -0
  14. package/cjs/highlevel/methods/files/normalize-input-media.js +11 -10
  15. package/cjs/highlevel/methods/files/normalize-input-media.js.map +1 -1
  16. package/cjs/highlevel/methods/messages/_business-connection.d.ts +7 -0
  17. package/cjs/highlevel/methods/messages/_business-connection.js +42 -0
  18. package/cjs/highlevel/methods/messages/_business-connection.js.map +1 -0
  19. package/cjs/highlevel/methods/messages/close-poll.js +1 -1
  20. package/cjs/highlevel/methods/messages/close-poll.js.map +1 -1
  21. package/cjs/highlevel/methods/messages/edit-message.d.ts +1 -0
  22. package/cjs/highlevel/methods/messages/edit-message.js +2 -1
  23. package/cjs/highlevel/methods/messages/edit-message.js.map +1 -1
  24. package/cjs/highlevel/methods/messages/find-in-update.d.ts +13 -1
  25. package/cjs/highlevel/methods/messages/find-in-update.js +7 -2
  26. package/cjs/highlevel/methods/messages/find-in-update.js.map +1 -1
  27. package/cjs/highlevel/methods/messages/forward-messages.d.ts +5 -0
  28. package/cjs/highlevel/methods/messages/forward-messages.js +2 -0
  29. package/cjs/highlevel/methods/messages/forward-messages.js.map +1 -1
  30. package/cjs/highlevel/methods/messages/get-all-scheduled-messages.d.ts +8 -0
  31. package/cjs/highlevel/methods/messages/get-all-scheduled-messages.js +32 -0
  32. package/cjs/highlevel/methods/messages/get-all-scheduled-messages.js.map +1 -0
  33. package/cjs/highlevel/methods/messages/get-discussion-message.d.ts +4 -0
  34. package/cjs/highlevel/methods/messages/iter-search-global.js +2 -1
  35. package/cjs/highlevel/methods/messages/iter-search-global.js.map +1 -1
  36. package/cjs/highlevel/methods/messages/search-global.d.ts +4 -0
  37. package/cjs/highlevel/methods/messages/search-global.js +2 -1
  38. package/cjs/highlevel/methods/messages/search-global.js.map +1 -1
  39. package/cjs/highlevel/methods/messages/send-common.d.ts +28 -0
  40. package/cjs/highlevel/methods/messages/send-common.js +21 -1
  41. package/cjs/highlevel/methods/messages/send-common.js.map +1 -1
  42. package/cjs/highlevel/methods/messages/send-media-group.js +5 -2
  43. package/cjs/highlevel/methods/messages/send-media-group.js.map +1 -1
  44. package/cjs/highlevel/methods/messages/send-media.js +4 -2
  45. package/cjs/highlevel/methods/messages/send-media.js.map +1 -1
  46. package/cjs/highlevel/methods/messages/send-text.js +4 -2
  47. package/cjs/highlevel/methods/messages/send-text.js.map +1 -1
  48. package/cjs/highlevel/methods/messages/send-typing.d.ts +4 -0
  49. package/cjs/highlevel/methods/messages/send-typing.js +2 -1
  50. package/cjs/highlevel/methods/messages/send-typing.js.map +1 -1
  51. package/cjs/highlevel/methods/misc/chain-id.d.ts +4 -1
  52. package/cjs/highlevel/methods/misc/get-collectible-info.d.ts +6 -0
  53. package/cjs/highlevel/methods/misc/get-collectible-info.js +26 -0
  54. package/cjs/highlevel/methods/misc/get-collectible-info.js.map +1 -0
  55. package/cjs/highlevel/methods/misc/normalize-text.d.ts +5 -1
  56. package/cjs/highlevel/methods/premium/create-business-chat-link.d.ts +12 -0
  57. package/cjs/highlevel/methods/premium/create-business-chat-link.js +26 -0
  58. package/cjs/highlevel/methods/premium/create-business-chat-link.js.map +1 -0
  59. package/cjs/highlevel/methods/premium/edit-business-chat-link.d.ts +20 -0
  60. package/cjs/highlevel/methods/premium/edit-business-chat-link.js +42 -0
  61. package/cjs/highlevel/methods/premium/edit-business-chat-link.js.map +1 -0
  62. package/cjs/highlevel/methods/premium/get-business-chat-links.d.ts +6 -0
  63. package/cjs/highlevel/methods/premium/get-business-chat-links.js +14 -0
  64. package/cjs/highlevel/methods/premium/get-business-chat-links.js.map +1 -0
  65. package/cjs/highlevel/methods/premium/get-business-connection.d.ts +8 -0
  66. package/cjs/highlevel/methods/premium/get-business-connection.js +25 -0
  67. package/cjs/highlevel/methods/premium/get-business-connection.js.map +1 -0
  68. package/cjs/highlevel/methods/premium/set-business-intro.d.ts +22 -0
  69. package/cjs/highlevel/methods/premium/set-business-intro.js +42 -0
  70. package/cjs/highlevel/methods/premium/set-business-intro.js.map +1 -0
  71. package/cjs/highlevel/methods/premium/set-business-work-hours.d.ts +18 -0
  72. package/cjs/highlevel/methods/premium/set-business-work-hours.js +33 -0
  73. package/cjs/highlevel/methods/premium/set-business-work-hours.js.map +1 -0
  74. package/cjs/highlevel/methods/stickers/_utils.d.ts +10 -0
  75. package/cjs/highlevel/methods/stickers/_utils.js +27 -0
  76. package/cjs/highlevel/methods/stickers/_utils.js.map +1 -0
  77. package/cjs/highlevel/methods/stickers/add-sticker-to-set.d.ts +1 -2
  78. package/cjs/highlevel/methods/stickers/add-sticker-to-set.js +3 -17
  79. package/cjs/highlevel/methods/stickers/add-sticker-to-set.js.map +1 -1
  80. package/cjs/highlevel/methods/stickers/create-sticker-set.d.ts +0 -3
  81. package/cjs/highlevel/methods/stickers/create-sticker-set.js +2 -19
  82. package/cjs/highlevel/methods/stickers/create-sticker-set.js.map +1 -1
  83. package/cjs/highlevel/methods/stickers/delete-sticker-from-set.d.ts +1 -2
  84. package/cjs/highlevel/methods/stickers/delete-sticker-from-set.js +1 -2
  85. package/cjs/highlevel/methods/stickers/delete-sticker-from-set.js.map +1 -1
  86. package/cjs/highlevel/methods/stickers/get-installed-stickers.d.ts +1 -2
  87. package/cjs/highlevel/methods/stickers/get-installed-stickers.js +1 -2
  88. package/cjs/highlevel/methods/stickers/get-installed-stickers.js.map +1 -1
  89. package/cjs/highlevel/methods/stickers/get-my-sticker-sets.d.ts +13 -0
  90. package/cjs/highlevel/methods/stickers/get-my-sticker-sets.js +24 -0
  91. package/cjs/highlevel/methods/stickers/get-my-sticker-sets.js.map +1 -0
  92. package/cjs/highlevel/methods/stickers/get-sticker-set.d.ts +2 -2
  93. package/cjs/highlevel/methods/stickers/get-sticker-set.js +2 -2
  94. package/cjs/highlevel/methods/stickers/get-sticker-set.js.map +1 -1
  95. package/cjs/highlevel/methods/stickers/move-sticker-in-set.d.ts +2 -3
  96. package/cjs/highlevel/methods/stickers/move-sticker-in-set.js +2 -3
  97. package/cjs/highlevel/methods/stickers/move-sticker-in-set.js.map +1 -1
  98. package/cjs/highlevel/methods/stickers/replace-sticker-in-set.d.ts +24 -0
  99. package/cjs/highlevel/methods/stickers/replace-sticker-in-set.js +32 -0
  100. package/cjs/highlevel/methods/stickers/replace-sticker-in-set.js.map +1 -0
  101. package/cjs/highlevel/methods/stories/find-in-update.d.ts +5 -1
  102. package/cjs/highlevel/methods/users/set-my-birthday.d.ts +12 -0
  103. package/cjs/highlevel/methods/users/set-my-birthday.js +22 -0
  104. package/cjs/highlevel/methods/users/set-my-birthday.js.map +1 -0
  105. package/cjs/highlevel/methods.d.ts +12 -0
  106. package/cjs/highlevel/methods.js +33 -3
  107. package/cjs/highlevel/methods.js.map +1 -1
  108. package/cjs/highlevel/storage/storage.d.ts +7 -2
  109. package/cjs/highlevel/types/auth/sent-code.d.ts +7 -2
  110. package/cjs/highlevel/types/auth/sent-code.js +14 -0
  111. package/cjs/highlevel/types/auth/sent-code.js.map +1 -1
  112. package/cjs/highlevel/types/bots/inline-message/factories.d.ts +5 -1
  113. package/cjs/highlevel/types/bots/inline-result/factories.d.ts +4 -1
  114. package/cjs/highlevel/types/bots/keyboards/factories.d.ts +7 -1
  115. package/cjs/highlevel/types/calls/discard-reason.d.ts +5 -0
  116. package/cjs/highlevel/types/files/uploaded-file.d.ts +2 -0
  117. package/cjs/highlevel/types/files/utils.d.ts +6 -5
  118. package/cjs/highlevel/types/files/utils.js.map +1 -1
  119. package/cjs/highlevel/types/media/document-utils.d.ts +5 -0
  120. package/cjs/highlevel/types/media/document-utils.js +9 -2
  121. package/cjs/highlevel/types/media/document-utils.js.map +1 -1
  122. package/cjs/highlevel/types/media/input-media/types.d.ts +2 -2
  123. package/cjs/highlevel/types/media/input-media/types.js.map +1 -1
  124. package/cjs/highlevel/types/media/poll.d.ts +17 -6
  125. package/cjs/highlevel/types/media/poll.js +65 -18
  126. package/cjs/highlevel/types/media/poll.js.map +1 -1
  127. package/cjs/highlevel/types/messages/dialog.js +1 -12
  128. package/cjs/highlevel/types/messages/dialog.js.map +1 -1
  129. package/cjs/highlevel/types/messages/input-message-id.d.ts +5 -0
  130. package/cjs/highlevel/types/messages/message-action.d.ts +19 -2
  131. package/cjs/highlevel/types/messages/message-action.js +6 -0
  132. package/cjs/highlevel/types/messages/message-action.js.map +1 -1
  133. package/cjs/highlevel/types/messages/message-media.d.ts +4 -0
  134. package/cjs/highlevel/types/messages/message.d.ts +59 -1
  135. package/cjs/highlevel/types/messages/message.js +96 -1
  136. package/cjs/highlevel/types/messages/message.js.map +1 -1
  137. package/cjs/highlevel/types/misc/collectible-info.d.ts +27 -0
  138. package/cjs/highlevel/types/misc/collectible-info.js +46 -0
  139. package/cjs/highlevel/types/misc/collectible-info.js.map +1 -0
  140. package/cjs/highlevel/types/misc/entities.d.ts +7 -0
  141. package/cjs/highlevel/types/misc/entities.js +15 -0
  142. package/cjs/highlevel/types/misc/entities.js.map +1 -1
  143. package/cjs/highlevel/types/misc/index.d.ts +1 -0
  144. package/cjs/highlevel/types/misc/index.js +1 -0
  145. package/cjs/highlevel/types/misc/index.js.map +1 -1
  146. package/cjs/highlevel/types/misc/sticker-set.d.ts +8 -1
  147. package/cjs/highlevel/types/misc/sticker-set.js +36 -5
  148. package/cjs/highlevel/types/misc/sticker-set.js.map +1 -1
  149. package/cjs/highlevel/types/peers/chat-event/actions.d.ts +3 -0
  150. package/cjs/highlevel/types/peers/chat-event/filters.d.ts +2 -0
  151. package/cjs/highlevel/types/peers/chat.d.ts +7 -93
  152. package/cjs/highlevel/types/peers/chat.js +2 -195
  153. package/cjs/highlevel/types/peers/chat.js.map +1 -1
  154. package/cjs/highlevel/types/peers/full-chat.d.ts +103 -0
  155. package/cjs/highlevel/types/peers/full-chat.js +237 -0
  156. package/cjs/highlevel/types/peers/full-chat.js.map +1 -0
  157. package/cjs/highlevel/types/peers/index.d.ts +1 -0
  158. package/cjs/highlevel/types/peers/index.js +1 -0
  159. package/cjs/highlevel/types/peers/index.js.map +1 -1
  160. package/cjs/highlevel/types/peers/user.d.ts +5 -0
  161. package/cjs/highlevel/types/peers/user.js +7 -0
  162. package/cjs/highlevel/types/peers/user.js.map +1 -1
  163. package/cjs/highlevel/types/premium/business-account.d.ts +19 -0
  164. package/cjs/highlevel/types/premium/business-account.js +45 -0
  165. package/cjs/highlevel/types/premium/business-account.js.map +1 -0
  166. package/cjs/highlevel/types/premium/business-chat-link.d.ts +19 -0
  167. package/cjs/highlevel/types/premium/business-chat-link.js +39 -0
  168. package/cjs/highlevel/types/premium/business-chat-link.js.map +1 -0
  169. package/cjs/highlevel/types/premium/business-connection.d.ts +23 -0
  170. package/cjs/highlevel/types/premium/business-connection.js +45 -0
  171. package/cjs/highlevel/types/premium/business-connection.js.map +1 -0
  172. package/cjs/highlevel/types/premium/business-intro.d.ts +22 -0
  173. package/cjs/highlevel/types/premium/business-intro.js +43 -0
  174. package/cjs/highlevel/types/premium/business-intro.js.map +1 -0
  175. package/cjs/highlevel/types/premium/business-location.d.ts +10 -0
  176. package/cjs/highlevel/types/premium/business-location.js +26 -0
  177. package/cjs/highlevel/types/premium/business-location.js.map +1 -0
  178. package/cjs/highlevel/types/premium/business-work-hours.d.ts +42 -0
  179. package/cjs/highlevel/types/premium/business-work-hours.js +141 -0
  180. package/cjs/highlevel/types/premium/business-work-hours.js.map +1 -0
  181. package/cjs/highlevel/types/premium/index.d.ts +5 -0
  182. package/cjs/highlevel/types/premium/index.js +5 -0
  183. package/cjs/highlevel/types/premium/index.js.map +1 -1
  184. package/cjs/highlevel/types/updates/business-message.d.ts +18 -0
  185. package/cjs/highlevel/types/updates/business-message.js +35 -0
  186. package/cjs/highlevel/types/updates/business-message.js.map +1 -0
  187. package/cjs/highlevel/types/updates/delete-business-message-update.d.ts +21 -0
  188. package/cjs/highlevel/types/updates/delete-business-message-update.js +37 -0
  189. package/cjs/highlevel/types/updates/delete-business-message-update.js.map +1 -0
  190. package/cjs/highlevel/types/updates/index.d.ts +19 -2
  191. package/cjs/highlevel/types/updates/index.js +5 -1
  192. package/cjs/highlevel/types/updates/index.js.map +1 -1
  193. package/cjs/highlevel/types/updates/parse-update.d.ts +4 -1
  194. package/cjs/highlevel/types/updates/parse-update.js +8 -0
  195. package/cjs/highlevel/types/updates/parse-update.js.map +1 -1
  196. package/cjs/highlevel/types/updates/poll-update.js +2 -2
  197. package/cjs/highlevel/types/updates/poll-update.js.map +1 -1
  198. package/cjs/highlevel/updates/manager.d.ts +0 -1
  199. package/cjs/highlevel/updates/manager.js +7 -2
  200. package/cjs/highlevel/updates/manager.js.map +1 -1
  201. package/cjs/highlevel/updates/parsed.js +8 -2
  202. package/cjs/highlevel/updates/parsed.js.map +1 -1
  203. package/cjs/highlevel/updates/types.d.ts +57 -0
  204. package/cjs/highlevel/updates/utils.d.ts +2 -0
  205. package/cjs/highlevel/utils/inspectable.js +7 -0
  206. package/cjs/highlevel/utils/inspectable.js.map +1 -1
  207. package/cjs/highlevel/worker/index.js +6 -0
  208. package/cjs/highlevel/worker/protocol.d.ts +0 -1
  209. package/cjs/index.js +6 -0
  210. package/cjs/network/client.d.ts +2 -2
  211. package/cjs/network/client.js +9 -1
  212. package/cjs/network/client.js.map +1 -1
  213. package/cjs/network/mtproto-session.d.ts +0 -1
  214. package/cjs/network/multi-session-connection.d.ts +0 -1
  215. package/cjs/network/network-manager.d.ts +8 -0
  216. package/cjs/network/network-manager.js +9 -4
  217. package/cjs/network/network-manager.js.map +1 -1
  218. package/cjs/network/persistent-connection.d.ts +0 -1
  219. package/cjs/network/session-connection.js +11 -0
  220. package/cjs/network/session-connection.js.map +1 -1
  221. package/cjs/network/transports/abstract.d.ts +0 -1
  222. package/cjs/network/transports/streamed.d.ts +0 -1
  223. package/cjs/network/transports/wrapped.d.ts +0 -1
  224. package/cjs/platform.js +6 -0
  225. package/cjs/storage/sqlite/repository/peers.js +1 -2
  226. package/cjs/storage/sqlite/repository/peers.js.map +1 -1
  227. package/cjs/storage/storage.d.ts +21 -0
  228. package/cjs/types/utils.d.ts +1 -0
  229. package/cjs/types/utils.js.map +1 -1
  230. package/cjs/utils/index.js +6 -0
  231. package/cjs/utils/reloadable.d.ts +0 -1
  232. package/client.d.ts +1 -0
  233. package/client.js +1 -0
  234. package/esm/highlevel/client.d.ts +198 -18
  235. package/esm/highlevel/client.js +47 -0
  236. package/esm/highlevel/client.js.map +1 -1
  237. package/esm/highlevel/methods/_imports.js.map +1 -1
  238. package/esm/highlevel/methods/auth/utils.d.ts +3 -0
  239. package/esm/highlevel/methods/bots/normalize-command-scope.d.ts +5 -1
  240. package/esm/highlevel/methods/chats/batched-queries.d.ts +10 -1
  241. package/esm/highlevel/methods/chats/get-full-chat.d.ts +2 -2
  242. package/esm/highlevel/methods/chats/get-full-chat.js +2 -2
  243. package/esm/highlevel/methods/chats/get-full-chat.js.map +1 -1
  244. package/esm/highlevel/methods/dialogs/get-folders.d.ts +3 -0
  245. package/esm/highlevel/methods/files/normalize-file-to-document.d.ts +9 -1
  246. package/esm/highlevel/methods/files/normalize-input-media.d.ts +1 -0
  247. package/esm/highlevel/methods/files/normalize-input-media.js +11 -10
  248. package/esm/highlevel/methods/files/normalize-input-media.js.map +1 -1
  249. package/esm/highlevel/methods/messages/_business-connection.d.ts +7 -0
  250. package/esm/highlevel/methods/messages/_business-connection.js +38 -0
  251. package/esm/highlevel/methods/messages/_business-connection.js.map +1 -0
  252. package/esm/highlevel/methods/messages/close-poll.js +1 -1
  253. package/esm/highlevel/methods/messages/close-poll.js.map +1 -1
  254. package/esm/highlevel/methods/messages/edit-message.d.ts +1 -0
  255. package/esm/highlevel/methods/messages/edit-message.js +2 -1
  256. package/esm/highlevel/methods/messages/edit-message.js.map +1 -1
  257. package/esm/highlevel/methods/messages/find-in-update.d.ts +13 -1
  258. package/esm/highlevel/methods/messages/find-in-update.js +7 -2
  259. package/esm/highlevel/methods/messages/find-in-update.js.map +1 -1
  260. package/esm/highlevel/methods/messages/forward-messages.d.ts +5 -0
  261. package/esm/highlevel/methods/messages/forward-messages.js +2 -0
  262. package/esm/highlevel/methods/messages/forward-messages.js.map +1 -1
  263. package/esm/highlevel/methods/messages/get-all-scheduled-messages.d.ts +8 -0
  264. package/esm/highlevel/methods/messages/get-all-scheduled-messages.js +25 -0
  265. package/esm/highlevel/methods/messages/get-all-scheduled-messages.js.map +1 -0
  266. package/esm/highlevel/methods/messages/get-discussion-message.d.ts +4 -0
  267. package/esm/highlevel/methods/messages/iter-search-global.js +2 -1
  268. package/esm/highlevel/methods/messages/iter-search-global.js.map +1 -1
  269. package/esm/highlevel/methods/messages/search-global.d.ts +4 -0
  270. package/esm/highlevel/methods/messages/search-global.js +2 -1
  271. package/esm/highlevel/methods/messages/search-global.js.map +1 -1
  272. package/esm/highlevel/methods/messages/send-common.d.ts +28 -0
  273. package/esm/highlevel/methods/messages/send-common.js +19 -0
  274. package/esm/highlevel/methods/messages/send-common.js.map +1 -1
  275. package/esm/highlevel/methods/messages/send-media-group.js +5 -2
  276. package/esm/highlevel/methods/messages/send-media-group.js.map +1 -1
  277. package/esm/highlevel/methods/messages/send-media.js +4 -2
  278. package/esm/highlevel/methods/messages/send-media.js.map +1 -1
  279. package/esm/highlevel/methods/messages/send-text.js +4 -2
  280. package/esm/highlevel/methods/messages/send-text.js.map +1 -1
  281. package/esm/highlevel/methods/messages/send-typing.d.ts +4 -0
  282. package/esm/highlevel/methods/messages/send-typing.js +2 -1
  283. package/esm/highlevel/methods/messages/send-typing.js.map +1 -1
  284. package/esm/highlevel/methods/misc/chain-id.d.ts +4 -1
  285. package/esm/highlevel/methods/misc/get-collectible-info.d.ts +6 -0
  286. package/esm/highlevel/methods/misc/get-collectible-info.js +22 -0
  287. package/esm/highlevel/methods/misc/get-collectible-info.js.map +1 -0
  288. package/esm/highlevel/methods/misc/normalize-text.d.ts +5 -1
  289. package/esm/highlevel/methods/premium/create-business-chat-link.d.ts +12 -0
  290. package/esm/highlevel/methods/premium/create-business-chat-link.js +22 -0
  291. package/esm/highlevel/methods/premium/create-business-chat-link.js.map +1 -0
  292. package/esm/highlevel/methods/premium/edit-business-chat-link.d.ts +20 -0
  293. package/esm/highlevel/methods/premium/edit-business-chat-link.js +37 -0
  294. package/esm/highlevel/methods/premium/edit-business-chat-link.js.map +1 -0
  295. package/esm/highlevel/methods/premium/get-business-chat-links.d.ts +6 -0
  296. package/esm/highlevel/methods/premium/get-business-chat-links.js +10 -0
  297. package/esm/highlevel/methods/premium/get-business-chat-links.js.map +1 -0
  298. package/esm/highlevel/methods/premium/get-business-connection.d.ts +8 -0
  299. package/esm/highlevel/methods/premium/get-business-connection.js +21 -0
  300. package/esm/highlevel/methods/premium/get-business-connection.js.map +1 -0
  301. package/esm/highlevel/methods/premium/set-business-intro.d.ts +22 -0
  302. package/esm/highlevel/methods/premium/set-business-intro.js +38 -0
  303. package/esm/highlevel/methods/premium/set-business-intro.js.map +1 -0
  304. package/esm/highlevel/methods/premium/set-business-work-hours.d.ts +18 -0
  305. package/esm/highlevel/methods/premium/set-business-work-hours.js +29 -0
  306. package/esm/highlevel/methods/premium/set-business-work-hours.js.map +1 -0
  307. package/esm/highlevel/methods/stickers/_utils.d.ts +10 -0
  308. package/esm/highlevel/methods/stickers/_utils.js +23 -0
  309. package/esm/highlevel/methods/stickers/_utils.js.map +1 -0
  310. package/esm/highlevel/methods/stickers/add-sticker-to-set.d.ts +1 -2
  311. package/esm/highlevel/methods/stickers/add-sticker-to-set.js +4 -18
  312. package/esm/highlevel/methods/stickers/add-sticker-to-set.js.map +1 -1
  313. package/esm/highlevel/methods/stickers/create-sticker-set.d.ts +0 -3
  314. package/esm/highlevel/methods/stickers/create-sticker-set.js +3 -20
  315. package/esm/highlevel/methods/stickers/create-sticker-set.js.map +1 -1
  316. package/esm/highlevel/methods/stickers/delete-sticker-from-set.d.ts +1 -2
  317. package/esm/highlevel/methods/stickers/delete-sticker-from-set.js +1 -2
  318. package/esm/highlevel/methods/stickers/delete-sticker-from-set.js.map +1 -1
  319. package/esm/highlevel/methods/stickers/get-installed-stickers.d.ts +1 -2
  320. package/esm/highlevel/methods/stickers/get-installed-stickers.js +1 -2
  321. package/esm/highlevel/methods/stickers/get-installed-stickers.js.map +1 -1
  322. package/esm/highlevel/methods/stickers/get-my-sticker-sets.d.ts +13 -0
  323. package/esm/highlevel/methods/stickers/get-my-sticker-sets.js +17 -0
  324. package/esm/highlevel/methods/stickers/get-my-sticker-sets.js.map +1 -0
  325. package/esm/highlevel/methods/stickers/get-sticker-set.d.ts +2 -2
  326. package/esm/highlevel/methods/stickers/get-sticker-set.js +2 -2
  327. package/esm/highlevel/methods/stickers/get-sticker-set.js.map +1 -1
  328. package/esm/highlevel/methods/stickers/move-sticker-in-set.d.ts +2 -3
  329. package/esm/highlevel/methods/stickers/move-sticker-in-set.js +2 -3
  330. package/esm/highlevel/methods/stickers/move-sticker-in-set.js.map +1 -1
  331. package/esm/highlevel/methods/stickers/replace-sticker-in-set.d.ts +24 -0
  332. package/esm/highlevel/methods/stickers/replace-sticker-in-set.js +28 -0
  333. package/esm/highlevel/methods/stickers/replace-sticker-in-set.js.map +1 -0
  334. package/esm/highlevel/methods/stories/find-in-update.d.ts +5 -1
  335. package/esm/highlevel/methods/users/set-my-birthday.d.ts +12 -0
  336. package/esm/highlevel/methods/users/set-my-birthday.js +18 -0
  337. package/esm/highlevel/methods/users/set-my-birthday.js.map +1 -0
  338. package/esm/highlevel/methods.d.ts +12 -0
  339. package/esm/highlevel/methods.js +12 -0
  340. package/esm/highlevel/methods.js.map +1 -1
  341. package/esm/highlevel/storage/storage.d.ts +7 -2
  342. package/esm/highlevel/types/auth/sent-code.d.ts +7 -2
  343. package/esm/highlevel/types/auth/sent-code.js +14 -0
  344. package/esm/highlevel/types/auth/sent-code.js.map +1 -1
  345. package/esm/highlevel/types/bots/inline-message/factories.d.ts +5 -1
  346. package/esm/highlevel/types/bots/inline-result/factories.d.ts +4 -1
  347. package/esm/highlevel/types/bots/keyboards/factories.d.ts +7 -1
  348. package/esm/highlevel/types/calls/discard-reason.d.ts +5 -0
  349. package/esm/highlevel/types/files/uploaded-file.d.ts +2 -0
  350. package/esm/highlevel/types/files/utils.d.ts +6 -5
  351. package/esm/highlevel/types/files/utils.js.map +1 -1
  352. package/esm/highlevel/types/media/document-utils.d.ts +5 -0
  353. package/esm/highlevel/types/media/document-utils.js +7 -1
  354. package/esm/highlevel/types/media/document-utils.js.map +1 -1
  355. package/esm/highlevel/types/media/input-media/types.d.ts +2 -2
  356. package/esm/highlevel/types/media/input-media/types.js.map +1 -1
  357. package/esm/highlevel/types/media/poll.d.ts +17 -6
  358. package/esm/highlevel/types/media/poll.js +64 -17
  359. package/esm/highlevel/types/media/poll.js.map +1 -1
  360. package/esm/highlevel/types/messages/dialog.js +1 -12
  361. package/esm/highlevel/types/messages/dialog.js.map +1 -1
  362. package/esm/highlevel/types/messages/input-message-id.d.ts +5 -0
  363. package/esm/highlevel/types/messages/message-action.d.ts +19 -2
  364. package/esm/highlevel/types/messages/message-action.js +6 -0
  365. package/esm/highlevel/types/messages/message-action.js.map +1 -1
  366. package/esm/highlevel/types/messages/message-media.d.ts +4 -0
  367. package/esm/highlevel/types/messages/message.d.ts +59 -1
  368. package/esm/highlevel/types/messages/message.js +96 -1
  369. package/esm/highlevel/types/messages/message.js.map +1 -1
  370. package/esm/highlevel/types/misc/collectible-info.d.ts +27 -0
  371. package/esm/highlevel/types/misc/collectible-info.js +43 -0
  372. package/esm/highlevel/types/misc/collectible-info.js.map +1 -0
  373. package/esm/highlevel/types/misc/entities.d.ts +7 -0
  374. package/esm/highlevel/types/misc/entities.js +13 -1
  375. package/esm/highlevel/types/misc/entities.js.map +1 -1
  376. package/esm/highlevel/types/misc/index.d.ts +1 -0
  377. package/esm/highlevel/types/misc/index.js +1 -0
  378. package/esm/highlevel/types/misc/index.js.map +1 -1
  379. package/esm/highlevel/types/misc/sticker-set.d.ts +8 -1
  380. package/esm/highlevel/types/misc/sticker-set.js +38 -7
  381. package/esm/highlevel/types/misc/sticker-set.js.map +1 -1
  382. package/esm/highlevel/types/peers/chat-event/actions.d.ts +3 -0
  383. package/esm/highlevel/types/peers/chat-event/filters.d.ts +2 -0
  384. package/esm/highlevel/types/peers/chat.d.ts +7 -93
  385. package/esm/highlevel/types/peers/chat.js +2 -195
  386. package/esm/highlevel/types/peers/chat.js.map +1 -1
  387. package/esm/highlevel/types/peers/full-chat.d.ts +103 -0
  388. package/esm/highlevel/types/peers/full-chat.js +234 -0
  389. package/esm/highlevel/types/peers/full-chat.js.map +1 -0
  390. package/esm/highlevel/types/peers/index.d.ts +1 -0
  391. package/esm/highlevel/types/peers/index.js +1 -0
  392. package/esm/highlevel/types/peers/index.js.map +1 -1
  393. package/esm/highlevel/types/peers/user.d.ts +5 -0
  394. package/esm/highlevel/types/peers/user.js +7 -0
  395. package/esm/highlevel/types/peers/user.js.map +1 -1
  396. package/esm/highlevel/types/premium/business-account.d.ts +19 -0
  397. package/esm/highlevel/types/premium/business-account.js +42 -0
  398. package/esm/highlevel/types/premium/business-account.js.map +1 -0
  399. package/esm/highlevel/types/premium/business-chat-link.d.ts +19 -0
  400. package/esm/highlevel/types/premium/business-chat-link.js +36 -0
  401. package/esm/highlevel/types/premium/business-chat-link.js.map +1 -0
  402. package/esm/highlevel/types/premium/business-connection.d.ts +23 -0
  403. package/esm/highlevel/types/premium/business-connection.js +42 -0
  404. package/esm/highlevel/types/premium/business-connection.js.map +1 -0
  405. package/esm/highlevel/types/premium/business-intro.d.ts +22 -0
  406. package/esm/highlevel/types/premium/business-intro.js +40 -0
  407. package/esm/highlevel/types/premium/business-intro.js.map +1 -0
  408. package/esm/highlevel/types/premium/business-location.d.ts +10 -0
  409. package/esm/highlevel/types/premium/business-location.js +23 -0
  410. package/esm/highlevel/types/premium/business-location.js.map +1 -0
  411. package/esm/highlevel/types/premium/business-work-hours.d.ts +42 -0
  412. package/esm/highlevel/types/premium/business-work-hours.js +137 -0
  413. package/esm/highlevel/types/premium/business-work-hours.js.map +1 -0
  414. package/esm/highlevel/types/premium/index.d.ts +5 -0
  415. package/esm/highlevel/types/premium/index.js +5 -0
  416. package/esm/highlevel/types/premium/index.js.map +1 -1
  417. package/esm/highlevel/types/updates/business-message.d.ts +18 -0
  418. package/esm/highlevel/types/updates/business-message.js +31 -0
  419. package/esm/highlevel/types/updates/business-message.js.map +1 -0
  420. package/esm/highlevel/types/updates/delete-business-message-update.d.ts +21 -0
  421. package/esm/highlevel/types/updates/delete-business-message-update.js +34 -0
  422. package/esm/highlevel/types/updates/delete-business-message-update.js.map +1 -0
  423. package/esm/highlevel/types/updates/index.d.ts +19 -2
  424. package/esm/highlevel/types/updates/index.js +3 -1
  425. package/esm/highlevel/types/updates/index.js.map +1 -1
  426. package/esm/highlevel/types/updates/parse-update.d.ts +4 -1
  427. package/esm/highlevel/types/updates/parse-update.js +9 -1
  428. package/esm/highlevel/types/updates/parse-update.js.map +1 -1
  429. package/esm/highlevel/types/updates/poll-update.js +2 -2
  430. package/esm/highlevel/types/updates/poll-update.js.map +1 -1
  431. package/esm/highlevel/updates/manager.d.ts +0 -1
  432. package/esm/highlevel/updates/manager.js +7 -2
  433. package/esm/highlevel/updates/manager.js.map +1 -1
  434. package/esm/highlevel/updates/parsed.js +8 -2
  435. package/esm/highlevel/updates/parsed.js.map +1 -1
  436. package/esm/highlevel/updates/types.d.ts +57 -0
  437. package/esm/highlevel/updates/utils.d.ts +2 -0
  438. package/esm/highlevel/utils/inspectable.js +4 -0
  439. package/esm/highlevel/utils/inspectable.js.map +1 -1
  440. package/esm/highlevel/worker/protocol.d.ts +0 -1
  441. package/esm/network/client.d.ts +2 -2
  442. package/esm/network/client.js +9 -1
  443. package/esm/network/client.js.map +1 -1
  444. package/esm/network/mtproto-session.d.ts +0 -1
  445. package/esm/network/multi-session-connection.d.ts +0 -1
  446. package/esm/network/network-manager.d.ts +8 -0
  447. package/esm/network/network-manager.js +9 -4
  448. package/esm/network/network-manager.js.map +1 -1
  449. package/esm/network/persistent-connection.d.ts +0 -1
  450. package/esm/network/session-connection.js +11 -0
  451. package/esm/network/session-connection.js.map +1 -1
  452. package/esm/network/transports/abstract.d.ts +0 -1
  453. package/esm/network/transports/streamed.d.ts +0 -1
  454. package/esm/network/transports/wrapped.d.ts +0 -1
  455. package/esm/storage/sqlite/repository/peers.js +1 -2
  456. package/esm/storage/sqlite/repository/peers.js.map +1 -1
  457. package/esm/storage/storage.d.ts +21 -0
  458. package/esm/types/utils.d.ts +1 -0
  459. package/esm/types/utils.js.map +1 -1
  460. package/esm/utils/reloadable.d.ts +0 -1
  461. package/index.d.ts +1 -0
  462. package/index.js +1 -0
  463. package/methods.d.ts +1 -0
  464. package/methods.js +1 -0
  465. package/package.json +5 -5
  466. package/platform.d.ts +1 -0
  467. package/platform.js +1 -0
  468. package/utils.d.ts +1 -0
  469. package/utils.js +1 -0
  470. package/worker.d.ts +1 -0
  471. package/worker.js +1 -0
@@ -17,9 +17,10 @@ function makeParsedUpdateHandler(params) {
17
17
  const parsed = (0, parse_update_js_1._parseUpdate)(update, peers);
18
18
  onRawUpdate(update, peers);
19
19
  if (parsed) {
20
- if (parsed.name === 'new_message') {
20
+ if (parsed.name === 'new_message' || parsed.name === 'new_business_message') {
21
21
  const group = parsed.data.groupedIdUnique;
22
22
  if (group) {
23
+ const isBusiness = parsed.name === 'new_business_message';
23
24
  const pendingGroup = pending.get(group);
24
25
  if (pendingGroup) {
25
26
  pendingGroup[0].push(parsed.data);
@@ -28,7 +29,12 @@ function makeParsedUpdateHandler(params) {
28
29
  const messages = [parsed.data];
29
30
  const timeout = setTimeout(() => {
30
31
  pending.delete(group);
31
- onUpdate({ name: 'message_group', data: messages });
32
+ if (isBusiness) {
33
+ onUpdate({ name: 'business_message_group', data: messages });
34
+ }
35
+ else {
36
+ onUpdate({ name: 'message_group', data: messages });
37
+ }
32
38
  }, messageGroupingInterval);
33
39
  pending.set(group, [messages, timeout]);
34
40
  }
@@ -1 +1 @@
1
- {"version":3,"file":"parsed.js","sourceRoot":"","sources":["../../../../src/highlevel/updates/parsed.ts"],"names":[],"mappings":";;;AAEA,sEAA+D;AAkC/D,SAAgB,uBAAuB,CAAC,MAAiC;IACrE,MAAM,EAAE,uBAAuB,EAAE,QAAQ,EAAE,WAAW,GAAG,GAAG,EAAE,GAAE,CAAC,EAAE,GAAG,MAAM,CAAA;IAE5E,IAAI,CAAC,uBAAuB,EAAE,CAAC;QAC3B,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;YACrB,MAAM,MAAM,GAAG,IAAA,8BAAY,EAAC,MAAM,EAAE,KAAK,CAAC,CAAA;YAE1C,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;YAC1B,IAAI,MAAM;gBAAE,QAAQ,CAAC,MAAM,CAAC,CAAA;QAChC,CAAC,CAAA;IACL,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,GAAG,EAAuC,CAAA;IAE9D,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;QACrB,MAAM,MAAM,GAAG,IAAA,8BAAY,EAAC,MAAM,EAAE,KAAK,CAAC,CAAA;QAE1C,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;QAE1B,IAAI,MAAM,EAAE,CAAC;YACT,IAAI,MAAM,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;gBAChC,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,eAAe,CAAA;gBAEzC,IAAI,KAAK,EAAE,CAAC;oBACR,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;oBAEvC,IAAI,YAAY,EAAE,CAAC;wBACf,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;oBACrC,CAAC;yBAAM,CAAC;wBACJ,MAAM,QAAQ,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;wBAC9B,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;4BAC5B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;4BACrB,QAAQ,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAA;wBACvD,CAAC,EAAE,uBAAuB,CAAC,CAAA;wBAE3B,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAA;oBAC3C,CAAC;oBAED,OAAM;gBACV,CAAC;YACL,CAAC;YAED,QAAQ,CAAC,MAAM,CAAC,CAAA;QACpB,CAAC;IACL,CAAC,CAAA;AACL,CAAC;AA7CD,0DA6CC","sourcesContent":["import { Message } from '../types/messages/index.js'\nimport { ParsedUpdate } from '../types/updates/index.js'\nimport { _parseUpdate } from '../types/updates/parse-update.js'\nimport { RawUpdateHandler } from './types.js'\n\nexport interface ParsedUpdateHandlerParams {\n /**\n * When non-zero, allows the library to automatically handle Telegram\n * media groups (e.g. albums) in {@link MessageGroup} updates\n * in a given time interval (in ms).\n *\n * > **Note**: this does not catch messages that happen to be consecutive,\n * > only messages belonging to the same \"media group\".\n *\n * This will cause up to `messageGroupingInterval` delay\n * in handling media group messages.\n *\n * This option only applies to `new_message` updates,\n * and the updates being grouped **will not** be dispatched on their own.\n *\n * Recommended value is 250 ms.\n *\n * @default 0 (disabled)\n */\n messageGroupingInterval?: number\n\n /** Handler for parsed updates */\n onUpdate: (update: ParsedUpdate) => void\n /**\n * Handler for raw updates.\n *\n * Note that this handler will be called **before** the parsed update handler.\n */\n onRawUpdate?: RawUpdateHandler\n}\n\nexport function makeParsedUpdateHandler(params: ParsedUpdateHandlerParams): RawUpdateHandler {\n const { messageGroupingInterval, onUpdate, onRawUpdate = () => {} } = params\n\n if (!messageGroupingInterval) {\n return (update, peers) => {\n const parsed = _parseUpdate(update, peers)\n\n onRawUpdate(update, peers)\n if (parsed) onUpdate(parsed)\n }\n }\n\n const pending = new Map<string, [Message[], NodeJS.Timeout]>()\n\n return (update, peers) => {\n const parsed = _parseUpdate(update, peers)\n\n onRawUpdate(update, peers)\n\n if (parsed) {\n if (parsed.name === 'new_message') {\n const group = parsed.data.groupedIdUnique\n\n if (group) {\n const pendingGroup = pending.get(group)\n\n if (pendingGroup) {\n pendingGroup[0].push(parsed.data)\n } else {\n const messages = [parsed.data]\n const timeout = setTimeout(() => {\n pending.delete(group)\n onUpdate({ name: 'message_group', data: messages })\n }, messageGroupingInterval)\n\n pending.set(group, [messages, timeout])\n }\n\n return\n }\n }\n\n onUpdate(parsed)\n }\n }\n}\n"]}
1
+ {"version":3,"file":"parsed.js","sourceRoot":"","sources":["../../../../src/highlevel/updates/parsed.ts"],"names":[],"mappings":";;;AAEA,sEAA+D;AAkC/D,SAAgB,uBAAuB,CAAC,MAAiC;IACrE,MAAM,EAAE,uBAAuB,EAAE,QAAQ,EAAE,WAAW,GAAG,GAAG,EAAE,GAAE,CAAC,EAAE,GAAG,MAAM,CAAA;IAE5E,IAAI,CAAC,uBAAuB,EAAE,CAAC;QAC3B,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;YACrB,MAAM,MAAM,GAAG,IAAA,8BAAY,EAAC,MAAM,EAAE,KAAK,CAAC,CAAA;YAE1C,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;YAC1B,IAAI,MAAM;gBAAE,QAAQ,CAAC,MAAM,CAAC,CAAA;QAChC,CAAC,CAAA;IACL,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,GAAG,EAAuC,CAAA;IAE9D,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;QACrB,MAAM,MAAM,GAAG,IAAA,8BAAY,EAAC,MAAM,EAAE,KAAK,CAAC,CAAA;QAE1C,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;QAE1B,IAAI,MAAM,EAAE,CAAC;YACT,IAAI,MAAM,CAAC,IAAI,KAAK,aAAa,IAAI,MAAM,CAAC,IAAI,KAAK,sBAAsB,EAAE,CAAC;gBAC1E,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,eAAe,CAAA;gBAEzC,IAAI,KAAK,EAAE,CAAC;oBACR,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,KAAK,sBAAsB,CAAA;oBACzD,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;oBAEvC,IAAI,YAAY,EAAE,CAAC;wBACf,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;oBACrC,CAAC;yBAAM,CAAC;wBACJ,MAAM,QAAQ,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;wBAC9B,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;4BAC5B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;4BAErB,IAAI,UAAU,EAAE,CAAC;gCACb,QAAQ,CAAC,EAAE,IAAI,EAAE,wBAAwB,EAAE,IAAI,EAAE,QAA6B,EAAE,CAAC,CAAA;4BACrF,CAAC;iCAAM,CAAC;gCACJ,QAAQ,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAA;4BACvD,CAAC;wBACL,CAAC,EAAE,uBAAuB,CAAC,CAAA;wBAE3B,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAA;oBAC3C,CAAC;oBAED,OAAM;gBACV,CAAC;YACL,CAAC;YAED,QAAQ,CAAC,MAAM,CAAC,CAAA;QACpB,CAAC;IACL,CAAC,CAAA;AACL,CAAC;AAnDD,0DAmDC","sourcesContent":["import { Message } from '../types/messages/index.js'\nimport { BusinessMessage, ParsedUpdate } from '../types/updates/index.js'\nimport { _parseUpdate } from '../types/updates/parse-update.js'\nimport { RawUpdateHandler } from './types.js'\n\nexport interface ParsedUpdateHandlerParams {\n /**\n * When non-zero, allows the library to automatically handle Telegram\n * media groups (e.g. albums) in {@link MessageGroup} updates\n * in a given time interval (in ms).\n *\n * > **Note**: this does not catch messages that happen to be consecutive,\n * > only messages belonging to the same \"media group\".\n *\n * This will cause up to `messageGroupingInterval` delay\n * in handling media group messages.\n *\n * This option only applies to `new_message` updates,\n * and the updates being grouped **will not** be dispatched on their own.\n *\n * Recommended value is 250 ms.\n *\n * @default 0 (disabled)\n */\n messageGroupingInterval?: number\n\n /** Handler for parsed updates */\n onUpdate: (update: ParsedUpdate) => void\n /**\n * Handler for raw updates.\n *\n * Note that this handler will be called **before** the parsed update handler.\n */\n onRawUpdate?: RawUpdateHandler\n}\n\nexport function makeParsedUpdateHandler(params: ParsedUpdateHandlerParams): RawUpdateHandler {\n const { messageGroupingInterval, onUpdate, onRawUpdate = () => {} } = params\n\n if (!messageGroupingInterval) {\n return (update, peers) => {\n const parsed = _parseUpdate(update, peers)\n\n onRawUpdate(update, peers)\n if (parsed) onUpdate(parsed)\n }\n }\n\n const pending = new Map<string, [Message[], NodeJS.Timeout]>()\n\n return (update, peers) => {\n const parsed = _parseUpdate(update, peers)\n\n onRawUpdate(update, peers)\n\n if (parsed) {\n if (parsed.name === 'new_message' || parsed.name === 'new_business_message') {\n const group = parsed.data.groupedIdUnique\n\n if (group) {\n const isBusiness = parsed.name === 'new_business_message'\n const pendingGroup = pending.get(group)\n\n if (pendingGroup) {\n pendingGroup[0].push(parsed.data)\n } else {\n const messages = [parsed.data]\n const timeout = setTimeout(() => {\n pending.delete(group)\n\n if (isBusiness) {\n onUpdate({ name: 'business_message_group', data: messages as BusinessMessage[] })\n } else {\n onUpdate({ name: 'message_group', data: messages })\n }\n }, messageGroupingInterval)\n\n pending.set(group, [messages, timeout])\n }\n\n return\n }\n }\n\n onUpdate(parsed)\n }\n }\n}\n"]}
@@ -1,4 +1,6 @@
1
1
  import { tl } from '@mtcute/tl';
2
+ import { AsyncLock, ConditionVariable, Deque, EarlyTimer, Logger, SortedLinkedList } from '../../utils/index.js';
3
+ import { CurrentUserInfo } from '../storage/service/current-user.js';
2
4
  import { PeersIndex } from '../types/peers/peers-index.js';
3
5
  /**
4
6
  * Function to be called for each update.
@@ -46,3 +48,58 @@ export interface UpdatesManagerParams {
46
48
  */
47
49
  catchUp?: boolean;
48
50
  }
51
+ /** @internal */
52
+ export interface PendingUpdateContainer {
53
+ upd: tl.TypeUpdates;
54
+ seqStart: number;
55
+ seqEnd: number;
56
+ }
57
+ /** @internal */
58
+ export interface PendingUpdate {
59
+ update: tl.TypeUpdate;
60
+ channelId?: number;
61
+ pts?: number;
62
+ ptsBefore?: number;
63
+ qts?: number;
64
+ qtsBefore?: number;
65
+ timeout?: number;
66
+ peers: PeersIndex;
67
+ fromDifference: boolean;
68
+ }
69
+ /** @internal */
70
+ export interface UpdatesState {
71
+ updatesLoopActive: boolean;
72
+ updatesLoopCv: ConditionVariable;
73
+ postponedTimer: EarlyTimer;
74
+ hasTimedoutPostponed: boolean;
75
+ pendingUpdateContainers: SortedLinkedList<PendingUpdateContainer>;
76
+ pendingPtsUpdates: SortedLinkedList<PendingUpdate>;
77
+ pendingPtsUpdatesPostponed: SortedLinkedList<PendingUpdate>;
78
+ pendingQtsUpdates: SortedLinkedList<PendingUpdate>;
79
+ pendingQtsUpdatesPostponed: SortedLinkedList<PendingUpdate>;
80
+ pendingUnorderedUpdates: Deque<PendingUpdate>;
81
+ noDispatchEnabled: boolean;
82
+ noDispatchMsg: Map<number, Set<number>>;
83
+ noDispatchPts: Map<number, Set<number>>;
84
+ noDispatchQts: Set<number>;
85
+ lock: AsyncLock;
86
+ pts?: number;
87
+ qts?: number;
88
+ date?: number;
89
+ seq?: number;
90
+ oldPts?: number;
91
+ oldQts?: number;
92
+ oldDate?: number;
93
+ oldSeq?: number;
94
+ selfChanged: boolean;
95
+ catchUpChannels: boolean;
96
+ catchUpOnStart: boolean;
97
+ cpts: Map<number, number>;
98
+ cptsMod: Map<number, number>;
99
+ channelDiffTimeouts: Map<number, NodeJS.Timeout>;
100
+ channelsOpened: Map<number, number>;
101
+ log: Logger;
102
+ stop: () => void;
103
+ handler: RawUpdateHandler;
104
+ auth: CurrentUserInfo | null;
105
+ }
@@ -17,3 +17,5 @@ export declare function createDummyUpdatesContainer(updates: tl.TypeUpdate[], se
17
17
  * @param channelId Channel ID (bare), if applicable
18
18
  */
19
19
  export declare function createDummyUpdate(pts: number, ptsCount: number, channelId?: number): tl.TypeUpdates;
20
+ /** @internal */
21
+ export declare function assertIsUpdatesGroup(ctx: string, upd: tl.TypeUpdates): asserts upd is tl.RawUpdates | tl.RawUpdatesCombined;
@@ -1,8 +1,12 @@
1
1
  "use strict";
2
2
  /* eslint-disable @typescript-eslint/no-explicit-any,@typescript-eslint/no-unsafe-assignment */
3
3
  /* eslint-disable @typescript-eslint/no-unsafe-call,@typescript-eslint/no-unsafe-argument */
4
+ var __importDefault = (this && this.__importDefault) || function (mod) {
5
+ return (mod && mod.__esModule) ? mod : { "default": mod };
6
+ };
4
7
  Object.defineProperty(exports, "__esModule", { value: true });
5
8
  exports.makeInspectable = void 0;
9
+ const long_1 = __importDefault(require("long"));
6
10
  const platform_js_1 = require("../../platform.js");
7
11
  const customInspectSymbol = Symbol.for('nodejs.util.inspect.custom');
8
12
  // get all property names. unlike Object.getOwnPropertyNames,
@@ -46,6 +50,9 @@ function makeInspectable(obj, props, hide) {
46
50
  if (val instanceof Uint8Array) {
47
51
  val = (0, platform_js_1.getPlatform)().base64Encode(val);
48
52
  }
53
+ else if (long_1.default.isLong(val)) {
54
+ val = val.toString();
55
+ }
49
56
  else if (typeof val.toJSON === 'function') {
50
57
  val = val.toJSON(true);
51
58
  }
@@ -1 +1 @@
1
- {"version":3,"file":"inspectable.js","sourceRoot":"","sources":["../../../../src/highlevel/utils/inspectable.ts"],"names":[],"mappings":";AAAA,+FAA+F;AAC/F,4FAA4F;;;AAE5F,mDAA+C;AAE/C,MAAM,mBAAmB,GAAG,MAAM,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAA;AAEpE,6DAA6D;AAC7D,qCAAqC;AACrC,SAAS,kBAAkB,CAAI,GAAM;IACjC,MAAM,OAAO,GAAgB,EAAE,CAAA;IAE/B,GAAG,CAAC;QACA,MAAM,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YAC7C,IACI,IAAI,KAAK,WAAW;gBACpB,MAAM,CAAC,wBAAwB,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,GAAG;gBAC/C,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAW,CAAC,EAChC,CAAC;gBACC,OAAO,CAAC,IAAI,CAAC,IAAW,CAAC,CAAA;YAC7B,CAAC;QACL,CAAC,CAAC,CAAA;IACN,CAAC,QAAQ,CAAC,GAAG,GAAG,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,EAAC;IAE5C,OAAO,OAAO,CAAA;AAClB,CAAC;AAED;;;;;;;GAOG;AACH,SAAgB,eAAe,CAC3B,GAA8B,EAC9B,KAAmB,EACnB,IAAkB;IAElB,MAAM,OAAO,GAAgB,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAA;IAE/C,KAAK,MAAM,GAAG,IAAI,kBAAkB,CAAI,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;QACrD,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;YAAE,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IACvD,CAAC;IAED,4CAA4C;IAC5C,8DAA8D;IAC9D,MAAM,KAAK,GAAG,IAAI,QAAQ,CAAC,mBAAmB,GAAG,CAAC,IAAI,MAAM,CAAC,EAAE,CAAC,SAAS,CAAA;IAEzE,GAAG,CAAC,SAAS,CAAC,MAAM,GAAG;QACnB,MAAM,GAAG,GAAQ,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QACrC,OAAO,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE;YACnB,IAAI,CAAC;gBACD,IAAI,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,CAAA;gBAElB,IAAI,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;oBACjC,IAAI,GAAG,YAAY,UAAU,EAAE,CAAC;wBAC5B,GAAG,GAAG,IAAA,yBAAW,GAAE,CAAC,YAAY,CAAC,GAAG,CAAC,CAAA;oBACzC,CAAC;yBAAM,IAAI,OAAO,GAAG,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;wBAC1C,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;oBAC1B,CAAC;gBACL,CAAC;gBACD,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAA;YACjB,CAAC;YAAC,OAAO,CAAM,EAAE,CAAC;gBACd,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,GAAG,CAAC,CAAC,OAAO,CAAA;YACnC,CAAC;QACL,CAAC,CAAC,CAAA;QAEF,+DAA+D;QAC/D,OAAO,GAAG,CAAA;IACd,CAAC,CAAA;IACD,GAAG,CAAC,SAAS,CAAC,mBAAmB,CAAC,GAAG,GAAG,CAAC,SAAS,CAAC,MAAM,CAAA;IAEzD,OAAO,GAAG,CAAA;AACd,CAAC;AAxCD,0CAwCC","sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any,@typescript-eslint/no-unsafe-assignment */\n/* eslint-disable @typescript-eslint/no-unsafe-call,@typescript-eslint/no-unsafe-argument */\n\nimport { getPlatform } from '../../platform.js'\n\nconst customInspectSymbol = Symbol.for('nodejs.util.inspect.custom')\n\n// get all property names. unlike Object.getOwnPropertyNames,\n// also gets inherited property names\nfunction getAllGettersNames<T>(obj: T): (keyof T)[] {\n const getters: (keyof T)[] = []\n\n do {\n Object.getOwnPropertyNames(obj).forEach((prop) => {\n if (\n prop !== '__proto__' &&\n Object.getOwnPropertyDescriptor(obj, prop)?.get &&\n !getters.includes(prop as any)\n ) {\n getters.push(prop as any)\n }\n })\n } while ((obj = Object.getPrototypeOf(obj)))\n\n return getters\n}\n\n/**\n * Small helper function that adds `toJSON` and `util.custom.inspect`\n * methods to a given class based on its getters\n *\n * > **Note**: This means that all getters must be pure!\n * > (getter that caches after its first invocation is also\n * > considered pure in this case)\n */\nexport function makeInspectable<T>(\n obj: new (...args: any[]) => T,\n props?: (keyof T)[],\n hide?: (keyof T)[],\n): typeof obj {\n const getters: (keyof T)[] = props ? props : []\n\n for (const key of getAllGettersNames<T>(obj.prototype)) {\n if (!hide || !hide.includes(key)) getters.push(key)\n }\n\n // dirty hack to set name for inspect result\n // eslint-disable-next-line @typescript-eslint/no-implied-eval\n const proto = new Function(`return function ${obj.name}(){}`)().prototype\n\n obj.prototype.toJSON = function () {\n const ret: any = Object.create(proto)\n getters.forEach((it) => {\n try {\n let val = this[it]\n\n if (val && typeof val === 'object') {\n if (val instanceof Uint8Array) {\n val = getPlatform().base64Encode(val)\n } else if (typeof val.toJSON === 'function') {\n val = val.toJSON(true)\n }\n }\n ret[it] = val\n } catch (e: any) {\n ret[it] = 'Error: ' + e.message\n }\n })\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return ret\n }\n obj.prototype[customInspectSymbol] = obj.prototype.toJSON\n\n return obj\n}\n"]}
1
+ {"version":3,"file":"inspectable.js","sourceRoot":"","sources":["../../../../src/highlevel/utils/inspectable.ts"],"names":[],"mappings":";AAAA,+FAA+F;AAC/F,4FAA4F;;;;;;AAE5F,gDAAuB;AAEvB,mDAA+C;AAE/C,MAAM,mBAAmB,GAAG,MAAM,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAA;AAEpE,6DAA6D;AAC7D,qCAAqC;AACrC,SAAS,kBAAkB,CAAI,GAAM;IACjC,MAAM,OAAO,GAAgB,EAAE,CAAA;IAE/B,GAAG,CAAC;QACA,MAAM,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YAC7C,IACI,IAAI,KAAK,WAAW;gBACpB,MAAM,CAAC,wBAAwB,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,GAAG;gBAC/C,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAW,CAAC,EAChC,CAAC;gBACC,OAAO,CAAC,IAAI,CAAC,IAAW,CAAC,CAAA;YAC7B,CAAC;QACL,CAAC,CAAC,CAAA;IACN,CAAC,QAAQ,CAAC,GAAG,GAAG,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,EAAC;IAE5C,OAAO,OAAO,CAAA;AAClB,CAAC;AAED;;;;;;;GAOG;AACH,SAAgB,eAAe,CAC3B,GAA8B,EAC9B,KAAmB,EACnB,IAAkB;IAElB,MAAM,OAAO,GAAgB,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAA;IAE/C,KAAK,MAAM,GAAG,IAAI,kBAAkB,CAAI,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;QACrD,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;YAAE,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IACvD,CAAC;IAED,4CAA4C;IAC5C,8DAA8D;IAC9D,MAAM,KAAK,GAAG,IAAI,QAAQ,CAAC,mBAAmB,GAAG,CAAC,IAAI,MAAM,CAAC,EAAE,CAAC,SAAS,CAAA;IAEzE,GAAG,CAAC,SAAS,CAAC,MAAM,GAAG;QACnB,MAAM,GAAG,GAAQ,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QACrC,OAAO,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE;YACnB,IAAI,CAAC;gBACD,IAAI,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,CAAA;gBAElB,IAAI,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;oBACjC,IAAI,GAAG,YAAY,UAAU,EAAE,CAAC;wBAC5B,GAAG,GAAG,IAAA,yBAAW,GAAE,CAAC,YAAY,CAAC,GAAG,CAAC,CAAA;oBACzC,CAAC;yBAAM,IAAI,cAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;wBAC1B,GAAG,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAA;oBACxB,CAAC;yBAAM,IAAI,OAAO,GAAG,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;wBAC1C,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;oBAC1B,CAAC;gBACL,CAAC;gBACD,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAA;YACjB,CAAC;YAAC,OAAO,CAAM,EAAE,CAAC;gBACd,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,GAAG,CAAC,CAAC,OAAO,CAAA;YACnC,CAAC;QACL,CAAC,CAAC,CAAA;QAEF,+DAA+D;QAC/D,OAAO,GAAG,CAAA;IACd,CAAC,CAAA;IACD,GAAG,CAAC,SAAS,CAAC,mBAAmB,CAAC,GAAG,GAAG,CAAC,SAAS,CAAC,MAAM,CAAA;IAEzD,OAAO,GAAG,CAAA;AACd,CAAC;AA1CD,0CA0CC","sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any,@typescript-eslint/no-unsafe-assignment */\n/* eslint-disable @typescript-eslint/no-unsafe-call,@typescript-eslint/no-unsafe-argument */\n\nimport Long from 'long'\n\nimport { getPlatform } from '../../platform.js'\n\nconst customInspectSymbol = Symbol.for('nodejs.util.inspect.custom')\n\n// get all property names. unlike Object.getOwnPropertyNames,\n// also gets inherited property names\nfunction getAllGettersNames<T>(obj: T): (keyof T)[] {\n const getters: (keyof T)[] = []\n\n do {\n Object.getOwnPropertyNames(obj).forEach((prop) => {\n if (\n prop !== '__proto__' &&\n Object.getOwnPropertyDescriptor(obj, prop)?.get &&\n !getters.includes(prop as any)\n ) {\n getters.push(prop as any)\n }\n })\n } while ((obj = Object.getPrototypeOf(obj)))\n\n return getters\n}\n\n/**\n * Small helper function that adds `toJSON` and `util.custom.inspect`\n * methods to a given class based on its getters\n *\n * > **Note**: This means that all getters must be pure!\n * > (getter that caches after its first invocation is also\n * > considered pure in this case)\n */\nexport function makeInspectable<T>(\n obj: new (...args: any[]) => T,\n props?: (keyof T)[],\n hide?: (keyof T)[],\n): typeof obj {\n const getters: (keyof T)[] = props ? props : []\n\n for (const key of getAllGettersNames<T>(obj.prototype)) {\n if (!hide || !hide.includes(key)) getters.push(key)\n }\n\n // dirty hack to set name for inspect result\n // eslint-disable-next-line @typescript-eslint/no-implied-eval\n const proto = new Function(`return function ${obj.name}(){}`)().prototype\n\n obj.prototype.toJSON = function () {\n const ret: any = Object.create(proto)\n getters.forEach((it) => {\n try {\n let val = this[it]\n\n if (val && typeof val === 'object') {\n if (val instanceof Uint8Array) {\n val = getPlatform().base64Encode(val)\n } else if (Long.isLong(val)) {\n val = val.toString()\n } else if (typeof val.toJSON === 'function') {\n val = val.toJSON(true)\n }\n }\n ret[it] = val\n } catch (e: any) {\n ret[it] = 'Error: ' + e.message\n }\n })\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return ret\n }\n obj.prototype[customInspectSymbol] = obj.prototype.toJSON\n\n return obj\n}\n"]}
@@ -1,4 +1,10 @@
1
1
  "use strict";
2
+ if (typeof globalThis !== 'undefined' && !globalThis._MTCUTE_CJS_DEPRECATION_WARNED) {
3
+ globalThis._MTCUTE_CJS_DEPRECATION_WARNED = true
4
+ console.warn("[@mtcute/core] CommonJS support is deprecated and will be removed soon. Please consider switching to ESM, it's "+(new Date()).getFullYear()+" already.")
5
+ console.warn("[@mtcute/core] Learn more about switching to ESM: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c")
6
+ }
7
+ "use strict";
2
8
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
9
  if (k2 === undefined) k2 = k;
4
10
  var desc = Object.getOwnPropertyDescriptor(m, k);
@@ -1,4 +1,3 @@
1
-
2
1
  import type { Worker as NodeWorker } from 'node:worker_threads';
3
2
  import { tl } from '@mtcute/tl';
4
3
  import { ConnectionState } from '../client.types.js';
package/cjs/index.js CHANGED
@@ -1,4 +1,10 @@
1
1
  "use strict";
2
+ if (typeof globalThis !== 'undefined' && !globalThis._MTCUTE_CJS_DEPRECATION_WARNED) {
3
+ globalThis._MTCUTE_CJS_DEPRECATION_WARNED = true
4
+ console.warn("[@mtcute/core] CommonJS support is deprecated and will be removed soon. Please consider switching to ESM, it's "+(new Date()).getFullYear()+" already.")
5
+ console.warn("[@mtcute/core] Learn more about switching to ESM: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c")
6
+ }
7
+ "use strict";
2
8
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
9
  if (k2 === undefined) k2 = k;
4
10
  var desc = Object.getOwnPropertyDescriptor(m, k);
@@ -1,4 +1,3 @@
1
-
2
1
  import EventEmitter from 'events';
3
2
  import { tl } from '@mtcute/tl';
4
3
  import { TlReaderMap, TlWriterMap } from '@mtcute/tl-runtime';
@@ -197,10 +196,11 @@ export declare class MtClient extends EventEmitter {
197
196
  /** TL writers map used by the client */
198
197
  readonly _writerMap: TlWriterMap;
199
198
  readonly _config: ConfigManager;
200
- emitError: (err: unknown, connection?: SessionConnection) => void;
199
+ private _emitError?;
201
200
  readonly log: Logger;
202
201
  readonly network: NetworkManager;
203
202
  constructor(params: MtClientOptions);
203
+ emitError(err: unknown, connection?: SessionConnection): void;
204
204
  private _prepare;
205
205
  /**
206
206
  * **ADVANCED**
@@ -43,7 +43,7 @@ class MtClient extends events_1.default {
43
43
  /** TL writers map used by the client */
44
44
  _writerMap;
45
45
  _config = new config_manager_js_1.ConfigManager(() => this.call({ _: 'help.getConfig' }));
46
- emitError = console.error.bind(console);
46
+ _emitError;
47
47
  log;
48
48
  network;
49
49
  constructor(params) {
@@ -102,6 +102,14 @@ class MtClient extends events_1.default {
102
102
  ...params.network,
103
103
  }, this._config);
104
104
  }
105
+ emitError(err, connection) {
106
+ if (this._emitError) {
107
+ this._emitError(err, connection);
108
+ }
109
+ else {
110
+ this.log.error('unhandled error:', err);
111
+ }
112
+ }
105
113
  _prepare = (0, index_js_1.asyncResettable)(async () => {
106
114
  await this.crypto.initialize?.();
107
115
  await this.storage.load();
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/network/client.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport EventEmitter from 'events'\n\nimport { tl } from '@mtcute/tl'\nimport { __tlReaderMap as defaultReaderMap } from '@mtcute/tl/binary/reader.js'\nimport { __tlWriterMap as defaultWriterMap } from '@mtcute/tl/binary/writer.js'\nimport { TlReaderMap, TlWriterMap } from '@mtcute/tl-runtime'\n\nimport { IMtStorageProvider } from '../storage/provider.js'\nimport { StorageManager, StorageManagerExtraOptions } from '../storage/storage.js'\nimport { MustEqual } from '../types/index.js'\nimport {\n asyncResettable,\n DcOptions,\n defaultProductionDc,\n defaultProductionIpv6Dc,\n defaultTestDc,\n defaultTestIpv6Dc,\n ICryptoProvider,\n Logger,\n LogManager,\n} from '../utils/index.js'\nimport { ConfigManager } from './config-manager.js'\nimport { NetworkManager, NetworkManagerExtraParams, RpcCallOptions } from './network-manager.js'\nimport { PersistentConnectionParams } from './persistent-connection.js'\nimport { ReconnectionStrategy } from './reconnection.js'\nimport { SessionConnection } from './session-connection.js'\nimport { TransportFactory } from './transports/index.js'\n\n/** Options for {@link MtClient} */\nexport interface MtClientOptions {\n /**\n * API ID from my.telegram.org\n */\n apiId: number\n /**\n * API hash from my.telegram.org\n */\n apiHash: string\n\n /**\n * Storage to use for this client.\n */\n storage: IMtStorageProvider\n\n /** Additional options for the storage manager */\n storageOptions?: StorageManagerExtraOptions\n\n /**\n * Cryptography provider to allow delegating\n * crypto to native addon, worker, etc.\n */\n crypto: ICryptoProvider\n\n /**\n * Whether to use IPv6 datacenters\n * (IPv6 will be preferred when choosing a DC by id)\n * (default: false)\n */\n useIpv6?: boolean\n\n /**\n * Primary DC to use for initial connection.\n * This does not mean this will be the only DC used,\n * nor that this DC will actually be primary, this only\n * determines the first DC the library will try to connect to.\n * Can be used to connect to other networks (like test DCs).\n *\n * When session already contains primary DC, this parameter is ignored.\n *\n * @default Production DC 2.\n */\n defaultDcs?: DcOptions\n\n /**\n * Whether to connect to test servers.\n *\n * If passed, {@link defaultDc} defaults to Test DC 2.\n *\n * **Must** be passed if using test servers, even if\n * you passed custom {@link defaultDc}\n */\n testMode?: boolean\n\n /**\n * Additional options for initConnection call.\n * `apiId` and `query` are not available and will be ignored.\n * Omitted values will be filled with defaults\n */\n initConnectionOptions?: Partial<Omit<tl.RawInitConnectionRequest, 'apiId' | 'query'>>\n\n /**\n * Transport factory to use in the client.\n *\n * @default platform-specific transport: WebSocket on the web, TCP in node\n */\n transport: TransportFactory\n\n /**\n * Reconnection strategy.\n *\n * @default simple reconnection strategy: first 0ms, then up to 5s (increasing by 1s)\n */\n reconnectionStrategy?: ReconnectionStrategy<PersistentConnectionParams>\n\n /**\n * Maximum duration of a flood_wait that will be waited automatically.\n * Flood waits above this threshold will throw a FloodWaitError.\n * Set to 0 to disable. Can be overridden with `throwFlood` parameter in call() params\n *\n * @default 10000\n */\n floodSleepThreshold?: number\n\n /**\n * Maximum number of retries when calling RPC methods.\n * Call is retried when InternalError or FloodWaitError is encountered.\n * Can be set to Infinity.\n *\n * @default 5\n */\n maxRetryCount?: number\n\n /**\n * If true, every single API call will be wrapped with `tl.invokeWithoutUpdates`,\n * effectively disabling the server-sent events for the clients.\n * May be useful in some cases.\n *\n * Note that this only wraps calls made with `.call()` within the primary\n * connection. Additional connections and direct `.sendForResult()` calls\n * must be wrapped manually.\n *\n * @default false\n */\n disableUpdates?: boolean\n\n /**\n * mtcute can send all unknown RPC errors to [danog](https://github.com/danog)'s\n * [error reporting service](https://rpc.pwrtelegram.xyz/).\n *\n * This is fully anonymous (except maybe IP) and is only used to improve the library\n * and developer experience for everyone working with MTProto. This is fully opt-in,\n * and if you're too paranoid, you can disable it by manually passing `enableErrorReporting: false` to the client.\n *\n * @default false\n */\n enableErrorReporting?: boolean\n\n /**\n * If true, RPC errors will have a stack trace of the initial `.call()`\n * or `.sendForResult()` call position, which drastically improves\n * debugging experience.<br>\n * If false, they will have a stack trace of mtcute internals.\n *\n * Internally this creates a stack capture before every RPC call\n * and stores it until the result is received. This might\n * use a lot more memory than normal, thus can be disabled here.\n *\n * @default true\n */\n niceStacks?: boolean\n\n /**\n * Extra parameters for {@link NetworkManager}\n */\n network?: NetworkManagerExtraParams\n\n /**\n * Logger instance for the client.\n * If not passed, a new one will be created.\n */\n logger?: Logger\n\n /**\n * Set logging level for the client.\n * Shorthand for `client.log.level = level`.\n *\n * See static members of {@link LogManager} for possible values.\n */\n logLevel?: number\n\n /**\n * **EXPERT USE ONLY!**\n *\n * Override TL layer used for the connection.\n *\n * **Does not** change the schema used.\n */\n overrideLayer?: number\n\n /**\n * **EXPERT USE ONLY**\n *\n * Override reader map used for the connection.\n */\n readerMap?: TlReaderMap\n\n /**\n * **EXPERT USE ONLY**\n *\n * Override writer map used for the connection.\n */\n writerMap?: TlWriterMap\n}\n\n/**\n * Basic MTProto client implementation, only doing the bare minimum\n * to make RPC calls and receive low-level updates, as well as providing\n * some APIs to manage that.\n */\nexport class MtClient extends EventEmitter {\n /**\n * Crypto provider taken from {@link MtClientOptions.crypto}\n */\n readonly crypto: ICryptoProvider\n\n /** Storage manager */\n readonly storage: StorageManager\n\n /**\n * \"Test mode\" taken from {@link MtClientOptions.testMode}\n */\n protected readonly _testMode: boolean\n\n /**\n * Primary DCs taken from {@link MtClientOptions.defaultDcs},\n * loaded from session or changed by other means (like redirecting).\n */\n _defaultDcs: DcOptions\n\n private _niceStacks: boolean\n /** TL layer used by the client */\n readonly _layer: number\n /** TL readers map used by the client */\n readonly _readerMap: TlReaderMap\n /** TL writers map used by the client */\n readonly _writerMap: TlWriterMap\n\n readonly _config = new ConfigManager(() => this.call({ _: 'help.getConfig' }))\n\n emitError: (err: unknown, connection?: SessionConnection) => void = console.error.bind(console)\n\n readonly log: Logger\n readonly network: NetworkManager\n\n constructor(readonly params: MtClientOptions) {\n super()\n\n this.log = params.logger ?? new LogManager()\n\n if (params.logLevel !== undefined) {\n this.log.mgr.level = params.logLevel\n }\n\n this.crypto = params.crypto\n this._testMode = Boolean(params.testMode)\n\n let dc = params.defaultDcs\n\n if (!dc) {\n if (params.testMode) {\n dc = params.useIpv6 ? defaultTestIpv6Dc : defaultTestDc\n } else {\n dc = params.useIpv6 ? defaultProductionIpv6Dc : defaultProductionDc\n }\n }\n\n this._defaultDcs = dc\n this._niceStacks = params.niceStacks ?? true\n\n this._layer = params.overrideLayer ?? tl.LAYER\n this._readerMap = params.readerMap ?? defaultReaderMap\n this._writerMap = params.writerMap ?? defaultWriterMap\n\n this.storage = new StorageManager({\n provider: params.storage,\n log: this.log,\n readerMap: this._readerMap,\n writerMap: this._writerMap,\n ...params.storageOptions,\n })\n\n this.network = new NetworkManager(\n {\n apiId: params.apiId,\n crypto: this.crypto,\n disableUpdates: params.disableUpdates ?? false,\n initConnectionOptions: params.initConnectionOptions,\n layer: this._layer,\n log: this.log,\n readerMap: this._readerMap,\n writerMap: this._writerMap,\n reconnectionStrategy: params.reconnectionStrategy,\n storage: this.storage,\n testMode: Boolean(params.testMode),\n transport: params.transport,\n emitError: this.emitError.bind(this),\n floodSleepThreshold: params.floodSleepThreshold ?? 10000,\n maxRetryCount: params.maxRetryCount ?? 5,\n isPremium: false,\n useIpv6: Boolean(params.useIpv6),\n enableErrorReporting: params.enableErrorReporting ?? false,\n onUsable: () => this.emit('usable'),\n onConnecting: () => this.emit('connecting'),\n onNetworkChanged: (connected) => this.emit('networkChanged', connected),\n onUpdate: (upd) => this.emit('update', upd),\n ...params.network,\n },\n this._config,\n )\n }\n\n private _prepare = asyncResettable(async () => {\n await this.crypto.initialize?.()\n await this.storage.load()\n\n const primaryDc = await this.storage.dcs.fetch()\n if (primaryDc !== null) this._defaultDcs = primaryDc\n })\n\n /**\n * **ADVANCED**\n *\n * Do all the preparations, but don't connect just yet.\n * Useful when you want to do some preparations before\n * connecting, like setting up session.\n *\n * Call {@link connect} to actually connect.\n */\n prepare() {\n return this._prepare.run()\n }\n\n private _connect = asyncResettable(async () => {\n await this._prepare.run()\n await this.network.connect(this._defaultDcs)\n })\n\n /**\n * Initialize the connection to the primary DC.\n *\n * You shouldn't usually call this method directly as it is called\n * implicitly the first time you call {@link call}.\n */\n async connect(): Promise<void> {\n return this._connect.run()\n }\n\n /**\n * Close all connections and finalize the client.\n */\n async close(): Promise<void> {\n this._config.destroy()\n await this.network.destroy()\n\n await this.storage.save()\n await this.storage.destroy?.()\n\n this._prepare.reset()\n this._connect.reset()\n }\n\n /**\n * Make an RPC call.\n *\n * The connection must have been {@link connect}-ed\n * before calling this method.\n *\n * This method is still quite low-level and you shouldn't use this\n * when using high-level API provided by `@mtcute/client`.\n *\n * @param message RPC method to call\n * @param params Additional call parameters\n */\n async call<T extends tl.RpcMethod>(\n message: MustEqual<T, tl.RpcMethod>,\n params?: RpcCallOptions,\n ): Promise<tl.RpcCallReturn[T['_']]> {\n const stack = this._niceStacks ? new Error().stack : undefined\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return this.network.call(message, params, stack)\n }\n\n /**\n * Register an error handler for the client\n *\n * @param handler Error handler.\n */\n onError(handler: (err: unknown) => void): void {\n this.emitError = handler\n }\n}\n"]}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/network/client.ts"],"names":[],"mappings":";;;;;;AAAA,uDAAuD;AACvD,oDAAiC;AAEjC,mCAA+B;AAC/B,2DAA+E;AAC/E,2DAA+E;AAI/E,sDAAkF;AAElF,gDAU0B;AAC1B,2DAAmD;AACnD,6DAAgG;AAsLhG;;;;GAIG;AACH,MAAa,QAAS,SAAQ,gBAAY;IAmCjB;IAlCrB;;OAEG;IACM,MAAM,CAAiB;IAEhC,sBAAsB;IACb,OAAO,CAAgB;IAEhC;;OAEG;IACgB,SAAS,CAAS;IAErC;;;OAGG;IACH,WAAW,CAAW;IAEd,WAAW,CAAS;IAC5B,kCAAkC;IACzB,MAAM,CAAQ;IACvB,wCAAwC;IAC/B,UAAU,CAAa;IAChC,wCAAwC;IAC/B,UAAU,CAAa;IAEvB,OAAO,GAAG,IAAI,iCAAa,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAA;IAEtE,UAAU,CAAyD;IAElE,GAAG,CAAQ;IACX,OAAO,CAAgB;IAEhC,YAAqB,MAAuB;QACxC,KAAK,EAAE,CAAA;QADU,WAAM,GAAN,MAAM,CAAiB;QAGxC,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,MAAM,IAAI,IAAI,qBAAU,EAAE,CAAA;QAE5C,IAAI,MAAM,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;YAChC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAA;QACxC,CAAC;QAED,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAA;QAC3B,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;QAEzC,IAAI,EAAE,GAAG,MAAM,CAAC,UAAU,CAAA;QAE1B,IAAI,CAAC,EAAE,EAAE,CAAC;YACN,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;gBAClB,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,4BAAiB,CAAC,CAAC,CAAC,wBAAa,CAAA;YAC3D,CAAC;iBAAM,CAAC;gBACJ,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,kCAAuB,CAAC,CAAC,CAAC,8BAAmB,CAAA;YACvE,CAAC;QACL,CAAC;QAED,IAAI,CAAC,WAAW,GAAG,EAAE,CAAA;QACrB,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,UAAU,IAAI,IAAI,CAAA;QAE5C,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,aAAa,IAAI,OAAE,CAAC,KAAK,CAAA;QAC9C,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,SAAS,IAAI,yBAAgB,CAAA;QACtD,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,SAAS,IAAI,yBAAgB,CAAA;QAEtD,IAAI,CAAC,OAAO,GAAG,IAAI,2BAAc,CAAC;YAC9B,QAAQ,EAAE,MAAM,CAAC,OAAO;YACxB,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,SAAS,EAAE,IAAI,CAAC,UAAU;YAC1B,SAAS,EAAE,IAAI,CAAC,UAAU;YAC1B,GAAG,MAAM,CAAC,cAAc;SAC3B,CAAC,CAAA;QAEF,IAAI,CAAC,OAAO,GAAG,IAAI,mCAAc,CAC7B;YACI,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,cAAc,EAAE,MAAM,CAAC,cAAc,IAAI,KAAK;YAC9C,qBAAqB,EAAE,MAAM,CAAC,qBAAqB;YACnD,KAAK,EAAE,IAAI,CAAC,MAAM;YAClB,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,SAAS,EAAE,IAAI,CAAC,UAAU;YAC1B,SAAS,EAAE,IAAI,CAAC,UAAU;YAC1B,oBAAoB,EAAE,MAAM,CAAC,oBAAoB;YACjD,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC;YAClC,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;YACpC,mBAAmB,EAAE,MAAM,CAAC,mBAAmB,IAAI,KAAK;YACxD,aAAa,EAAE,MAAM,CAAC,aAAa,IAAI,CAAC;YACxC,SAAS,EAAE,KAAK;YAChB,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC;YAChC,oBAAoB,EAAE,MAAM,CAAC,oBAAoB,IAAI,KAAK;YAC1D,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;YACnC,YAAY,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC;YAC3C,gBAAgB,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,SAAS,CAAC;YACvE,QAAQ,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC;YAC3C,GAAG,MAAM,CAAC,OAAO;SACpB,EACD,IAAI,CAAC,OAAO,CACf,CAAA;IACL,CAAC;IAED,SAAS,CAAC,GAAY,EAAE,UAA8B;QAClD,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YAClB,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,UAAU,CAAC,CAAA;QACpC,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,kBAAkB,EAAE,GAAG,CAAC,CAAA;QAC3C,CAAC;IACL,CAAC;IAEO,QAAQ,GAAG,IAAA,0BAAe,EAAC,KAAK,IAAI,EAAE;QAC1C,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,CAAA;QAChC,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAA;QAEzB,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,CAAA;QAChD,IAAI,SAAS,KAAK,IAAI;YAAE,IAAI,CAAC,WAAW,GAAG,SAAS,CAAA;IACxD,CAAC,CAAC,CAAA;IAEF;;;;;;;;OAQG;IACH,OAAO;QACH,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAA;IAC9B,CAAC;IAEO,QAAQ,GAAG,IAAA,0BAAe,EAAC,KAAK,IAAI,EAAE;QAC1C,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAA;QACzB,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;IAChD,CAAC,CAAC,CAAA;IAEF;;;;;OAKG;IACH,KAAK,CAAC,OAAO;QACT,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAA;IAC9B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK;QACP,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAA;QACtB,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAA;QAE5B,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAA;QACzB,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAA;QAE9B,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAA;QACrB,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAA;IACzB,CAAC;IAED;;;;;;;;;;;OAWG;IACH,KAAK,CAAC,IAAI,CACN,OAAmC,EACnC,MAAuB;QAEvB,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAA;QAE9D,+DAA+D;QAC/D,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,CAAA;IACpD,CAAC;IAED;;;;OAIG;IACH,OAAO,CAAC,OAA+B;QACnC,IAAI,CAAC,SAAS,GAAG,OAAO,CAAA;IAC5B,CAAC;CACJ;AA9LD,4BA8LC","sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport EventEmitter from 'events'\n\nimport { tl } from '@mtcute/tl'\nimport { __tlReaderMap as defaultReaderMap } from '@mtcute/tl/binary/reader.js'\nimport { __tlWriterMap as defaultWriterMap } from '@mtcute/tl/binary/writer.js'\nimport { TlReaderMap, TlWriterMap } from '@mtcute/tl-runtime'\n\nimport { IMtStorageProvider } from '../storage/provider.js'\nimport { StorageManager, StorageManagerExtraOptions } from '../storage/storage.js'\nimport { MustEqual } from '../types/index.js'\nimport {\n asyncResettable,\n DcOptions,\n defaultProductionDc,\n defaultProductionIpv6Dc,\n defaultTestDc,\n defaultTestIpv6Dc,\n ICryptoProvider,\n Logger,\n LogManager,\n} from '../utils/index.js'\nimport { ConfigManager } from './config-manager.js'\nimport { NetworkManager, NetworkManagerExtraParams, RpcCallOptions } from './network-manager.js'\nimport { PersistentConnectionParams } from './persistent-connection.js'\nimport { ReconnectionStrategy } from './reconnection.js'\nimport { SessionConnection } from './session-connection.js'\nimport { TransportFactory } from './transports/index.js'\n\n/** Options for {@link MtClient} */\nexport interface MtClientOptions {\n /**\n * API ID from my.telegram.org\n */\n apiId: number\n /**\n * API hash from my.telegram.org\n */\n apiHash: string\n\n /**\n * Storage to use for this client.\n */\n storage: IMtStorageProvider\n\n /** Additional options for the storage manager */\n storageOptions?: StorageManagerExtraOptions\n\n /**\n * Cryptography provider to allow delegating\n * crypto to native addon, worker, etc.\n */\n crypto: ICryptoProvider\n\n /**\n * Whether to use IPv6 datacenters\n * (IPv6 will be preferred when choosing a DC by id)\n * (default: false)\n */\n useIpv6?: boolean\n\n /**\n * Primary DC to use for initial connection.\n * This does not mean this will be the only DC used,\n * nor that this DC will actually be primary, this only\n * determines the first DC the library will try to connect to.\n * Can be used to connect to other networks (like test DCs).\n *\n * When session already contains primary DC, this parameter is ignored.\n *\n * @default Production DC 2.\n */\n defaultDcs?: DcOptions\n\n /**\n * Whether to connect to test servers.\n *\n * If passed, {@link defaultDc} defaults to Test DC 2.\n *\n * **Must** be passed if using test servers, even if\n * you passed custom {@link defaultDc}\n */\n testMode?: boolean\n\n /**\n * Additional options for initConnection call.\n * `apiId` and `query` are not available and will be ignored.\n * Omitted values will be filled with defaults\n */\n initConnectionOptions?: Partial<Omit<tl.RawInitConnectionRequest, 'apiId' | 'query'>>\n\n /**\n * Transport factory to use in the client.\n *\n * @default platform-specific transport: WebSocket on the web, TCP in node\n */\n transport: TransportFactory\n\n /**\n * Reconnection strategy.\n *\n * @default simple reconnection strategy: first 0ms, then up to 5s (increasing by 1s)\n */\n reconnectionStrategy?: ReconnectionStrategy<PersistentConnectionParams>\n\n /**\n * Maximum duration of a flood_wait that will be waited automatically.\n * Flood waits above this threshold will throw a FloodWaitError.\n * Set to 0 to disable. Can be overridden with `throwFlood` parameter in call() params\n *\n * @default 10000\n */\n floodSleepThreshold?: number\n\n /**\n * Maximum number of retries when calling RPC methods.\n * Call is retried when InternalError or FloodWaitError is encountered.\n * Can be set to Infinity.\n *\n * @default 5\n */\n maxRetryCount?: number\n\n /**\n * If true, every single API call will be wrapped with `tl.invokeWithoutUpdates`,\n * effectively disabling the server-sent events for the clients.\n * May be useful in some cases.\n *\n * Note that this only wraps calls made with `.call()` within the primary\n * connection. Additional connections and direct `.sendForResult()` calls\n * must be wrapped manually.\n *\n * @default false\n */\n disableUpdates?: boolean\n\n /**\n * mtcute can send all unknown RPC errors to [danog](https://github.com/danog)'s\n * [error reporting service](https://rpc.pwrtelegram.xyz/).\n *\n * This is fully anonymous (except maybe IP) and is only used to improve the library\n * and developer experience for everyone working with MTProto. This is fully opt-in,\n * and if you're too paranoid, you can disable it by manually passing `enableErrorReporting: false` to the client.\n *\n * @default false\n */\n enableErrorReporting?: boolean\n\n /**\n * If true, RPC errors will have a stack trace of the initial `.call()`\n * or `.sendForResult()` call position, which drastically improves\n * debugging experience.<br>\n * If false, they will have a stack trace of mtcute internals.\n *\n * Internally this creates a stack capture before every RPC call\n * and stores it until the result is received. This might\n * use a lot more memory than normal, thus can be disabled here.\n *\n * @default true\n */\n niceStacks?: boolean\n\n /**\n * Extra parameters for {@link NetworkManager}\n */\n network?: NetworkManagerExtraParams\n\n /**\n * Logger instance for the client.\n * If not passed, a new one will be created.\n */\n logger?: Logger\n\n /**\n * Set logging level for the client.\n * Shorthand for `client.log.level = level`.\n *\n * See static members of {@link LogManager} for possible values.\n */\n logLevel?: number\n\n /**\n * **EXPERT USE ONLY!**\n *\n * Override TL layer used for the connection.\n *\n * **Does not** change the schema used.\n */\n overrideLayer?: number\n\n /**\n * **EXPERT USE ONLY**\n *\n * Override reader map used for the connection.\n */\n readerMap?: TlReaderMap\n\n /**\n * **EXPERT USE ONLY**\n *\n * Override writer map used for the connection.\n */\n writerMap?: TlWriterMap\n}\n\n/**\n * Basic MTProto client implementation, only doing the bare minimum\n * to make RPC calls and receive low-level updates, as well as providing\n * some APIs to manage that.\n */\nexport class MtClient extends EventEmitter {\n /**\n * Crypto provider taken from {@link MtClientOptions.crypto}\n */\n readonly crypto: ICryptoProvider\n\n /** Storage manager */\n readonly storage: StorageManager\n\n /**\n * \"Test mode\" taken from {@link MtClientOptions.testMode}\n */\n protected readonly _testMode: boolean\n\n /**\n * Primary DCs taken from {@link MtClientOptions.defaultDcs},\n * loaded from session or changed by other means (like redirecting).\n */\n _defaultDcs: DcOptions\n\n private _niceStacks: boolean\n /** TL layer used by the client */\n readonly _layer: number\n /** TL readers map used by the client */\n readonly _readerMap: TlReaderMap\n /** TL writers map used by the client */\n readonly _writerMap: TlWriterMap\n\n readonly _config = new ConfigManager(() => this.call({ _: 'help.getConfig' }))\n\n private _emitError?: (err: unknown, connection?: SessionConnection) => void\n\n readonly log: Logger\n readonly network: NetworkManager\n\n constructor(readonly params: MtClientOptions) {\n super()\n\n this.log = params.logger ?? new LogManager()\n\n if (params.logLevel !== undefined) {\n this.log.mgr.level = params.logLevel\n }\n\n this.crypto = params.crypto\n this._testMode = Boolean(params.testMode)\n\n let dc = params.defaultDcs\n\n if (!dc) {\n if (params.testMode) {\n dc = params.useIpv6 ? defaultTestIpv6Dc : defaultTestDc\n } else {\n dc = params.useIpv6 ? defaultProductionIpv6Dc : defaultProductionDc\n }\n }\n\n this._defaultDcs = dc\n this._niceStacks = params.niceStacks ?? true\n\n this._layer = params.overrideLayer ?? tl.LAYER\n this._readerMap = params.readerMap ?? defaultReaderMap\n this._writerMap = params.writerMap ?? defaultWriterMap\n\n this.storage = new StorageManager({\n provider: params.storage,\n log: this.log,\n readerMap: this._readerMap,\n writerMap: this._writerMap,\n ...params.storageOptions,\n })\n\n this.network = new NetworkManager(\n {\n apiId: params.apiId,\n crypto: this.crypto,\n disableUpdates: params.disableUpdates ?? false,\n initConnectionOptions: params.initConnectionOptions,\n layer: this._layer,\n log: this.log,\n readerMap: this._readerMap,\n writerMap: this._writerMap,\n reconnectionStrategy: params.reconnectionStrategy,\n storage: this.storage,\n testMode: Boolean(params.testMode),\n transport: params.transport,\n emitError: this.emitError.bind(this),\n floodSleepThreshold: params.floodSleepThreshold ?? 10000,\n maxRetryCount: params.maxRetryCount ?? 5,\n isPremium: false,\n useIpv6: Boolean(params.useIpv6),\n enableErrorReporting: params.enableErrorReporting ?? false,\n onUsable: () => this.emit('usable'),\n onConnecting: () => this.emit('connecting'),\n onNetworkChanged: (connected) => this.emit('networkChanged', connected),\n onUpdate: (upd) => this.emit('update', upd),\n ...params.network,\n },\n this._config,\n )\n }\n\n emitError(err: unknown, connection?: SessionConnection): void {\n if (this._emitError) {\n this._emitError(err, connection)\n } else {\n this.log.error('unhandled error:', err)\n }\n }\n\n private _prepare = asyncResettable(async () => {\n await this.crypto.initialize?.()\n await this.storage.load()\n\n const primaryDc = await this.storage.dcs.fetch()\n if (primaryDc !== null) this._defaultDcs = primaryDc\n })\n\n /**\n * **ADVANCED**\n *\n * Do all the preparations, but don't connect just yet.\n * Useful when you want to do some preparations before\n * connecting, like setting up session.\n *\n * Call {@link connect} to actually connect.\n */\n prepare() {\n return this._prepare.run()\n }\n\n private _connect = asyncResettable(async () => {\n await this._prepare.run()\n await this.network.connect(this._defaultDcs)\n })\n\n /**\n * Initialize the connection to the primary DC.\n *\n * You shouldn't usually call this method directly as it is called\n * implicitly the first time you call {@link call}.\n */\n async connect(): Promise<void> {\n return this._connect.run()\n }\n\n /**\n * Close all connections and finalize the client.\n */\n async close(): Promise<void> {\n this._config.destroy()\n await this.network.destroy()\n\n await this.storage.save()\n await this.storage.destroy?.()\n\n this._prepare.reset()\n this._connect.reset()\n }\n\n /**\n * Make an RPC call.\n *\n * The connection must have been {@link connect}-ed\n * before calling this method.\n *\n * This method is still quite low-level and you shouldn't use this\n * when using high-level API provided by `@mtcute/client`.\n *\n * @param message RPC method to call\n * @param params Additional call parameters\n */\n async call<T extends tl.RpcMethod>(\n message: MustEqual<T, tl.RpcMethod>,\n params?: RpcCallOptions,\n ): Promise<tl.RpcCallReturn[T['_']]> {\n const stack = this._niceStacks ? new Error().stack : undefined\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return this.network.call(message, params, stack)\n }\n\n /**\n * Register an error handler for the client\n *\n * @param handler Error handler.\n */\n onError(handler: (err: unknown) => void): void {\n this.emitError = handler\n }\n}\n"]}
@@ -1,4 +1,3 @@
1
-
2
1
  import Long from 'long';
3
2
  import { mtp, tl } from '@mtcute/tl';
4
3
  import { TlBinaryWriter, TlReaderMap, TlWriterMap } from '@mtcute/tl-runtime';
@@ -1,4 +1,3 @@
1
-
2
1
  import EventEmitter from 'events';
3
2
  import { tl } from '@mtcute/tl';
4
3
  import { Logger } from '../utils/index.js';
@@ -122,6 +122,14 @@ export interface RpcCallOptions {
122
122
  * -503 in case the upstream bot failed to respond.
123
123
  */
124
124
  throw503?: boolean;
125
+ /**
126
+ * Whether the `X_MIGRATE_%d` errors should be handled locally on request level
127
+ * instead of changing the default datacenter for the entire client.
128
+ *
129
+ * Useful for `invokeWithBusinessConnection`, as it returns a `USER_MIGRATE_%d` error
130
+ * that is in fact not related to the user, but to the specific request.
131
+ */
132
+ localMigrate?: boolean;
125
133
  /**
126
134
  * Some requests should be processed consecutively, and not in parallel.
127
135
  * Using the same `chainId` for multiple requests will ensure that they are processed in the order
@@ -248,7 +248,7 @@ class NetworkManager {
248
248
  _: 'initConnection',
249
249
  deviceModel,
250
250
  systemVersion: '1.0',
251
- appVersion: '0.11.0',
251
+ appVersion: '0.12.1',
252
252
  systemLangCode: 'en',
253
253
  langPack: '', // "langPacks are for official apps only"
254
254
  langCode: 'en',
@@ -532,9 +532,14 @@ class NetworkManager {
532
532
  }
533
533
  if (manager === this._primaryDc) {
534
534
  if (e.is('PHONE_MIGRATE_%d') || e.is('NETWORK_MIGRATE_%d') || e.is('USER_MIGRATE_%d')) {
535
- this._log.info('Migrate error, new dc = %d', e.newDc);
536
- await this.changePrimaryDc(e.newDc);
537
- manager = this._primaryDc;
535
+ if (params?.localMigrate) {
536
+ manager = await this._getOtherDc(e.newDc);
537
+ }
538
+ else {
539
+ this._log.info('Migrate error, new dc = %d', e.newDc);
540
+ await this.changePrimaryDc(e.newDc);
541
+ manager = this._primaryDc;
542
+ }
538
543
  multi = manager[kind];
539
544
  continue;
540
545
  }