@mtcute/core 0.10.2 → 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 (963) 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/utils/async-lock.js +1 -3
  443. package/cjs/utils/async-lock.js.map +1 -1
  444. package/cjs/utils/bigint-utils.js.map +1 -1
  445. package/cjs/utils/binary/asn1-parser.js.map +1 -1
  446. package/cjs/utils/buffer-utils.js.map +1 -1
  447. package/cjs/utils/condition-variable.js +2 -0
  448. package/cjs/utils/condition-variable.js.map +1 -1
  449. package/cjs/utils/crypto/factorization.js.map +1 -1
  450. package/cjs/utils/crypto/keys.js.map +1 -1
  451. package/cjs/utils/crypto/miller-rabin.js.map +1 -1
  452. package/cjs/utils/crypto/password.js.map +1 -1
  453. package/cjs/utils/crypto/utils.js.map +1 -1
  454. package/cjs/utils/dcs.js +1 -1
  455. package/cjs/utils/dcs.js.map +1 -1
  456. package/cjs/utils/deque.js +8 -2
  457. package/cjs/utils/deque.js.map +1 -1
  458. package/cjs/utils/early-timer.js +4 -1
  459. package/cjs/utils/early-timer.js.map +1 -1
  460. package/cjs/utils/error-reporting.js.map +1 -1
  461. package/cjs/utils/function-utils.js.map +1 -1
  462. package/cjs/utils/linked-list.js +4 -1
  463. package/cjs/utils/linked-list.js.map +1 -1
  464. package/cjs/utils/links/bots.js.map +1 -1
  465. package/cjs/utils/links/chat.js.map +1 -1
  466. package/cjs/utils/links/common.js.map +1 -1
  467. package/cjs/utils/links/misc.js.map +1 -1
  468. package/cjs/utils/logger.d.ts +2 -2
  469. package/cjs/utils/logger.js +21 -14
  470. package/cjs/utils/logger.js.map +1 -1
  471. package/cjs/utils/long-utils.js +2 -6
  472. package/cjs/utils/long-utils.js.map +1 -1
  473. package/cjs/utils/lru-map.js +5 -1
  474. package/cjs/utils/lru-map.js.map +1 -1
  475. package/cjs/utils/lru-set.js +4 -0
  476. package/cjs/utils/lru-set.js.map +1 -1
  477. package/cjs/utils/peer-utils.js.map +1 -1
  478. package/cjs/utils/reloadable.d.ts +1 -1
  479. package/cjs/utils/reloadable.js +10 -7
  480. package/cjs/utils/reloadable.js.map +1 -1
  481. package/cjs/utils/sorted-array.js +2 -0
  482. package/cjs/utils/sorted-array.js.map +1 -1
  483. package/cjs/utils/tl-json.js.map +1 -1
  484. package/cjs/utils/type-assertions.js.map +1 -1
  485. package/esm/highlevel/base.d.ts +1 -1
  486. package/esm/highlevel/base.js +29 -23
  487. package/esm/highlevel/base.js.map +1 -1
  488. package/esm/highlevel/client.d.ts +2 -1
  489. package/esm/highlevel/client.js +1 -0
  490. package/esm/highlevel/client.js.map +1 -1
  491. package/esm/highlevel/managers/app-config-manager.js +7 -5
  492. package/esm/highlevel/managers/app-config-manager.js.map +1 -1
  493. package/esm/highlevel/methods/_init.js.map +1 -1
  494. package/esm/highlevel/methods/auth/start-test.js.map +1 -1
  495. package/esm/highlevel/methods/auth/start.js.map +1 -1
  496. package/esm/highlevel/methods/auth/utils.js.map +1 -1
  497. package/esm/highlevel/methods/bots/get-callback-answer.js.map +1 -1
  498. package/esm/highlevel/methods/bots/get-game-high-scores.js.map +1 -1
  499. package/esm/highlevel/methods/bots/normalize-command-scope.js.map +1 -1
  500. package/esm/highlevel/methods/bots/set-my-commands.js.map +1 -1
  501. package/esm/highlevel/methods/chats/add-chat-members.js.map +1 -1
  502. package/esm/highlevel/methods/chats/ban-chat-member.js.map +1 -1
  503. package/esm/highlevel/methods/chats/batched-queries.js.map +1 -1
  504. package/esm/highlevel/methods/chats/delete-chat-photo.js.map +1 -1
  505. package/esm/highlevel/methods/chats/delete-history.js.map +1 -1
  506. package/esm/highlevel/methods/chats/get-chat-event-log.js.map +1 -1
  507. package/esm/highlevel/methods/chats/get-chat-member.js.map +1 -1
  508. package/esm/highlevel/methods/chats/get-chat-members.js.map +1 -1
  509. package/esm/highlevel/methods/chats/get-chat-preview.js.map +1 -1
  510. package/esm/highlevel/methods/chats/get-chat.js.map +1 -1
  511. package/esm/highlevel/methods/chats/get-full-chat.js.map +1 -1
  512. package/esm/highlevel/methods/chats/get-nearby-chats.js.map +1 -1
  513. package/esm/highlevel/methods/chats/get-similar-channels.js.map +1 -1
  514. package/esm/highlevel/methods/chats/iter-chat-event-log.js.map +1 -1
  515. package/esm/highlevel/methods/chats/iter-chat-members.js.map +1 -1
  516. package/esm/highlevel/methods/chats/join-chat.js.map +1 -1
  517. package/esm/highlevel/methods/chats/kick-chat-member.js.map +1 -1
  518. package/esm/highlevel/methods/chats/leave-chat.js.map +1 -1
  519. package/esm/highlevel/methods/chats/open-chat.js.map +1 -1
  520. package/esm/highlevel/methods/chats/reorder-usernames.js.map +1 -1
  521. package/esm/highlevel/methods/chats/restrict-chat-member.js.map +1 -1
  522. package/esm/highlevel/methods/chats/save-draft.js.map +1 -1
  523. package/esm/highlevel/methods/chats/set-chat-color.js.map +1 -1
  524. package/esm/highlevel/methods/chats/set-chat-photo.js.map +1 -1
  525. package/esm/highlevel/methods/chats/set-chat-title.js.map +1 -1
  526. package/esm/highlevel/methods/chats/toggle-fragment-username.js.map +1 -1
  527. package/esm/highlevel/methods/chats/unarchive-chats.js.map +1 -1
  528. package/esm/highlevel/methods/chats/unban-chat-member.js.map +1 -1
  529. package/esm/highlevel/methods/contacts/delete-contacts.js.map +1 -1
  530. package/esm/highlevel/methods/dialogs/create-folder.js.map +1 -1
  531. package/esm/highlevel/methods/dialogs/edit-folder.js.map +1 -1
  532. package/esm/highlevel/methods/dialogs/find-folder.js.map +1 -1
  533. package/esm/highlevel/methods/dialogs/get-folders.js.map +1 -1
  534. package/esm/highlevel/methods/dialogs/iter-dialogs.js.map +1 -1
  535. package/esm/highlevel/methods/files/download-buffer.js.map +1 -1
  536. package/esm/highlevel/methods/files/download-iterable.js +1 -1
  537. package/esm/highlevel/methods/files/download-iterable.js.map +1 -1
  538. package/esm/highlevel/methods/files/download-node-stream.js.map +1 -1
  539. package/esm/highlevel/methods/files/download-stream.js.map +1 -1
  540. package/esm/highlevel/methods/files/normalize-file-to-document.js.map +1 -1
  541. package/esm/highlevel/methods/files/normalize-input-file.js.map +1 -1
  542. package/esm/highlevel/methods/files/normalize-input-media.js +1 -2
  543. package/esm/highlevel/methods/files/normalize-input-media.js.map +1 -1
  544. package/esm/highlevel/methods/files/upload-file.js +8 -7
  545. package/esm/highlevel/methods/files/upload-file.js.map +1 -1
  546. package/esm/highlevel/methods/files/upload-media.js.map +1 -1
  547. package/esm/highlevel/methods/forums/iter-forum-topics.js.map +1 -1
  548. package/esm/highlevel/methods/invite-links/get-primary-invite-link.js.map +1 -1
  549. package/esm/highlevel/methods/invite-links/iter-invite-link-members.js.map +1 -1
  550. package/esm/highlevel/methods/invite-links/iter-invite-links.js.map +1 -1
  551. package/esm/highlevel/methods/messages/close-poll.js.map +1 -1
  552. package/esm/highlevel/methods/messages/delete-messages.js.map +1 -1
  553. package/esm/highlevel/methods/messages/edit-inline-message.js.map +1 -1
  554. package/esm/highlevel/methods/messages/edit-message.js.map +1 -1
  555. package/esm/highlevel/methods/messages/find-in-update.js.map +1 -1
  556. package/esm/highlevel/methods/messages/forward-messages.js.map +1 -1
  557. package/esm/highlevel/methods/messages/get-callback-query-message.js.map +1 -1
  558. package/esm/highlevel/methods/messages/get-discussion-message.js.map +1 -1
  559. package/esm/highlevel/methods/messages/get-history.js +5 -1
  560. package/esm/highlevel/methods/messages/get-history.js.map +1 -1
  561. package/esm/highlevel/methods/messages/get-message-by-link.js.map +1 -1
  562. package/esm/highlevel/methods/messages/get-message-group.js.map +1 -1
  563. package/esm/highlevel/methods/messages/get-message-reactions.js.map +1 -1
  564. package/esm/highlevel/methods/messages/get-messages.js.map +1 -1
  565. package/esm/highlevel/methods/messages/get-reply-to.js.map +1 -1
  566. package/esm/highlevel/methods/messages/iter-history.js.map +1 -1
  567. package/esm/highlevel/methods/messages/iter-reaction-users.js.map +1 -1
  568. package/esm/highlevel/methods/messages/iter-search-global.js.map +1 -1
  569. package/esm/highlevel/methods/messages/iter-search-messages.js.map +1 -1
  570. package/esm/highlevel/methods/messages/read-history.js.map +1 -1
  571. package/esm/highlevel/methods/messages/send-answer.js.map +1 -1
  572. package/esm/highlevel/methods/messages/send-comment.js.map +1 -1
  573. package/esm/highlevel/methods/messages/send-common.js.map +1 -1
  574. package/esm/highlevel/methods/messages/send-copy-group.js.map +1 -1
  575. package/esm/highlevel/methods/messages/send-copy.js.map +1 -1
  576. package/esm/highlevel/methods/messages/send-media-group.js.map +1 -1
  577. package/esm/highlevel/methods/messages/send-media.js.map +1 -1
  578. package/esm/highlevel/methods/messages/send-quote.js.map +1 -1
  579. package/esm/highlevel/methods/messages/send-text.js.map +1 -1
  580. package/esm/highlevel/methods/messages/send-typing.js.map +1 -1
  581. package/esm/highlevel/methods/messages/send-vote.js.map +1 -1
  582. package/esm/highlevel/methods/messages/translate-text.js.map +1 -1
  583. package/esm/highlevel/methods/messages/unpin-all-messages.js.map +1 -1
  584. package/esm/highlevel/methods/misc/normalize-privacy-rules.js.map +1 -1
  585. package/esm/highlevel/methods/misc/normalize-text.js.map +1 -1
  586. package/esm/highlevel/methods/misc/with-params.js.map +1 -1
  587. package/esm/highlevel/methods/password/change-cloud-password.js.map +1 -1
  588. package/esm/highlevel/methods/password/enable-cloud-password.js.map +1 -1
  589. package/esm/highlevel/methods/password/remove-cloud-password.js.map +1 -1
  590. package/esm/highlevel/methods/premium/can-apply-boost.js.map +1 -1
  591. package/esm/highlevel/methods/premium/iter-boosters.js.map +1 -1
  592. package/esm/highlevel/methods/stickers/create-sticker-set.js.map +1 -1
  593. package/esm/highlevel/methods/stickers/delete-sticker-from-set.js.map +1 -1
  594. package/esm/highlevel/methods/stickers/get-custom-emojis.js.map +1 -1
  595. package/esm/highlevel/methods/stickers/move-sticker-in-set.js.map +1 -1
  596. package/esm/highlevel/methods/stories/can-send-story.js.map +1 -1
  597. package/esm/highlevel/methods/stories/edit-story.js.map +1 -1
  598. package/esm/highlevel/methods/stories/find-in-update.js.map +1 -1
  599. package/esm/highlevel/methods/stories/hide-my-stories-views.js.map +1 -1
  600. package/esm/highlevel/methods/stories/iter-all-stories.js.map +1 -1
  601. package/esm/highlevel/methods/stories/iter-profile-stories.js.map +1 -1
  602. package/esm/highlevel/methods/stories/iter-story-viewers.js.map +1 -1
  603. package/esm/highlevel/methods/stories/send-story.js.map +1 -1
  604. package/esm/highlevel/methods/users/delete-profile-photos.js.map +1 -1
  605. package/esm/highlevel/methods/users/get-users.js.map +1 -1
  606. package/esm/highlevel/methods/users/iter-profile-photos.js.map +1 -1
  607. package/esm/highlevel/methods/users/resolve-peer-many.js.map +1 -1
  608. package/esm/highlevel/methods/users/resolve-peer.js.map +1 -1
  609. package/esm/highlevel/methods/users/set-my-emoji-status.js.map +1 -1
  610. package/esm/highlevel/methods/users/set-my-profile-photo.js.map +1 -1
  611. package/esm/highlevel/storage/service/current-user.js +2 -0
  612. package/esm/highlevel/storage/service/current-user.js.map +1 -1
  613. package/esm/highlevel/storage/service/peers.js +5 -1
  614. package/esm/highlevel/storage/service/peers.js.map +1 -1
  615. package/esm/highlevel/storage/service/ref-messages.js +3 -0
  616. package/esm/highlevel/storage/service/ref-messages.js.map +1 -1
  617. package/esm/highlevel/storage/service/updates.js +1 -0
  618. package/esm/highlevel/storage/service/updates.js.map +1 -1
  619. package/esm/highlevel/storage/storage.d.ts +1 -1
  620. package/esm/highlevel/storage/storage.js +17 -4
  621. package/esm/highlevel/storage/storage.js.map +1 -1
  622. package/esm/highlevel/types/auth/sent-code.js +1 -0
  623. package/esm/highlevel/types/auth/sent-code.js.map +1 -1
  624. package/esm/highlevel/types/bots/game-high-score.js +2 -0
  625. package/esm/highlevel/types/bots/game-high-score.js.map +1 -1
  626. package/esm/highlevel/types/bots/inline-message/factories.js.map +1 -1
  627. package/esm/highlevel/types/bots/inline-result/factories.js.map +1 -1
  628. package/esm/highlevel/types/bots/keyboards/builder.js +2 -1
  629. package/esm/highlevel/types/bots/keyboards/builder.js.map +1 -1
  630. package/esm/highlevel/types/bots/keyboards/factories.js.map +1 -1
  631. package/esm/highlevel/types/calls/discard-reason.js.map +1 -1
  632. package/esm/highlevel/types/conversation.js +13 -7
  633. package/esm/highlevel/types/conversation.js.map +1 -1
  634. package/esm/highlevel/types/errors.js +3 -0
  635. package/esm/highlevel/types/errors.js.map +1 -1
  636. package/esm/highlevel/types/files/file-location.js +3 -0
  637. package/esm/highlevel/types/files/file-location.js.map +1 -1
  638. package/esm/highlevel/types/files/uploaded-file.js +1 -1
  639. package/esm/highlevel/types/files/uploaded-file.js.map +1 -1
  640. package/esm/highlevel/types/files/utils.d.ts +1 -1
  641. package/esm/highlevel/types/files/utils.js.map +1 -1
  642. package/esm/highlevel/types/files/web-document.js +1 -0
  643. package/esm/highlevel/types/files/web-document.js.map +1 -1
  644. package/esm/highlevel/types/media/audio.js +3 -2
  645. package/esm/highlevel/types/media/audio.js.map +1 -1
  646. package/esm/highlevel/types/media/contact.js +2 -1
  647. package/esm/highlevel/types/media/contact.js.map +1 -1
  648. package/esm/highlevel/types/media/dice.js +125 -124
  649. package/esm/highlevel/types/media/dice.js.map +1 -1
  650. package/esm/highlevel/types/media/document-utils.js.map +1 -1
  651. package/esm/highlevel/types/media/document.js +2 -4
  652. package/esm/highlevel/types/media/document.js.map +1 -1
  653. package/esm/highlevel/types/media/game.js +2 -1
  654. package/esm/highlevel/types/media/game.js.map +1 -1
  655. package/esm/highlevel/types/media/invoice.js +4 -1
  656. package/esm/highlevel/types/media/invoice.js.map +1 -1
  657. package/esm/highlevel/types/media/location.js +4 -5
  658. package/esm/highlevel/types/media/location.js.map +1 -1
  659. package/esm/highlevel/types/media/photo.js +8 -1
  660. package/esm/highlevel/types/media/photo.js.map +1 -1
  661. package/esm/highlevel/types/media/poll.js +4 -1
  662. package/esm/highlevel/types/media/poll.js.map +1 -1
  663. package/esm/highlevel/types/media/sticker.js +3 -1
  664. package/esm/highlevel/types/media/sticker.js.map +1 -1
  665. package/esm/highlevel/types/media/story.js +3 -1
  666. package/esm/highlevel/types/media/story.js.map +1 -1
  667. package/esm/highlevel/types/media/thumbnail.js +35 -22
  668. package/esm/highlevel/types/media/thumbnail.js.map +1 -1
  669. package/esm/highlevel/types/media/venue.js +2 -1
  670. package/esm/highlevel/types/media/venue.js.map +1 -1
  671. package/esm/highlevel/types/media/video.js +3 -1
  672. package/esm/highlevel/types/media/video.js.map +1 -1
  673. package/esm/highlevel/types/media/voice.js +2 -1
  674. package/esm/highlevel/types/media/voice.js.map +1 -1
  675. package/esm/highlevel/types/media/web-page.js +2 -1
  676. package/esm/highlevel/types/media/web-page.js.map +1 -1
  677. package/esm/highlevel/types/messages/dialog.js +3 -0
  678. package/esm/highlevel/types/messages/dialog.js.map +1 -1
  679. package/esm/highlevel/types/messages/draft-message.js +1 -0
  680. package/esm/highlevel/types/messages/draft-message.js.map +1 -1
  681. package/esm/highlevel/types/messages/message-action.js.map +1 -1
  682. package/esm/highlevel/types/messages/message-entity.js +2 -0
  683. package/esm/highlevel/types/messages/message-entity.js.map +1 -1
  684. package/esm/highlevel/types/messages/message-forward.js +2 -0
  685. package/esm/highlevel/types/messages/message-forward.js.map +1 -1
  686. package/esm/highlevel/types/messages/message-media.js.map +1 -1
  687. package/esm/highlevel/types/messages/message-reactions.js +4 -0
  688. package/esm/highlevel/types/messages/message-reactions.js.map +1 -1
  689. package/esm/highlevel/types/messages/message-replies.js +2 -0
  690. package/esm/highlevel/types/messages/message-replies.js.map +1 -1
  691. package/esm/highlevel/types/messages/message.js +6 -0
  692. package/esm/highlevel/types/messages/message.js.map +1 -1
  693. package/esm/highlevel/types/messages/replied-message.js +2 -0
  694. package/esm/highlevel/types/messages/replied-message.js.map +1 -1
  695. package/esm/highlevel/types/misc/sticker-set.js +7 -1
  696. package/esm/highlevel/types/misc/sticker-set.js.map +1 -1
  697. package/esm/highlevel/types/misc/takeout-session.js +5 -0
  698. package/esm/highlevel/types/misc/takeout-session.js.map +1 -1
  699. package/esm/highlevel/types/peers/chat-colors.js +2 -0
  700. package/esm/highlevel/types/peers/chat-colors.js.map +1 -1
  701. package/esm/highlevel/types/peers/chat-event/actions.js.map +1 -1
  702. package/esm/highlevel/types/peers/chat-event/filters.js.map +1 -1
  703. package/esm/highlevel/types/peers/chat-event/index.js +2 -0
  704. package/esm/highlevel/types/peers/chat-event/index.js.map +1 -1
  705. package/esm/highlevel/types/peers/chat-invite-link-member.js +2 -0
  706. package/esm/highlevel/types/peers/chat-invite-link-member.js.map +1 -1
  707. package/esm/highlevel/types/peers/chat-invite-link.js +2 -0
  708. package/esm/highlevel/types/peers/chat-invite-link.js.map +1 -1
  709. package/esm/highlevel/types/peers/chat-location.js +1 -0
  710. package/esm/highlevel/types/peers/chat-location.js.map +1 -1
  711. package/esm/highlevel/types/peers/chat-member.js +2 -0
  712. package/esm/highlevel/types/peers/chat-member.js.map +1 -1
  713. package/esm/highlevel/types/peers/chat-permissions.js +1 -0
  714. package/esm/highlevel/types/peers/chat-permissions.js.map +1 -1
  715. package/esm/highlevel/types/peers/chat-photo.js +5 -0
  716. package/esm/highlevel/types/peers/chat-photo.js.map +1 -1
  717. package/esm/highlevel/types/peers/chat-preview.js +2 -0
  718. package/esm/highlevel/types/peers/chat-preview.js.map +1 -1
  719. package/esm/highlevel/types/peers/chat.js +12 -1
  720. package/esm/highlevel/types/peers/chat.js.map +1 -1
  721. package/esm/highlevel/types/peers/forum-topic.js +9 -6
  722. package/esm/highlevel/types/peers/forum-topic.js.map +1 -1
  723. package/esm/highlevel/types/peers/peer.js.map +1 -1
  724. package/esm/highlevel/types/peers/peers-index.js +3 -1
  725. package/esm/highlevel/types/peers/peers-index.js.map +1 -1
  726. package/esm/highlevel/types/peers/user.js +5 -1
  727. package/esm/highlevel/types/peers/user.js.map +1 -1
  728. package/esm/highlevel/types/premium/boost-slot.js +2 -0
  729. package/esm/highlevel/types/premium/boost-slot.js.map +1 -1
  730. package/esm/highlevel/types/premium/boost-stats.js +1 -0
  731. package/esm/highlevel/types/premium/boost-stats.js.map +1 -1
  732. package/esm/highlevel/types/premium/boost.js +2 -0
  733. package/esm/highlevel/types/premium/boost.js.map +1 -1
  734. package/esm/highlevel/types/reactions/emoji-status.js +1 -0
  735. package/esm/highlevel/types/reactions/emoji-status.js.map +1 -1
  736. package/esm/highlevel/types/reactions/peer-reaction.js +2 -0
  737. package/esm/highlevel/types/reactions/peer-reaction.js.map +1 -1
  738. package/esm/highlevel/types/reactions/reaction-count.js +1 -0
  739. package/esm/highlevel/types/reactions/reaction-count.js.map +1 -1
  740. package/esm/highlevel/types/reactions/types.js.map +1 -1
  741. package/esm/highlevel/types/stories/all-stories.d.ts +2 -2
  742. package/esm/highlevel/types/stories/all-stories.js +3 -1
  743. package/esm/highlevel/types/stories/all-stories.js.map +1 -1
  744. package/esm/highlevel/types/stories/interactive/base.js +1 -0
  745. package/esm/highlevel/types/stories/interactive/base.js.map +1 -1
  746. package/esm/highlevel/types/stories/interactive/channel-post.js +3 -1
  747. package/esm/highlevel/types/stories/interactive/channel-post.js.map +1 -1
  748. package/esm/highlevel/types/stories/interactive/index.js.map +1 -1
  749. package/esm/highlevel/types/stories/interactive/input.js +1 -0
  750. package/esm/highlevel/types/stories/interactive/input.js.map +1 -1
  751. package/esm/highlevel/types/stories/interactive/location.js +2 -1
  752. package/esm/highlevel/types/stories/interactive/location.js.map +1 -1
  753. package/esm/highlevel/types/stories/interactive/reaction.js +2 -1
  754. package/esm/highlevel/types/stories/interactive/reaction.js.map +1 -1
  755. package/esm/highlevel/types/stories/interactive/venue.js +2 -1
  756. package/esm/highlevel/types/stories/interactive/venue.js.map +1 -1
  757. package/esm/highlevel/types/stories/peer-stories.js +2 -0
  758. package/esm/highlevel/types/stories/peer-stories.js.map +1 -1
  759. package/esm/highlevel/types/stories/stealth-mode.js +1 -0
  760. package/esm/highlevel/types/stories/stealth-mode.js.map +1 -1
  761. package/esm/highlevel/types/stories/story-interactions.js +2 -0
  762. package/esm/highlevel/types/stories/story-interactions.js.map +1 -1
  763. package/esm/highlevel/types/stories/story-viewer.d.ts +1 -1
  764. package/esm/highlevel/types/stories/story-viewer.js +6 -0
  765. package/esm/highlevel/types/stories/story-viewer.js.map +1 -1
  766. package/esm/highlevel/types/stories/story.js +2 -0
  767. package/esm/highlevel/types/stories/story.js.map +1 -1
  768. package/esm/highlevel/types/updates/bot-chat-join-request.js +2 -0
  769. package/esm/highlevel/types/updates/bot-chat-join-request.js.map +1 -1
  770. package/esm/highlevel/types/updates/bot-reaction.js +4 -0
  771. package/esm/highlevel/types/updates/bot-reaction.js.map +1 -1
  772. package/esm/highlevel/types/updates/bot-stopped.js +2 -0
  773. package/esm/highlevel/types/updates/bot-stopped.js.map +1 -1
  774. package/esm/highlevel/types/updates/callback-query.js +4 -0
  775. package/esm/highlevel/types/updates/callback-query.js.map +1 -1
  776. package/esm/highlevel/types/updates/chat-join-request.js +2 -0
  777. package/esm/highlevel/types/updates/chat-join-request.js.map +1 -1
  778. package/esm/highlevel/types/updates/chat-member-update.js +2 -0
  779. package/esm/highlevel/types/updates/chat-member-update.js.map +1 -1
  780. package/esm/highlevel/types/updates/chosen-inline-result.js +2 -0
  781. package/esm/highlevel/types/updates/chosen-inline-result.js.map +1 -1
  782. package/esm/highlevel/types/updates/delete-message-update.js +1 -0
  783. package/esm/highlevel/types/updates/delete-message-update.js.map +1 -1
  784. package/esm/highlevel/types/updates/delete-story-update.js +2 -0
  785. package/esm/highlevel/types/updates/delete-story-update.js.map +1 -1
  786. package/esm/highlevel/types/updates/history-read-update.js +1 -0
  787. package/esm/highlevel/types/updates/history-read-update.js.map +1 -1
  788. package/esm/highlevel/types/updates/inline-query.js +2 -0
  789. package/esm/highlevel/types/updates/inline-query.js.map +1 -1
  790. package/esm/highlevel/types/updates/parse-update.js.map +1 -1
  791. package/esm/highlevel/types/updates/poll-update.js +2 -0
  792. package/esm/highlevel/types/updates/poll-update.js.map +1 -1
  793. package/esm/highlevel/types/updates/poll-vote.js +2 -0
  794. package/esm/highlevel/types/updates/poll-vote.js.map +1 -1
  795. package/esm/highlevel/types/updates/pre-checkout-query.js +2 -0
  796. package/esm/highlevel/types/updates/pre-checkout-query.js.map +1 -1
  797. package/esm/highlevel/types/updates/story-update.js +2 -0
  798. package/esm/highlevel/types/updates/story-update.js.map +1 -1
  799. package/esm/highlevel/types/updates/user-status-update.js +1 -0
  800. package/esm/highlevel/types/updates/user-status-update.js.map +1 -1
  801. package/esm/highlevel/types/updates/user-typing-update.js +1 -0
  802. package/esm/highlevel/types/updates/user-typing-update.js.map +1 -1
  803. package/esm/highlevel/updates/manager.js +50 -28
  804. package/esm/highlevel/updates/manager.js.map +1 -1
  805. package/esm/highlevel/updates/parsed.js.map +1 -1
  806. package/esm/highlevel/updates/utils.js.map +1 -1
  807. package/esm/highlevel/utils/convert-file-id.js.map +1 -1
  808. package/esm/highlevel/utils/entities.js.map +1 -1
  809. package/esm/highlevel/utils/file-type.d.ts +1 -0
  810. package/esm/highlevel/utils/file-type.js +34 -0
  811. package/esm/highlevel/utils/file-type.js.map +1 -1
  812. package/esm/highlevel/utils/file-utils.js +1 -1
  813. package/esm/highlevel/utils/file-utils.js.map +1 -1
  814. package/esm/highlevel/utils/inline-utils.js.map +1 -1
  815. package/esm/highlevel/utils/inspectable.js.map +1 -1
  816. package/esm/highlevel/utils/memoize.js.map +1 -1
  817. package/esm/highlevel/utils/peer-utils.js.map +1 -1
  818. package/esm/highlevel/utils/query-batcher.js.map +1 -1
  819. package/esm/highlevel/utils/rps-meter.js +3 -0
  820. package/esm/highlevel/utils/rps-meter.js.map +1 -1
  821. package/esm/highlevel/utils/stream-utils.js.map +1 -1
  822. package/esm/highlevel/utils/string-session.d.ts +1 -2
  823. package/esm/highlevel/utils/string-session.js +27 -7
  824. package/esm/highlevel/utils/string-session.js.map +1 -1
  825. package/esm/highlevel/utils/voice-utils.js.map +1 -1
  826. package/esm/highlevel/worker/app-config.d.ts +2 -3
  827. package/esm/highlevel/worker/app-config.js +6 -3
  828. package/esm/highlevel/worker/app-config.js.map +1 -1
  829. package/esm/highlevel/worker/errors.js.map +1 -1
  830. package/esm/highlevel/worker/invoker.js +3 -2
  831. package/esm/highlevel/worker/invoker.js.map +1 -1
  832. package/esm/highlevel/worker/port.d.ts +16 -17
  833. package/esm/highlevel/worker/port.js +74 -49
  834. package/esm/highlevel/worker/port.js.map +1 -1
  835. package/esm/highlevel/worker/protocol.d.ts +1 -1
  836. package/esm/highlevel/worker/protocol.js.map +1 -1
  837. package/esm/highlevel/worker/storage.d.ts +9 -13
  838. package/esm/highlevel/worker/storage.js +34 -19
  839. package/esm/highlevel/worker/storage.js.map +1 -1
  840. package/esm/highlevel/worker/worker.js +3 -0
  841. package/esm/highlevel/worker/worker.js.map +1 -1
  842. package/esm/network/auth-key.js +8 -1
  843. package/esm/network/auth-key.js.map +1 -1
  844. package/esm/network/authorization.js.map +1 -1
  845. package/esm/network/client.js +39 -14
  846. package/esm/network/client.js.map +1 -1
  847. package/esm/network/config-manager.js.map +1 -1
  848. package/esm/network/mtproto-session.js +40 -30
  849. package/esm/network/mtproto-session.js.map +1 -1
  850. package/esm/network/multi-session-connection.d.ts +1 -1
  851. package/esm/network/multi-session-connection.js +13 -7
  852. package/esm/network/multi-session-connection.js.map +1 -1
  853. package/esm/network/network-manager.d.ts +2 -3
  854. package/esm/network/network-manager.js +49 -28
  855. package/esm/network/network-manager.js.map +1 -1
  856. package/esm/network/persistent-connection.d.ts +2 -2
  857. package/esm/network/persistent-connection.js +33 -22
  858. package/esm/network/persistent-connection.js.map +1 -1
  859. package/esm/network/server-salt.js +4 -5
  860. package/esm/network/server-salt.js.map +1 -1
  861. package/esm/network/session-connection.d.ts +1 -1
  862. package/esm/network/session-connection.js +22 -12
  863. package/esm/network/session-connection.js.map +1 -1
  864. package/esm/network/transports/abstract.d.ts +1 -1
  865. package/esm/network/transports/abstract.js +1 -0
  866. package/esm/network/transports/abstract.js.map +1 -1
  867. package/esm/network/transports/intermediate.js +1 -0
  868. package/esm/network/transports/intermediate.js.map +1 -1
  869. package/esm/network/transports/obfuscated.js +3 -0
  870. package/esm/network/transports/obfuscated.js.map +1 -1
  871. package/esm/network/transports/streamed.js +1 -4
  872. package/esm/network/transports/streamed.js.map +1 -1
  873. package/esm/network/transports/wrapped.js +2 -0
  874. package/esm/network/transports/wrapped.js.map +1 -1
  875. package/esm/platform.js.map +1 -1
  876. package/esm/storage/driver.js +3 -4
  877. package/esm/storage/driver.js.map +1 -1
  878. package/esm/storage/memory/driver.js +1 -3
  879. package/esm/storage/memory/driver.js.map +1 -1
  880. package/esm/storage/memory/index.js +5 -7
  881. package/esm/storage/memory/index.js.map +1 -1
  882. package/esm/storage/memory/repository/auth-keys.d.ts +1 -1
  883. package/esm/storage/memory/repository/auth-keys.js +2 -0
  884. package/esm/storage/memory/repository/auth-keys.js.map +1 -1
  885. package/esm/storage/memory/repository/kv.d.ts +1 -1
  886. package/esm/storage/memory/repository/kv.js +2 -0
  887. package/esm/storage/memory/repository/kv.js.map +1 -1
  888. package/esm/storage/memory/repository/peers.d.ts +1 -1
  889. package/esm/storage/memory/repository/peers.js +2 -0
  890. package/esm/storage/memory/repository/peers.js.map +1 -1
  891. package/esm/storage/memory/repository/ref-messages.d.ts +1 -1
  892. package/esm/storage/memory/repository/ref-messages.js +2 -0
  893. package/esm/storage/memory/repository/ref-messages.js.map +1 -1
  894. package/esm/storage/service/auth-keys.js +2 -0
  895. package/esm/storage/service/auth-keys.js.map +1 -1
  896. package/esm/storage/service/base.js +4 -0
  897. package/esm/storage/service/base.js.map +1 -1
  898. package/esm/storage/service/default-dcs.js +2 -0
  899. package/esm/storage/service/default-dcs.js.map +1 -1
  900. package/esm/storage/service/future-salts.js +2 -1
  901. package/esm/storage/service/future-salts.js.map +1 -1
  902. package/esm/storage/sqlite/driver.js +10 -10
  903. package/esm/storage/sqlite/driver.js.map +1 -1
  904. package/esm/storage/sqlite/index.d.ts +1 -1
  905. package/esm/storage/sqlite/index.js +5 -0
  906. package/esm/storage/sqlite/index.js.map +1 -1
  907. package/esm/storage/sqlite/repository/auth-keys.js +9 -0
  908. package/esm/storage/sqlite/repository/auth-keys.js.map +1 -1
  909. package/esm/storage/sqlite/repository/kv.js +5 -0
  910. package/esm/storage/sqlite/repository/kv.js.map +1 -1
  911. package/esm/storage/sqlite/repository/peers.js +6 -0
  912. package/esm/storage/sqlite/repository/peers.js.map +1 -1
  913. package/esm/storage/sqlite/repository/ref-messages.d.ts +1 -1
  914. package/esm/storage/sqlite/repository/ref-messages.js +6 -0
  915. package/esm/storage/sqlite/repository/ref-messages.js.map +1 -1
  916. package/esm/storage/storage.d.ts +1 -3
  917. package/esm/storage/storage.js +21 -13
  918. package/esm/storage/storage.js.map +1 -1
  919. package/esm/types/errors.js +13 -0
  920. package/esm/types/errors.js.map +1 -1
  921. package/esm/utils/async-lock.js +1 -3
  922. package/esm/utils/async-lock.js.map +1 -1
  923. package/esm/utils/bigint-utils.js.map +1 -1
  924. package/esm/utils/binary/asn1-parser.js.map +1 -1
  925. package/esm/utils/buffer-utils.js.map +1 -1
  926. package/esm/utils/condition-variable.js +2 -0
  927. package/esm/utils/condition-variable.js.map +1 -1
  928. package/esm/utils/crypto/factorization.js.map +1 -1
  929. package/esm/utils/crypto/keys.js.map +1 -1
  930. package/esm/utils/crypto/miller-rabin.js.map +1 -1
  931. package/esm/utils/crypto/password.js.map +1 -1
  932. package/esm/utils/crypto/utils.js.map +1 -1
  933. package/esm/utils/dcs.js +1 -1
  934. package/esm/utils/dcs.js.map +1 -1
  935. package/esm/utils/deque.js +8 -2
  936. package/esm/utils/deque.js.map +1 -1
  937. package/esm/utils/early-timer.js +4 -1
  938. package/esm/utils/early-timer.js.map +1 -1
  939. package/esm/utils/error-reporting.js.map +1 -1
  940. package/esm/utils/function-utils.js.map +1 -1
  941. package/esm/utils/linked-list.js +4 -1
  942. package/esm/utils/linked-list.js.map +1 -1
  943. package/esm/utils/links/bots.js.map +1 -1
  944. package/esm/utils/links/chat.js.map +1 -1
  945. package/esm/utils/links/common.js.map +1 -1
  946. package/esm/utils/links/misc.js.map +1 -1
  947. package/esm/utils/logger.d.ts +2 -2
  948. package/esm/utils/logger.js +21 -14
  949. package/esm/utils/logger.js.map +1 -1
  950. package/esm/utils/long-utils.js +2 -6
  951. package/esm/utils/long-utils.js.map +1 -1
  952. package/esm/utils/lru-map.js +5 -1
  953. package/esm/utils/lru-map.js.map +1 -1
  954. package/esm/utils/lru-set.js +4 -0
  955. package/esm/utils/lru-set.js.map +1 -1
  956. package/esm/utils/peer-utils.js.map +1 -1
  957. package/esm/utils/reloadable.js +10 -7
  958. package/esm/utils/reloadable.js.map +1 -1
  959. package/esm/utils/sorted-array.js +2 -0
  960. package/esm/utils/sorted-array.js.map +1 -1
  961. package/esm/utils/tl-json.js.map +1 -1
  962. package/esm/utils/type-assertions.js.map +1 -1
  963. package/package.json +11 -11
@@ -1 +1 @@
1
- {"version":3,"file":"bigint-utils.js","sourceRoot":"","sources":["../../../src/utils/bigint-utils.ts"],"names":[],"mappings":"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","sourcesContent":["import { bufferToReversed } from './buffer-utils.js'\nimport { ICryptoProvider } from './crypto/abstract.js'\n\n/**\n * Get the minimum number of bits required to represent a number\n */\nexport function bigIntBitLength(n: bigint) {\n // not the fastest way, but at least not .toString(2) and not too complex\n // taken from: https://stackoverflow.com/a/76616288/22656950\n\n const i = (n.toString(16).length - 1) * 4\n\n return i + 32 - Math.clz32(Number(n >> BigInt(i)))\n}\n\n/**\n * Convert a big integer to a buffer\n *\n * @param value Value to convert\n * @param length Length of the resulting buffer (by default it's the minimum required)\n * @param le Whether to use little-endian encoding\n */\nexport function bigIntToBuffer(value: bigint, length = 0, le = false): Uint8Array {\n const bits = bigIntBitLength(value)\n const bytes = Math.ceil(bits / 8)\n\n if (length !== 0 && bytes > length) {\n throw new Error('Value out of bounds')\n }\n\n if (length === 0) length = bytes\n\n const buf = new ArrayBuffer(length)\n const u8 = new Uint8Array(buf)\n\n const unaligned = length % 8\n const dv = new DataView(buf, 0, length - unaligned)\n\n // it is faster to work with 64-bit words than with bytes directly\n for (let i = 0; i < dv.byteLength; i += 8) {\n dv.setBigUint64(i, value & 0xffffffffffffffffn, true)\n value >>= 64n\n }\n\n if (unaligned > 0) {\n for (let i = length - unaligned; i < length; i++) {\n u8[i] = Number(value & 0xffn)\n value >>= 8n\n }\n }\n\n if (!le) u8.reverse()\n\n return u8\n}\n\n/**\n * Convert a buffer to a big integer\n *\n * @param buffer Buffer to convert\n * @param le Whether to use little-endian encoding\n */\nexport function bufferToBigInt(buffer: Uint8Array, le = false): bigint {\n if (le) buffer = bufferToReversed(buffer)\n\n const unaligned = buffer.length % 8\n const dv = new DataView(buffer.buffer, buffer.byteOffset, buffer.byteLength - unaligned)\n\n let res = 0n\n\n // it is faster to work with 64-bit words than with bytes directly\n for (let i = 0; i < dv.byteLength; i += 8) {\n res = (res << 64n) | BigInt(dv.getBigUint64(i, false))\n }\n\n if (unaligned > 0) {\n for (let i = buffer.length - unaligned; i < buffer.length; i++) {\n res = (res << 8n) | BigInt(buffer[i])\n }\n }\n\n return res\n}\n\n/**\n * Generate a cryptographically safe random big integer of the given size (in bytes)\n * @param size Size in bytes\n */\nexport function randomBigInt(crypto: ICryptoProvider, size: number): bigint {\n return bufferToBigInt(crypto.randomBytes(size))\n}\n\n/**\n * Generate a random big integer of the given size (in bits)\n * @param bits\n */\nexport function randomBigIntBits(crypto: ICryptoProvider, bits: number): bigint {\n let num = randomBigInt(crypto, Math.ceil(bits / 8))\n\n const bitLength = bigIntBitLength(num)\n\n if (bitLength > bits) {\n const toTrim = bitLength - bits\n num >>= BigInt(toTrim)\n }\n\n return num\n}\n\n/**\n * Generate a random big integer in the range [min, max)\n *\n * @param max Maximum value (exclusive)\n * @param min Minimum value (inclusive)\n */\nexport function randomBigIntInRange(crypto: ICryptoProvider, max: bigint, min = 1n): bigint {\n const interval = max - min\n if (interval < 0n) throw new Error('expected min < max')\n\n const byteSize = bigIntBitLength(interval) / 8\n\n let result = randomBigInt(crypto, byteSize)\n while (result > interval) result -= interval\n\n return min + result\n}\n\n/**\n * Compute the multiplicity of 2 in the prime factorization of n\n * @param n\n */\nexport function twoMultiplicity(n: bigint): bigint {\n if (n === 0n) return 0n\n\n let m = 0n\n let pow = 1n\n\n while (true) {\n if ((n & pow) !== 0n) return m\n m += 1n\n pow <<= 1n\n }\n}\n\nexport function bigIntMin(a: bigint, b: bigint): bigint {\n return a < b ? a : b\n}\n\nexport function bigIntAbs(a: bigint): bigint {\n return a < 0n ? -a : a\n}\n\nexport function bigIntGcd(a: bigint, b: bigint): bigint {\n // using euclidean algorithm is fast enough on smaller numbers\n // https://en.wikipedia.org/wiki/Euclidean_algorithm#Implementations\n\n while (b !== 0n) {\n const t = b\n b = a % b\n a = t\n }\n\n return a\n}\n\nexport function bigIntModPow(base: bigint, exp: bigint, mod: bigint): bigint {\n // using the binary method is good enough for our use case\n // https://en.wikipedia.org/wiki/Modular_exponentiation#Right-to-left_binary_method\n\n base %= mod\n\n let result = 1n\n\n while (exp > 0n) {\n if (exp % 2n === 1n) {\n result = (result * base) % mod\n }\n\n exp >>= 1n\n base = base ** 2n % mod\n }\n\n return result\n}\n\n// below code is based on https://github.com/juanelas/bigint-mod-arith, MIT license\n\nfunction eGcd(a: bigint, b: bigint): [bigint, bigint, bigint] {\n let x = 0n\n let y = 1n\n let u = 1n\n let v = 0n\n\n while (a !== 0n) {\n const q = b / a\n const r: bigint = b % a\n const m = x - u * q\n const n = y - v * q\n b = a\n a = r\n x = u\n y = v\n u = m\n v = n\n }\n\n return [b, x, y]\n}\n\nfunction toZn(a: number | bigint, n: number | bigint): bigint {\n if (typeof a === 'number') a = BigInt(a)\n if (typeof n === 'number') n = BigInt(n)\n\n if (n <= 0n) {\n throw new RangeError('n must be > 0')\n }\n\n const aZn = a % n\n\n return aZn < 0n ? aZn + n : aZn\n}\n\nexport function bigIntModInv(a: bigint, n: bigint): bigint {\n const [g, x] = eGcd(toZn(a, n), n)\n\n if (g !== 1n) {\n throw new RangeError(`${a.toString()} does not have inverse modulo ${n.toString()}`) // modular inverse does not exist\n } else {\n return toZn(x, n)\n }\n}\n"]}
1
+ {"version":3,"file":"bigint-utils.js","sourceRoot":"","sources":["../../../src/utils/bigint-utils.ts"],"names":[],"mappings":"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","sourcesContent":["import { bufferToReversed } from './buffer-utils.js'\nimport { ICryptoProvider } from './crypto/abstract.js'\n\n/**\n * Get the minimum number of bits required to represent a number\n */\nexport function bigIntBitLength(n: bigint) {\n // not the fastest way, but at least not .toString(2) and not too complex\n // taken from: https://stackoverflow.com/a/76616288/22656950\n\n const i = (n.toString(16).length - 1) * 4\n\n return i + 32 - Math.clz32(Number(n >> BigInt(i)))\n}\n\n/**\n * Convert a big integer to a buffer\n *\n * @param value Value to convert\n * @param length Length of the resulting buffer (by default it's the minimum required)\n * @param le Whether to use little-endian encoding\n */\nexport function bigIntToBuffer(value: bigint, length = 0, le = false): Uint8Array {\n const bits = bigIntBitLength(value)\n const bytes = Math.ceil(bits / 8)\n\n if (length !== 0 && bytes > length) {\n throw new Error('Value out of bounds')\n }\n\n if (length === 0) length = bytes\n\n const buf = new ArrayBuffer(length)\n const u8 = new Uint8Array(buf)\n\n const unaligned = length % 8\n const dv = new DataView(buf, 0, length - unaligned)\n\n // it is faster to work with 64-bit words than with bytes directly\n for (let i = 0; i < dv.byteLength; i += 8) {\n dv.setBigUint64(i, value & 0xffffffffffffffffn, true)\n value >>= 64n\n }\n\n if (unaligned > 0) {\n for (let i = length - unaligned; i < length; i++) {\n u8[i] = Number(value & 0xffn)\n value >>= 8n\n }\n }\n\n if (!le) u8.reverse()\n\n return u8\n}\n\n/**\n * Convert a buffer to a big integer\n *\n * @param buffer Buffer to convert\n * @param le Whether to use little-endian encoding\n */\nexport function bufferToBigInt(buffer: Uint8Array, le = false): bigint {\n if (le) buffer = bufferToReversed(buffer)\n\n const unaligned = buffer.length % 8\n const dv = new DataView(buffer.buffer, buffer.byteOffset, buffer.byteLength - unaligned)\n\n let res = 0n\n\n // it is faster to work with 64-bit words than with bytes directly\n for (let i = 0; i < dv.byteLength; i += 8) {\n res = (res << 64n) | BigInt(dv.getBigUint64(i, false))\n }\n\n if (unaligned > 0) {\n for (let i = buffer.length - unaligned; i < buffer.length; i++) {\n res = (res << 8n) | BigInt(buffer[i])\n }\n }\n\n return res\n}\n\n/**\n * Generate a cryptographically safe random big integer of the given size (in bytes)\n * @param size Size in bytes\n */\nexport function randomBigInt(crypto: ICryptoProvider, size: number): bigint {\n return bufferToBigInt(crypto.randomBytes(size))\n}\n\n/**\n * Generate a random big integer of the given size (in bits)\n * @param bits\n */\nexport function randomBigIntBits(crypto: ICryptoProvider, bits: number): bigint {\n let num = randomBigInt(crypto, Math.ceil(bits / 8))\n\n const bitLength = bigIntBitLength(num)\n\n if (bitLength > bits) {\n const toTrim = bitLength - bits\n num >>= BigInt(toTrim)\n }\n\n return num\n}\n\n/**\n * Generate a random big integer in the range [min, max)\n *\n * @param max Maximum value (exclusive)\n * @param min Minimum value (inclusive)\n */\nexport function randomBigIntInRange(crypto: ICryptoProvider, max: bigint, min = 1n): bigint {\n const interval = max - min\n if (interval < 0n) throw new Error('expected min < max')\n\n const byteSize = bigIntBitLength(interval) / 8\n\n let result = randomBigInt(crypto, byteSize)\n while (result > interval) result -= interval\n\n return min + result\n}\n\n/**\n * Compute the multiplicity of 2 in the prime factorization of n\n * @param n\n */\nexport function twoMultiplicity(n: bigint): bigint {\n if (n === 0n) return 0n\n\n let m = 0n\n let pow = 1n\n\n while (true) {\n if ((n & pow) !== 0n) return m\n m += 1n\n pow <<= 1n\n }\n}\n\nexport function bigIntMin(a: bigint, b: bigint): bigint {\n return a < b ? a : b\n}\n\nexport function bigIntAbs(a: bigint): bigint {\n return a < 0n ? -a : a\n}\n\nexport function bigIntGcd(a: bigint, b: bigint): bigint {\n // using euclidean algorithm is fast enough on smaller numbers\n // https://en.wikipedia.org/wiki/Euclidean_algorithm#Implementations\n\n while (b !== 0n) {\n const t = b\n b = a % b\n a = t\n }\n\n return a\n}\n\nexport function bigIntModPow(base: bigint, exp: bigint, mod: bigint): bigint {\n // using the binary method is good enough for our use case\n // https://en.wikipedia.org/wiki/Modular_exponentiation#Right-to-left_binary_method\n\n base %= mod\n\n let result = 1n\n\n while (exp > 0n) {\n if (exp % 2n === 1n) {\n result = (result * base) % mod\n }\n\n exp >>= 1n\n base = base ** 2n % mod\n }\n\n return result\n}\n\n// below code is based on https://github.com/juanelas/bigint-mod-arith, MIT license\n\nfunction eGcd(a: bigint, b: bigint): [bigint, bigint, bigint] {\n let x = 0n\n let y = 1n\n let u = 1n\n let v = 0n\n\n while (a !== 0n) {\n const q = b / a\n const r: bigint = b % a\n const m = x - u * q\n const n = y - v * q\n b = a\n a = r\n x = u\n y = v\n u = m\n v = n\n }\n\n return [b, x, y]\n}\n\nfunction toZn(a: number | bigint, n: number | bigint): bigint {\n if (typeof a === 'number') a = BigInt(a)\n if (typeof n === 'number') n = BigInt(n)\n\n if (n <= 0n) {\n throw new RangeError('n must be > 0')\n }\n\n const aZn = a % n\n\n return aZn < 0n ? aZn + n : aZn\n}\n\nexport function bigIntModInv(a: bigint, n: bigint): bigint {\n const [g, x] = eGcd(toZn(a, n), n)\n\n if (g !== 1n) {\n throw new RangeError(`${a.toString()} does not have inverse modulo ${n.toString()}`) // modular inverse does not exist\n } else {\n return toZn(x, n)\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"asn1-parser.js","sourceRoot":"","sources":["../../../../src/utils/binary/asn1-parser.ts"],"names":[],"mappings":";AAAA,iGAAiG;;;AAEjG,mDAA+C;AAE/C;;;GAGG;AACH,SAAgB,gBAAgB,CAAC,GAAW;IACxC,OAAO,IAAA,yBAAW,GAAE,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,gDAAgD,EAAE,EAAE,CAAC,CAAC,CAAA;AACxG,CAAC;AAFD,4CAEC;AAaD,MAAM,MAAM,GAAG,GAAG,CAAA;AAClB,MAAM,KAAK,GAAG,iBAAiB,MAAM,uCAAuC,CAAA;AAC5E,MAAM,MAAM,GAAG,EAAE,CAAA;AACjB,MAAM,KAAK,GAAG,uBAAuB,MAAM,0CAA0C,CAAA;AAErF,mEAAmE;AACnE,uGAAuG;AACvG,sBAAsB;AACtB,wEAAwE;AACxE,6DAA6D;AAC7D,MAAM,MAAM,GAAyB;IACjC,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;IACV,KAAK,EAAE,IAAI;IACX,KAAK,EAAE,IAAI;CACd,CAAA;AACD,MAAM,MAAM,GAAyB;IACjC,GAAG,EAAE,IAAI;IACT,GAAG,EAAE,IAAI;IACT,GAAG,EAAE,IAAI;IACT,GAAG,EAAE,IAAI;IACT,IAAI,EAAE,IAAI;IACV,KAAK,EAAE,IAAI;CACd,CAAA;AAED;;GAEG;AACH,SAAgB,SAAS,CAAC,IAAgB;IACtC,SAAS,cAAc,CAAC,GAAe,EAAE,KAAe,EAAE,KAAK,GAAG,KAAK;QACnE,IAAI,KAAK,CAAC,MAAM,IAAI,MAAM,EAAE;YACxB,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,CAAA;SACzB;QAED,IAAI,KAAK,GAAG,CAAC,CAAA,CAAC,qEAAqE;QACnF,MAAM,IAAI,GAAe,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAA;QACxE,IAAI,KAAK,CAAA;QACT,IAAI,KAAK,GAAG,CAAC,CAAA;QACb,IAAI,MAAM,GAAG,CAAC,CAAA;QACd,IAAI,WAAW,GAAG,CAAC,CAAA;QAEnB,2DAA2D;QAC3D,IAAI,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE;YACpB,IAAI,CAAC,UAAU,GAAG,IAAI,GAAG,IAAI,CAAC,MAAM,CAAA;YACpC,0EAA0E;YAC1E,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,IAAA,yBAAW,GAAE,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;YACjG,KAAK,IAAI,IAAI,CAAC,UAAU,CAAA;SAC3B;QAED,iFAAiF;QACjF,8EAA8E;QAC9E,IAAI,GAAG,CAAC,KAAK,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE;YACnE,6CAA6C;YAC7C,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;gBACjB,KAAK,IAAI,CAAC,CAAA;gBACV,MAAM,GAAG,CAAC,CAAC,CAAA;aACd;SACJ;QACD,WAAW,GAAG,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QAElC,SAAS,aAAa,CAAC,KAAK,GAAG,KAAK;YAChC,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAA;YAElB,OAAO,KAAK,GAAG,MAAM,IAAI,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE;gBAChE,KAAK,IAAI,CAAC,CAAA;gBACV,KAAK,CAAC,MAAM,IAAI,CAAC,CAAA;gBACjB,KAAK,GAAG,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,GAAG,WAAW,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAA;gBAC9E,KAAK,CAAC,MAAM,IAAI,CAAC,CAAA;gBACjB,iEAAiE;gBACjE,uEAAuE;gBACvE,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC,MAAM,CAAA;gBAE5C,IAAI,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,MAAM,EAAE;oBAC3C,MAAM,IAAI,KAAK,CACX,oCAAoC,KAAK,CAAC,MAAM,OAAO;wBACnD,yCAAyC,IAAI,CAAC,MAAM,GAAG,KAAK,MAAM,IAAI,CAAC,MAAM,MAAM,KAAK,GAAG,CAClG,CAAA;iBACJ;gBACD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;aAC5B;YACD,IAAI,KAAK,KAAK,CAAC,GAAG,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,MAAM,EAAE;gBAC7C,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAA;aACpC;YACD,IAAI,KAAK,IAAI,MAAM,EAAE;gBACjB,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,CAAA;aACzB;YAED,OAAO,IAAI,CAAC,KAAK,CAAA;YAEjB,OAAO,IAAI,CAAA;QACf,CAAC;QAED,kDAAkD;QAClD,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YACnB,OAAO,aAAa,CAAC,KAAK,CAAC,CAAA;SAC9B;QAED,wCAAwC;QACxC,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,GAAG,WAAW,CAAC,CAAA;QAErD,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YACnB,OAAO,IAAI,CAAA;SACd;QAED,+DAA+D;QAC/D,wCAAwC;QACxC,IAAI;YACA,OAAO,aAAa,CAAC,IAAI,CAAC,CAAA;SAC7B;QAAC,OAAO,CAAC,EAAE;YACR,IAAI,IAAI,CAAC,QAAQ;gBAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAA;YAE3C,OAAO,IAAI,CAAA;SACd;IACL,CAAC;IAED,MAAM,IAAI,GAAG,cAAc,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;IACrC,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAA;IAEvB,IAAI,GAAG,KAAK,CAAC,GAAG,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,MAAM,EAAE;QAC3C,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAA;KAC/E;IAED,OAAO,IAAI,CAAA;AACf,CAAC;AA/FD,8BA+FC","sourcesContent":["// all available libraries either suck or are extremely large for the use case, so i made my own~\n\nimport { getPlatform } from '../../platform.js'\n\n/**\n * Parses a single PEM block to buffer.\n * In fact just strips begin/end tags and parses the rest as Base64\n */\nexport function parsePemContents(pem: string): Uint8Array {\n return getPlatform().base64Decode(pem.replace(/^-----(BEGIN|END)( RSA)? PUBLIC KEY-----$|\\n/gm, ''))\n}\n\n// based on https://git.coolaj86.com/coolaj86/asn1-parser.js/src/branch/master/asn1-parser.js\n// but modified for typescript and node buffers\n\ninterface Asn1Object {\n type: number\n lengthSize: number\n length: number\n children?: Asn1Object[]\n value?: Uint8Array\n}\n\nconst ELOOPN = 102\nconst ELOOP = `iterated over ${ELOOPN} elements (probably a malformed file)`\nconst EDEEPN = 60\nconst EDEEP = `element nested over ${EDEEPN} layers deep (probably a malformed file)`\n\n// Container Types are Sequence 0x30, Container Array? (0xA0, 0xA1)\n// Value Types are Boolean 0x01, Integer 0x02, Null 0x05, Object ID 0x06, String 0x0C, 0x16, 0x13, 0x1e\n// Value Array? (0x82)\n// Bit String (0x03) and Octet String (0x04) may be values or containers\n// Sometimes Bit String is used as a container (RSA Pub Spki)\nconst CTYPES: Record<number, true> = {\n '48': true,\n '49': true,\n '160': true,\n '161': true,\n}\nconst VTYPES: Record<number, true> = {\n '1': true,\n '2': true,\n '5': true,\n '6': true,\n '12': true,\n '130': true,\n}\n\n/**\n * Parses ASN.1 data to an object\n */\nexport function parseAsn1(data: Uint8Array): Asn1Object {\n function parseAsn1Inner(buf: Uint8Array, depth: number[], eager = false) {\n if (depth.length >= EDEEPN) {\n throw new Error(EDEEP)\n }\n\n let index = 2 // we know, at minimum, data starts after type (0) and lengthSize (1)\n const asn1: Asn1Object = { type: buf[0], lengthSize: 0, length: buf[1] }\n let child\n let iters = 0\n let adjust = 0\n let adjustedLen = 0\n\n // Determine how many bytes the length uses, and what it is\n if (0x80 & asn1.length) {\n asn1.lengthSize = 0x7f & asn1.length\n // I think that buf->hex->int solves the problem of Endianness... not sure\n asn1.length = parseInt(getPlatform().hexEncode(buf.subarray(index, index + asn1.lengthSize)), 16)\n index += asn1.lengthSize\n }\n\n // High-order bit Integers have a leading 0x00 to signify that they are positive.\n // Bit Streams use the first byte to signify padding, which x.509 doesn't use.\n if (buf[index] === 0x00 && (asn1.type === 0x02 || asn1.type === 0x03)) {\n // However, 0x00 on its own is a valid number\n if (asn1.length > 1) {\n index += 1\n adjust = -1\n }\n }\n adjustedLen = asn1.length + adjust\n\n function parseChildren(eager = false) {\n asn1.children = []\n\n while (iters < ELOOPN && index < 2 + asn1.length + asn1.lengthSize) {\n iters += 1\n depth.length += 1\n child = parseAsn1Inner(buf.subarray(index, index + adjustedLen), depth, eager)\n depth.length -= 1\n // The numbers don't match up exactly and I don't remember why...\n // probably something with adjustedLen or some such, but the tests pass\n index += 2 + child.lengthSize + child.length\n\n if (index > 2 + asn1.lengthSize + asn1.length) {\n throw new Error(\n `Parse error: child value length (${child.length}) is ` +\n `greater than remaining parent length (${asn1.length - index} = ${asn1.length} - ${index})`,\n )\n }\n asn1.children.push(child)\n }\n if (index !== 2 + asn1.lengthSize + asn1.length) {\n throw new Error('Unexpected EOF')\n }\n if (iters >= ELOOPN) {\n throw new Error(ELOOP)\n }\n\n delete asn1.value\n\n return asn1\n }\n\n // Recurse into types that are _always_ containers\n if (CTYPES[asn1.type]) {\n return parseChildren(eager)\n }\n\n // Return types that are _always_ values\n asn1.value = buf.subarray(index, index + adjustedLen)\n\n if (VTYPES[asn1.type]) {\n return asn1\n }\n\n // For ambiguous / unknown types, recurse and return on failure\n // (and return child array size to zero)\n try {\n return parseChildren(true)\n } catch (e) {\n if (asn1.children) asn1.children.length = 0\n\n return asn1\n }\n }\n\n const asn1 = parseAsn1Inner(data, [])\n const len = data.length\n\n if (len !== 2 + asn1.lengthSize + asn1.length) {\n throw new Error('Length of buffer does not match length of ASN.1 sequence.')\n }\n\n return asn1\n}\n"]}
1
+ {"version":3,"file":"asn1-parser.js","sourceRoot":"","sources":["../../../../src/utils/binary/asn1-parser.ts"],"names":[],"mappings":"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","sourcesContent":["// all available libraries either suck or are extremely large for the use case, so i made my own~\n\nimport { getPlatform } from '../../platform.js'\n\n/**\n * Parses a single PEM block to buffer.\n * In fact just strips begin/end tags and parses the rest as Base64\n */\nexport function parsePemContents(pem: string): Uint8Array {\n return getPlatform().base64Decode(pem.replace(/^-----(BEGIN|END)( RSA)? PUBLIC KEY-----$|\\n/gm, ''))\n}\n\n// based on https://git.coolaj86.com/coolaj86/asn1-parser.js/src/branch/master/asn1-parser.js\n// but modified for typescript and node buffers\n\ninterface Asn1Object {\n type: number\n lengthSize: number\n length: number\n children?: Asn1Object[]\n value?: Uint8Array\n}\n\nconst ELOOPN = 102\nconst ELOOP = `iterated over ${ELOOPN} elements (probably a malformed file)`\nconst EDEEPN = 60\nconst EDEEP = `element nested over ${EDEEPN} layers deep (probably a malformed file)`\n\n// Container Types are Sequence 0x30, Container Array? (0xA0, 0xA1)\n// Value Types are Boolean 0x01, Integer 0x02, Null 0x05, Object ID 0x06, String 0x0C, 0x16, 0x13, 0x1e\n// Value Array? (0x82)\n// Bit String (0x03) and Octet String (0x04) may be values or containers\n// Sometimes Bit String is used as a container (RSA Pub Spki)\nconst CTYPES: Record<number, true> = {\n '48': true,\n '49': true,\n '160': true,\n '161': true,\n}\nconst VTYPES: Record<number, true> = {\n '1': true,\n '2': true,\n '5': true,\n '6': true,\n '12': true,\n '130': true,\n}\n\n/**\n * Parses ASN.1 data to an object\n */\nexport function parseAsn1(data: Uint8Array): Asn1Object {\n function parseAsn1Inner(buf: Uint8Array, depth: number[], eager = false) {\n if (depth.length >= EDEEPN) {\n throw new Error(EDEEP)\n }\n\n let index = 2 // we know, at minimum, data starts after type (0) and lengthSize (1)\n const asn1: Asn1Object = { type: buf[0], lengthSize: 0, length: buf[1] }\n let child\n let iters = 0\n let adjust = 0\n let adjustedLen = 0\n\n // Determine how many bytes the length uses, and what it is\n if (0x80 & asn1.length) {\n asn1.lengthSize = 0x7f & asn1.length\n // I think that buf->hex->int solves the problem of Endianness... not sure\n asn1.length = parseInt(getPlatform().hexEncode(buf.subarray(index, index + asn1.lengthSize)), 16)\n index += asn1.lengthSize\n }\n\n // High-order bit Integers have a leading 0x00 to signify that they are positive.\n // Bit Streams use the first byte to signify padding, which x.509 doesn't use.\n if (buf[index] === 0x00 && (asn1.type === 0x02 || asn1.type === 0x03)) {\n // However, 0x00 on its own is a valid number\n if (asn1.length > 1) {\n index += 1\n adjust = -1\n }\n }\n adjustedLen = asn1.length + adjust\n\n function parseChildren(eager = false) {\n asn1.children = []\n\n while (iters < ELOOPN && index < 2 + asn1.length + asn1.lengthSize) {\n iters += 1\n depth.length += 1\n child = parseAsn1Inner(buf.subarray(index, index + adjustedLen), depth, eager)\n depth.length -= 1\n // The numbers don't match up exactly and I don't remember why...\n // probably something with adjustedLen or some such, but the tests pass\n index += 2 + child.lengthSize + child.length\n\n if (index > 2 + asn1.lengthSize + asn1.length) {\n throw new Error(\n `Parse error: child value length (${child.length}) is ` +\n `greater than remaining parent length (${asn1.length - index} = ${asn1.length} - ${index})`,\n )\n }\n asn1.children.push(child)\n }\n if (index !== 2 + asn1.lengthSize + asn1.length) {\n throw new Error('Unexpected EOF')\n }\n if (iters >= ELOOPN) {\n throw new Error(ELOOP)\n }\n\n delete asn1.value\n\n return asn1\n }\n\n // Recurse into types that are _always_ containers\n if (CTYPES[asn1.type]) {\n return parseChildren(eager)\n }\n\n // Return types that are _always_ values\n asn1.value = buf.subarray(index, index + adjustedLen)\n\n if (VTYPES[asn1.type]) {\n return asn1\n }\n\n // For ambiguous / unknown types, recurse and return on failure\n // (and return child array size to zero)\n try {\n return parseChildren(true)\n } catch (e) {\n if (asn1.children) asn1.children.length = 0\n\n return asn1\n }\n }\n\n const asn1 = parseAsn1Inner(data, [])\n const len = data.length\n\n if (len !== 2 + asn1.lengthSize + asn1.length) {\n throw new Error('Length of buffer does not match length of ASN.1 sequence.')\n }\n\n return asn1\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"buffer-utils.js","sourceRoot":"","sources":["../../../src/utils/buffer-utils.ts"],"names":[],"mappings":";;;AAAA;;;;;GAKG;AACH,SAAgB,YAAY,CAAC,CAAa,EAAE,CAAa;IACrD,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM;QAAE,OAAO,KAAK,CAAA;IAEvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QAC/B,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAAE,OAAO,KAAK,CAAA;KAClC;IAED,OAAO,IAAI,CAAA;AACf,CAAC;AARD,oCAQC;AAED;;;;;;GAMG;AACH,SAAgB,WAAW,CAAC,GAAe,EAAE,KAAK,GAAG,CAAC,EAAE,GAAG,GAAG,GAAG,CAAC,MAAM;IACpE,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,GAAG,GAAG,KAAK,CAAC,CAAA;IACvC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAA;IAEjC,OAAO,GAAG,CAAA;AACd,CAAC;AALD,kCAKC;AAED;;GAEG;AACH,SAAgB,aAAa,CAAC,OAAqB;IAC/C,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,OAAO,CAAC,CAAC,CAAC,CAAA;IAE3C,0CAA0C;IAC1C,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;QAC/B,OAAO,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;KAChC;IACD,yCAAyC;IAEzC,IAAI,MAAM,GAAG,CAAC,CAAA;IAEd,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE;QACvB,MAAM,IAAI,GAAG,CAAC,MAAM,CAAA;KACvB;IAED,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,CAAA;IAClC,IAAI,MAAM,GAAG,CAAC,CAAA;IAEd,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE;QACvB,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;QACpB,MAAM,IAAI,GAAG,CAAC,MAAM,CAAA;KACvB;IAED,OAAO,GAAG,CAAA;AACd,CAAC;AAxBD,sCAwBC;AAED;;GAEG;AACH,SAAgB,kBAAkB,CAAC,GAAe;IAC9C,OAAO,IAAI,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,UAAU,CAAC,CAAA;AACnE,CAAC;AAFD,gDAEC;AAED;;GAEG;AACH,SAAgB,gBAAgB,CAAC,GAAe,EAAE,KAAK,GAAG,CAAC,EAAE,GAAG,GAAG,GAAG,CAAC,MAAM;IACzE,MAAM,GAAG,GAAG,GAAG,GAAG,KAAK,CAAA;IACvB,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,CAAA;IAE/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;QAC1B,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA;KAC5B;IAED,OAAO,GAAG,CAAA;AACd,CAAC;AATD,4CASC","sourcesContent":["/**\n * Check if two buffers are equal\n *\n * @param a First buffer\n * @param b Second buffer\n */\nexport function buffersEqual(a: Uint8Array, b: Uint8Array): boolean {\n if (a.length !== b.length) return false\n\n for (let i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) return false\n }\n\n return true\n}\n\n/**\n * Copy a buffer\n *\n * @param buf Buffer to copy\n * @param start Start offset\n * @param end End offset\n */\nexport function cloneBuffer(buf: Uint8Array, start = 0, end = buf.length): Uint8Array {\n const ret = new Uint8Array(end - start)\n ret.set(buf.subarray(start, end))\n\n return ret\n}\n\n/**\n * Concatenate multiple buffers into one\n */\nexport function concatBuffers(buffers: Uint8Array[]): Uint8Array {\n if (buffers.length === 1) return buffers[0]\n\n /* eslint-disable no-restricted-globals */\n if (typeof Buffer !== 'undefined') {\n return Buffer.concat(buffers)\n }\n /* eslint-enable no-restricted-globals */\n\n let length = 0\n\n for (const buf of buffers) {\n length += buf.length\n }\n\n const ret = new Uint8Array(length)\n let offset = 0\n\n for (const buf of buffers) {\n ret.set(buf, offset)\n offset += buf.length\n }\n\n return ret\n}\n\n/**\n * Shortcut for creating a DataView from a Uint8Array\n */\nexport function dataViewFromBuffer(buf: Uint8Array): DataView {\n return new DataView(buf.buffer, buf.byteOffset, buf.byteLength)\n}\n\n/**\n * Reverse a buffer (or a part of it) into a new buffer\n */\nexport function bufferToReversed(buf: Uint8Array, start = 0, end = buf.length): Uint8Array {\n const len = end - start\n const ret = new Uint8Array(len)\n\n for (let i = 0; i < len; i++) {\n ret[i] = buf[end - i - 1]\n }\n\n return ret\n}\n"]}
1
+ {"version":3,"file":"buffer-utils.js","sourceRoot":"","sources":["../../../src/utils/buffer-utils.ts"],"names":[],"mappings":";;;AAAA;;;;;GAKG;AACH,SAAgB,YAAY,CAAC,CAAa,EAAE,CAAa;IACrD,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM;QAAE,OAAO,KAAK,CAAA;IAEvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAChC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAAE,OAAO,KAAK,CAAA;IACnC,CAAC;IAED,OAAO,IAAI,CAAA;AACf,CAAC;AARD,oCAQC;AAED;;;;;;GAMG;AACH,SAAgB,WAAW,CAAC,GAAe,EAAE,KAAK,GAAG,CAAC,EAAE,GAAG,GAAG,GAAG,CAAC,MAAM;IACpE,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,GAAG,GAAG,KAAK,CAAC,CAAA;IACvC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAA;IAEjC,OAAO,GAAG,CAAA;AACd,CAAC;AALD,kCAKC;AAED;;GAEG;AACH,SAAgB,aAAa,CAAC,OAAqB;IAC/C,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,OAAO,CAAC,CAAC,CAAC,CAAA;IAE3C,0CAA0C;IAC1C,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;QAChC,OAAO,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;IACjC,CAAC;IACD,yCAAyC;IAEzC,IAAI,MAAM,GAAG,CAAC,CAAA;IAEd,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;QACxB,MAAM,IAAI,GAAG,CAAC,MAAM,CAAA;IACxB,CAAC;IAED,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,CAAA;IAClC,IAAI,MAAM,GAAG,CAAC,CAAA;IAEd,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;QACxB,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;QACpB,MAAM,IAAI,GAAG,CAAC,MAAM,CAAA;IACxB,CAAC;IAED,OAAO,GAAG,CAAA;AACd,CAAC;AAxBD,sCAwBC;AAED;;GAEG;AACH,SAAgB,kBAAkB,CAAC,GAAe;IAC9C,OAAO,IAAI,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,UAAU,CAAC,CAAA;AACnE,CAAC;AAFD,gDAEC;AAED;;GAEG;AACH,SAAgB,gBAAgB,CAAC,GAAe,EAAE,KAAK,GAAG,CAAC,EAAE,GAAG,GAAG,GAAG,CAAC,MAAM;IACzE,MAAM,GAAG,GAAG,GAAG,GAAG,KAAK,CAAA;IACvB,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,CAAA;IAE/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA;IAC7B,CAAC;IAED,OAAO,GAAG,CAAA;AACd,CAAC;AATD,4CASC","sourcesContent":["/**\n * Check if two buffers are equal\n *\n * @param a First buffer\n * @param b Second buffer\n */\nexport function buffersEqual(a: Uint8Array, b: Uint8Array): boolean {\n if (a.length !== b.length) return false\n\n for (let i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) return false\n }\n\n return true\n}\n\n/**\n * Copy a buffer\n *\n * @param buf Buffer to copy\n * @param start Start offset\n * @param end End offset\n */\nexport function cloneBuffer(buf: Uint8Array, start = 0, end = buf.length): Uint8Array {\n const ret = new Uint8Array(end - start)\n ret.set(buf.subarray(start, end))\n\n return ret\n}\n\n/**\n * Concatenate multiple buffers into one\n */\nexport function concatBuffers(buffers: Uint8Array[]): Uint8Array {\n if (buffers.length === 1) return buffers[0]\n\n /* eslint-disable no-restricted-globals */\n if (typeof Buffer !== 'undefined') {\n return Buffer.concat(buffers)\n }\n /* eslint-enable no-restricted-globals */\n\n let length = 0\n\n for (const buf of buffers) {\n length += buf.length\n }\n\n const ret = new Uint8Array(length)\n let offset = 0\n\n for (const buf of buffers) {\n ret.set(buf, offset)\n offset += buf.length\n }\n\n return ret\n}\n\n/**\n * Shortcut for creating a DataView from a Uint8Array\n */\nexport function dataViewFromBuffer(buf: Uint8Array): DataView {\n return new DataView(buf.buffer, buf.byteOffset, buf.byteLength)\n}\n\n/**\n * Reverse a buffer (or a part of it) into a new buffer\n */\nexport function bufferToReversed(buf: Uint8Array, start = 0, end = buf.length): Uint8Array {\n const len = end - start\n const ret = new Uint8Array(len)\n\n for (let i = 0; i < len; i++) {\n ret[i] = buf[end - i - 1]\n }\n\n return ret\n}\n"]}
@@ -5,6 +5,8 @@ exports.ConditionVariable = void 0;
5
5
  * Class implementing a condition variable like behaviour.
6
6
  */
7
7
  class ConditionVariable {
8
+ _notify;
9
+ _timeout;
8
10
  wait(timeout) {
9
11
  const prom = new Promise((resolve) => {
10
12
  this._notify = resolve;
@@ -1 +1 @@
1
- {"version":3,"file":"condition-variable.js","sourceRoot":"","sources":["../../../src/utils/condition-variable.ts"],"names":[],"mappings":";;;AAAA;;GAEG;AACH,MAAa,iBAAiB;IAI1B,IAAI,CAAC,OAAgB;QACjB,MAAM,IAAI,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;YACvC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;QAC1B,CAAC,CAAC,CAAA;QAEF,IAAI,OAAO,EAAE;YACT,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC5B,IAAI,CAAC,OAAO,EAAE,EAAE,CAAA;gBAChB,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAA;YAC7B,CAAC,EAAE,OAAO,CAAC,CAAA;SACd;QAED,OAAO,IAAI,CAAA;IACf,CAAC;IAED,MAAM;QACF,IAAI,CAAC,OAAO,EAAE,EAAE,CAAA;QAChB,IAAI,IAAI,CAAC,QAAQ;YAAE,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QAC9C,IAAI,CAAC,OAAO,GAAG,SAAS,CAAA;IAC5B,CAAC;CACJ;AAxBD,8CAwBC","sourcesContent":["/**\n * Class implementing a condition variable like behaviour.\n */\nexport class ConditionVariable {\n private _notify?: () => void\n private _timeout?: NodeJS.Timeout\n\n wait(timeout?: number): Promise<void> {\n const prom = new Promise<void>((resolve) => {\n this._notify = resolve\n })\n\n if (timeout) {\n this._timeout = setTimeout(() => {\n this._notify?.()\n this._timeout = undefined\n }, timeout)\n }\n\n return prom\n }\n\n notify(): void {\n this._notify?.()\n if (this._timeout) clearTimeout(this._timeout)\n this._notify = undefined\n }\n}\n"]}
1
+ {"version":3,"file":"condition-variable.js","sourceRoot":"","sources":["../../../src/utils/condition-variable.ts"],"names":[],"mappings":";;;AAAA;;GAEG;AACH,MAAa,iBAAiB;IAClB,OAAO,CAAa;IACpB,QAAQ,CAAiB;IAEjC,IAAI,CAAC,OAAgB;QACjB,MAAM,IAAI,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;YACvC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;QAC1B,CAAC,CAAC,CAAA;QAEF,IAAI,OAAO,EAAE,CAAC;YACV,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC5B,IAAI,CAAC,OAAO,EAAE,EAAE,CAAA;gBAChB,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAA;YAC7B,CAAC,EAAE,OAAO,CAAC,CAAA;QACf,CAAC;QAED,OAAO,IAAI,CAAA;IACf,CAAC;IAED,MAAM;QACF,IAAI,CAAC,OAAO,EAAE,EAAE,CAAA;QAChB,IAAI,IAAI,CAAC,QAAQ;YAAE,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QAC9C,IAAI,CAAC,OAAO,GAAG,SAAS,CAAA;IAC5B,CAAC;CACJ;AAxBD,8CAwBC","sourcesContent":["/**\n * Class implementing a condition variable like behaviour.\n */\nexport class ConditionVariable {\n private _notify?: () => void\n private _timeout?: NodeJS.Timeout\n\n wait(timeout?: number): Promise<void> {\n const prom = new Promise<void>((resolve) => {\n this._notify = resolve\n })\n\n if (timeout) {\n this._timeout = setTimeout(() => {\n this._notify?.()\n this._timeout = undefined\n }, timeout)\n }\n\n return prom\n }\n\n notify(): void {\n this._notify?.()\n if (this._timeout) clearTimeout(this._timeout)\n this._notify = undefined\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"factorization.js","sourceRoot":"","sources":["../../../../src/utils/crypto/factorization.ts"],"names":[],"mappings":";;;AAAA,wDAO2B;AAG3B;;;GAGG;AACH,SAAgB,eAAe,CAAC,MAAuB,EAAE,EAAc;IACnE,MAAM,GAAG,GAAG,IAAA,gCAAc,EAAC,EAAE,CAAC,CAAA;IAE9B,MAAM,CAAC,GAAG,eAAe,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IACtC,MAAM,CAAC,GAAG,GAAG,GAAG,CAAC,CAAA;IAEjB,IAAI,CAAC,CAAA;IACL,IAAI,CAAC,CAAA;IAEL,IAAI,CAAC,GAAG,CAAC,EAAE;QACP,CAAC,GAAG,CAAC,CAAA;QACL,CAAC,GAAG,CAAC,CAAA;KACR;SAAM;QACH,CAAC,GAAG,CAAC,CAAA;QACL,CAAC,GAAG,CAAC,CAAA;KACR;IAED,OAAO,CAAC,IAAA,gCAAc,EAAC,CAAC,CAAC,EAAE,IAAA,gCAAc,EAAC,CAAC,CAAC,CAAC,CAAA;AACjD,CAAC;AAlBD,0CAkBC;AAED,SAAS,eAAe,CAAC,MAAuB,EAAE,CAAS;IACvD,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE;QAAE,OAAO,EAAE,CAAA;IAE5B,IAAI,CAAC,GAAG,IAAA,qCAAmB,EAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,CAAA;IAC3C,MAAM,CAAC,GAAG,IAAA,qCAAmB,EAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,CAAA;IAC7C,MAAM,CAAC,GAAG,IAAA,qCAAmB,EAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,CAAA;IAC7C,IAAI,CAAC,GAAG,EAAE,CAAA;IACV,IAAI,CAAC,GAAG,EAAE,CAAA;IACV,IAAI,CAAC,GAAG,EAAE,CAAA;IAEV,IAAI,EAAU,CAAA;IACd,IAAI,CAAS,CAAA;IAEb,OAAO,CAAC,KAAK,EAAE,EAAE;QACb,CAAC,GAAG,CAAC,CAAA;QACL,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;YAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAA;QAExD,IAAI,CAAC,GAAG,EAAE,CAAA;QAEV,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE;YACtB,EAAE,GAAG,CAAC,CAAA;YAEN,KAAK,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,IAAA,2BAAS,EAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;gBAC3C,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAA;gBAC3B,CAAC,GAAG,CAAC,CAAC,GAAG,IAAA,2BAAS,EAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;aACjC;YAED,CAAC,GAAG,IAAA,2BAAS,EAAC,CAAC,EAAE,CAAC,CAAC,CAAA;YACnB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;SACZ;QAED,CAAC,KAAK,EAAE,CAAA;KACX;IAED,IAAI,CAAC,KAAK,CAAC,EAAE;QACT,GAAG;YACC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAG,GAAG,EAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAA;YAEhC,CAAC,GAAG,IAAA,2BAAS,EAAC,CAAE,GAAG,EAAG,EAAE,CAAC,CAAC,CAAA;SAC7B,QAAQ,CAAC,IAAI,EAAE,EAAC;KACpB;IAED,OAAO,CAAC,CAAA;AACZ,CAAC","sourcesContent":["import {\n bigIntAbs,\n bigIntGcd,\n bigIntMin,\n bigIntToBuffer,\n bufferToBigInt,\n randomBigIntInRange,\n} from '../bigint-utils.js'\nimport { ICryptoProvider } from './abstract.js'\n\n/**\n * Factorize `p*q` to `p` and `q` synchronously using Brent-Pollard rho algorithm\n * @param pq\n */\nexport function factorizePQSync(crypto: ICryptoProvider, pq: Uint8Array): [Uint8Array, Uint8Array] {\n const pq_ = bufferToBigInt(pq)\n\n const n = PollardRhoBrent(crypto, pq_)\n const m = pq_ / n\n\n let p\n let q\n\n if (n < m) {\n p = n\n q = m\n } else {\n p = m\n q = n\n }\n\n return [bigIntToBuffer(p), bigIntToBuffer(q)]\n}\n\nfunction PollardRhoBrent(crypto: ICryptoProvider, n: bigint): bigint {\n if (n % 2n === 0n) return 2n\n\n let y = randomBigIntInRange(crypto, n - 1n)\n const c = randomBigIntInRange(crypto, n - 1n)\n const m = randomBigIntInRange(crypto, n - 1n)\n let g = 1n\n let r = 1n\n let q = 1n\n\n let ys: bigint\n let x: bigint\n\n while (g === 1n) {\n x = y\n for (let i = 0; r >= i; i++) y = (((y * y) % n) + c) % n\n\n let k = 0n\n\n while (k < r && g === 1n) {\n ys = y\n\n for (let i = 0n; i < bigIntMin(m, r - k); i++) {\n y = (((y * y) % n) + c) % n\n q = (q * bigIntAbs(x - y)) % n\n }\n\n g = bigIntGcd(q, n)\n k = k + m\n }\n\n r <<= 1n\n }\n\n if (g === n) {\n do {\n ys = (((ys! * ys!) % n) + c) % n\n\n g = bigIntGcd(x! - ys!, n)\n } while (g <= 1n)\n }\n\n return g\n}\n"]}
1
+ {"version":3,"file":"factorization.js","sourceRoot":"","sources":["../../../../src/utils/crypto/factorization.ts"],"names":[],"mappings":";;;AAAA,wDAO2B;AAG3B;;;GAGG;AACH,SAAgB,eAAe,CAAC,MAAuB,EAAE,EAAc;IACnE,MAAM,GAAG,GAAG,IAAA,gCAAc,EAAC,EAAE,CAAC,CAAA;IAE9B,MAAM,CAAC,GAAG,eAAe,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IACtC,MAAM,CAAC,GAAG,GAAG,GAAG,CAAC,CAAA;IAEjB,IAAI,CAAC,CAAA;IACL,IAAI,CAAC,CAAA;IAEL,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACR,CAAC,GAAG,CAAC,CAAA;QACL,CAAC,GAAG,CAAC,CAAA;IACT,CAAC;SAAM,CAAC;QACJ,CAAC,GAAG,CAAC,CAAA;QACL,CAAC,GAAG,CAAC,CAAA;IACT,CAAC;IAED,OAAO,CAAC,IAAA,gCAAc,EAAC,CAAC,CAAC,EAAE,IAAA,gCAAc,EAAC,CAAC,CAAC,CAAC,CAAA;AACjD,CAAC;AAlBD,0CAkBC;AAED,SAAS,eAAe,CAAC,MAAuB,EAAE,CAAS;IACvD,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE;QAAE,OAAO,EAAE,CAAA;IAE5B,IAAI,CAAC,GAAG,IAAA,qCAAmB,EAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,CAAA;IAC3C,MAAM,CAAC,GAAG,IAAA,qCAAmB,EAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,CAAA;IAC7C,MAAM,CAAC,GAAG,IAAA,qCAAmB,EAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,CAAA;IAC7C,IAAI,CAAC,GAAG,EAAE,CAAA;IACV,IAAI,CAAC,GAAG,EAAE,CAAA;IACV,IAAI,CAAC,GAAG,EAAE,CAAA;IAEV,IAAI,EAAU,CAAA;IACd,IAAI,CAAS,CAAA;IAEb,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;QACd,CAAC,GAAG,CAAC,CAAA;QACL,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;YAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAA;QAExD,IAAI,CAAC,GAAG,EAAE,CAAA;QAEV,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC;YACvB,EAAE,GAAG,CAAC,CAAA;YAEN,KAAK,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,IAAA,2BAAS,EAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC5C,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAA;gBAC3B,CAAC,GAAG,CAAC,CAAC,GAAG,IAAA,2BAAS,EAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;YAClC,CAAC;YAED,CAAC,GAAG,IAAA,2BAAS,EAAC,CAAC,EAAE,CAAC,CAAC,CAAA;YACnB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QACb,CAAC;QAED,CAAC,KAAK,EAAE,CAAA;IACZ,CAAC;IAED,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACV,GAAG,CAAC;YACA,EAAE,GAAG,CAAC,CAAC,CAAC,EAAG,GAAG,EAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAA;YAEhC,CAAC,GAAG,IAAA,2BAAS,EAAC,CAAE,GAAG,EAAG,EAAE,CAAC,CAAC,CAAA;QAC9B,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAC;IACrB,CAAC;IAED,OAAO,CAAC,CAAA;AACZ,CAAC","sourcesContent":["import {\n bigIntAbs,\n bigIntGcd,\n bigIntMin,\n bigIntToBuffer,\n bufferToBigInt,\n randomBigIntInRange,\n} from '../bigint-utils.js'\nimport { ICryptoProvider } from './abstract.js'\n\n/**\n * Factorize `p*q` to `p` and `q` synchronously using Brent-Pollard rho algorithm\n * @param pq\n */\nexport function factorizePQSync(crypto: ICryptoProvider, pq: Uint8Array): [Uint8Array, Uint8Array] {\n const pq_ = bufferToBigInt(pq)\n\n const n = PollardRhoBrent(crypto, pq_)\n const m = pq_ / n\n\n let p\n let q\n\n if (n < m) {\n p = n\n q = m\n } else {\n p = m\n q = n\n }\n\n return [bigIntToBuffer(p), bigIntToBuffer(q)]\n}\n\nfunction PollardRhoBrent(crypto: ICryptoProvider, n: bigint): bigint {\n if (n % 2n === 0n) return 2n\n\n let y = randomBigIntInRange(crypto, n - 1n)\n const c = randomBigIntInRange(crypto, n - 1n)\n const m = randomBigIntInRange(crypto, n - 1n)\n let g = 1n\n let r = 1n\n let q = 1n\n\n let ys: bigint\n let x: bigint\n\n while (g === 1n) {\n x = y\n for (let i = 0; r >= i; i++) y = (((y * y) % n) + c) % n\n\n let k = 0n\n\n while (k < r && g === 1n) {\n ys = y\n\n for (let i = 0n; i < bigIntMin(m, r - k); i++) {\n y = (((y * y) % n) + c) % n\n q = (q * bigIntAbs(x - y)) % n\n }\n\n g = bigIntGcd(q, n)\n k = k + m\n }\n\n r <<= 1n\n }\n\n if (g === n) {\n do {\n ys = (((ys! * ys!) % n) + c) % n\n\n g = bigIntGcd(x! - ys!, n)\n } while (g <= 1n)\n }\n\n return g\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"keys.js","sourceRoot":"","sources":["../../../../src/utils/crypto/keys.ts"],"names":[],"mappings":";;;AAEA,+DAA0F;AAC1F,mDAAmD;AAEnD,mDAA+C;AAC/C,6DAAsE;AAGtE;;;;;;;GAOG;AACH,SAAgB,cAAc,CAAC,MAAuB,EAAE,GAAW,EAAE,GAAG,GAAG,KAAK;IAC5E,MAAM,IAAI,GAAG,IAAA,0BAAS,EAAC,IAAA,iCAAgB,EAAC,GAAG,CAAC,CAAC,CAAA;IAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAA;IACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAA;IACzC,IAAI,CAAC,OAAO,IAAI,CAAC,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAA;IAEhE,MAAM,MAAM,GAAG,2BAAc,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;IACzC,yDAAyD;IACzD,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;IACrB,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;IAEtB,MAAM,QAAQ,GAAG,IAAA,yBAAW,GAAE,CAAA;IAE9B,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,CAAA;IAC5B,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAC7B,MAAM,EAAE,GAAG,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAA;IAEtD,OAAO;QACH,OAAO,EAAE,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC;QACpC,QAAQ,EAAE,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC;QACtC,WAAW,EAAE,EAAE;QACf,GAAG;KACN,CAAA;AACL,CAAC;AAvBD,wCAuBC;AAED;;;;;;GAMG;AACH,SAAgB,YAAY,CAAC,MAAuB,EAAE,GAAW,EAAE,GAAG,GAAG,KAAK;IAC1E,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,CAAA;IAC/C,8BAAS,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,MAAM,CAAA;AAC1C,CAAC;AAHD,oCAGC;AAED;;;;;GAKG;AACH,SAAgB,qBAAqB,CAAC,YAA+B,EAAE,QAAQ,GAAG,KAAK;IACnF,KAAK,IAAI,EAAE,IAAI,YAAY,EAAE;QACzB,IAAI,OAAO,EAAE,KAAK,QAAQ,EAAE;YACxB,EAAE,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;SACpC;QACD,IAAI,EAAE,IAAI,8BAAS,EAAE;YACjB,IAAI,8BAAS,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ;gBAAE,SAAQ;YAE5C,OAAO,8BAAS,CAAC,EAAE,CAAC,CAAA;SACvB;KACJ;IACD,IAAI,CAAC,QAAQ;QAAE,OAAO,qBAAqB,CAAC,YAAY,EAAE,IAAI,CAAC,CAAA;IAE/D,OAAO,IAAI,CAAA;AACf,CAAC;AAdD,sDAcC","sourcesContent":["import Long from 'long'\n\nimport { __publicKeyIndex as keysIndex, TlPublicKey } from '@mtcute/tl/binary/rsa-keys.js'\nimport { TlBinaryWriter } from '@mtcute/tl-runtime'\n\nimport { getPlatform } from '../../platform.js'\nimport { parseAsn1, parsePemContents } from '../binary/asn1-parser.js'\nimport { ICryptoProvider } from './abstract.js'\n\n/**\n * Parse PEM-encoded RSA public key information into modulus and exponent\n * and compute its fingerprint as defined by MTProto.\n *\n * @param crypto Crypto provider\n * @param key PEM-encoded RSA public key\n * @param old Whether this is an \"old\" key\n */\nexport function parsePublicKey(crypto: ICryptoProvider, key: string, old = false): TlPublicKey {\n const asn1 = parseAsn1(parsePemContents(key))\n const modulus = asn1.children?.[0].value\n const exponent = asn1.children?.[1].value\n if (!modulus || !exponent) throw new Error('Invalid public key')\n\n const writer = TlBinaryWriter.manual(512)\n // they are actually smaller, about 270 bytes, but idc :D\n writer.bytes(modulus)\n writer.bytes(exponent)\n\n const platform = getPlatform()\n\n const data = writer.result()\n const sha = crypto.sha1(data)\n const fp = platform.hexEncode(sha.slice(-8).reverse())\n\n return {\n modulus: platform.hexEncode(modulus),\n exponent: platform.hexEncode(exponent),\n fingerprint: fp,\n old,\n }\n}\n\n/**\n * Add public key to the global index.\n *\n * @param crypto Crypto provider\n * @param key PEM-encoded RSA public key\n * @param old Whether this is an \"old\" key\n */\nexport function addPublicKey(crypto: ICryptoProvider, key: string, old = false): void {\n const parsed = parsePublicKey(crypto, key, old)\n keysIndex[parsed.fingerprint] = parsed\n}\n\n/**\n * Get public key by its fingerprint.\n *\n * @param fingerprints Fingerprints to match. The first one to match is returned.\n * @param allowOld Whether to allow \"old\" keys\n */\nexport function findKeyByFingerprints(fingerprints: (string | Long)[], allowOld = false): TlPublicKey | null {\n for (let fp of fingerprints) {\n if (typeof fp !== 'string') {\n fp = fp.toUnsigned().toString(16)\n }\n if (fp in keysIndex) {\n if (keysIndex[fp].old && !allowOld) continue\n\n return keysIndex[fp]\n }\n }\n if (!allowOld) return findKeyByFingerprints(fingerprints, true)\n\n return null\n}\n"]}
1
+ {"version":3,"file":"keys.js","sourceRoot":"","sources":["../../../../src/utils/crypto/keys.ts"],"names":[],"mappings":";;;AAEA,+DAA0F;AAC1F,mDAAmD;AAEnD,mDAA+C;AAC/C,6DAAsE;AAGtE;;;;;;;GAOG;AACH,SAAgB,cAAc,CAAC,MAAuB,EAAE,GAAW,EAAE,GAAG,GAAG,KAAK;IAC5E,MAAM,IAAI,GAAG,IAAA,0BAAS,EAAC,IAAA,iCAAgB,EAAC,GAAG,CAAC,CAAC,CAAA;IAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAA;IACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAA;IACzC,IAAI,CAAC,OAAO,IAAI,CAAC,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAA;IAEhE,MAAM,MAAM,GAAG,2BAAc,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;IACzC,yDAAyD;IACzD,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;IACrB,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;IAEtB,MAAM,QAAQ,GAAG,IAAA,yBAAW,GAAE,CAAA;IAE9B,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,CAAA;IAC5B,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAC7B,MAAM,EAAE,GAAG,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAA;IAEtD,OAAO;QACH,OAAO,EAAE,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC;QACpC,QAAQ,EAAE,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC;QACtC,WAAW,EAAE,EAAE;QACf,GAAG;KACN,CAAA;AACL,CAAC;AAvBD,wCAuBC;AAED;;;;;;GAMG;AACH,SAAgB,YAAY,CAAC,MAAuB,EAAE,GAAW,EAAE,GAAG,GAAG,KAAK;IAC1E,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,CAAA;IAC/C,8BAAS,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,MAAM,CAAA;AAC1C,CAAC;AAHD,oCAGC;AAED;;;;;GAKG;AACH,SAAgB,qBAAqB,CAAC,YAA+B,EAAE,QAAQ,GAAG,KAAK;IACnF,KAAK,IAAI,EAAE,IAAI,YAAY,EAAE,CAAC;QAC1B,IAAI,OAAO,EAAE,KAAK,QAAQ,EAAE,CAAC;YACzB,EAAE,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;QACrC,CAAC;QACD,IAAI,EAAE,IAAI,8BAAS,EAAE,CAAC;YAClB,IAAI,8BAAS,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ;gBAAE,SAAQ;YAE5C,OAAO,8BAAS,CAAC,EAAE,CAAC,CAAA;QACxB,CAAC;IACL,CAAC;IACD,IAAI,CAAC,QAAQ;QAAE,OAAO,qBAAqB,CAAC,YAAY,EAAE,IAAI,CAAC,CAAA;IAE/D,OAAO,IAAI,CAAA;AACf,CAAC;AAdD,sDAcC","sourcesContent":["import Long from 'long'\n\nimport { __publicKeyIndex as keysIndex, TlPublicKey } from '@mtcute/tl/binary/rsa-keys.js'\nimport { TlBinaryWriter } from '@mtcute/tl-runtime'\n\nimport { getPlatform } from '../../platform.js'\nimport { parseAsn1, parsePemContents } from '../binary/asn1-parser.js'\nimport { ICryptoProvider } from './abstract.js'\n\n/**\n * Parse PEM-encoded RSA public key information into modulus and exponent\n * and compute its fingerprint as defined by MTProto.\n *\n * @param crypto Crypto provider\n * @param key PEM-encoded RSA public key\n * @param old Whether this is an \"old\" key\n */\nexport function parsePublicKey(crypto: ICryptoProvider, key: string, old = false): TlPublicKey {\n const asn1 = parseAsn1(parsePemContents(key))\n const modulus = asn1.children?.[0].value\n const exponent = asn1.children?.[1].value\n if (!modulus || !exponent) throw new Error('Invalid public key')\n\n const writer = TlBinaryWriter.manual(512)\n // they are actually smaller, about 270 bytes, but idc :D\n writer.bytes(modulus)\n writer.bytes(exponent)\n\n const platform = getPlatform()\n\n const data = writer.result()\n const sha = crypto.sha1(data)\n const fp = platform.hexEncode(sha.slice(-8).reverse())\n\n return {\n modulus: platform.hexEncode(modulus),\n exponent: platform.hexEncode(exponent),\n fingerprint: fp,\n old,\n }\n}\n\n/**\n * Add public key to the global index.\n *\n * @param crypto Crypto provider\n * @param key PEM-encoded RSA public key\n * @param old Whether this is an \"old\" key\n */\nexport function addPublicKey(crypto: ICryptoProvider, key: string, old = false): void {\n const parsed = parsePublicKey(crypto, key, old)\n keysIndex[parsed.fingerprint] = parsed\n}\n\n/**\n * Get public key by its fingerprint.\n *\n * @param fingerprints Fingerprints to match. The first one to match is returned.\n * @param allowOld Whether to allow \"old\" keys\n */\nexport function findKeyByFingerprints(fingerprints: (string | Long)[], allowOld = false): TlPublicKey | null {\n for (let fp of fingerprints) {\n if (typeof fp !== 'string') {\n fp = fp.toUnsigned().toString(16)\n }\n if (fp in keysIndex) {\n if (keysIndex[fp].old && !allowOld) continue\n\n return keysIndex[fp]\n }\n }\n if (!allowOld) return findKeyByFingerprints(fingerprints, true)\n\n return null\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"miller-rabin.js","sourceRoot":"","sources":["../../../../src/utils/crypto/miller-rabin.ts"],"names":[],"mappings":";;;AAAA,wDAAqG;AAGrG,SAAgB,WAAW,CAAC,MAAuB,EAAE,CAAS,EAAE,MAAM,GAAG,EAAE;IACvE,oDAAoD;IACpD,IAAI,CAAC,GAAG,EAAE;QAAE,OAAO,CAAC,GAAG,EAAE,CAAA;IACzB,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE;QAAE,OAAO,KAAK,CAAA;IAEzC,MAAM,KAAK,GAAG,IAAA,iCAAe,EAAC,CAAC,CAAC,CAAA;IAChC,MAAM,IAAI,GAAG,CAAC,GAAG,EAAE,CAAA;IAEnB,MAAM,CAAC,GAAG,IAAA,iCAAe,EAAC,IAAI,CAAC,CAAA;IAC/B,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,CAAA;IAEnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE;QAC7B,IAAI,IAAI,CAAA;QAER,GAAG;YACC,IAAI,GAAG,IAAA,kCAAgB,EAAC,MAAM,EAAE,KAAK,CAAC,CAAA;SACzC,QAAQ,IAAI,IAAI,EAAE,IAAI,IAAI,IAAI,IAAI,EAAC;QAEpC,IAAI,CAAC,GAAG,IAAA,8BAAY,EAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;QAChC,+CAA+C;QAC/C,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI;YAAE,SAAQ;QAEpC,IAAI,CAAC,GAAG,EAAE,CAAA;QACV,IAAI,CAAS,CAAA;QAEb,OAAO,CAAC,GAAG,CAAC,EAAE;YACV,6BAA6B;YAC7B,CAAC,GAAG,IAAA,8BAAY,EAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAA;YAE1B,IAAI,CAAC,KAAK,EAAE;gBAAE,OAAO,KAAK,CAAA;YAC1B,IAAI,CAAC,KAAK,IAAI;gBAAE,MAAK;YACrB,CAAC,IAAI,EAAE,CAAA;YAEP,CAAC,GAAG,CAAC,CAAA;SACR;QAED,IAAI,CAAC,KAAK,CAAC;YAAE,OAAO,KAAK,CAAA;KAC5B;IAED,OAAO,IAAI,CAAA;AACf,CAAC;AAxCD,kCAwCC","sourcesContent":["import { bigIntBitLength, bigIntModPow, randomBigIntBits, twoMultiplicity } from '../bigint-utils.js'\nimport { ICryptoProvider } from './abstract.js'\n\nexport function millerRabin(crypto: ICryptoProvider, n: bigint, rounds = 20): boolean {\n // small numbers: 0, 1 are not prime, 2, 3 are prime\n if (n < 4n) return n > 1n\n if (n % 2n === 0n || n < 0n) return false\n\n const nBits = bigIntBitLength(n)\n const nSub = n - 1n\n\n const r = twoMultiplicity(nSub)\n const d = nSub >> r\n\n for (let i = 0; i < rounds; i++) {\n let base\n\n do {\n base = randomBigIntBits(crypto, nBits)\n } while (base <= 1n || base >= nSub)\n\n let x = bigIntModPow(base, d, n)\n // if (x.eq(bigInt.one) || x.eq(nSub)) continue\n if (x === 1n || x === nSub) continue\n\n let i = 0n\n let y: bigint\n\n while (i < r) {\n // y = x.modPow(bigInt[2], n)\n y = bigIntModPow(x, 2n, n)\n\n if (x === 1n) return false\n if (x === nSub) break\n i += 1n\n\n x = y\n }\n\n if (i === r) return false\n }\n\n return true\n}\n"]}
1
+ {"version":3,"file":"miller-rabin.js","sourceRoot":"","sources":["../../../../src/utils/crypto/miller-rabin.ts"],"names":[],"mappings":";;;AAAA,wDAAqG;AAGrG,SAAgB,WAAW,CAAC,MAAuB,EAAE,CAAS,EAAE,MAAM,GAAG,EAAE;IACvE,oDAAoD;IACpD,IAAI,CAAC,GAAG,EAAE;QAAE,OAAO,CAAC,GAAG,EAAE,CAAA;IACzB,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE;QAAE,OAAO,KAAK,CAAA;IAEzC,MAAM,KAAK,GAAG,IAAA,iCAAe,EAAC,CAAC,CAAC,CAAA;IAChC,MAAM,IAAI,GAAG,CAAC,GAAG,EAAE,CAAA;IAEnB,MAAM,CAAC,GAAG,IAAA,iCAAe,EAAC,IAAI,CAAC,CAAA;IAC/B,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,CAAA;IAEnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC9B,IAAI,IAAI,CAAA;QAER,GAAG,CAAC;YACA,IAAI,GAAG,IAAA,kCAAgB,EAAC,MAAM,EAAE,KAAK,CAAC,CAAA;QAC1C,CAAC,QAAQ,IAAI,IAAI,EAAE,IAAI,IAAI,IAAI,IAAI,EAAC;QAEpC,IAAI,CAAC,GAAG,IAAA,8BAAY,EAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;QAChC,+CAA+C;QAC/C,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI;YAAE,SAAQ;QAEpC,IAAI,CAAC,GAAG,EAAE,CAAA;QACV,IAAI,CAAS,CAAA;QAEb,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YACX,6BAA6B;YAC7B,CAAC,GAAG,IAAA,8BAAY,EAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAA;YAE1B,IAAI,CAAC,KAAK,EAAE;gBAAE,OAAO,KAAK,CAAA;YAC1B,IAAI,CAAC,KAAK,IAAI;gBAAE,MAAK;YACrB,CAAC,IAAI,EAAE,CAAA;YAEP,CAAC,GAAG,CAAC,CAAA;QACT,CAAC;QAED,IAAI,CAAC,KAAK,CAAC;YAAE,OAAO,KAAK,CAAA;IAC7B,CAAC;IAED,OAAO,IAAI,CAAA;AACf,CAAC;AAxCD,kCAwCC","sourcesContent":["import { bigIntBitLength, bigIntModPow, randomBigIntBits, twoMultiplicity } from '../bigint-utils.js'\nimport { ICryptoProvider } from './abstract.js'\n\nexport function millerRabin(crypto: ICryptoProvider, n: bigint, rounds = 20): boolean {\n // small numbers: 0, 1 are not prime, 2, 3 are prime\n if (n < 4n) return n > 1n\n if (n % 2n === 0n || n < 0n) return false\n\n const nBits = bigIntBitLength(n)\n const nSub = n - 1n\n\n const r = twoMultiplicity(nSub)\n const d = nSub >> r\n\n for (let i = 0; i < rounds; i++) {\n let base\n\n do {\n base = randomBigIntBits(crypto, nBits)\n } while (base <= 1n || base >= nSub)\n\n let x = bigIntModPow(base, d, n)\n // if (x.eq(bigInt.one) || x.eq(nSub)) continue\n if (x === 1n || x === nSub) continue\n\n let i = 0n\n let y: bigint\n\n while (i < r) {\n // y = x.modPow(bigInt[2], n)\n y = bigIntModPow(x, 2n, n)\n\n if (x === 1n) return false\n if (x === nSub) break\n i += 1n\n\n x = y\n }\n\n if (i === r) return false\n }\n\n return true\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"password.js","sourceRoot":"","sources":["../../../../src/utils/crypto/password.ts"],"names":[],"mappings":"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","sourcesContent":["import { tl } from '@mtcute/tl'\n\nimport { getPlatform } from '../../platform.js'\nimport { MtSecurityError, MtUnsupportedError } from '../../types/errors.js'\nimport { bigIntModPow, bigIntToBuffer, bufferToBigInt } from '../bigint-utils.js'\nimport { concatBuffers } from '../buffer-utils.js'\nimport { assertTypeIs } from '../type-assertions.js'\nimport { ICryptoProvider } from './abstract.js'\nimport { xorBuffer } from './utils.js'\n\n/**\n * Compute password hash as defined by MTProto.\n *\n * See https://core.telegram.org/api/srp#checking-the-password-with-srp\n *\n * @param crypto Crypto provider\n * @param password Password\n * @param salt1 Salt 1\n * @param salt2 Salt 2\n */\nexport async function computePasswordHash(\n crypto: ICryptoProvider,\n password: Uint8Array,\n salt1: Uint8Array,\n salt2: Uint8Array,\n): Promise<Uint8Array> {\n const SH = (data: Uint8Array, salt: Uint8Array) => crypto.sha256(concatBuffers([salt, data, salt]))\n const PH1 = (pwd: Uint8Array, salt1: Uint8Array, salt2: Uint8Array) => SH(SH(pwd, salt1), salt2)\n\n return SH(await crypto.pbkdf2(PH1(password, salt1, salt2), salt1, 100000), salt2)\n}\n\n/**\n * Compute new password SRP hash as defined by MTProto.\n *\n * @param crypto Crypto provider\n * @param algo KDF algorithm\n * @param password Password\n */\nexport async function computeNewPasswordHash(\n crypto: ICryptoProvider,\n algo: tl.TypePasswordKdfAlgo,\n password: string,\n): Promise<Uint8Array> {\n assertTypeIs('account.getPassword', algo, 'passwordKdfAlgoSHA256SHA256PBKDF2HMACSHA512iter100000SHA256ModPow')\n\n const salt1 = new Uint8Array(algo.salt1.length + 32)\n salt1.set(algo.salt1)\n crypto.randomFill(salt1.subarray(algo.salt1.length))\n ;(algo as tl.Mutable<typeof algo>).salt1 = salt1\n\n const _x = await computePasswordHash(crypto, getPlatform().utf8Encode(password), algo.salt1, algo.salt2)\n\n const g = BigInt(algo.g)\n const p = bufferToBigInt(algo.p)\n const x = bufferToBigInt(_x)\n\n return bigIntToBuffer(bigIntModPow(g, x, p), 256)\n}\n\n/**\n * Compute SRP check parameters for 2fa password as defined by MTProto.\n *\n * @param crypto Crypto provider\n * @param request SRP request\n * @param password 2fa password\n */\nexport async function computeSrpParams(\n crypto: ICryptoProvider,\n request: tl.account.RawPassword,\n password: string,\n): Promise<tl.RawInputCheckPasswordSRP> {\n // nice naming thx durov\n if (\n !request.currentAlgo ||\n request.currentAlgo._ !== 'passwordKdfAlgoSHA256SHA256PBKDF2HMACSHA512iter100000SHA256ModPow'\n ) {\n throw new MtUnsupportedError(`Unknown algo ${request.currentAlgo?._}`)\n }\n\n const algo = request.currentAlgo\n\n // here and after: underscored variables are buffers, non-underscored are bigInts\n\n if (!request.srpB) {\n throw new MtSecurityError('SRP_B is not present in the request')\n }\n\n if (!request.srpId) {\n throw new MtSecurityError('SRP_ID is not present in the request')\n }\n\n const g = BigInt(algo.g)\n const _g = bigIntToBuffer(g, 256)\n const p = bufferToBigInt(algo.p)\n const gB = bufferToBigInt(request.srpB)\n\n const a = bufferToBigInt(crypto.randomBytes(256))\n const gA = bigIntModPow(g, a, p)\n const _gA = bigIntToBuffer(gA, 256)\n\n const H = (data: Uint8Array) => crypto.sha256(data)\n\n const _k = crypto.sha256(concatBuffers([algo.p, _g]))\n const _u = crypto.sha256(concatBuffers([_gA, request.srpB]))\n const _x = await computePasswordHash(crypto, getPlatform().utf8Encode(password), algo.salt1, algo.salt2)\n const k = bufferToBigInt(_k)\n const u = bufferToBigInt(_u)\n const x = bufferToBigInt(_x)\n\n const v = bigIntModPow(g, x, p)\n const kV = (k * v) % p\n\n let t = gB - kV\n if (t < 0n) t += p\n const sA = bigIntModPow(t, a + u * x, p)\n const _kA = H(bigIntToBuffer(sA, 256))\n\n const _M1 = H(concatBuffers([xorBuffer(H(algo.p), H(_g)), H(algo.salt1), H(algo.salt2), _gA, request.srpB, _kA]))\n\n return {\n _: 'inputCheckPasswordSRP',\n srpId: request.srpId,\n A: _gA,\n M1: _M1,\n }\n}\n"]}
1
+ {"version":3,"file":"password.js","sourceRoot":"","sources":["../../../../src/utils/crypto/password.ts"],"names":[],"mappings":"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","sourcesContent":["import { tl } from '@mtcute/tl'\n\nimport { getPlatform } from '../../platform.js'\nimport { MtSecurityError, MtUnsupportedError } from '../../types/errors.js'\nimport { bigIntModPow, bigIntToBuffer, bufferToBigInt } from '../bigint-utils.js'\nimport { concatBuffers } from '../buffer-utils.js'\nimport { assertTypeIs } from '../type-assertions.js'\nimport { ICryptoProvider } from './abstract.js'\nimport { xorBuffer } from './utils.js'\n\n/**\n * Compute password hash as defined by MTProto.\n *\n * See https://core.telegram.org/api/srp#checking-the-password-with-srp\n *\n * @param crypto Crypto provider\n * @param password Password\n * @param salt1 Salt 1\n * @param salt2 Salt 2\n */\nexport async function computePasswordHash(\n crypto: ICryptoProvider,\n password: Uint8Array,\n salt1: Uint8Array,\n salt2: Uint8Array,\n): Promise<Uint8Array> {\n const SH = (data: Uint8Array, salt: Uint8Array) => crypto.sha256(concatBuffers([salt, data, salt]))\n const PH1 = (pwd: Uint8Array, salt1: Uint8Array, salt2: Uint8Array) => SH(SH(pwd, salt1), salt2)\n\n return SH(await crypto.pbkdf2(PH1(password, salt1, salt2), salt1, 100000), salt2)\n}\n\n/**\n * Compute new password SRP hash as defined by MTProto.\n *\n * @param crypto Crypto provider\n * @param algo KDF algorithm\n * @param password Password\n */\nexport async function computeNewPasswordHash(\n crypto: ICryptoProvider,\n algo: tl.TypePasswordKdfAlgo,\n password: string,\n): Promise<Uint8Array> {\n assertTypeIs('account.getPassword', algo, 'passwordKdfAlgoSHA256SHA256PBKDF2HMACSHA512iter100000SHA256ModPow')\n\n const salt1 = new Uint8Array(algo.salt1.length + 32)\n salt1.set(algo.salt1)\n crypto.randomFill(salt1.subarray(algo.salt1.length))\n ;(algo as tl.Mutable<typeof algo>).salt1 = salt1\n\n const _x = await computePasswordHash(crypto, getPlatform().utf8Encode(password), algo.salt1, algo.salt2)\n\n const g = BigInt(algo.g)\n const p = bufferToBigInt(algo.p)\n const x = bufferToBigInt(_x)\n\n return bigIntToBuffer(bigIntModPow(g, x, p), 256)\n}\n\n/**\n * Compute SRP check parameters for 2fa password as defined by MTProto.\n *\n * @param crypto Crypto provider\n * @param request SRP request\n * @param password 2fa password\n */\nexport async function computeSrpParams(\n crypto: ICryptoProvider,\n request: tl.account.RawPassword,\n password: string,\n): Promise<tl.RawInputCheckPasswordSRP> {\n // nice naming thx durov\n if (\n !request.currentAlgo ||\n request.currentAlgo._ !== 'passwordKdfAlgoSHA256SHA256PBKDF2HMACSHA512iter100000SHA256ModPow'\n ) {\n throw new MtUnsupportedError(`Unknown algo ${request.currentAlgo?._}`)\n }\n\n const algo = request.currentAlgo\n\n // here and after: underscored variables are buffers, non-underscored are bigInts\n\n if (!request.srpB) {\n throw new MtSecurityError('SRP_B is not present in the request')\n }\n\n if (!request.srpId) {\n throw new MtSecurityError('SRP_ID is not present in the request')\n }\n\n const g = BigInt(algo.g)\n const _g = bigIntToBuffer(g, 256)\n const p = bufferToBigInt(algo.p)\n const gB = bufferToBigInt(request.srpB)\n\n const a = bufferToBigInt(crypto.randomBytes(256))\n const gA = bigIntModPow(g, a, p)\n const _gA = bigIntToBuffer(gA, 256)\n\n const H = (data: Uint8Array) => crypto.sha256(data)\n\n const _k = crypto.sha256(concatBuffers([algo.p, _g]))\n const _u = crypto.sha256(concatBuffers([_gA, request.srpB]))\n const _x = await computePasswordHash(crypto, getPlatform().utf8Encode(password), algo.salt1, algo.salt2)\n const k = bufferToBigInt(_k)\n const u = bufferToBigInt(_u)\n const x = bufferToBigInt(_x)\n\n const v = bigIntModPow(g, x, p)\n const kV = (k * v) % p\n\n let t = gB - kV\n if (t < 0n) t += p\n const sA = bigIntModPow(t, a + u * x, p)\n const _kA = H(bigIntToBuffer(sA, 256))\n\n const _M1 = H(concatBuffers([xorBuffer(H(algo.p), H(_g)), H(algo.salt1), H(algo.salt2), _gA, request.srpB, _kA]))\n\n return {\n _: 'inputCheckPasswordSRP',\n srpId: request.srpId,\n A: _gA,\n M1: _M1,\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../src/utils/crypto/utils.ts"],"names":[],"mappings":";;;AAAA;;;;;GAKG;AACH,SAAgB,SAAS,CAAC,IAAgB,EAAE,GAAe;IACvD,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IAEvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QAClC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAA;KAC5B;IAED,OAAO,GAAG,CAAA;AACd,CAAC;AARD,8BAQC;AAED;;;;;GAKG;AACH,SAAgB,gBAAgB,CAAC,IAAgB,EAAE,GAAe;IAC9D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QAClC,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAA;KACpB;AACL,CAAC;AAJD,4CAIC","sourcesContent":["/**\n * Perform XOR operation on two buffers and return the new buffer\n *\n * @param data Buffer to XOR\n * @param key Key to XOR with\n */\nexport function xorBuffer(data: Uint8Array, key: Uint8Array): Uint8Array {\n const ret = new Uint8Array(data.length)\n\n for (let i = 0; i < data.length; i++) {\n ret[i] = data[i] ^ key[i]\n }\n\n return ret\n}\n\n/**\n * Perform XOR operation on two buffers in-place\n *\n * @param data Buffer to XOR\n * @param key Key to XOR with\n */\nexport function xorBufferInPlace(data: Uint8Array, key: Uint8Array): void {\n for (let i = 0; i < data.length; i++) {\n data[i] ^= key[i]\n }\n}\n"]}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../src/utils/crypto/utils.ts"],"names":[],"mappings":";;;AAAA;;;;;GAKG;AACH,SAAgB,SAAS,CAAC,IAAgB,EAAE,GAAe;IACvD,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IAEvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACnC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAA;IAC7B,CAAC;IAED,OAAO,GAAG,CAAA;AACd,CAAC;AARD,8BAQC;AAED;;;;;GAKG;AACH,SAAgB,gBAAgB,CAAC,IAAgB,EAAE,GAAe;IAC9D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACnC,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAA;IACrB,CAAC;AACL,CAAC;AAJD,4CAIC","sourcesContent":["/**\n * Perform XOR operation on two buffers and return the new buffer\n *\n * @param data Buffer to XOR\n * @param key Key to XOR with\n */\nexport function xorBuffer(data: Uint8Array, key: Uint8Array): Uint8Array {\n const ret = new Uint8Array(data.length)\n\n for (let i = 0; i < data.length; i++) {\n ret[i] = data[i] ^ key[i]\n }\n\n return ret\n}\n\n/**\n * Perform XOR operation on two buffers in-place\n *\n * @param data Buffer to XOR\n * @param key Key to XOR with\n */\nexport function xorBufferInPlace(data: Uint8Array, key: Uint8Array): void {\n for (let i = 0; i < data.length; i++) {\n data[i] ^= key[i]\n }\n}\n"]}
package/cjs/utils/dcs.js CHANGED
@@ -6,7 +6,7 @@ function serializeBasicDcOption(dc) {
6
6
  const writer = tl_runtime_1.TlBinaryWriter.manual(64);
7
7
  const flags = (dc.ipv6 ? 1 : 0) | (dc.mediaOnly ? 2 : 0);
8
8
  writer.raw(new Uint8Array([
9
- 1,
9
+ 1, // version
10
10
  dc.id,
11
11
  flags,
12
12
  ]));
@@ -1 +1 @@
1
- {"version":3,"file":"dcs.js","sourceRoot":"","sources":["../../../src/utils/dcs.ts"],"names":[],"mappings":";;;AAAA,mDAAmE;AAUnE,SAAgB,sBAAsB,CAAC,EAAiB;IACpD,MAAM,MAAM,GAAG,2BAAc,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;IAExC,MAAM,KAAK,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IACxD,MAAM,CAAC,GAAG,CACN,IAAI,UAAU,CAAC;QACX,CAAC;QACD,EAAE,CAAC,EAAE;QACL,KAAK;KACR,CAAC,CACL,CAAA;IAED,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC,CAAA;IAC3B,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAA;IAEnB,OAAO,MAAM,CAAC,MAAM,EAAE,CAAA;AAC1B,CAAC;AAhBD,wDAgBC;AAED,SAAgB,kBAAkB,CAAC,IAAgB;IAC/C,MAAM,MAAM,GAAG,2BAAc,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IAE1C,MAAM,CAAC,OAAO,EAAE,EAAE,EAAE,KAAK,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;IAC1C,IAAI,OAAO,KAAK,CAAC;QAAE,OAAO,IAAI,CAAA;IAE9B,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,CAAA;IACjC,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,EAAE,CAAA;IAEzB,OAAO;QACH,EAAE;QACF,SAAS;QACT,IAAI;QACJ,IAAI,EAAE,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;QACvB,SAAS,EAAE,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;KAC/B,CAAA;AACL,CAAC;AAhBD,gDAgBC;AAOY,QAAA,mBAAmB,GAAc;IAC1C,IAAI,EAAE;QACF,SAAS,EAAE,gBAAgB;QAC3B,IAAI,EAAE,GAAG;QACT,EAAE,EAAE,CAAC;KACR;IACD,KAAK,EAAE;QACH,SAAS,EAAE,iBAAiB;QAC5B,IAAI,EAAE,GAAG;QACT,EAAE,EAAE,CAAC;QACL,SAAS,EAAE,IAAI;KAClB;CACJ,CAAA;AAEY,QAAA,uBAAuB,GAAc;IAC9C,IAAI,EAAE;QACF,SAAS,EAAE,yCAAyC;QACpD,IAAI,EAAE,IAAI;QACV,IAAI,EAAE,GAAG;QACT,EAAE,EAAE,CAAC;KACR;IACD,KAAK,EAAE;QACH,SAAS,EAAE,yCAAyC;QACpD,IAAI,EAAE,IAAI;QACV,IAAI,EAAE,GAAG;QACT,EAAE,EAAE,CAAC;QACL,SAAS,EAAE,IAAI;KAClB;CACJ,CAAA;AAEY,QAAA,aAAa,GAAc;IACpC,IAAI,EAAE;QACF,SAAS,EAAE,gBAAgB;QAC3B,IAAI,EAAE,GAAG;QACT,EAAE,EAAE,CAAC;KACR;IACD,KAAK,EAAE;QACH,SAAS,EAAE,gBAAgB;QAC3B,IAAI,EAAE,GAAG;QACT,EAAE,EAAE,CAAC;QACL,SAAS,EAAE,IAAI;KAClB;CACJ,CAAA;AAEY,QAAA,iBAAiB,GAAc;IACxC,IAAI,EAAE;QACF,SAAS,EAAE,sBAAsB;QACjC,IAAI,EAAE,GAAG;QACT,IAAI,EAAE,IAAI;QACV,EAAE,EAAE,CAAC;KACR;IACD,KAAK,EAAE;QACH,SAAS,EAAE,sBAAsB;QACjC,IAAI,EAAE,GAAG;QACT,IAAI,EAAE,IAAI;QACV,EAAE,EAAE,CAAC;QACL,SAAS,EAAE,IAAI;KAClB;CACJ,CAAA","sourcesContent":["import { TlBinaryReader, TlBinaryWriter } from '@mtcute/tl-runtime'\n\nexport interface BasicDcOption {\n ipAddress: string\n port: number\n id: number\n ipv6?: boolean\n mediaOnly?: boolean\n}\n\nexport function serializeBasicDcOption(dc: BasicDcOption): Uint8Array {\n const writer = TlBinaryWriter.manual(64)\n\n const flags = (dc.ipv6 ? 1 : 0) | (dc.mediaOnly ? 2 : 0)\n writer.raw(\n new Uint8Array([\n 1, // version\n dc.id,\n flags,\n ]),\n )\n\n writer.string(dc.ipAddress)\n writer.int(dc.port)\n\n return writer.result()\n}\n\nexport function parseBasicDcOption(data: Uint8Array): BasicDcOption | null {\n const reader = TlBinaryReader.manual(data)\n\n const [version, id, flags] = reader.raw(3)\n if (version !== 1) return null\n\n const ipAddress = reader.string()\n const port = reader.int()\n\n return {\n id,\n ipAddress,\n port,\n ipv6: (flags & 1) !== 0,\n mediaOnly: (flags & 2) !== 0,\n }\n}\n\nexport interface DcOptions {\n main: BasicDcOption\n media: BasicDcOption\n}\n\nexport const defaultProductionDc: DcOptions = {\n main: {\n ipAddress: '149.154.167.50',\n port: 443,\n id: 2,\n },\n media: {\n ipAddress: '149.154.167.222',\n port: 443,\n id: 2,\n mediaOnly: true,\n },\n}\n\nexport const defaultProductionIpv6Dc: DcOptions = {\n main: {\n ipAddress: '2001:067c:04e8:f002:0000:0000:0000:000a',\n ipv6: true,\n port: 443,\n id: 2,\n },\n media: {\n ipAddress: '2001:067c:04e8:f002:0000:0000:0000:000b',\n ipv6: true,\n port: 443,\n id: 2,\n mediaOnly: true,\n },\n}\n\nexport const defaultTestDc: DcOptions = {\n main: {\n ipAddress: '149.154.167.40',\n port: 443,\n id: 2,\n },\n media: {\n ipAddress: '149.154.167.40',\n port: 443,\n id: 2,\n mediaOnly: true,\n },\n}\n\nexport const defaultTestIpv6Dc: DcOptions = {\n main: {\n ipAddress: '2001:67c:4e8:f002::e',\n port: 443,\n ipv6: true,\n id: 2,\n },\n media: {\n ipAddress: '2001:67c:4e8:f002::e',\n port: 443,\n ipv6: true,\n id: 2,\n mediaOnly: true,\n },\n}\n"]}
1
+ {"version":3,"file":"dcs.js","sourceRoot":"","sources":["../../../src/utils/dcs.ts"],"names":[],"mappings":";;;AAAA,mDAAmE;AAUnE,SAAgB,sBAAsB,CAAC,EAAiB;IACpD,MAAM,MAAM,GAAG,2BAAc,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;IAExC,MAAM,KAAK,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IACxD,MAAM,CAAC,GAAG,CACN,IAAI,UAAU,CAAC;QACX,CAAC,EAAE,UAAU;QACb,EAAE,CAAC,EAAE;QACL,KAAK;KACR,CAAC,CACL,CAAA;IAED,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC,CAAA;IAC3B,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAA;IAEnB,OAAO,MAAM,CAAC,MAAM,EAAE,CAAA;AAC1B,CAAC;AAhBD,wDAgBC;AAED,SAAgB,kBAAkB,CAAC,IAAgB;IAC/C,MAAM,MAAM,GAAG,2BAAc,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IAE1C,MAAM,CAAC,OAAO,EAAE,EAAE,EAAE,KAAK,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;IAC1C,IAAI,OAAO,KAAK,CAAC;QAAE,OAAO,IAAI,CAAA;IAE9B,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,CAAA;IACjC,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,EAAE,CAAA;IAEzB,OAAO;QACH,EAAE;QACF,SAAS;QACT,IAAI;QACJ,IAAI,EAAE,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;QACvB,SAAS,EAAE,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;KAC/B,CAAA;AACL,CAAC;AAhBD,gDAgBC;AAOY,QAAA,mBAAmB,GAAc;IAC1C,IAAI,EAAE;QACF,SAAS,EAAE,gBAAgB;QAC3B,IAAI,EAAE,GAAG;QACT,EAAE,EAAE,CAAC;KACR;IACD,KAAK,EAAE;QACH,SAAS,EAAE,iBAAiB;QAC5B,IAAI,EAAE,GAAG;QACT,EAAE,EAAE,CAAC;QACL,SAAS,EAAE,IAAI;KAClB;CACJ,CAAA;AAEY,QAAA,uBAAuB,GAAc;IAC9C,IAAI,EAAE;QACF,SAAS,EAAE,yCAAyC;QACpD,IAAI,EAAE,IAAI;QACV,IAAI,EAAE,GAAG;QACT,EAAE,EAAE,CAAC;KACR;IACD,KAAK,EAAE;QACH,SAAS,EAAE,yCAAyC;QACpD,IAAI,EAAE,IAAI;QACV,IAAI,EAAE,GAAG;QACT,EAAE,EAAE,CAAC;QACL,SAAS,EAAE,IAAI;KAClB;CACJ,CAAA;AAEY,QAAA,aAAa,GAAc;IACpC,IAAI,EAAE;QACF,SAAS,EAAE,gBAAgB;QAC3B,IAAI,EAAE,GAAG;QACT,EAAE,EAAE,CAAC;KACR;IACD,KAAK,EAAE;QACH,SAAS,EAAE,gBAAgB;QAC3B,IAAI,EAAE,GAAG;QACT,EAAE,EAAE,CAAC;QACL,SAAS,EAAE,IAAI;KAClB;CACJ,CAAA;AAEY,QAAA,iBAAiB,GAAc;IACxC,IAAI,EAAE;QACF,SAAS,EAAE,sBAAsB;QACjC,IAAI,EAAE,GAAG;QACT,IAAI,EAAE,IAAI;QACV,EAAE,EAAE,CAAC;KACR;IACD,KAAK,EAAE;QACH,SAAS,EAAE,sBAAsB;QACjC,IAAI,EAAE,GAAG;QACT,IAAI,EAAE,IAAI;QACV,EAAE,EAAE,CAAC;QACL,SAAS,EAAE,IAAI;KAClB;CACJ,CAAA","sourcesContent":["import { TlBinaryReader, TlBinaryWriter } from '@mtcute/tl-runtime'\n\nexport interface BasicDcOption {\n ipAddress: string\n port: number\n id: number\n ipv6?: boolean\n mediaOnly?: boolean\n}\n\nexport function serializeBasicDcOption(dc: BasicDcOption): Uint8Array {\n const writer = TlBinaryWriter.manual(64)\n\n const flags = (dc.ipv6 ? 1 : 0) | (dc.mediaOnly ? 2 : 0)\n writer.raw(\n new Uint8Array([\n 1, // version\n dc.id,\n flags,\n ]),\n )\n\n writer.string(dc.ipAddress)\n writer.int(dc.port)\n\n return writer.result()\n}\n\nexport function parseBasicDcOption(data: Uint8Array): BasicDcOption | null {\n const reader = TlBinaryReader.manual(data)\n\n const [version, id, flags] = reader.raw(3)\n if (version !== 1) return null\n\n const ipAddress = reader.string()\n const port = reader.int()\n\n return {\n id,\n ipAddress,\n port,\n ipv6: (flags & 1) !== 0,\n mediaOnly: (flags & 2) !== 0,\n }\n}\n\nexport interface DcOptions {\n main: BasicDcOption\n media: BasicDcOption\n}\n\nexport const defaultProductionDc: DcOptions = {\n main: {\n ipAddress: '149.154.167.50',\n port: 443,\n id: 2,\n },\n media: {\n ipAddress: '149.154.167.222',\n port: 443,\n id: 2,\n mediaOnly: true,\n },\n}\n\nexport const defaultProductionIpv6Dc: DcOptions = {\n main: {\n ipAddress: '2001:067c:04e8:f002:0000:0000:0000:000a',\n ipv6: true,\n port: 443,\n id: 2,\n },\n media: {\n ipAddress: '2001:067c:04e8:f002:0000:0000:0000:000b',\n ipv6: true,\n port: 443,\n id: 2,\n mediaOnly: true,\n },\n}\n\nexport const defaultTestDc: DcOptions = {\n main: {\n ipAddress: '149.154.167.40',\n port: 443,\n id: 2,\n },\n media: {\n ipAddress: '149.154.167.40',\n port: 443,\n id: 2,\n mediaOnly: true,\n },\n}\n\nexport const defaultTestIpv6Dc: DcOptions = {\n main: {\n ipAddress: '2001:67c:4e8:f002::e',\n port: 443,\n ipv6: true,\n id: 2,\n },\n media: {\n ipAddress: '2001:67c:4e8:f002::e',\n port: 443,\n ipv6: true,\n id: 2,\n mediaOnly: true,\n },\n}\n"]}
@@ -16,10 +16,16 @@ function arraycopy(src, srcPos, dest, destPos, length) {
16
16
  * Based on Java implementation
17
17
  */
18
18
  class Deque {
19
+ maxLength;
20
+ // another implementation variant would be to use
21
+ // blocks of fixed size instead of a single array
22
+ // to avoid copying stuff around
23
+ _elements;
24
+ _head = 0;
25
+ _tail = 0;
26
+ _capacity;
19
27
  constructor(maxLength = Infinity, minCapacity = maxLength === Infinity ? MIN_INITIAL_CAPACITY : maxLength) {
20
28
  this.maxLength = maxLength;
21
- this._head = 0;
22
- this._tail = 0;
23
29
  let capacity = minCapacity;
24
30
  if (capacity < MIN_INITIAL_CAPACITY) {
25
31
  capacity = MIN_INITIAL_CAPACITY;
@@ -1 +1 @@
1
- {"version":3,"file":"deque.js","sourceRoot":"","sources":["../../../src/utils/deque.ts"],"names":[],"mappings":"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","sourcesContent":["// ^^ because of performance reasons\nconst MIN_INITIAL_CAPACITY = 8\n\n// System.arraycopy from java\nfunction arraycopy<T>(src: T[], srcPos: number, dest: T[], destPos: number, length: number) {\n for (let i = 0; i < length; i++) {\n dest[destPos + i] = src[srcPos + i]\n }\n}\n\n/**\n * Deque implementation.\n * `undefined` values are not allowed\n *\n * Based on Java implementation\n */\nexport class Deque<T> {\n // another implementation variant would be to use\n // blocks of fixed size instead of a single array\n // to avoid copying stuff around\n protected _elements: (T | undefined)[]\n protected _head = 0\n protected _tail = 0\n protected _capacity: number\n\n constructor(\n readonly maxLength = Infinity,\n minCapacity = maxLength === Infinity ? MIN_INITIAL_CAPACITY : maxLength,\n ) {\n let capacity = minCapacity\n\n if (capacity < MIN_INITIAL_CAPACITY) {\n capacity = MIN_INITIAL_CAPACITY\n }\n if (capacity !== MIN_INITIAL_CAPACITY) {\n // Find the best power of two to hold elements.\n capacity |= capacity >>> 1\n capacity |= capacity >>> 2\n capacity |= capacity >>> 4\n capacity |= capacity >>> 8\n capacity |= capacity >>> 16\n capacity += 1\n\n if (capacity < 0) {\n // too many\n capacity >>>= 1\n }\n }\n\n this._elements = new Array<T | undefined>(capacity)\n this._capacity = capacity\n }\n\n protected _resize() {\n const p = this._head\n const n = this._capacity\n const r = n - p // number of elements to the right of the head\n\n const newCapacity = n << 1\n if (newCapacity < 0) throw new Error('Deque is too big')\n\n const arr = new Array<T | undefined>(newCapacity)\n\n // copy items to the new array\n // copy head till the end of arr\n arraycopy(this._elements, p, arr, 0, r)\n // copy from start to tail\n arraycopy(this._elements, 0, arr, r, p)\n\n this._elements = arr\n this._head = 0\n this._tail = n\n this._capacity = newCapacity\n }\n\n pushBack(item: T): void {\n if (item === undefined) throw new Error('item can not be undefined')\n\n this._elements[this._tail] = item\n\n if ((this._tail = (this._tail + 1) & (this._capacity - 1)) === this._head) {\n this._resize()\n }\n\n if (this.length > this.maxLength) {\n this.popFront()\n }\n }\n\n pushFront(item: T): void {\n if (item === undefined) throw new Error('item can not be undefined')\n\n this._elements[(this._head = (this._head - 1) & (this._capacity - 1))] = item\n\n if (this._head === this._tail) {\n this._resize()\n }\n\n if (this.length > this.maxLength) {\n this.popBack()\n }\n }\n\n popFront(): T | undefined {\n const h = this._head\n const res = this._elements[h]\n if (res === undefined) return undefined\n\n this._elements[h] = undefined\n this._head = (h + 1) & (this._capacity - 1)\n\n return res\n }\n\n popBack(): T | undefined {\n const t = (this._tail - 1) & (this._capacity - 1)\n const res = this._elements[t]\n if (res === undefined) return undefined\n\n this._elements[t] = undefined\n this._tail = t\n\n return res\n }\n\n peekFront(): T | undefined {\n return this._elements[this._head]\n }\n\n peekBack(): T | undefined {\n return this._elements[(this._tail - 1) & (this._capacity - 1)]\n }\n\n get length(): number {\n return (this._tail - this._head) & (this._capacity - 1)\n }\n\n toArray(): T[] {\n const sz = this.length\n if (sz === 0) return []\n\n const arr = new Array(sz)\n\n if (this._head < this._tail) {\n // copy as-is, head to tail\n arraycopy(this._elements, this._head, arr, 0, sz)\n } else {\n const headPortion = this._capacity - this._head\n\n // copy from head to end\n arraycopy(this._elements, this._head, arr, 0, headPortion)\n // copy from start to tail\n arraycopy(this._elements, 0, arr, headPortion, this._tail)\n }\n\n return arr as T[]\n }\n\n protected _delete(i: number): void {\n const els = this._elements\n const mask = this._capacity - 1\n const h = this._head\n const t = this._tail\n const front = (i - h) & mask\n const back = (t - i) & mask\n\n if (front < back) {\n if (h <= i) {\n arraycopy(els, h, els, h + 1, front)\n } else {\n // wrap\n arraycopy(els, 0, els, 1, i)\n els[0] = els[mask]\n arraycopy(els, h, els, h + 1, mask - h)\n }\n els[h] = undefined\n this._head = (h + 1) & mask\n } else if (i < t) {\n // copy null tail as well\n arraycopy(els, i + 1, els, i, back)\n this._tail = t - 1\n } else {\n // wrap\n arraycopy(els, i + 1, els, i, mask - i)\n els[mask] = els[0]\n arraycopy(els, 1, els, 0, t)\n this._tail = (t - 1) & mask\n }\n }\n\n remove(item: T): void {\n const mask = this._capacity - 1\n let i = this._head\n let val: T | undefined\n\n while ((val = this._elements[i]) !== undefined) {\n if (item === val) {\n this._delete(i)\n\n return\n }\n i = (i + 1) & mask\n }\n }\n\n removeBy(pred: (it: T) => boolean): void {\n const mask = this._capacity - 1\n let i = this._head\n let val: T | undefined\n\n while ((val = this._elements[i]) !== undefined) {\n if (pred(val)) {\n this._delete(i)\n\n return\n }\n i = (i + 1) & mask\n }\n }\n\n at(idx: number): T | undefined {\n return this._elements[(this._head + idx) & (this._capacity - 1)]\n }\n\n *iter(): IterableIterator<T> {\n const sz = this.length\n if (sz === 0) return\n\n if (this._head < this._tail) {\n // head to tail\n for (let i = 0; i < sz; i++) {\n yield this._elements[this._head + i]!\n }\n } else {\n const headPortion = this._capacity - this._head\n\n // head to end\n for (let i = 0; i < headPortion; i++) {\n yield this._elements[this._head + i]!\n }\n // start to tail\n for (let i = 0; i < this._tail; i++) {\n yield this._elements[i]!\n }\n }\n }\n\n clear(): void {\n this._elements = new Array<T | undefined>(this._capacity)\n this._head = this._tail = 0\n }\n}\n"]}
1
+ {"version":3,"file":"deque.js","sourceRoot":"","sources":["../../../src/utils/deque.ts"],"names":[],"mappings":"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","sourcesContent":["// ^^ because of performance reasons\nconst MIN_INITIAL_CAPACITY = 8\n\n// System.arraycopy from java\nfunction arraycopy<T>(src: T[], srcPos: number, dest: T[], destPos: number, length: number) {\n for (let i = 0; i < length; i++) {\n dest[destPos + i] = src[srcPos + i]\n }\n}\n\n/**\n * Deque implementation.\n * `undefined` values are not allowed\n *\n * Based on Java implementation\n */\nexport class Deque<T> {\n // another implementation variant would be to use\n // blocks of fixed size instead of a single array\n // to avoid copying stuff around\n protected _elements: (T | undefined)[]\n protected _head = 0\n protected _tail = 0\n protected _capacity: number\n\n constructor(\n readonly maxLength = Infinity,\n minCapacity = maxLength === Infinity ? MIN_INITIAL_CAPACITY : maxLength,\n ) {\n let capacity = minCapacity\n\n if (capacity < MIN_INITIAL_CAPACITY) {\n capacity = MIN_INITIAL_CAPACITY\n }\n if (capacity !== MIN_INITIAL_CAPACITY) {\n // Find the best power of two to hold elements.\n capacity |= capacity >>> 1\n capacity |= capacity >>> 2\n capacity |= capacity >>> 4\n capacity |= capacity >>> 8\n capacity |= capacity >>> 16\n capacity += 1\n\n if (capacity < 0) {\n // too many\n capacity >>>= 1\n }\n }\n\n this._elements = new Array<T | undefined>(capacity)\n this._capacity = capacity\n }\n\n protected _resize() {\n const p = this._head\n const n = this._capacity\n const r = n - p // number of elements to the right of the head\n\n const newCapacity = n << 1\n if (newCapacity < 0) throw new Error('Deque is too big')\n\n const arr = new Array<T | undefined>(newCapacity)\n\n // copy items to the new array\n // copy head till the end of arr\n arraycopy(this._elements, p, arr, 0, r)\n // copy from start to tail\n arraycopy(this._elements, 0, arr, r, p)\n\n this._elements = arr\n this._head = 0\n this._tail = n\n this._capacity = newCapacity\n }\n\n pushBack(item: T): void {\n if (item === undefined) throw new Error('item can not be undefined')\n\n this._elements[this._tail] = item\n\n if ((this._tail = (this._tail + 1) & (this._capacity - 1)) === this._head) {\n this._resize()\n }\n\n if (this.length > this.maxLength) {\n this.popFront()\n }\n }\n\n pushFront(item: T): void {\n if (item === undefined) throw new Error('item can not be undefined')\n\n this._elements[(this._head = (this._head - 1) & (this._capacity - 1))] = item\n\n if (this._head === this._tail) {\n this._resize()\n }\n\n if (this.length > this.maxLength) {\n this.popBack()\n }\n }\n\n popFront(): T | undefined {\n const h = this._head\n const res = this._elements[h]\n if (res === undefined) return undefined\n\n this._elements[h] = undefined\n this._head = (h + 1) & (this._capacity - 1)\n\n return res\n }\n\n popBack(): T | undefined {\n const t = (this._tail - 1) & (this._capacity - 1)\n const res = this._elements[t]\n if (res === undefined) return undefined\n\n this._elements[t] = undefined\n this._tail = t\n\n return res\n }\n\n peekFront(): T | undefined {\n return this._elements[this._head]\n }\n\n peekBack(): T | undefined {\n return this._elements[(this._tail - 1) & (this._capacity - 1)]\n }\n\n get length(): number {\n return (this._tail - this._head) & (this._capacity - 1)\n }\n\n toArray(): T[] {\n const sz = this.length\n if (sz === 0) return []\n\n const arr = new Array(sz)\n\n if (this._head < this._tail) {\n // copy as-is, head to tail\n arraycopy(this._elements, this._head, arr, 0, sz)\n } else {\n const headPortion = this._capacity - this._head\n\n // copy from head to end\n arraycopy(this._elements, this._head, arr, 0, headPortion)\n // copy from start to tail\n arraycopy(this._elements, 0, arr, headPortion, this._tail)\n }\n\n return arr as T[]\n }\n\n protected _delete(i: number): void {\n const els = this._elements\n const mask = this._capacity - 1\n const h = this._head\n const t = this._tail\n const front = (i - h) & mask\n const back = (t - i) & mask\n\n if (front < back) {\n if (h <= i) {\n arraycopy(els, h, els, h + 1, front)\n } else {\n // wrap\n arraycopy(els, 0, els, 1, i)\n els[0] = els[mask]\n arraycopy(els, h, els, h + 1, mask - h)\n }\n els[h] = undefined\n this._head = (h + 1) & mask\n } else if (i < t) {\n // copy null tail as well\n arraycopy(els, i + 1, els, i, back)\n this._tail = t - 1\n } else {\n // wrap\n arraycopy(els, i + 1, els, i, mask - i)\n els[mask] = els[0]\n arraycopy(els, 1, els, 0, t)\n this._tail = (t - 1) & mask\n }\n }\n\n remove(item: T): void {\n const mask = this._capacity - 1\n let i = this._head\n let val: T | undefined\n\n while ((val = this._elements[i]) !== undefined) {\n if (item === val) {\n this._delete(i)\n\n return\n }\n i = (i + 1) & mask\n }\n }\n\n removeBy(pred: (it: T) => boolean): void {\n const mask = this._capacity - 1\n let i = this._head\n let val: T | undefined\n\n while ((val = this._elements[i]) !== undefined) {\n if (pred(val)) {\n this._delete(i)\n\n return\n }\n i = (i + 1) & mask\n }\n }\n\n at(idx: number): T | undefined {\n return this._elements[(this._head + idx) & (this._capacity - 1)]\n }\n\n *iter(): IterableIterator<T> {\n const sz = this.length\n if (sz === 0) return\n\n if (this._head < this._tail) {\n // head to tail\n for (let i = 0; i < sz; i++) {\n yield this._elements[this._head + i]!\n }\n } else {\n const headPortion = this._capacity - this._head\n\n // head to end\n for (let i = 0; i < headPortion; i++) {\n yield this._elements[this._head + i]!\n }\n // start to tail\n for (let i = 0; i < this._tail; i++) {\n yield this._elements[i]!\n }\n }\n }\n\n clear(): void {\n this._elements = new Array<T | undefined>(this._capacity)\n this._head = this._tail = 0\n }\n}\n"]}
@@ -6,8 +6,11 @@ exports.EarlyTimer = void 0;
6
6
  * to earlier time
7
7
  */
8
8
  class EarlyTimer {
9
+ _timeout;
10
+ _immediate;
11
+ _timeoutTs;
12
+ _handler = () => { };
9
13
  constructor() {
10
- this._handler = () => { };
11
14
  this.emitNow = this.emitNow.bind(this);
12
15
  }
13
16
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"early-timer.js","sourceRoot":"","sources":["../../../src/utils/early-timer.ts"],"names":[],"mappings":";;;AAAA;;;GAGG;AACH,MAAa,UAAU;IAOnB;QAFQ,aAAQ,GAAe,GAAG,EAAE,GAAE,CAAC,CAAA;QAGnC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAC1C,CAAC;IAED;;;OAGG;IACH,YAAY;QACR,IAAI,IAAI,CAAC,UAAU;YAAE,OAAM;QAE3B,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QAC3B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QAE5B,IAAI,OAAO,YAAY,KAAK,WAAW,EAAE;YACrC,IAAI,CAAC,UAAU,GAAG,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;SAC/C;aAAM;YACH,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAA;SAC9C;IACL,CAAC;IAED;;;;;;OAMG;IACH,cAAc,CAAC,EAAU;QACrB,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAA;IAC3C,CAAC;IAED;;;;OAIG;IACH,UAAU,CAAC,EAAU;QACjB,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE;YAC1C,IAAI,CAAC,KAAK,EAAE,CAAA;YACZ,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAA;YACzD,IAAI,CAAC,UAAU,GAAG,EAAE,CAAA;SACvB;IACL,CAAC;IAED;;OAEG;IACH,OAAO;QACH,IAAI,CAAC,KAAK,EAAE,CAAA;QACZ,IAAI,CAAC,QAAQ,EAAE,CAAA;IACnB,CAAC;IAED;;OAEG;IACH,KAAK;QACD,IAAI,IAAI,CAAC,UAAU,EAAE;YACjB,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;YAC/B,IAAI,CAAC,UAAU,GAAG,SAAS,CAAA;SAC9B;aAAM;YACH,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;SAC9B;QACD,IAAI,CAAC,UAAU,GAAG,SAAS,CAAA;IAC/B,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,OAAmB;QACzB,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAA;IAC3B,CAAC;CACJ;AA/ED,gCA+EC","sourcesContent":["/**\n * Wrapper over JS timers that allows re-scheduling them\n * to earlier time\n */\nexport class EarlyTimer {\n private _timeout?: NodeJS.Timeout\n private _immediate?: NodeJS.Immediate\n private _timeoutTs?: number\n\n private _handler: () => void = () => {}\n\n constructor() {\n this.emitNow = this.emitNow.bind(this)\n }\n\n /**\n * Emit the timer when the event loop is idle\n * (basically `setImmediate()`)\n */\n emitWhenIdle(): void {\n if (this._immediate) return\n\n clearTimeout(this._timeout)\n this._timeoutTs = Date.now()\n\n if (typeof setImmediate !== 'undefined') {\n this._immediate = setImmediate(this.emitNow)\n } else {\n this._timeout = setTimeout(this.emitNow, 0)\n }\n }\n\n /**\n * Emit the timer before the next given milliseconds\n *\n * Shorthand for `emitBefore(Date.now() + ms)`\n *\n * @param ms Milliseconds to schedule for\n */\n emitBeforeNext(ms: number): void {\n return this.emitBefore(Date.now() + ms)\n }\n\n /**\n * Emit the timer before the given time\n *\n * @param ts Unix time in MS\n */\n emitBefore(ts: number): void {\n if (!this._timeoutTs || ts < this._timeoutTs) {\n this.reset()\n this._timeout = setTimeout(this.emitNow, ts - Date.now())\n this._timeoutTs = ts\n }\n }\n\n /**\n * Emit the timer right now\n */\n emitNow(): void {\n this.reset()\n this._handler()\n }\n\n /**\n * Cancel the timer\n */\n reset(): void {\n if (this._immediate) {\n clearImmediate(this._immediate)\n this._immediate = undefined\n } else {\n clearTimeout(this._timeout)\n }\n this._timeoutTs = undefined\n }\n\n /**\n * Set timeout handler\n */\n onTimeout(handler: () => void): void {\n this._handler = handler\n }\n}\n"]}
1
+ {"version":3,"file":"early-timer.js","sourceRoot":"","sources":["../../../src/utils/early-timer.ts"],"names":[],"mappings":";;;AAAA;;;GAGG;AACH,MAAa,UAAU;IACX,QAAQ,CAAiB;IACzB,UAAU,CAAmB;IAC7B,UAAU,CAAS;IAEnB,QAAQ,GAAe,GAAG,EAAE,GAAE,CAAC,CAAA;IAEvC;QACI,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAC1C,CAAC;IAED;;;OAGG;IACH,YAAY;QACR,IAAI,IAAI,CAAC,UAAU;YAAE,OAAM;QAE3B,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QAC3B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QAE5B,IAAI,OAAO,YAAY,KAAK,WAAW,EAAE,CAAC;YACtC,IAAI,CAAC,UAAU,GAAG,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QAChD,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAA;QAC/C,CAAC;IACL,CAAC;IAED;;;;;;OAMG;IACH,cAAc,CAAC,EAAU;QACrB,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAA;IAC3C,CAAC;IAED;;;;OAIG;IACH,UAAU,CAAC,EAAU;QACjB,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;YAC3C,IAAI,CAAC,KAAK,EAAE,CAAA;YACZ,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAA;YACzD,IAAI,CAAC,UAAU,GAAG,EAAE,CAAA;QACxB,CAAC;IACL,CAAC;IAED;;OAEG;IACH,OAAO;QACH,IAAI,CAAC,KAAK,EAAE,CAAA;QACZ,IAAI,CAAC,QAAQ,EAAE,CAAA;IACnB,CAAC;IAED;;OAEG;IACH,KAAK;QACD,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YAClB,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;YAC/B,IAAI,CAAC,UAAU,GAAG,SAAS,CAAA;QAC/B,CAAC;aAAM,CAAC;YACJ,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QAC/B,CAAC;QACD,IAAI,CAAC,UAAU,GAAG,SAAS,CAAA;IAC/B,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,OAAmB;QACzB,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAA;IAC3B,CAAC;CACJ;AA/ED,gCA+EC","sourcesContent":["/**\n * Wrapper over JS timers that allows re-scheduling them\n * to earlier time\n */\nexport class EarlyTimer {\n private _timeout?: NodeJS.Timeout\n private _immediate?: NodeJS.Immediate\n private _timeoutTs?: number\n\n private _handler: () => void = () => {}\n\n constructor() {\n this.emitNow = this.emitNow.bind(this)\n }\n\n /**\n * Emit the timer when the event loop is idle\n * (basically `setImmediate()`)\n */\n emitWhenIdle(): void {\n if (this._immediate) return\n\n clearTimeout(this._timeout)\n this._timeoutTs = Date.now()\n\n if (typeof setImmediate !== 'undefined') {\n this._immediate = setImmediate(this.emitNow)\n } else {\n this._timeout = setTimeout(this.emitNow, 0)\n }\n }\n\n /**\n * Emit the timer before the next given milliseconds\n *\n * Shorthand for `emitBefore(Date.now() + ms)`\n *\n * @param ms Milliseconds to schedule for\n */\n emitBeforeNext(ms: number): void {\n return this.emitBefore(Date.now() + ms)\n }\n\n /**\n * Emit the timer before the given time\n *\n * @param ts Unix time in MS\n */\n emitBefore(ts: number): void {\n if (!this._timeoutTs || ts < this._timeoutTs) {\n this.reset()\n this._timeout = setTimeout(this.emitNow, ts - Date.now())\n this._timeoutTs = ts\n }\n }\n\n /**\n * Emit the timer right now\n */\n emitNow(): void {\n this.reset()\n this._handler()\n }\n\n /**\n * Cancel the timer\n */\n reset(): void {\n if (this._immediate) {\n clearImmediate(this._immediate)\n this._immediate = undefined\n } else {\n clearTimeout(this._timeout)\n }\n this._timeoutTs = undefined\n }\n\n /**\n * Set timeout handler\n */\n onTimeout(handler: () => void): void {\n this._handler = handler\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"error-reporting.js","sourceRoot":"","sources":["../../../src/utils/error-reporting.ts"],"names":[],"mappings":";;;AAIA,SAAgB,kBAAkB,CAAC,GAAW,EAAE,KAAkB,EAAE,MAAc;IAC9E,IAAI,OAAO,KAAK,KAAK,UAAU;QAAE,OAAM;IAEvC,KAAK,CAAC,qCAAqC,KAAK,CAAC,IAAI,WAAW,MAAM,UAAU,KAAK,CAAC,IAAI,EAAE,CAAC;SACxF,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;SACrB,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE;QACR,IAAI,CAAC,CAAC,EAAE,EAAE;YACN,GAAG,CAAC,IAAI,CAAC,8CAA8C,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAA;SACjF;aAAM;YACH,GAAG,CAAC,IAAI,CACJ,wFAAwF,EACxF,KAAK,CAAC,IAAI,CACb,CAAA;SACJ;IACL,CAAC,CAAC;SACD,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;QACT,GAAG,CAAC,KAAK,CAAC,0CAA0C,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;IACxE,CAAC,CAAC,CAAA;AACV,CAAC;AAlBD,gDAkBC","sourcesContent":["import { tl } from '@mtcute/tl'\n\nimport { Logger } from './logger.js'\n\nexport function reportUnknownError(log: Logger, error: tl.RpcError, method: string): void {\n if (typeof fetch !== 'function') return\n\n fetch(`https://rpc.pwrtelegram.xyz/?code=${error.code}&method=${method}&error=${error.text}`)\n .then((r) => r.json())\n .then((r) => {\n if (r.ok) {\n log.info('telerpc responded with error info for %s: %s', error.text, r.result)\n } else {\n log.info(\n 'Reported error %s to telerpc. You can disable this using `enableErrorReporting: false`',\n error.text,\n )\n }\n })\n .catch((e) => {\n log.debug('failed to report error %s to telerpc: %s', error.text, e)\n })\n}\n"]}
1
+ {"version":3,"file":"error-reporting.js","sourceRoot":"","sources":["../../../src/utils/error-reporting.ts"],"names":[],"mappings":";;;AAIA,SAAgB,kBAAkB,CAAC,GAAW,EAAE,KAAkB,EAAE,MAAc;IAC9E,IAAI,OAAO,KAAK,KAAK,UAAU;QAAE,OAAM;IAEvC,KAAK,CAAC,qCAAqC,KAAK,CAAC,IAAI,WAAW,MAAM,UAAU,KAAK,CAAC,IAAI,EAAE,CAAC;SACxF,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;SACrB,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE;QACR,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC;YACP,GAAG,CAAC,IAAI,CAAC,8CAA8C,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAA;QAClF,CAAC;aAAM,CAAC;YACJ,GAAG,CAAC,IAAI,CACJ,wFAAwF,EACxF,KAAK,CAAC,IAAI,CACb,CAAA;QACL,CAAC;IACL,CAAC,CAAC;SACD,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;QACT,GAAG,CAAC,KAAK,CAAC,0CAA0C,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;IACxE,CAAC,CAAC,CAAA;AACV,CAAC;AAlBD,gDAkBC","sourcesContent":["import { tl } from '@mtcute/tl'\n\nimport { Logger } from './logger.js'\n\nexport function reportUnknownError(log: Logger, error: tl.RpcError, method: string): void {\n if (typeof fetch !== 'function') return\n\n fetch(`https://rpc.pwrtelegram.xyz/?code=${error.code}&method=${method}&error=${error.text}`)\n .then((r) => r.json())\n .then((r) => {\n if (r.ok) {\n log.info('telerpc responded with error info for %s: %s', error.text, r.result)\n } else {\n log.info(\n 'Reported error %s to telerpc. You can disable this using `enableErrorReporting: false`',\n error.text,\n )\n }\n })\n .catch((e) => {\n log.debug('failed to report error %s to telerpc: %s', error.text, e)\n })\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"function-utils.js","sourceRoot":"","sources":["../../../src/utils/function-utils.ts"],"names":[],"mappings":";;;AAKA;;;;;;;;;;;GAWG;AACH,SAAgB,QAAQ,CAAC,IAAgB,EAAE,KAAa;IACpD,IAAI,OAA8B,CAAA;IAElC,MAAM,GAAG,GAAsB;QAC3B,IAAI,OAAO,EAAE;YACT,OAAM;SACT;QAED,MAAM,KAAK,GAAG,GAAG,EAAE;YACf,OAAO,GAAG,IAAI,CAAA;YACd,IAAI,EAAE,CAAA;QACV,CAAC,CAAA;QACD,OAAO,GAAG,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;IACtC,CAAC,CAAA;IAED,GAAG,CAAC,KAAK,GAAG,GAAG,EAAE;QACb,IAAI,OAAO,EAAE;YACT,YAAY,CAAC,OAAO,CAAC,CAAA;YACrB,OAAO,GAAG,IAAI,CAAA;SACjB;IACL,CAAC,CAAA;IAED,OAAO,GAAG,CAAA;AACd,CAAC;AAvBD,4BAuBC;AAED,SAAgB,eAAe,CAA4C,IAAO;IAC9E,IAAI,cAAc,GAAwB,IAAI,CAAA;IAC9C,IAAI,QAAQ,GAAG,KAAK,CAAA;IAEpB,MAAM,GAAG,GAAG,UAAU,GAAG,IAAW;QAChC,IAAI,QAAQ;YAAE,OAAO,OAAO,CAAC,OAAO,EAAE,CAAA;QAEtC,IAAI,cAAc,EAAE;YAChB,OAAO,cAAc,CAAA;SACxB;QAED,iEAAiE;QACjE,cAAc,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,CAAA;QAC9B,KAAK,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE;YAC1B,cAAc,GAAG,IAAI,CAAA;YACrB,QAAQ,GAAG,IAAI,CAAA;QACnB,CAAC,CAAC,CAAA;QAEF,OAAO,cAAc,CAAA;IACzB,CAAM,CAAA;IAEN,OAAO;QACH,GAAG;QACH,QAAQ,EAAE,GAAG,EAAE,CAAC,QAAQ;QACxB,IAAI,EAAE,GAAG,EAAE,CAAC,cAAc;QAC1B,KAAK,EAAE,GAAG,EAAE;YACR,QAAQ,GAAG,KAAK,CAAA;QACpB,CAAC;KACJ,CAAA;AACL,CAAC;AA7BD,0CA6BC","sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nexport type ThrottledFunction = (() => void) & {\n reset: () => void\n}\n\n/**\n * Throttle a function with a given delay.\n * Similar to lodash.\n *\n * Throttling `F` for a delay of `D` means that\n * `F` will be called no more than 1 time every `D`.\n * In this implementation, `F` is called after `D`\n * has passed since the previous non-throttled invocation\n *\n * @param func Function to throttle\n * @param delay Throttle delay\n */\nexport function throttle(func: () => void, delay: number): ThrottledFunction {\n let timeout: NodeJS.Timeout | null\n\n const res: ThrottledFunction = function () {\n if (timeout) {\n return\n }\n\n const later = () => {\n timeout = null\n func()\n }\n timeout = setTimeout(later, delay)\n }\n\n res.reset = () => {\n if (timeout) {\n clearTimeout(timeout)\n timeout = null\n }\n }\n\n return res\n}\n\nexport function asyncResettable<T extends(...args: any[]) => Promise<any>>(func: T) {\n let runningPromise: Promise<any> | null = null\n let finished = false\n\n const run = function (...args: any[]) {\n if (finished) return Promise.resolve()\n\n if (runningPromise) {\n return runningPromise\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n runningPromise = func(...args)\n void runningPromise.then(() => {\n runningPromise = null\n finished = true\n })\n\n return runningPromise\n } as T\n\n return {\n run,\n finished: () => finished,\n wait: () => runningPromise,\n reset: () => {\n finished = false\n },\n }\n}\n"]}
1
+ {"version":3,"file":"function-utils.js","sourceRoot":"","sources":["../../../src/utils/function-utils.ts"],"names":[],"mappings":";;;AAKA;;;;;;;;;;;GAWG;AACH,SAAgB,QAAQ,CAAC,IAAgB,EAAE,KAAa;IACpD,IAAI,OAA8B,CAAA;IAElC,MAAM,GAAG,GAAsB;QAC3B,IAAI,OAAO,EAAE,CAAC;YACV,OAAM;QACV,CAAC;QAED,MAAM,KAAK,GAAG,GAAG,EAAE;YACf,OAAO,GAAG,IAAI,CAAA;YACd,IAAI,EAAE,CAAA;QACV,CAAC,CAAA;QACD,OAAO,GAAG,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;IACtC,CAAC,CAAA;IAED,GAAG,CAAC,KAAK,GAAG,GAAG,EAAE;QACb,IAAI,OAAO,EAAE,CAAC;YACV,YAAY,CAAC,OAAO,CAAC,CAAA;YACrB,OAAO,GAAG,IAAI,CAAA;QAClB,CAAC;IACL,CAAC,CAAA;IAED,OAAO,GAAG,CAAA;AACd,CAAC;AAvBD,4BAuBC;AAED,SAAgB,eAAe,CAA4C,IAAO;IAC9E,IAAI,cAAc,GAAwB,IAAI,CAAA;IAC9C,IAAI,QAAQ,GAAG,KAAK,CAAA;IAEpB,MAAM,GAAG,GAAG,UAAU,GAAG,IAAW;QAChC,IAAI,QAAQ;YAAE,OAAO,OAAO,CAAC,OAAO,EAAE,CAAA;QAEtC,IAAI,cAAc,EAAE,CAAC;YACjB,OAAO,cAAc,CAAA;QACzB,CAAC;QAED,iEAAiE;QACjE,cAAc,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,CAAA;QAC9B,KAAK,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE;YAC1B,cAAc,GAAG,IAAI,CAAA;YACrB,QAAQ,GAAG,IAAI,CAAA;QACnB,CAAC,CAAC,CAAA;QAEF,OAAO,cAAc,CAAA;IACzB,CAAM,CAAA;IAEN,OAAO;QACH,GAAG;QACH,QAAQ,EAAE,GAAG,EAAE,CAAC,QAAQ;QACxB,IAAI,EAAE,GAAG,EAAE,CAAC,cAAc;QAC1B,KAAK,EAAE,GAAG,EAAE;YACR,QAAQ,GAAG,KAAK,CAAA;QACpB,CAAC;KACJ,CAAA;AACL,CAAC;AA7BD,0CA6BC","sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nexport type ThrottledFunction = (() => void) & {\n reset: () => void\n}\n\n/**\n * Throttle a function with a given delay.\n * Similar to lodash.\n *\n * Throttling `F` for a delay of `D` means that\n * `F` will be called no more than 1 time every `D`.\n * In this implementation, `F` is called after `D`\n * has passed since the previous non-throttled invocation\n *\n * @param func Function to throttle\n * @param delay Throttle delay\n */\nexport function throttle(func: () => void, delay: number): ThrottledFunction {\n let timeout: NodeJS.Timeout | null\n\n const res: ThrottledFunction = function () {\n if (timeout) {\n return\n }\n\n const later = () => {\n timeout = null\n func()\n }\n timeout = setTimeout(later, delay)\n }\n\n res.reset = () => {\n if (timeout) {\n clearTimeout(timeout)\n timeout = null\n }\n }\n\n return res\n}\n\nexport function asyncResettable<T extends(...args: any[]) => Promise<any>>(func: T) {\n let runningPromise: Promise<any> | null = null\n let finished = false\n\n const run = function (...args: any[]) {\n if (finished) return Promise.resolve()\n\n if (runningPromise) {\n return runningPromise\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n runningPromise = func(...args)\n void runningPromise.then(() => {\n runningPromise = null\n finished = true\n })\n\n return runningPromise\n } as T\n\n return {\n run,\n finished: () => finished,\n wait: () => runningPromise,\n reset: () => {\n finished = false\n },\n }\n}\n"]}
@@ -5,9 +5,12 @@ exports.SortedLinkedList = void 0;
5
5
  * A sorted linked list.
6
6
  */
7
7
  class SortedLinkedList {
8
+ comparator;
9
+ _first;
10
+ _last;
11
+ _size = 0;
8
12
  constructor(comparator) {
9
13
  this.comparator = comparator;
10
- this._size = 0;
11
14
  }
12
15
  get length() {
13
16
  return this._size;
@@ -1 +1 @@
1
- {"version":3,"file":"linked-list.js","sourceRoot":"","sources":["../../../src/utils/linked-list.ts"],"names":[],"mappings":";;;AAMA;;GAEG;AACH,MAAa,gBAAgB;IAKzB,YAAoB,UAAkC;QAAlC,eAAU,GAAV,UAAU,CAAwB;QAFtD,UAAK,GAAG,CAAC,CAAA;IAEgD,CAAC;IAE1D,IAAI,MAAM;QACN,OAAO,IAAI,CAAC,KAAK,CAAA;IACrB,CAAC;IAED,OAAO,CAAC,IAAuB;QAC3B,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,EAAE;YACtB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,CAAA;SACvB;QAED,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,EAAE;YACrB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAA;SACtB;QAED,IAAI,IAAI,CAAC,CAAC;YAAE,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAA;QAC7B,IAAI,IAAI,CAAC,CAAC;YAAE,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAA;QAE7B,IAAI,CAAC,KAAK,IAAI,CAAC,CAAA;IACnB,CAAC;IAED,QAAQ;QACJ,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO,SAAS,CAAA;QAElC,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAA;QACtB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAA;QAC3B,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,IAAI,CAAC,KAAK,GAAG,SAAS,CAAA;QAExC,IAAI,CAAC,KAAK,IAAI,CAAC,CAAA;QAEf,OAAO,EAAE,CAAC,CAAC,CAAA;IACf,CAAC;IAED,GAAG,CAAC,IAAO;QACP,MAAM,EAAE,GAAsB,EAAE,CAAC,EAAE,IAAI,EAAE,CAAA;QAEzC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YACd,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,GAAG,EAAE,CAAA;SAChC;aAAM;YACH,IAAI,GAAG,GAAkC,IAAI,CAAC,MAAM,CAAA;YAEpD,OAAO,GAAG,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE;gBAC5C,GAAG,GAAG,GAAG,CAAC,CAAC,CAAA;aACd;YAED,IAAI,CAAC,GAAG,EAAE;gBACN,2CAA2C;gBAE3C,IAAI,CAAC,KAAM,CAAC,CAAC,GAAG,EAAE,CAAA;gBAClB,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAA;gBACjB,IAAI,CAAC,KAAK,GAAG,EAAE,CAAA;aAClB;iBAAM;gBACH,0DAA0D;gBAC1D,EAAE,CAAC,CAAC,GAAG,GAAG,CAAA;gBACV,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAA;gBACZ,IAAI,GAAG,CAAC,CAAC;oBAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAA;gBACvB,GAAG,CAAC,CAAC,GAAG,EAAE,CAAA;gBAEV,IAAI,GAAG,KAAK,IAAI,CAAC,MAAM;oBAAE,IAAI,CAAC,MAAM,GAAG,EAAE,CAAA;aAC5C;SACJ;QAED,IAAI,CAAC,KAAK,IAAI,CAAC,CAAA;IACnB,CAAC;IAED,KAAK;QACD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,GAAG,SAAS,CAAA;QACpC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAA;IAClB,CAAC;CACJ;AA1ED,4CA0EC","sourcesContent":["interface LinkedListItem<T> {\n v: T\n n?: LinkedListItem<T>\n p?: LinkedListItem<T>\n}\n\n/**\n * A sorted linked list.\n */\nexport class SortedLinkedList<T> {\n _first?: LinkedListItem<T>\n _last?: LinkedListItem<T>\n _size = 0\n\n constructor(private comparator: (a: T, b: T) => number) {}\n\n get length(): number {\n return this._size\n }\n\n _remove(item: LinkedListItem<T>): void {\n if (this._first === item) {\n this._first = item.n\n }\n\n if (this._last === item) {\n this._last = item.p\n }\n\n if (item.p) item.p.n = item.n\n if (item.n) item.n.p = item.p\n\n this._size -= 1\n }\n\n popFront(): T | undefined {\n if (!this._first) return undefined\n\n const it = this._first\n this._first = this._first.n\n if (!this._first) this._last = undefined\n\n this._size -= 1\n\n return it.v\n }\n\n add(item: T): void {\n const it: LinkedListItem<T> = { v: item }\n\n if (!this._first) {\n this._first = this._last = it\n } else {\n let cur: LinkedListItem<T> | undefined = this._first\n\n while (cur && this.comparator(cur.v, it.v) < 0) {\n cur = cur.n\n }\n\n if (!cur) {\n // reached end, the item should be new last\n\n this._last!.n = it\n it.p = this._last\n this._last = it\n } else {\n // `cur` is the first item greater or equal than the given\n it.n = cur\n it.p = cur.p\n if (cur.p) cur.p.n = it\n cur.p = it\n\n if (cur === this._first) this._first = it\n }\n }\n\n this._size += 1\n }\n\n clear(): void {\n this._first = this._last = undefined\n this._size = 0\n }\n}\n"]}
1
+ {"version":3,"file":"linked-list.js","sourceRoot":"","sources":["../../../src/utils/linked-list.ts"],"names":[],"mappings":";;;AAMA;;GAEG;AACH,MAAa,gBAAgB;IAKL;IAJpB,MAAM,CAAoB;IAC1B,KAAK,CAAoB;IACzB,KAAK,GAAG,CAAC,CAAA;IAET,YAAoB,UAAkC;QAAlC,eAAU,GAAV,UAAU,CAAwB;IAAG,CAAC;IAE1D,IAAI,MAAM;QACN,OAAO,IAAI,CAAC,KAAK,CAAA;IACrB,CAAC;IAED,OAAO,CAAC,IAAuB;QAC3B,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;YACvB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,CAAA;QACxB,CAAC;QAED,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,EAAE,CAAC;YACtB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAA;QACvB,CAAC;QAED,IAAI,IAAI,CAAC,CAAC;YAAE,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAA;QAC7B,IAAI,IAAI,CAAC,CAAC;YAAE,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAA;QAE7B,IAAI,CAAC,KAAK,IAAI,CAAC,CAAA;IACnB,CAAC;IAED,QAAQ;QACJ,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO,SAAS,CAAA;QAElC,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAA;QACtB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAA;QAC3B,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,IAAI,CAAC,KAAK,GAAG,SAAS,CAAA;QAExC,IAAI,CAAC,KAAK,IAAI,CAAC,CAAA;QAEf,OAAO,EAAE,CAAC,CAAC,CAAA;IACf,CAAC;IAED,GAAG,CAAC,IAAO;QACP,MAAM,EAAE,GAAsB,EAAE,CAAC,EAAE,IAAI,EAAE,CAAA;QAEzC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,GAAG,EAAE,CAAA;QACjC,CAAC;aAAM,CAAC;YACJ,IAAI,GAAG,GAAkC,IAAI,CAAC,MAAM,CAAA;YAEpD,OAAO,GAAG,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC7C,GAAG,GAAG,GAAG,CAAC,CAAC,CAAA;YACf,CAAC;YAED,IAAI,CAAC,GAAG,EAAE,CAAC;gBACP,2CAA2C;gBAE3C,IAAI,CAAC,KAAM,CAAC,CAAC,GAAG,EAAE,CAAA;gBAClB,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAA;gBACjB,IAAI,CAAC,KAAK,GAAG,EAAE,CAAA;YACnB,CAAC;iBAAM,CAAC;gBACJ,0DAA0D;gBAC1D,EAAE,CAAC,CAAC,GAAG,GAAG,CAAA;gBACV,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAA;gBACZ,IAAI,GAAG,CAAC,CAAC;oBAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAA;gBACvB,GAAG,CAAC,CAAC,GAAG,EAAE,CAAA;gBAEV,IAAI,GAAG,KAAK,IAAI,CAAC,MAAM;oBAAE,IAAI,CAAC,MAAM,GAAG,EAAE,CAAA;YAC7C,CAAC;QACL,CAAC;QAED,IAAI,CAAC,KAAK,IAAI,CAAC,CAAA;IACnB,CAAC;IAED,KAAK;QACD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,GAAG,SAAS,CAAA;QACpC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAA;IAClB,CAAC;CACJ;AA1ED,4CA0EC","sourcesContent":["interface LinkedListItem<T> {\n v: T\n n?: LinkedListItem<T>\n p?: LinkedListItem<T>\n}\n\n/**\n * A sorted linked list.\n */\nexport class SortedLinkedList<T> {\n _first?: LinkedListItem<T>\n _last?: LinkedListItem<T>\n _size = 0\n\n constructor(private comparator: (a: T, b: T) => number) {}\n\n get length(): number {\n return this._size\n }\n\n _remove(item: LinkedListItem<T>): void {\n if (this._first === item) {\n this._first = item.n\n }\n\n if (this._last === item) {\n this._last = item.p\n }\n\n if (item.p) item.p.n = item.n\n if (item.n) item.n.p = item.p\n\n this._size -= 1\n }\n\n popFront(): T | undefined {\n if (!this._first) return undefined\n\n const it = this._first\n this._first = this._first.n\n if (!this._first) this._last = undefined\n\n this._size -= 1\n\n return it.v\n }\n\n add(item: T): void {\n const it: LinkedListItem<T> = { v: item }\n\n if (!this._first) {\n this._first = this._last = it\n } else {\n let cur: LinkedListItem<T> | undefined = this._first\n\n while (cur && this.comparator(cur.v, it.v) < 0) {\n cur = cur.n\n }\n\n if (!cur) {\n // reached end, the item should be new last\n\n this._last!.n = it\n it.p = this._last\n this._last = it\n } else {\n // `cur` is the first item greater or equal than the given\n it.n = cur\n it.p = cur.p\n if (cur.p) cur.p.n = it\n cur.p = it\n\n if (cur === this._first) this._first = it\n }\n }\n\n this._size += 1\n }\n\n clear(): void {\n this._first = this._last = undefined\n this._size = 0\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"bots.js","sourceRoot":"","sources":["../../../../src/utils/links/bots.ts"],"names":[],"mappings":"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","sourcesContent":["import { tl } from '@mtcute/tl'\n\nimport { isPresent } from '../type-assertions.js'\nimport { deeplinkBuilder } from './common.js'\n\n/**\n * Bot deeplinks\n *\n * Used to link to bots with a start parameter\n */\nexport const botStart = deeplinkBuilder<{\n /** Bot username */\n username: string\n /** Start parameter */\n parameter: string\n}>({\n internalBuild: ({ username, parameter }) => ['resolve', { domain: username, start: parameter }],\n internalParse: (path, query) => {\n if (path !== 'resolve') return null\n\n const username = query.get('domain')\n const parameter = query.get('start')\n\n if (!username || !parameter) return null\n\n return { username, parameter }\n },\n externalBuild: ({ username, parameter }) => [username, { start: parameter }],\n externalParse: (path, query) => {\n if (path.includes('/') || path[0] === '+' || path.length <= 2) return null\n\n const username = path\n const parameter = query.get('start')\n\n if (!parameter) return null\n\n return { username, parameter }\n },\n})\n\ntype BotAdminRight = Exclude<keyof tl.RawChatAdminRights, '_'>\n\nfunction normalizeBotAdmin(rights?: BotAdminRight[]): string | undefined {\n if (!rights?.length) return\n\n return rights\n .map((it) => {\n switch (it) {\n case 'changeInfo':\n return 'change_info'\n case 'postMessages':\n return 'post_messages'\n case 'editMessages':\n return 'edit_messages'\n case 'deleteMessages':\n return 'delete_messages'\n case 'banUsers':\n return 'restrict_members'\n case 'inviteUsers':\n return 'invite_users'\n case 'pinMessages':\n return 'pin_messages'\n case 'manageTopics':\n return 'manage_topics'\n case 'addAdmins':\n return 'promote_members'\n case 'manageCall':\n return 'manage_video_chats'\n case 'anonymous':\n return 'anonymous'\n case 'other':\n return 'manage_chat'\n case 'postStories':\n return 'post_stories'\n case 'editStories':\n return 'edit_stories'\n case 'deleteStories':\n return 'delete_stories'\n }\n })\n .join('+')\n}\n\nfunction parseBotAdmin(rights: string | null): BotAdminRight[] | undefined {\n if (!rights) return\n\n return rights\n .split('+')\n .map((it) => {\n switch (it) {\n case 'change_info':\n return 'changeInfo'\n case 'post_messages':\n return 'postMessages'\n case 'edit_messages':\n return 'editMessages'\n case 'delete_messages':\n return 'deleteMessages'\n case 'restrict_members':\n return 'banUsers'\n case 'invite_users':\n return 'inviteUsers'\n case 'pin_messages':\n return 'pinMessages'\n case 'manage_topics':\n return 'manageTopics'\n case 'promote_members':\n return 'addAdmins'\n case 'manage_video_chats':\n return 'manageCall'\n case 'anonymous':\n return 'anonymous'\n case 'manage_chat':\n return 'other'\n case 'post_stories':\n return 'postStories'\n case 'edit_stories':\n return 'editStories'\n case 'delete_stories':\n return 'deleteStories'\n default:\n return null\n }\n })\n .filter(isPresent)\n}\n\n/**\n * Bot add to group links\n *\n * Used to ask the user to add a bot to a group, optionally asking for admin rights.\n * Note that the user is still free to choose which rights to grant, and\n * whether to grant them at all.\n */\nexport const botAddToGroup = deeplinkBuilder<{\n /** Bot username */\n bot: string\n /** If specified, the client will call `/start parameter` on the bot once the bot has been added */\n parameter?: string\n /** Admin rights to request */\n admin?: BotAdminRight[]\n}>({\n internalBuild: ({ bot, parameter, admin }) => [\n 'resolve',\n { domain: bot, startgroup: parameter ?? true, admin: normalizeBotAdmin(admin) },\n ],\n internalParse: (path, query) => {\n if (path !== 'resolve') return null\n\n const bot = query.get('domain')\n const parameter = query.get('startgroup')\n const admin = query.get('admin')\n\n if (!bot || parameter === null) return null\n\n return {\n bot,\n parameter: parameter === '' ? undefined : parameter,\n admin: parseBotAdmin(admin),\n }\n },\n\n externalBuild: ({ bot, parameter, admin }) => [\n bot,\n { startgroup: parameter ?? true, admin: normalizeBotAdmin(admin) },\n ],\n externalParse: (path, query) => {\n if (path.includes('/') || path[0] === '+' || path.length <= 2) return null\n\n const bot = path\n const parameter = query.get('startgroup')\n const admin = query.get('admin')\n\n if (parameter === null) return null\n\n return {\n bot,\n parameter: parameter === '' ? undefined : parameter,\n admin: parseBotAdmin(admin),\n }\n },\n})\n\n/**\n * Bot add to channel links\n *\n * Used to ask the user to add a bot to a channel, optionally with admin rights.\n * Note that the user is still free to choose which rights to grant, and\n * whether to grant them at all.\n */\nexport const botAddToChannel = deeplinkBuilder<{\n /** Bot username */\n bot: string\n /** Admin rights to request */\n admin?: BotAdminRight[]\n}>({\n internalBuild: ({ bot, admin }) => [\n 'resolve',\n { domain: bot, startchannel: true, admin: normalizeBotAdmin(admin) },\n ],\n internalParse: (path, query) => {\n if (path !== 'resolve') return null\n\n const bot = query.get('domain')\n const parameter = query.get('startchannel')\n const admin = query.get('admin')\n\n if (!bot || parameter === null) return null\n\n return {\n bot,\n admin: parseBotAdmin(admin),\n }\n },\n\n externalBuild: ({ bot, admin }) => [bot, { startchannel: true, admin: normalizeBotAdmin(admin) }],\n externalParse: (path, query) => {\n if (path.includes('/') || path[0] === '+' || path.length <= 2) return null\n\n const bot = path\n const parameter = query.get('startchannel')\n const admin = query.get('admin')\n\n if (parameter === null) return null\n\n return {\n bot,\n admin: parseBotAdmin(admin),\n }\n },\n})\n\n/**\n * Game links\n *\n * Used to share games.\n */\nexport const botGame = deeplinkBuilder<{\n /** Bot username */\n bot: string\n /** Game short name */\n game: string\n}>({\n internalBuild: ({ bot, game }) => ['resolve', { domain: bot, game }],\n internalParse: (path, query) => {\n if (path !== 'resolve') return null\n\n const bot = query.get('domain')\n const game = query.get('game')\n\n if (!bot || !game) return null\n\n return { bot, game }\n },\n externalBuild: ({ bot, game }) => [bot, { game }],\n externalParse: (path, query) => {\n if (path.includes('/') || path[0] === '+' || path.length <= 2) return null\n\n const bot = path\n const game = query.get('game')\n\n if (!game) return null\n\n return { bot, game }\n },\n})\n\n/**\n * Named bot web app links\n *\n * Used to share named bot web apps.\n *\n * These links are different from bot attachment menu deep links,\n * because they don't require the user to install an attachment menu,\n * and a single bot can offer multiple named web apps, distinguished by\n * their `short_name`.\n */\nexport const botWebApp = deeplinkBuilder<{\n /** Bot username */\n bot: string\n /** App short name */\n app: string\n /** Parameter to be passed by the client to messages.requestAppWebView as `start_param` */\n parameter?: string\n}>({\n internalBuild: ({ bot, app, parameter }) => ['resolve', { domain: bot, appname: app, startapp: parameter }],\n internalParse: (path, query) => {\n if (path !== 'resolve') return null\n\n const bot = query.get('domain')\n const app = query.get('appname')\n const parameter = query.get('startapp')\n\n if (!bot || !app) return null\n\n return { bot, app, parameter: parameter || undefined }\n },\n\n externalBuild: ({ bot, app, parameter }) => [`${bot}/${app}`, { startapp: parameter }],\n externalParse: (path, query) => {\n const [bot, app, rest] = path.split('/')\n\n if (!app || rest) return null\n\n const parameter = query.get('startapp')\n\n return { bot, app, parameter: parameter || undefined }\n },\n})\n"]}
1
+ {"version":3,"file":"bots.js","sourceRoot":"","sources":["../../../../src/utils/links/bots.ts"],"names":[],"mappings":"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","sourcesContent":["import { tl } from '@mtcute/tl'\n\nimport { isPresent } from '../type-assertions.js'\nimport { deeplinkBuilder } from './common.js'\n\n/**\n * Bot deeplinks\n *\n * Used to link to bots with a start parameter\n */\nexport const botStart = deeplinkBuilder<{\n /** Bot username */\n username: string\n /** Start parameter */\n parameter: string\n}>({\n internalBuild: ({ username, parameter }) => ['resolve', { domain: username, start: parameter }],\n internalParse: (path, query) => {\n if (path !== 'resolve') return null\n\n const username = query.get('domain')\n const parameter = query.get('start')\n\n if (!username || !parameter) return null\n\n return { username, parameter }\n },\n externalBuild: ({ username, parameter }) => [username, { start: parameter }],\n externalParse: (path, query) => {\n if (path.includes('/') || path[0] === '+' || path.length <= 2) return null\n\n const username = path\n const parameter = query.get('start')\n\n if (!parameter) return null\n\n return { username, parameter }\n },\n})\n\ntype BotAdminRight = Exclude<keyof tl.RawChatAdminRights, '_'>\n\nfunction normalizeBotAdmin(rights?: BotAdminRight[]): string | undefined {\n if (!rights?.length) return\n\n return rights\n .map((it) => {\n switch (it) {\n case 'changeInfo':\n return 'change_info'\n case 'postMessages':\n return 'post_messages'\n case 'editMessages':\n return 'edit_messages'\n case 'deleteMessages':\n return 'delete_messages'\n case 'banUsers':\n return 'restrict_members'\n case 'inviteUsers':\n return 'invite_users'\n case 'pinMessages':\n return 'pin_messages'\n case 'manageTopics':\n return 'manage_topics'\n case 'addAdmins':\n return 'promote_members'\n case 'manageCall':\n return 'manage_video_chats'\n case 'anonymous':\n return 'anonymous'\n case 'other':\n return 'manage_chat'\n case 'postStories':\n return 'post_stories'\n case 'editStories':\n return 'edit_stories'\n case 'deleteStories':\n return 'delete_stories'\n }\n })\n .join('+')\n}\n\nfunction parseBotAdmin(rights: string | null): BotAdminRight[] | undefined {\n if (!rights) return\n\n return rights\n .split('+')\n .map((it) => {\n switch (it) {\n case 'change_info':\n return 'changeInfo'\n case 'post_messages':\n return 'postMessages'\n case 'edit_messages':\n return 'editMessages'\n case 'delete_messages':\n return 'deleteMessages'\n case 'restrict_members':\n return 'banUsers'\n case 'invite_users':\n return 'inviteUsers'\n case 'pin_messages':\n return 'pinMessages'\n case 'manage_topics':\n return 'manageTopics'\n case 'promote_members':\n return 'addAdmins'\n case 'manage_video_chats':\n return 'manageCall'\n case 'anonymous':\n return 'anonymous'\n case 'manage_chat':\n return 'other'\n case 'post_stories':\n return 'postStories'\n case 'edit_stories':\n return 'editStories'\n case 'delete_stories':\n return 'deleteStories'\n default:\n return null\n }\n })\n .filter(isPresent)\n}\n\n/**\n * Bot add to group links\n *\n * Used to ask the user to add a bot to a group, optionally asking for admin rights.\n * Note that the user is still free to choose which rights to grant, and\n * whether to grant them at all.\n */\nexport const botAddToGroup = deeplinkBuilder<{\n /** Bot username */\n bot: string\n /** If specified, the client will call `/start parameter` on the bot once the bot has been added */\n parameter?: string\n /** Admin rights to request */\n admin?: BotAdminRight[]\n}>({\n internalBuild: ({ bot, parameter, admin }) => [\n 'resolve',\n { domain: bot, startgroup: parameter ?? true, admin: normalizeBotAdmin(admin) },\n ],\n internalParse: (path, query) => {\n if (path !== 'resolve') return null\n\n const bot = query.get('domain')\n const parameter = query.get('startgroup')\n const admin = query.get('admin')\n\n if (!bot || parameter === null) return null\n\n return {\n bot,\n parameter: parameter === '' ? undefined : parameter,\n admin: parseBotAdmin(admin),\n }\n },\n\n externalBuild: ({ bot, parameter, admin }) => [\n bot,\n { startgroup: parameter ?? true, admin: normalizeBotAdmin(admin) },\n ],\n externalParse: (path, query) => {\n if (path.includes('/') || path[0] === '+' || path.length <= 2) return null\n\n const bot = path\n const parameter = query.get('startgroup')\n const admin = query.get('admin')\n\n if (parameter === null) return null\n\n return {\n bot,\n parameter: parameter === '' ? undefined : parameter,\n admin: parseBotAdmin(admin),\n }\n },\n})\n\n/**\n * Bot add to channel links\n *\n * Used to ask the user to add a bot to a channel, optionally with admin rights.\n * Note that the user is still free to choose which rights to grant, and\n * whether to grant them at all.\n */\nexport const botAddToChannel = deeplinkBuilder<{\n /** Bot username */\n bot: string\n /** Admin rights to request */\n admin?: BotAdminRight[]\n}>({\n internalBuild: ({ bot, admin }) => [\n 'resolve',\n { domain: bot, startchannel: true, admin: normalizeBotAdmin(admin) },\n ],\n internalParse: (path, query) => {\n if (path !== 'resolve') return null\n\n const bot = query.get('domain')\n const parameter = query.get('startchannel')\n const admin = query.get('admin')\n\n if (!bot || parameter === null) return null\n\n return {\n bot,\n admin: parseBotAdmin(admin),\n }\n },\n\n externalBuild: ({ bot, admin }) => [bot, { startchannel: true, admin: normalizeBotAdmin(admin) }],\n externalParse: (path, query) => {\n if (path.includes('/') || path[0] === '+' || path.length <= 2) return null\n\n const bot = path\n const parameter = query.get('startchannel')\n const admin = query.get('admin')\n\n if (parameter === null) return null\n\n return {\n bot,\n admin: parseBotAdmin(admin),\n }\n },\n})\n\n/**\n * Game links\n *\n * Used to share games.\n */\nexport const botGame = deeplinkBuilder<{\n /** Bot username */\n bot: string\n /** Game short name */\n game: string\n}>({\n internalBuild: ({ bot, game }) => ['resolve', { domain: bot, game }],\n internalParse: (path, query) => {\n if (path !== 'resolve') return null\n\n const bot = query.get('domain')\n const game = query.get('game')\n\n if (!bot || !game) return null\n\n return { bot, game }\n },\n externalBuild: ({ bot, game }) => [bot, { game }],\n externalParse: (path, query) => {\n if (path.includes('/') || path[0] === '+' || path.length <= 2) return null\n\n const bot = path\n const game = query.get('game')\n\n if (!game) return null\n\n return { bot, game }\n },\n})\n\n/**\n * Named bot web app links\n *\n * Used to share named bot web apps.\n *\n * These links are different from bot attachment menu deep links,\n * because they don't require the user to install an attachment menu,\n * and a single bot can offer multiple named web apps, distinguished by\n * their `short_name`.\n */\nexport const botWebApp = deeplinkBuilder<{\n /** Bot username */\n bot: string\n /** App short name */\n app: string\n /** Parameter to be passed by the client to messages.requestAppWebView as `start_param` */\n parameter?: string\n}>({\n internalBuild: ({ bot, app, parameter }) => ['resolve', { domain: bot, appname: app, startapp: parameter }],\n internalParse: (path, query) => {\n if (path !== 'resolve') return null\n\n const bot = query.get('domain')\n const app = query.get('appname')\n const parameter = query.get('startapp')\n\n if (!bot || !app) return null\n\n return { bot, app, parameter: parameter || undefined }\n },\n\n externalBuild: ({ bot, app, parameter }) => [`${bot}/${app}`, { startapp: parameter }],\n externalParse: (path, query) => {\n const [bot, app, rest] = path.split('/')\n\n if (!app || rest) return null\n\n const parameter = query.get('startapp')\n\n return { bot, app, parameter: parameter || undefined }\n },\n})\n"]}