@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
@@ -60,10 +60,12 @@ function parse(data) {
60
60
  }
61
61
  // todo: add testMode here
62
62
  class CurrentUserService extends base_js_1.BaseService {
63
+ _kv;
63
64
  constructor(_kv, opts) {
64
65
  super(opts);
65
66
  this._kv = _kv;
66
67
  }
68
+ _cached;
67
69
  async store(info) {
68
70
  if (info && this._cached) {
69
71
  // update the existing object so the references to it are still valid
@@ -1 +1 @@
1
- {"version":3,"file":"current-user.js","sourceRoot":"","sources":["../../../../../src/highlevel/storage/service/current-user.ts"],"names":[],"mappings":"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","sourcesContent":["import { tl } from '@mtcute/tl'\nimport { TlBinaryReader, TlBinaryWriter, TlSerializationCounter } from '@mtcute/tl-runtime'\n\nimport { IKeyValueRepository } from '../../../storage/repository/key-value.js'\nimport { BaseService, ServiceOptions } from '../../../storage/service/base.js'\nimport { MtArgumentError } from '../../../types/index.js'\nimport { assertTypeIs } from '../../../utils/type-assertions.js'\nimport { extractUsernames } from '../../utils/peer-utils.js'\n\nexport interface CurrentUserInfo {\n userId: number\n isBot: boolean\n isPremium: boolean\n usernames: string[]\n}\n\nconst KV_CURRENT_USER = 'current_user'\n\nfunction serialize(info: CurrentUserInfo | null): Uint8Array {\n if (!info) return new Uint8Array(0)\n\n const hasUsernames = info.usernames.length > 0\n\n let usernamesOverhead = hasUsernames ? 4 : 0\n\n for (const username of info.usernames) {\n // since usernames are always ASCII, string length is the same as byte length\n usernamesOverhead += TlSerializationCounter.countBytesOverhead(username.length) + username.length\n }\n\n const writer = TlBinaryWriter.manual(16 + usernamesOverhead)\n writer.int(1) // version\n\n let flags = 0\n if (info.isBot) flags |= 1\n if (hasUsernames) flags |= 2\n if (info.isPremium) flags |= 4\n\n writer.int(flags)\n writer.int53(info.userId)\n\n if (hasUsernames) {\n writer.int(info.usernames.length)\n\n for (const username of info.usernames) {\n writer.string(username)\n }\n }\n\n return writer.result()\n}\n\nfunction parse(data: Uint8Array): CurrentUserInfo | null {\n if (data.length === 0) return null\n\n const reader = TlBinaryReader.manual(data)\n if (reader.int() !== 1) return null\n\n const flags = reader.int()\n const userId = reader.int53()\n\n let usernames: string[] = []\n\n if (flags & 2) {\n const len = reader.int()\n usernames = new Array<string>(len)\n\n for (let i = 0; i < len; i++) {\n usernames[i] = reader.string()\n }\n }\n\n return {\n userId,\n isBot: (flags & 1) !== 0,\n isPremium: (flags & 4) !== 0,\n usernames,\n }\n}\n\n// todo: add testMode here\n\nexport class CurrentUserService extends BaseService {\n constructor(\n private _kv: IKeyValueRepository,\n opts: ServiceOptions,\n ) {\n super(opts)\n }\n\n private _cached?: CurrentUserInfo | null\n\n async store(info: CurrentUserInfo | null): Promise<void> {\n if (info && this._cached) {\n // update the existing object so the references to it are still valid\n if (this._cached.userId === info.userId) {\n return\n }\n\n this._cached.userId = info.userId\n this._cached.isBot = info.isBot\n } else {\n this._cached = info\n }\n\n await this._kv.set(KV_CURRENT_USER, serialize(info))\n await this._driver.save?.()\n }\n\n async storeFrom(user: tl.TypeUser): Promise<CurrentUserInfo> {\n assertTypeIs('storeFrom', user, 'user')\n\n const obj: CurrentUserInfo = {\n userId: user.id,\n isBot: user.bot!,\n isPremium: user.premium!,\n usernames: extractUsernames(user),\n }\n await this.store(obj)\n\n return obj\n }\n\n async fetch(): Promise<CurrentUserInfo | null> {\n if (this._cached) return this._cached\n\n const data = await this._kv.get(KV_CURRENT_USER)\n if (!data) return null\n\n const info = parse(data)\n this._cached = info\n\n return info\n }\n\n getCached(safe = false): CurrentUserInfo | null {\n if (this._cached === undefined) {\n if (safe) return null\n\n throw new MtArgumentError('User info is not cached yet')\n }\n\n return this._cached\n }\n\n async update(params: { username?: string; usernames?: string[]; isPremium?: boolean }): Promise<void> {\n const info = await this.fetch()\n if (!info) return\n\n const { username, usernames, isPremium } = params\n\n if (isPremium !== undefined) info.isPremium = isPremium\n\n if (username !== undefined) {\n // \"main\" username is always the first one\n info.usernames[0] = username\n } else if (usernames !== undefined) {\n info.usernames = usernames\n }\n\n return this.store(info)\n }\n}\n"]}
1
+ {"version":3,"file":"current-user.js","sourceRoot":"","sources":["../../../../../src/highlevel/storage/service/current-user.ts"],"names":[],"mappings":"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","sourcesContent":["import { tl } from '@mtcute/tl'\nimport { TlBinaryReader, TlBinaryWriter, TlSerializationCounter } from '@mtcute/tl-runtime'\n\nimport { IKeyValueRepository } from '../../../storage/repository/key-value.js'\nimport { BaseService, ServiceOptions } from '../../../storage/service/base.js'\nimport { MtArgumentError } from '../../../types/index.js'\nimport { assertTypeIs } from '../../../utils/type-assertions.js'\nimport { extractUsernames } from '../../utils/peer-utils.js'\n\nexport interface CurrentUserInfo {\n userId: number\n isBot: boolean\n isPremium: boolean\n usernames: string[]\n}\n\nconst KV_CURRENT_USER = 'current_user'\n\nfunction serialize(info: CurrentUserInfo | null): Uint8Array {\n if (!info) return new Uint8Array(0)\n\n const hasUsernames = info.usernames.length > 0\n\n let usernamesOverhead = hasUsernames ? 4 : 0\n\n for (const username of info.usernames) {\n // since usernames are always ASCII, string length is the same as byte length\n usernamesOverhead += TlSerializationCounter.countBytesOverhead(username.length) + username.length\n }\n\n const writer = TlBinaryWriter.manual(16 + usernamesOverhead)\n writer.int(1) // version\n\n let flags = 0\n if (info.isBot) flags |= 1\n if (hasUsernames) flags |= 2\n if (info.isPremium) flags |= 4\n\n writer.int(flags)\n writer.int53(info.userId)\n\n if (hasUsernames) {\n writer.int(info.usernames.length)\n\n for (const username of info.usernames) {\n writer.string(username)\n }\n }\n\n return writer.result()\n}\n\nfunction parse(data: Uint8Array): CurrentUserInfo | null {\n if (data.length === 0) return null\n\n const reader = TlBinaryReader.manual(data)\n if (reader.int() !== 1) return null\n\n const flags = reader.int()\n const userId = reader.int53()\n\n let usernames: string[] = []\n\n if (flags & 2) {\n const len = reader.int()\n usernames = new Array<string>(len)\n\n for (let i = 0; i < len; i++) {\n usernames[i] = reader.string()\n }\n }\n\n return {\n userId,\n isBot: (flags & 1) !== 0,\n isPremium: (flags & 4) !== 0,\n usernames,\n }\n}\n\n// todo: add testMode here\n\nexport class CurrentUserService extends BaseService {\n constructor(\n private _kv: IKeyValueRepository,\n opts: ServiceOptions,\n ) {\n super(opts)\n }\n\n private _cached?: CurrentUserInfo | null\n\n async store(info: CurrentUserInfo | null): Promise<void> {\n if (info && this._cached) {\n // update the existing object so the references to it are still valid\n if (this._cached.userId === info.userId) {\n return\n }\n\n this._cached.userId = info.userId\n this._cached.isBot = info.isBot\n } else {\n this._cached = info\n }\n\n await this._kv.set(KV_CURRENT_USER, serialize(info))\n await this._driver.save?.()\n }\n\n async storeFrom(user: tl.TypeUser): Promise<CurrentUserInfo> {\n assertTypeIs('storeFrom', user, 'user')\n\n const obj: CurrentUserInfo = {\n userId: user.id,\n isBot: user.bot!,\n isPremium: user.premium!,\n usernames: extractUsernames(user),\n }\n await this.store(obj)\n\n return obj\n }\n\n async fetch(): Promise<CurrentUserInfo | null> {\n if (this._cached) return this._cached\n\n const data = await this._kv.get(KV_CURRENT_USER)\n if (!data) return null\n\n const info = parse(data)\n this._cached = info\n\n return info\n }\n\n getCached(safe = false): CurrentUserInfo | null {\n if (this._cached === undefined) {\n if (safe) return null\n\n throw new MtArgumentError('User info is not cached yet')\n }\n\n return this._cached\n }\n\n async update(params: { username?: string; usernames?: string[]; isPremium?: boolean }): Promise<void> {\n const info = await this.fetch()\n if (!info) return\n\n const { username, usernames, isPremium } = params\n\n if (isPremium !== undefined) info.isPremium = isPremium\n\n if (username !== undefined) {\n // \"main\" username is always the first one\n info.usernames[0] = username\n } else if (usernames !== undefined) {\n info.usernames = usernames\n }\n\n return this.store(info)\n }\n}\n"]}
@@ -34,12 +34,16 @@ function getInputPeer(dto) {
34
34
  }
35
35
  }
36
36
  class PeersService extends base_js_1.BaseService {
37
+ options;
38
+ _peers;
39
+ _refs;
40
+ _cache;
41
+ _pendingWrites = new Map();
37
42
  constructor(options, _peers, _refs, common) {
38
43
  super(common);
39
44
  this.options = options;
40
45
  this._peers = _peers;
41
46
  this._refs = _refs;
42
- this._pendingWrites = new Map();
43
47
  this._cache = new lru_map_js_1.LruMap(options.cacheSize ?? 100);
44
48
  }
45
49
  async updatePeersFrom(obj) {
@@ -1 +1 @@
1
- {"version":3,"file":"peers.js","sourceRoot":"","sources":["../../../../../src/highlevel/storage/service/peers.ts"],"names":[],"mappings":"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","sourcesContent":["import Long from 'long'\n\nimport { tl } from '@mtcute/tl'\n\nimport { BaseService, ServiceOptions } from '../../../storage/service/base.js'\nimport { longFromFastString, longToFastString } from '../../../utils/long-utils.js'\nimport { LruMap } from '../../../utils/lru-map.js'\nimport { getAllPeersFrom, parseMarkedPeerId, toggleChannelIdMark } from '../../../utils/peer-utils.js'\nimport { extractUsernames } from '../../utils/peer-utils.js'\nimport { IPeersRepository } from '../repository/peers.js'\nimport { RefMessagesService } from './ref-messages.js'\n\ninterface CacheItem {\n peer: tl.TypeInputPeer\n complete: tl.TypeUser | tl.TypeChat | null\n}\n\nexport interface PeersServiceOptions {\n cacheSize?: number\n updatesWriteInterval?: number\n}\n\nconst USERNAME_TTL = 24 * 60 * 60 * 1000 // 1 day\n\nfunction getInputPeer(dto: IPeersRepository.PeerInfo): tl.TypeInputPeer {\n const [type, id] = parseMarkedPeerId(dto.id)\n\n switch (type) {\n case 'user':\n return {\n _: 'inputPeerUser',\n userId: id,\n accessHash: longFromFastString(dto.accessHash),\n }\n case 'chat':\n return {\n _: 'inputPeerChat',\n chatId: id,\n }\n case 'channel':\n return {\n _: 'inputPeerChannel',\n channelId: id,\n accessHash: longFromFastString(dto.accessHash),\n }\n }\n}\n\nexport class PeersService extends BaseService {\n private _cache: LruMap<number, CacheItem>\n private _pendingWrites = new Map<number, IPeersRepository.PeerInfo>()\n\n constructor(\n private options: PeersServiceOptions,\n private _peers: IPeersRepository,\n private _refs: RefMessagesService,\n common: ServiceOptions,\n ) {\n super(common)\n\n this._cache = new LruMap(options.cacheSize ?? 100)\n }\n\n async updatePeersFrom(obj: tl.TlObject | tl.TlObject[]) {\n let count = 0\n\n for (const peer of getAllPeersFrom(obj)) {\n // no point in caching min peers as we can't use them\n if ((peer as Extract<typeof peer, { min?: unknown }>).min) continue\n\n count += 1\n\n await this.store(peer)\n }\n\n if (count > 0) {\n await this._driver.save?.()\n this._log.debug('cached %d peers', count)\n\n return true\n }\n\n return false\n }\n\n async store(peer: tl.TypeUser | tl.TypeChat): Promise<void> {\n let dto: IPeersRepository.PeerInfo\n let accessHash: tl.Long\n\n switch (peer._) {\n case 'user': {\n if (!peer.accessHash) {\n this._log.warn('received user without access hash: %j', peer)\n\n return\n }\n\n dto = {\n id: peer.id,\n accessHash: longToFastString(peer.accessHash),\n phone: peer.phone,\n usernames: extractUsernames(peer),\n updated: Date.now(),\n complete: this._serializeTl(peer),\n }\n accessHash = peer.accessHash\n break\n }\n case 'chat':\n case 'chatForbidden': {\n dto = {\n id: -peer.id,\n accessHash: '',\n updated: Date.now(),\n complete: this._serializeTl(peer),\n usernames: [],\n }\n accessHash = Long.ZERO\n break\n }\n case 'channel':\n case 'channelForbidden': {\n if (!peer.accessHash) {\n this._log.warn('received channel without access hash: %j', peer)\n\n return\n }\n\n dto = {\n id: toggleChannelIdMark(peer.id),\n accessHash: longToFastString(peer.accessHash),\n usernames: extractUsernames(peer as tl.RawChannel),\n updated: Date.now(),\n complete: this._serializeTl(peer),\n }\n accessHash = peer.accessHash\n break\n }\n default:\n return\n }\n\n const cached = this._cache.get(peer.id)\n\n if (cached && this.options.updatesWriteInterval !== 0) {\n const oldAccessHash = (cached.peer as Extract<tl.TypeInputPeer, { accessHash?: unknown }>).accessHash\n\n if (oldAccessHash?.eq(accessHash)) {\n // when entity is cached and hash is the same, an update query is needed,\n // since some field in the full entity might have changed, or the username/phone\n //\n // to avoid too many DB calls, and since these updates are pretty common,\n // they are grouped and applied in batches no more than once every 30sec (or user-defined).\n //\n // until then, they are either served from in-memory cache,\n // or an older version is fetched from DB\n\n this._pendingWrites.set(peer.id, dto)\n cached.complete = peer\n\n return\n }\n }\n\n // entity is not cached in memory, or the access hash has changed\n // we need to update it in the DB asap, and also update the in-memory cache\n await this._peers.store(dto)\n this._cache.set(peer.id, {\n peer: getInputPeer(dto),\n complete: peer,\n })\n\n // todo: if (!this._cachedSelf?.isBot) {\n // we have the full peer, we no longer need the references\n // we can skip this in the other branch, since in that case it would've already been deleted\n await this._refs.deleteByPeer(peer.id)\n }\n\n private _returnCaching(id: number, dto: IPeersRepository.PeerInfo) {\n const peer = getInputPeer(dto)\n const complete = this._deserializeTl(dto.complete)\n\n this._cache.set(id, {\n peer,\n complete: complete as tl.TypeUser | tl.TypeChat | null,\n })\n\n return peer\n }\n\n async getById(id: number, allowRefs = true): Promise<tl.TypeInputPeer | null> {\n const cached = this._cache.get(id)\n if (cached) return cached.peer\n\n const dto = await this._peers.getById(id)\n\n if (dto) {\n return this._returnCaching(id, dto)\n }\n\n if (allowRefs) {\n const ref = await this._refs.getForPeer(id)\n if (!ref) return null\n\n const [chatId, msgId] = ref\n const chat = await this.getById(chatId, false)\n if (!chat) return null\n\n if (id > 0) {\n // user\n return {\n _: 'inputPeerUserFromMessage',\n peer: chat,\n msgId,\n userId: id,\n }\n }\n\n // channel\n return {\n _: 'inputPeerChannelFromMessage',\n peer: chat,\n msgId,\n channelId: toggleChannelIdMark(id),\n }\n }\n\n return null\n }\n\n async getByPhone(phone: string): Promise<tl.TypeInputPeer | null> {\n const dto = await this._peers.getByPhone(phone)\n if (!dto) return null\n\n return this._returnCaching(dto.id, dto)\n }\n\n async getByUsername(username: string): Promise<tl.TypeInputPeer | null> {\n const dto = await this._peers.getByUsername(username.toLowerCase())\n if (!dto) return null\n\n if (Date.now() - dto.updated > USERNAME_TTL) {\n // username is too old, we can't trust it. ask the client to re-fetch it\n return null\n }\n\n return this._returnCaching(dto.id, dto)\n }\n\n async getCompleteById(id: number): Promise<tl.TypeUser | tl.TypeChat | null> {\n const cached = this._cache.get(id)\n if (cached) return cached.complete\n\n const dto = await this._peers.getById(id)\n if (!dto) return null\n\n const cacheItem: CacheItem = {\n peer: getInputPeer(dto),\n complete: this._deserializeTl(dto.complete) as tl.TypeUser | tl.TypeChat | null,\n }\n this._cache.set(id, cacheItem)\n\n return cacheItem.complete\n }\n}\n"]}
1
+ {"version":3,"file":"peers.js","sourceRoot":"","sources":["../../../../../src/highlevel/storage/service/peers.ts"],"names":[],"mappings":"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","sourcesContent":["import Long from 'long'\n\nimport { tl } from '@mtcute/tl'\n\nimport { BaseService, ServiceOptions } from '../../../storage/service/base.js'\nimport { longFromFastString, longToFastString } from '../../../utils/long-utils.js'\nimport { LruMap } from '../../../utils/lru-map.js'\nimport { getAllPeersFrom, parseMarkedPeerId, toggleChannelIdMark } from '../../../utils/peer-utils.js'\nimport { extractUsernames } from '../../utils/peer-utils.js'\nimport { IPeersRepository } from '../repository/peers.js'\nimport { RefMessagesService } from './ref-messages.js'\n\ninterface CacheItem {\n peer: tl.TypeInputPeer\n complete: tl.TypeUser | tl.TypeChat | null\n}\n\nexport interface PeersServiceOptions {\n cacheSize?: number\n updatesWriteInterval?: number\n}\n\nconst USERNAME_TTL = 24 * 60 * 60 * 1000 // 1 day\n\nfunction getInputPeer(dto: IPeersRepository.PeerInfo): tl.TypeInputPeer {\n const [type, id] = parseMarkedPeerId(dto.id)\n\n switch (type) {\n case 'user':\n return {\n _: 'inputPeerUser',\n userId: id,\n accessHash: longFromFastString(dto.accessHash),\n }\n case 'chat':\n return {\n _: 'inputPeerChat',\n chatId: id,\n }\n case 'channel':\n return {\n _: 'inputPeerChannel',\n channelId: id,\n accessHash: longFromFastString(dto.accessHash),\n }\n }\n}\n\nexport class PeersService extends BaseService {\n private _cache: LruMap<number, CacheItem>\n private _pendingWrites = new Map<number, IPeersRepository.PeerInfo>()\n\n constructor(\n private options: PeersServiceOptions,\n private _peers: IPeersRepository,\n private _refs: RefMessagesService,\n common: ServiceOptions,\n ) {\n super(common)\n\n this._cache = new LruMap(options.cacheSize ?? 100)\n }\n\n async updatePeersFrom(obj: tl.TlObject | tl.TlObject[]) {\n let count = 0\n\n for (const peer of getAllPeersFrom(obj)) {\n // no point in caching min peers as we can't use them\n if ((peer as Extract<typeof peer, { min?: unknown }>).min) continue\n\n count += 1\n\n await this.store(peer)\n }\n\n if (count > 0) {\n await this._driver.save?.()\n this._log.debug('cached %d peers', count)\n\n return true\n }\n\n return false\n }\n\n async store(peer: tl.TypeUser | tl.TypeChat): Promise<void> {\n let dto: IPeersRepository.PeerInfo\n let accessHash: tl.Long\n\n switch (peer._) {\n case 'user': {\n if (!peer.accessHash) {\n this._log.warn('received user without access hash: %j', peer)\n\n return\n }\n\n dto = {\n id: peer.id,\n accessHash: longToFastString(peer.accessHash),\n phone: peer.phone,\n usernames: extractUsernames(peer),\n updated: Date.now(),\n complete: this._serializeTl(peer),\n }\n accessHash = peer.accessHash\n break\n }\n case 'chat':\n case 'chatForbidden': {\n dto = {\n id: -peer.id,\n accessHash: '',\n updated: Date.now(),\n complete: this._serializeTl(peer),\n usernames: [],\n }\n accessHash = Long.ZERO\n break\n }\n case 'channel':\n case 'channelForbidden': {\n if (!peer.accessHash) {\n this._log.warn('received channel without access hash: %j', peer)\n\n return\n }\n\n dto = {\n id: toggleChannelIdMark(peer.id),\n accessHash: longToFastString(peer.accessHash),\n usernames: extractUsernames(peer as tl.RawChannel),\n updated: Date.now(),\n complete: this._serializeTl(peer),\n }\n accessHash = peer.accessHash\n break\n }\n default:\n return\n }\n\n const cached = this._cache.get(peer.id)\n\n if (cached && this.options.updatesWriteInterval !== 0) {\n const oldAccessHash = (cached.peer as Extract<tl.TypeInputPeer, { accessHash?: unknown }>).accessHash\n\n if (oldAccessHash?.eq(accessHash)) {\n // when entity is cached and hash is the same, an update query is needed,\n // since some field in the full entity might have changed, or the username/phone\n //\n // to avoid too many DB calls, and since these updates are pretty common,\n // they are grouped and applied in batches no more than once every 30sec (or user-defined).\n //\n // until then, they are either served from in-memory cache,\n // or an older version is fetched from DB\n\n this._pendingWrites.set(peer.id, dto)\n cached.complete = peer\n\n return\n }\n }\n\n // entity is not cached in memory, or the access hash has changed\n // we need to update it in the DB asap, and also update the in-memory cache\n await this._peers.store(dto)\n this._cache.set(peer.id, {\n peer: getInputPeer(dto),\n complete: peer,\n })\n\n // todo: if (!this._cachedSelf?.isBot) {\n // we have the full peer, we no longer need the references\n // we can skip this in the other branch, since in that case it would've already been deleted\n await this._refs.deleteByPeer(peer.id)\n }\n\n private _returnCaching(id: number, dto: IPeersRepository.PeerInfo) {\n const peer = getInputPeer(dto)\n const complete = this._deserializeTl(dto.complete)\n\n this._cache.set(id, {\n peer,\n complete: complete as tl.TypeUser | tl.TypeChat | null,\n })\n\n return peer\n }\n\n async getById(id: number, allowRefs = true): Promise<tl.TypeInputPeer | null> {\n const cached = this._cache.get(id)\n if (cached) return cached.peer\n\n const dto = await this._peers.getById(id)\n\n if (dto) {\n return this._returnCaching(id, dto)\n }\n\n if (allowRefs) {\n const ref = await this._refs.getForPeer(id)\n if (!ref) return null\n\n const [chatId, msgId] = ref\n const chat = await this.getById(chatId, false)\n if (!chat) return null\n\n if (id > 0) {\n // user\n return {\n _: 'inputPeerUserFromMessage',\n peer: chat,\n msgId,\n userId: id,\n }\n }\n\n // channel\n return {\n _: 'inputPeerChannelFromMessage',\n peer: chat,\n msgId,\n channelId: toggleChannelIdMark(id),\n }\n }\n\n return null\n }\n\n async getByPhone(phone: string): Promise<tl.TypeInputPeer | null> {\n const dto = await this._peers.getByPhone(phone)\n if (!dto) return null\n\n return this._returnCaching(dto.id, dto)\n }\n\n async getByUsername(username: string): Promise<tl.TypeInputPeer | null> {\n const dto = await this._peers.getByUsername(username.toLowerCase())\n if (!dto) return null\n\n if (Date.now() - dto.updated > USERNAME_TTL) {\n // username is too old, we can't trust it. ask the client to re-fetch it\n return null\n }\n\n return this._returnCaching(dto.id, dto)\n }\n\n async getCompleteById(id: number): Promise<tl.TypeUser | tl.TypeChat | null> {\n const cached = this._cache.get(id)\n if (cached) return cached.complete\n\n const dto = await this._peers.getById(id)\n if (!dto) return null\n\n const cacheItem: CacheItem = {\n peer: getInputPeer(dto),\n complete: this._deserializeTl(dto.complete) as tl.TypeUser | tl.TypeChat | null,\n }\n this._cache.set(id, cacheItem)\n\n return cacheItem.complete\n }\n}\n"]}
@@ -6,6 +6,9 @@ const lru_map_js_1 = require("../../../utils/lru-map.js");
6
6
  // todo: move inside updates manager?
7
7
  // todo: chatId -> channelId
8
8
  class RefMessagesService extends base_js_1.BaseService {
9
+ options;
10
+ _refs;
11
+ _cache;
9
12
  constructor(options, _refs, common) {
10
13
  super(common);
11
14
  this.options = options;
@@ -1 +1 @@
1
- {"version":3,"file":"ref-messages.js","sourceRoot":"","sources":["../../../../../src/highlevel/storage/service/ref-messages.ts"],"names":[],"mappings":";;;AAAA,8DAA8E;AAC9E,0DAAkD;AAOlD,qCAAqC;AACrC,4BAA4B;AAE5B,MAAa,kBAAmB,SAAQ,qBAAW;IAG/C,YACa,OAAkC,EAClC,KAAmC,EAC5C,MAAsB;QAEtB,KAAK,CAAC,MAAM,CAAC,CAAA;QAJJ,YAAO,GAAP,OAAO,CAA2B;QAClC,UAAK,GAAL,KAAK,CAA8B;QAK5C,IAAI,CAAC,MAAM,GAAG,IAAI,mBAAM,CAAC,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC,CAAA;IACvD,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,MAAc,EAAE,MAAc,EAAE,KAAa;QACrD,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,CAAA;QAC7C,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAA;IAC5C,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,MAAc;QAC3B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;QACtC,IAAI,MAAM;YAAE,OAAO,MAAM,CAAA;QAEzB,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA;QAC9C,IAAI,GAAG;YAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;QAErC,OAAO,GAAG,CAAA;IACd,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,MAAc,EAAE,MAAgB;QACzC,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;QACvC,8CAA8C;QAC9C,yCAAyC;QACzC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAA;IACvB,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,MAAc;QAC7B,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,CAAA;QACrC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;IAC9B,CAAC;CACJ;AAvCD,gDAuCC","sourcesContent":["import { BaseService, ServiceOptions } from '../../../storage/service/base.js'\nimport { LruMap } from '../../../utils/lru-map.js'\nimport { IReferenceMessagesRepository } from '../repository/ref-messages.js'\n\nexport interface RefMessagesServiceOptions {\n cacheSize?: number\n}\n\n// todo: move inside updates manager?\n// todo: chatId -> channelId\n\nexport class RefMessagesService extends BaseService {\n private _cache: LruMap<number, [number, number]>\n\n constructor(\n readonly options: RefMessagesServiceOptions,\n readonly _refs: IReferenceMessagesRepository,\n common: ServiceOptions,\n ) {\n super(common)\n\n this._cache = new LruMap(options.cacheSize ?? 1000)\n }\n\n async store(peerId: number, chatId: number, msgId: number): Promise<void> {\n await this._refs.store(peerId, chatId, msgId)\n this._cache.set(peerId, [chatId, msgId])\n }\n\n async getForPeer(peerId: number): Promise<[number, number] | null> {\n const cached = this._cache.get(peerId)\n if (cached) return cached\n\n const ref = await this._refs.getByPeer(peerId)\n if (ref) this._cache.set(peerId, ref)\n\n return ref\n }\n\n async delete(chatId: number, msgIds: number[]): Promise<void> {\n await this._refs.delete(chatId, msgIds)\n // it's too expensive to invalidate the cache,\n // so we just clear it completely instead\n this._cache.clear()\n }\n\n async deleteByPeer(peerId: number): Promise<void> {\n await this._refs.deleteByPeer(peerId)\n this._cache.delete(peerId)\n }\n}\n"]}
1
+ {"version":3,"file":"ref-messages.js","sourceRoot":"","sources":["../../../../../src/highlevel/storage/service/ref-messages.ts"],"names":[],"mappings":";;;AAAA,8DAA8E;AAC9E,0DAAkD;AAOlD,qCAAqC;AACrC,4BAA4B;AAE5B,MAAa,kBAAmB,SAAQ,qBAAW;IAIlC;IACA;IAJL,MAAM,CAAkC;IAEhD,YACa,OAAkC,EAClC,KAAmC,EAC5C,MAAsB;QAEtB,KAAK,CAAC,MAAM,CAAC,CAAA;QAJJ,YAAO,GAAP,OAAO,CAA2B;QAClC,UAAK,GAAL,KAAK,CAA8B;QAK5C,IAAI,CAAC,MAAM,GAAG,IAAI,mBAAM,CAAC,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC,CAAA;IACvD,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,MAAc,EAAE,MAAc,EAAE,KAAa;QACrD,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,CAAA;QAC7C,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAA;IAC5C,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,MAAc;QAC3B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;QACtC,IAAI,MAAM;YAAE,OAAO,MAAM,CAAA;QAEzB,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA;QAC9C,IAAI,GAAG;YAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;QAErC,OAAO,GAAG,CAAA;IACd,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,MAAc,EAAE,MAAgB;QACzC,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;QACvC,8CAA8C;QAC9C,yCAAyC;QACzC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAA;IACvB,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,MAAc;QAC7B,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,CAAA;QACrC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;IAC9B,CAAC;CACJ;AAvCD,gDAuCC","sourcesContent":["import { BaseService, ServiceOptions } from '../../../storage/service/base.js'\nimport { LruMap } from '../../../utils/lru-map.js'\nimport { IReferenceMessagesRepository } from '../repository/ref-messages.js'\n\nexport interface RefMessagesServiceOptions {\n cacheSize?: number\n}\n\n// todo: move inside updates manager?\n// todo: chatId -> channelId\n\nexport class RefMessagesService extends BaseService {\n private _cache: LruMap<number, [number, number]>\n\n constructor(\n readonly options: RefMessagesServiceOptions,\n readonly _refs: IReferenceMessagesRepository,\n common: ServiceOptions,\n ) {\n super(common)\n\n this._cache = new LruMap(options.cacheSize ?? 1000)\n }\n\n async store(peerId: number, chatId: number, msgId: number): Promise<void> {\n await this._refs.store(peerId, chatId, msgId)\n this._cache.set(peerId, [chatId, msgId])\n }\n\n async getForPeer(peerId: number): Promise<[number, number] | null> {\n const cached = this._cache.get(peerId)\n if (cached) return cached\n\n const ref = await this._refs.getByPeer(peerId)\n if (ref) this._cache.set(peerId, ref)\n\n return ref\n }\n\n async delete(chatId: number, msgIds: number[]): Promise<void> {\n await this._refs.delete(chatId, msgIds)\n // it's too expensive to invalidate the cache,\n // so we just clear it completely instead\n this._cache.clear()\n }\n\n async deleteByPeer(peerId: number): Promise<void> {\n await this._refs.deleteByPeer(peerId)\n this._cache.delete(peerId)\n }\n}\n"]}
@@ -10,6 +10,7 @@ const KV_SEQ = 'updates_seq';
10
10
  const KV_CHANNEL_PREFIX = 'updates_channel:';
11
11
  // todo: move inside updates manager?
12
12
  class UpdatesStateService extends base_js_1.BaseService {
13
+ _kv;
13
14
  constructor(_kv, opts) {
14
15
  super(opts);
15
16
  this._kv = _kv;
@@ -1 +1 @@
1
- {"version":3,"file":"updates.js","sourceRoot":"","sources":["../../../../../src/highlevel/storage/service/updates.ts"],"names":[],"mappings":"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","sourcesContent":["import { IKeyValueRepository } from '../../../storage/repository/key-value.js'\nimport { BaseService, ServiceOptions } from '../../../storage/service/base.js'\nimport { dataViewFromBuffer } from '../../../utils/buffer-utils.js'\n\nconst KV_PTS = 'updates_pts'\nconst KV_QTS = 'updates_qts'\nconst KV_DATE = 'updates_date'\nconst KV_SEQ = 'updates_seq'\nconst KV_CHANNEL_PREFIX = 'updates_channel:'\n\n// todo: move inside updates manager?\n\nexport class UpdatesStateService extends BaseService {\n constructor(\n readonly _kv: IKeyValueRepository,\n opts: ServiceOptions,\n ) {\n super(opts)\n }\n\n private async _getInt(key: string): Promise<number | null> {\n const val = await this._kv.get(key)\n if (!val) return null\n\n return dataViewFromBuffer(val).getInt32(0, true)\n }\n\n private async _setInt(key: string, val: number): Promise<void> {\n const buf = new Uint8Array(4)\n dataViewFromBuffer(buf).setInt32(0, val, true)\n\n await this._kv.set(key, buf)\n }\n\n async getState(): Promise<[number, number, number, number] | null> {\n const [pts, qts, date, seq] = await Promise.all([\n this._getInt(KV_PTS),\n this._getInt(KV_QTS),\n this._getInt(KV_DATE),\n this._getInt(KV_SEQ),\n ])\n\n if (pts === null || qts === null || date === null || seq === null) {\n return null\n }\n\n return [pts, qts, date, seq]\n }\n\n async setPts(pts: number): Promise<void> {\n await this._setInt(KV_PTS, pts)\n }\n\n async setQts(qts: number): Promise<void> {\n await this._setInt(KV_QTS, qts)\n }\n\n async setDate(date: number): Promise<void> {\n await this._setInt(KV_DATE, date)\n }\n\n async setSeq(seq: number): Promise<void> {\n await this._setInt(KV_SEQ, seq)\n }\n\n async getChannelPts(channelId: number): Promise<number | null> {\n const val = await this._kv.get(KV_CHANNEL_PREFIX + channelId)\n if (!val) return null\n\n return dataViewFromBuffer(val).getUint32(0, true)\n }\n\n async setChannelPts(channelId: number, pts: number): Promise<void> {\n const buf = new Uint8Array(4)\n dataViewFromBuffer(buf).setUint32(0, pts, true)\n\n await this._kv.set(KV_CHANNEL_PREFIX + channelId, buf)\n }\n\n async setManyChannelPts(cpts: Map<number, number>): Promise<void> {\n const promises: Promise<void>[] = []\n\n for (const [channelId, pts] of cpts.entries()) {\n promises.push(this.setChannelPts(channelId, pts))\n }\n\n await Promise.all(promises)\n }\n}\n"]}
1
+ {"version":3,"file":"updates.js","sourceRoot":"","sources":["../../../../../src/highlevel/storage/service/updates.ts"],"names":[],"mappings":"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","sourcesContent":["import { IKeyValueRepository } from '../../../storage/repository/key-value.js'\nimport { BaseService, ServiceOptions } from '../../../storage/service/base.js'\nimport { dataViewFromBuffer } from '../../../utils/buffer-utils.js'\n\nconst KV_PTS = 'updates_pts'\nconst KV_QTS = 'updates_qts'\nconst KV_DATE = 'updates_date'\nconst KV_SEQ = 'updates_seq'\nconst KV_CHANNEL_PREFIX = 'updates_channel:'\n\n// todo: move inside updates manager?\n\nexport class UpdatesStateService extends BaseService {\n constructor(\n readonly _kv: IKeyValueRepository,\n opts: ServiceOptions,\n ) {\n super(opts)\n }\n\n private async _getInt(key: string): Promise<number | null> {\n const val = await this._kv.get(key)\n if (!val) return null\n\n return dataViewFromBuffer(val).getInt32(0, true)\n }\n\n private async _setInt(key: string, val: number): Promise<void> {\n const buf = new Uint8Array(4)\n dataViewFromBuffer(buf).setInt32(0, val, true)\n\n await this._kv.set(key, buf)\n }\n\n async getState(): Promise<[number, number, number, number] | null> {\n const [pts, qts, date, seq] = await Promise.all([\n this._getInt(KV_PTS),\n this._getInt(KV_QTS),\n this._getInt(KV_DATE),\n this._getInt(KV_SEQ),\n ])\n\n if (pts === null || qts === null || date === null || seq === null) {\n return null\n }\n\n return [pts, qts, date, seq]\n }\n\n async setPts(pts: number): Promise<void> {\n await this._setInt(KV_PTS, pts)\n }\n\n async setQts(qts: number): Promise<void> {\n await this._setInt(KV_QTS, qts)\n }\n\n async setDate(date: number): Promise<void> {\n await this._setInt(KV_DATE, date)\n }\n\n async setSeq(seq: number): Promise<void> {\n await this._setInt(KV_SEQ, seq)\n }\n\n async getChannelPts(channelId: number): Promise<number | null> {\n const val = await this._kv.get(KV_CHANNEL_PREFIX + channelId)\n if (!val) return null\n\n return dataViewFromBuffer(val).getUint32(0, true)\n }\n\n async setChannelPts(channelId: number, pts: number): Promise<void> {\n const buf = new Uint8Array(4)\n dataViewFromBuffer(buf).setUint32(0, pts, true)\n\n await this._kv.set(KV_CHANNEL_PREFIX + channelId, buf)\n }\n\n async setManyChannelPts(cpts: Map<number, number>): Promise<void> {\n const promises: Promise<void>[] = []\n\n for (const [channelId, pts] of cpts.entries()) {\n promises.push(this.setChannelPts(channelId, pts))\n }\n\n await Promise.all(promises)\n }\n}\n"]}
@@ -11,12 +11,12 @@ interface TelegramStorageManagerOptions {
11
11
  export declare class TelegramStorageManager {
12
12
  private mt;
13
13
  private options;
14
- constructor(mt: StorageManager, options: TelegramStorageManagerOptions & TelegramStorageManagerExtraOptions);
15
14
  private provider;
16
15
  readonly updates: UpdatesStateService;
17
16
  readonly self: PublicPart<CurrentUserService>;
18
17
  readonly refMsgs: RefMessagesService;
19
18
  readonly peers: PublicPart<PeersService>;
19
+ constructor(mt: StorageManager, options: TelegramStorageManagerOptions & TelegramStorageManagerExtraOptions);
20
20
  clear(withAuthKeys?: boolean): Promise<void>;
21
21
  }
22
22
  export {};
@@ -6,14 +6,27 @@ const peers_js_1 = require("./service/peers.js");
6
6
  const ref_messages_js_1 = require("./service/ref-messages.js");
7
7
  const updates_js_1 = require("./service/updates.js");
8
8
  class TelegramStorageManager {
9
+ mt;
10
+ options;
11
+ provider;
12
+ updates;
13
+ self;
14
+ refMsgs;
15
+ peers;
9
16
  constructor(mt, options) {
10
17
  this.mt = mt;
11
18
  this.options = options;
12
19
  this.provider = this.options.provider;
13
- this.updates = new updates_js_1.UpdatesStateService(this.provider.kv, this.mt._serviceOptions);
14
- this.self = new current_user_js_1.CurrentUserService(this.provider.kv, this.mt._serviceOptions);
15
- this.refMsgs = new ref_messages_js_1.RefMessagesService(this.options.refMessages ?? {}, this.provider.refMessages, this.mt._serviceOptions);
16
- this.peers = new peers_js_1.PeersService(this.options.peers ?? {}, this.provider.peers, this.refMsgs, this.mt._serviceOptions);
20
+ const serviceOptions = {
21
+ driver: this.mt.driver,
22
+ readerMap: this.mt.options.readerMap,
23
+ writerMap: this.mt.options.writerMap,
24
+ log: this.mt.log,
25
+ };
26
+ this.updates = new updates_js_1.UpdatesStateService(this.provider.kv, serviceOptions);
27
+ this.self = new current_user_js_1.CurrentUserService(this.provider.kv, serviceOptions);
28
+ this.refMsgs = new ref_messages_js_1.RefMessagesService(this.options.refMessages ?? {}, this.provider.refMessages, serviceOptions);
29
+ this.peers = new peers_js_1.PeersService(this.options.peers ?? {}, this.provider.peers, this.refMsgs, serviceOptions);
17
30
  }
18
31
  async clear(withAuthKeys = false) {
19
32
  await this.provider.peers.deleteAll();
@@ -1 +1 @@
1
- {"version":3,"file":"storage.js","sourceRoot":"","sources":["../../../../src/highlevel/storage/storage.ts"],"names":[],"mappings":";;;AAGA,+DAA8D;AAC9D,iDAAsE;AACtE,+DAAyF;AACzF,qDAA0D;AAY1D,MAAa,sBAAsB;IAC/B,YACY,EAAkB,EAClB,OAA2E;QAD3E,OAAE,GAAF,EAAE,CAAgB;QAClB,YAAO,GAAP,OAAO,CAAoE;QAG/E,aAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAA;QAE/B,YAAO,GAAG,IAAI,gCAAmB,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC,eAAe,CAAC,CAAA;QAC5E,SAAI,GAAmC,IAAI,oCAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC,eAAe,CAAC,CAAA;QACxG,YAAO,GAAG,IAAI,oCAAkB,CACrC,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,EAAE,EAC9B,IAAI,CAAC,QAAQ,CAAC,WAAW,EACzB,IAAI,CAAC,EAAE,CAAC,eAAe,CAC1B,CAAA;QACQ,UAAK,GAA6B,IAAI,uBAAY,CACvD,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,EACxB,IAAI,CAAC,QAAQ,CAAC,KAAK,EACnB,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,EAAE,CAAC,eAAe,CAC1B,CAAA;IAhBE,CAAC;IAkBJ,KAAK,CAAC,KAAK,CAAC,YAAY,GAAG,KAAK;QAC5B,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,EAAE,CAAA;QACrC,MAAM,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,SAAS,EAAE,CAAA;QAC3C,MAAM,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,CAAA;IACrC,CAAC;CACJ;AA3BD,wDA2BC","sourcesContent":["import { StorageManager } from '../../storage/storage.js'\nimport { PublicPart } from '../../types/utils.js'\nimport { ITelegramStorageProvider } from './provider.js'\nimport { CurrentUserService } from './service/current-user.js'\nimport { PeersService, PeersServiceOptions } from './service/peers.js'\nimport { RefMessagesService, RefMessagesServiceOptions } from './service/ref-messages.js'\nimport { UpdatesStateService } from './service/updates.js'\n\ninterface TelegramStorageManagerOptions {\n provider: ITelegramStorageProvider\n}\n\n/** @internal */\nexport interface TelegramStorageManagerExtraOptions {\n refMessages?: RefMessagesServiceOptions\n peers?: PeersServiceOptions\n}\n\nexport class TelegramStorageManager {\n constructor(\n private mt: StorageManager,\n private options: TelegramStorageManagerOptions & TelegramStorageManagerExtraOptions,\n ) {}\n\n private provider = this.options.provider\n\n readonly updates = new UpdatesStateService(this.provider.kv, this.mt._serviceOptions)\n readonly self: PublicPart<CurrentUserService> = new CurrentUserService(this.provider.kv, this.mt._serviceOptions)\n readonly refMsgs = new RefMessagesService(\n this.options.refMessages ?? {},\n this.provider.refMessages,\n this.mt._serviceOptions,\n )\n readonly peers: PublicPart<PeersService> = new PeersService(\n this.options.peers ?? {},\n this.provider.peers,\n this.refMsgs,\n this.mt._serviceOptions,\n )\n\n async clear(withAuthKeys = false) {\n await this.provider.peers.deleteAll()\n await this.provider.refMessages.deleteAll()\n await this.mt.clear(withAuthKeys)\n }\n}\n"]}
1
+ {"version":3,"file":"storage.js","sourceRoot":"","sources":["../../../../src/highlevel/storage/storage.ts"],"names":[],"mappings":";;;AAIA,+DAA8D;AAC9D,iDAAsE;AACtE,+DAAyF;AACzF,qDAA0D;AAY1D,MAAa,sBAAsB;IASnB;IACA;IATJ,QAAQ,CAAA;IAEP,OAAO,CAAA;IACP,IAAI,CAAgC;IACpC,OAAO,CAAA;IACP,KAAK,CAA0B;IAExC,YACY,EAAkB,EAClB,OAA2E;QAD3E,OAAE,GAAF,EAAE,CAAgB;QAClB,YAAO,GAAP,OAAO,CAAoE;QAEnF,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAA;QAErC,MAAM,cAAc,GAAmB;YACnC,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,MAAM;YACtB,SAAS,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,SAAS;YACpC,SAAS,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,SAAS;YACpC,GAAG,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG;SACnB,CAAA;QAED,IAAI,CAAC,OAAO,GAAG,IAAI,gCAAmB,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,cAAc,CAAC,CAAA;QACxE,IAAI,CAAC,IAAI,GAAG,IAAI,oCAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,cAAc,CAAC,CAAA;QACpE,IAAI,CAAC,OAAO,GAAG,IAAI,oCAAkB,CACjC,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,EAAE,EAC9B,IAAI,CAAC,QAAQ,CAAC,WAAW,EACzB,cAAc,CACjB,CAAA;QACD,IAAI,CAAC,KAAK,GAAG,IAAI,uBAAY,CACzB,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,EACxB,IAAI,CAAC,QAAQ,CAAC,KAAK,EACnB,IAAI,CAAC,OAAO,EACZ,cAAc,CACjB,CAAA;IACL,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,YAAY,GAAG,KAAK;QAC5B,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,EAAE,CAAA;QACrC,MAAM,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,SAAS,EAAE,CAAA;QAC3C,MAAM,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,CAAA;IACrC,CAAC;CACJ;AAzCD,wDAyCC","sourcesContent":["import { ServiceOptions } from '../../storage/service/base.js'\nimport { StorageManager } from '../../storage/storage.js'\nimport { PublicPart } from '../../types/utils.js'\nimport { ITelegramStorageProvider } from './provider.js'\nimport { CurrentUserService } from './service/current-user.js'\nimport { PeersService, PeersServiceOptions } from './service/peers.js'\nimport { RefMessagesService, RefMessagesServiceOptions } from './service/ref-messages.js'\nimport { UpdatesStateService } from './service/updates.js'\n\ninterface TelegramStorageManagerOptions {\n provider: ITelegramStorageProvider\n}\n\n/** @internal */\nexport interface TelegramStorageManagerExtraOptions {\n refMessages?: RefMessagesServiceOptions\n peers?: PeersServiceOptions\n}\n\nexport class TelegramStorageManager {\n private provider\n\n readonly updates\n readonly self: PublicPart<CurrentUserService>\n readonly refMsgs\n readonly peers: PublicPart<PeersService>\n\n constructor(\n private mt: StorageManager,\n private options: TelegramStorageManagerOptions & TelegramStorageManagerExtraOptions,\n ) {\n this.provider = this.options.provider\n\n const serviceOptions: ServiceOptions = {\n driver: this.mt.driver,\n readerMap: this.mt.options.readerMap,\n writerMap: this.mt.options.writerMap,\n log: this.mt.log,\n }\n\n this.updates = new UpdatesStateService(this.provider.kv, serviceOptions)\n this.self = new CurrentUserService(this.provider.kv, serviceOptions)\n this.refMsgs = new RefMessagesService(\n this.options.refMessages ?? {},\n this.provider.refMessages,\n serviceOptions,\n )\n this.peers = new PeersService(\n this.options.peers ?? {},\n this.provider.peers,\n this.refMsgs,\n serviceOptions,\n )\n }\n\n async clear(withAuthKeys = false) {\n await this.provider.peers.deleteAll()\n await this.provider.refMessages.deleteAll()\n await this.mt.clear(withAuthKeys)\n }\n}\n"]}
@@ -24,6 +24,7 @@ const nextCodeMap = {
24
24
  * Information about sent confirmation code
25
25
  */
26
26
  class SentCode {
27
+ raw;
27
28
  constructor(raw) {
28
29
  this.raw = raw;
29
30
  }
@@ -1 +1 @@
1
- {"version":3,"file":"sent-code.js","sourceRoot":"","sources":["../../../../../src/highlevel/types/auth/sent-code.ts"],"names":[],"mappings":";;;AAEA,mDAAsD;AAEtD,MAAM,WAAW,GAAgE;IAC7E,sBAAsB,EAAE,KAAK;IAC7B,uBAAuB,EAAE,MAAM;IAC/B,4BAA4B,EAAE,YAAY;IAC1C,sBAAsB,EAAE,KAAK;IAC7B,6BAA6B,EAAE,aAAa;IAC5C,4BAA4B,EAAE,OAAO;IACrC,qCAAqC,EAAE,gBAAgB;IACvD,8BAA8B,EAAE,UAAU;IAC1C,8BAA8B,EAAE,UAAU;CAC7C,CAAA;AAED,MAAM,WAAW,GAA4D;IACzE,mBAAmB,EAAE,MAAM;IAC3B,wBAAwB,EAAE,YAAY;IACtC,kBAAkB,EAAE,KAAK;IACzB,yBAAyB,EAAE,aAAa;IACxC,0BAA0B,EAAE,UAAU;CACzC,CAAA;AAmCD;;GAEG;AACH,MAAa,QAAQ;IACjB,YAAqB,GAAwB;QAAxB,QAAG,GAAH,GAAG,CAAqB;IAAG,CAAC;IAEjD;;OAEG;IACH,IAAI,IAAI;QACJ,OAAO,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACvC,CAAC;IAED;;;OAGG;IACH,IAAI,QAAQ;QACR,OAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAA;IACxE,CAAC;IAED;;;OAGG;IACH,IAAI,aAAa;QACb,OAAO,IAAI,CAAC,GAAG,CAAC,aAAa,CAAA;IACjC,CAAC;IAED;;OAEG;IACH,IAAI,OAAO;QACP,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,IAAI,CAAC,CAAA;IAChC,CAAC;IAED;;OAEG;IACH,IAAI,MAAM;QACN,OAAO,QAAQ,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;IAC/D,CAAC;CACJ;AAvCD,4BAuCC;AAED,IAAA,0BAAe,EAAC,QAAQ,CAAC,CAAA","sourcesContent":["import { tl } from '@mtcute/tl'\n\nimport { makeInspectable } from '../../utils/index.js'\n\nconst sentCodeMap: Record<tl.auth.TypeSentCodeType['_'], SentCodeDeliveryType> = {\n 'auth.sentCodeTypeApp': 'app',\n 'auth.sentCodeTypeCall': 'call',\n 'auth.sentCodeTypeFlashCall': 'flash_call',\n 'auth.sentCodeTypeSms': 'sms',\n 'auth.sentCodeTypeMissedCall': 'missed_call',\n 'auth.sentCodeTypeEmailCode': 'email',\n 'auth.sentCodeTypeSetUpEmailRequired': 'email_required',\n 'auth.sentCodeTypeFragmentSms': 'fragment',\n 'auth.sentCodeTypeFirebaseSms': 'firebase',\n}\n\nconst nextCodeMap: Record<tl.auth.TypeCodeType['_'], NextCodeDeliveryType> = {\n 'auth.codeTypeCall': 'call',\n 'auth.codeTypeFlashCall': 'flash_call',\n 'auth.codeTypeSms': 'sms',\n 'auth.codeTypeMissedCall': 'missed_call',\n 'auth.codeTypeFragmentSms': 'fragment',\n}\n\n/**\n * Type describing code delivery type.\n * - `app`: Code is delivered via Telegram account\n * - `sms`: Code is sent via SMS\n * - `call`: Code is sent via voice call\n * - `flash_call`: Code is the last 5 digits of the caller's phone number\n * - `missed_call`: Code is the last 5 digits of the caller's phone number\n * - `email`: Code is sent via Email\n * - `email_required`: Code sending via email setup is required\n * - `fragment`: Code is sent via Fragment anonymous numbers\n * - `firebase`: Code is sent via Firebase\n * - `Success`: Code is not needed, you're already logged in (only for future auth tokens)\n */\nexport type SentCodeDeliveryType =\n | 'app'\n | 'sms'\n | 'call'\n | 'flash_call'\n | 'missed_call'\n | 'email'\n | 'email_required'\n | 'fragment'\n | 'firebase'\n | 'success'\n\n/**\n * Type describing next code delivery type.\n * See {@link DeliveryType} for information on values.\n *\n * Additionally, can be `none` if no more types are available\n */\nexport type NextCodeDeliveryType = Exclude<SentCodeDeliveryType, 'app'> | 'none'\n\n/**\n * Information about sent confirmation code\n */\nexport class SentCode {\n constructor(readonly raw: tl.auth.RawSentCode) {}\n\n /**\n * Type of currently sent confirmation code\n */\n get type(): SentCodeDeliveryType {\n return sentCodeMap[this.raw.type._]\n }\n\n /**\n * Type of the confirmation code that will be sent\n * if you call {@link TelegramClient.resendCode}.\n */\n get nextType(): NextCodeDeliveryType {\n return this.raw.nextType ? nextCodeMap[this.raw.nextType._] : 'none'\n }\n\n /**\n * Confirmation code identifier used for the next authorization steps\n * (like {@link TelegramClient.signIn} and {@link TelegramClient.signUp})\n */\n get phoneCodeHash(): string {\n return this.raw.phoneCodeHash\n }\n\n /**\n * Delay in seconds to wait before calling {@link TelegramClient.resendCode}\n */\n get timeout(): number {\n return this.raw.timeout ?? 0\n }\n\n /**\n * Length of the code (0 for flash calls)\n */\n get length(): number {\n return 'length' in this.raw.type ? this.raw.type.length : 0\n }\n}\n\nmakeInspectable(SentCode)\n"]}
1
+ {"version":3,"file":"sent-code.js","sourceRoot":"","sources":["../../../../../src/highlevel/types/auth/sent-code.ts"],"names":[],"mappings":";;;AAEA,mDAAsD;AAEtD,MAAM,WAAW,GAAgE;IAC7E,sBAAsB,EAAE,KAAK;IAC7B,uBAAuB,EAAE,MAAM;IAC/B,4BAA4B,EAAE,YAAY;IAC1C,sBAAsB,EAAE,KAAK;IAC7B,6BAA6B,EAAE,aAAa;IAC5C,4BAA4B,EAAE,OAAO;IACrC,qCAAqC,EAAE,gBAAgB;IACvD,8BAA8B,EAAE,UAAU;IAC1C,8BAA8B,EAAE,UAAU;CAC7C,CAAA;AAED,MAAM,WAAW,GAA4D;IACzE,mBAAmB,EAAE,MAAM;IAC3B,wBAAwB,EAAE,YAAY;IACtC,kBAAkB,EAAE,KAAK;IACzB,yBAAyB,EAAE,aAAa;IACxC,0BAA0B,EAAE,UAAU;CACzC,CAAA;AAmCD;;GAEG;AACH,MAAa,QAAQ;IACI;IAArB,YAAqB,GAAwB;QAAxB,QAAG,GAAH,GAAG,CAAqB;IAAG,CAAC;IAEjD;;OAEG;IACH,IAAI,IAAI;QACJ,OAAO,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACvC,CAAC;IAED;;;OAGG;IACH,IAAI,QAAQ;QACR,OAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAA;IACxE,CAAC;IAED;;;OAGG;IACH,IAAI,aAAa;QACb,OAAO,IAAI,CAAC,GAAG,CAAC,aAAa,CAAA;IACjC,CAAC;IAED;;OAEG;IACH,IAAI,OAAO;QACP,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,IAAI,CAAC,CAAA;IAChC,CAAC;IAED;;OAEG;IACH,IAAI,MAAM;QACN,OAAO,QAAQ,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;IAC/D,CAAC;CACJ;AAvCD,4BAuCC;AAED,IAAA,0BAAe,EAAC,QAAQ,CAAC,CAAA","sourcesContent":["import { tl } from '@mtcute/tl'\n\nimport { makeInspectable } from '../../utils/index.js'\n\nconst sentCodeMap: Record<tl.auth.TypeSentCodeType['_'], SentCodeDeliveryType> = {\n 'auth.sentCodeTypeApp': 'app',\n 'auth.sentCodeTypeCall': 'call',\n 'auth.sentCodeTypeFlashCall': 'flash_call',\n 'auth.sentCodeTypeSms': 'sms',\n 'auth.sentCodeTypeMissedCall': 'missed_call',\n 'auth.sentCodeTypeEmailCode': 'email',\n 'auth.sentCodeTypeSetUpEmailRequired': 'email_required',\n 'auth.sentCodeTypeFragmentSms': 'fragment',\n 'auth.sentCodeTypeFirebaseSms': 'firebase',\n}\n\nconst nextCodeMap: Record<tl.auth.TypeCodeType['_'], NextCodeDeliveryType> = {\n 'auth.codeTypeCall': 'call',\n 'auth.codeTypeFlashCall': 'flash_call',\n 'auth.codeTypeSms': 'sms',\n 'auth.codeTypeMissedCall': 'missed_call',\n 'auth.codeTypeFragmentSms': 'fragment',\n}\n\n/**\n * Type describing code delivery type.\n * - `app`: Code is delivered via Telegram account\n * - `sms`: Code is sent via SMS\n * - `call`: Code is sent via voice call\n * - `flash_call`: Code is the last 5 digits of the caller's phone number\n * - `missed_call`: Code is the last 5 digits of the caller's phone number\n * - `email`: Code is sent via Email\n * - `email_required`: Code sending via email setup is required\n * - `fragment`: Code is sent via Fragment anonymous numbers\n * - `firebase`: Code is sent via Firebase\n * - `Success`: Code is not needed, you're already logged in (only for future auth tokens)\n */\nexport type SentCodeDeliveryType =\n | 'app'\n | 'sms'\n | 'call'\n | 'flash_call'\n | 'missed_call'\n | 'email'\n | 'email_required'\n | 'fragment'\n | 'firebase'\n | 'success'\n\n/**\n * Type describing next code delivery type.\n * See {@link DeliveryType} for information on values.\n *\n * Additionally, can be `none` if no more types are available\n */\nexport type NextCodeDeliveryType = Exclude<SentCodeDeliveryType, 'app'> | 'none'\n\n/**\n * Information about sent confirmation code\n */\nexport class SentCode {\n constructor(readonly raw: tl.auth.RawSentCode) {}\n\n /**\n * Type of currently sent confirmation code\n */\n get type(): SentCodeDeliveryType {\n return sentCodeMap[this.raw.type._]\n }\n\n /**\n * Type of the confirmation code that will be sent\n * if you call {@link TelegramClient.resendCode}.\n */\n get nextType(): NextCodeDeliveryType {\n return this.raw.nextType ? nextCodeMap[this.raw.nextType._] : 'none'\n }\n\n /**\n * Confirmation code identifier used for the next authorization steps\n * (like {@link TelegramClient.signIn} and {@link TelegramClient.signUp})\n */\n get phoneCodeHash(): string {\n return this.raw.phoneCodeHash\n }\n\n /**\n * Delay in seconds to wait before calling {@link TelegramClient.resendCode}\n */\n get timeout(): number {\n return this.raw.timeout ?? 0\n }\n\n /**\n * Length of the code (0 for flash calls)\n */\n get length(): number {\n return 'length' in this.raw.type ? this.raw.type.length : 0\n }\n}\n\nmakeInspectable(SentCode)\n"]}
@@ -8,6 +8,8 @@ const user_js_1 = require("../peers/user.js");
8
8
  * Game high score
9
9
  */
10
10
  class GameHighScore {
11
+ raw;
12
+ _peers;
11
13
  constructor(raw, _peers) {
12
14
  this.raw = raw;
13
15
  this._peers = _peers;
@@ -1 +1 @@
1
- {"version":3,"file":"game-high-score.js","sourceRoot":"","sources":["../../../../../src/highlevel/types/bots/game-high-score.ts"],"names":[],"mappings":";;;AAEA,mDAAsD;AACtD,uDAAuD;AAEvD,8CAAuC;AAEvC;;GAEG;AACH,MAAa,aAAa;IACtB,YACa,GAAoB,EACpB,MAAkB;QADlB,QAAG,GAAH,GAAG,CAAiB;QACpB,WAAM,GAAN,MAAM,CAAY;IAC5B,CAAC;IAEJ;;OAEG;IACH,IAAI,IAAI;QACJ,OAAO,IAAI,cAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAA;IACtD,CAAC;IAED;;OAEG;IACH,IAAI,QAAQ;QACR,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAA;IACvB,CAAC;IAED;;OAEG;IACH,IAAI,KAAK;QACL,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,CAAA;IACzB,CAAC;CACJ;AA1BD,sCA0BC;AAED,IAAA,2BAAc,EAAC,aAAa,EAAE,CAAC,MAAM,CAAC,CAAC,CAAA;AACvC,IAAA,0BAAe,EAAC,aAAa,CAAC,CAAA","sourcesContent":["import { tl } from '@mtcute/tl'\n\nimport { makeInspectable } from '../../utils/index.js'\nimport { memoizeGetters } from '../../utils/memoize.js'\nimport { PeersIndex } from '../peers/peers-index.js'\nimport { User } from '../peers/user.js'\n\n/**\n * Game high score\n */\nexport class GameHighScore {\n constructor(\n readonly raw: tl.RawHighScore,\n readonly _peers: PeersIndex,\n ) {}\n\n /**\n * User who has scored this score\n */\n get user(): User {\n return new User(this._peers.user(this.raw.userId))\n }\n\n /**\n * Position in the records list\n */\n get position(): number {\n return this.raw.pos\n }\n\n /**\n * Score\n */\n get score(): number {\n return this.raw.score\n }\n}\n\nmemoizeGetters(GameHighScore, ['user'])\nmakeInspectable(GameHighScore)\n"]}
1
+ {"version":3,"file":"game-high-score.js","sourceRoot":"","sources":["../../../../../src/highlevel/types/bots/game-high-score.ts"],"names":[],"mappings":";;;AAEA,mDAAsD;AACtD,uDAAuD;AAEvD,8CAAuC;AAEvC;;GAEG;AACH,MAAa,aAAa;IAET;IACA;IAFb,YACa,GAAoB,EACpB,MAAkB;QADlB,QAAG,GAAH,GAAG,CAAiB;QACpB,WAAM,GAAN,MAAM,CAAY;IAC5B,CAAC;IAEJ;;OAEG;IACH,IAAI,IAAI;QACJ,OAAO,IAAI,cAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAA;IACtD,CAAC;IAED;;OAEG;IACH,IAAI,QAAQ;QACR,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAA;IACvB,CAAC;IAED;;OAEG;IACH,IAAI,KAAK;QACL,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,CAAA;IACzB,CAAC;CACJ;AA1BD,sCA0BC;AAED,IAAA,2BAAc,EAAC,aAAa,EAAE,CAAC,MAAM,CAAC,CAAC,CAAA;AACvC,IAAA,0BAAe,EAAC,aAAa,CAAC,CAAA","sourcesContent":["import { tl } from '@mtcute/tl'\n\nimport { makeInspectable } from '../../utils/index.js'\nimport { memoizeGetters } from '../../utils/memoize.js'\nimport { PeersIndex } from '../peers/peers-index.js'\nimport { User } from '../peers/user.js'\n\n/**\n * Game high score\n */\nexport class GameHighScore {\n constructor(\n readonly raw: tl.RawHighScore,\n readonly _peers: PeersIndex,\n ) {}\n\n /**\n * User who has scored this score\n */\n get user(): User {\n return new User(this._peers.user(this.raw.userId))\n }\n\n /**\n * Position in the records list\n */\n get position(): number {\n return this.raw.pos\n }\n\n /**\n * Score\n */\n get score(): number {\n return this.raw.score\n }\n}\n\nmemoizeGetters(GameHighScore, ['user'])\nmakeInspectable(GameHighScore)\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"factories.js","sourceRoot":"","sources":["../../../../../../src/highlevel/types/bots/inline-message/factories.ts"],"names":[],"mappings":"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","sourcesContent":["import { tl } from '@mtcute/tl'\n\nimport { assertNever } from '../../../../types/utils.js'\nimport { ITelegramClient } from '../../../client.types.js'\nimport { _normalizeInputText } from '../../../methods/misc/normalize-text.js'\nimport { InputText } from '../../../types/misc/entities.js'\nimport { InputMediaGeoLive } from '../../media/index.js'\nimport { BotKeyboard } from '../keyboards/index.js'\nimport {\n InputInlineMessage,\n InputInlineMessageContact,\n InputInlineMessageGame,\n InputInlineMessageGeo,\n InputInlineMessageGeoLive,\n InputInlineMessageMedia,\n InputInlineMessageText,\n InputInlineMessageVenue,\n InputInlineMessageWebpage,\n} from './types.js'\n\n/**\n * Create a text inline message\n *\n * @param text Message text\n * @param params\n */\nexport function text(\n text: InputText,\n params: Omit<InputInlineMessageText, 'type' | 'text'> = {},\n): InputInlineMessageText {\n const ret = params as tl.Mutable<InputInlineMessageText>\n ret.type = 'text'\n ret.text = text\n\n return ret\n}\n\n/**\n * Create an inline message containing\n * media from the result\n */\nexport function media(params: Omit<InputInlineMessageMedia, 'type'> = {}): InputInlineMessageMedia {\n const ret = params as tl.Mutable<InputInlineMessageMedia>\n ret.type = 'media'\n\n return ret\n}\n\n/**\n * Create an inline message containing a geolocation\n *\n * @param params Additional parameters\n */\nexport function geo(params: Omit<InputInlineMessageGeo, 'type'>): InputInlineMessageGeo {\n const ret = params as tl.Mutable<InputInlineMessageGeo>\n ret.type = 'geo'\n\n return ret\n}\n\n/**\n * Create an inline message containing a live geolocation\n *\n * @param params Additional parameters\n */\nexport function geoLive(params: Omit<InputInlineMessageGeoLive, 'type'>): InputInlineMessageGeoLive {\n const ret = params as tl.Mutable<InputInlineMessageGeoLive>\n ret.type = 'geo_live'\n\n return ret\n}\n\n/**\n * Create an inline message containing a venue\n */\nexport function venue(params: Omit<InputInlineMessageVenue, 'type'>): InputInlineMessageVenue {\n const ret = params as tl.Mutable<InputInlineMessageVenue>\n ret.type = 'venue'\n\n return ret\n}\n\n/**\n * Create an inline message containing a game\n * from the inline result\n */\nexport function game(params: Omit<InputInlineMessageGame, 'type'>): InputInlineMessageGame {\n const ret = params as tl.Mutable<InputInlineMessageGame>\n ret.type = 'game'\n\n return ret\n}\n\n/**\n * Create an inline message containing a contact\n */\nexport function contact(params: Omit<InputInlineMessageContact, 'type'>): InputInlineMessageContact {\n const ret = params as tl.Mutable<InputInlineMessageContact>\n ret.type = 'contact'\n\n return ret\n}\n\n/**\n * Create an inline message containing a webpage\n */\nexport function webpage(params: Omit<InputInlineMessageWebpage, 'type'>): InputInlineMessageWebpage {\n const ret = params as tl.Mutable<InputInlineMessageWebpage>\n ret.type = 'webpage'\n\n return ret\n}\n\n/** @internal */\nexport async function _convertToTl(\n client: ITelegramClient,\n obj: InputInlineMessage,\n): Promise<tl.TypeInputBotInlineMessage> {\n switch (obj.type) {\n case 'text': {\n const [message, entities] = await _normalizeInputText(client, obj.text)\n\n return {\n _: 'inputBotInlineMessageText',\n message,\n entities,\n replyMarkup: BotKeyboard._convertToTl(obj.replyMarkup),\n invertMedia: obj.invertMedia,\n }\n }\n case 'media': {\n const [message, entities] = await _normalizeInputText(client, obj.text)\n\n return {\n _: 'inputBotInlineMessageMediaAuto',\n message,\n entities,\n replyMarkup: BotKeyboard._convertToTl(obj.replyMarkup),\n invertMedia: obj.invertMedia,\n }\n }\n case 'geo':\n case 'geo_live':\n return {\n _: 'inputBotInlineMessageMediaGeo',\n geoPoint: {\n _: 'inputGeoPoint',\n lat: obj.latitude,\n long: obj.longitude,\n },\n // fields will be `undefined` if this is a `geo`\n heading: (obj as InputMediaGeoLive).heading,\n period: (obj as InputMediaGeoLive).period,\n proximityNotificationRadius: (obj as InputMediaGeoLive).proximityNotificationRadius,\n replyMarkup: BotKeyboard._convertToTl(obj.replyMarkup),\n }\n case 'venue':\n return {\n _: 'inputBotInlineMessageMediaVenue',\n geoPoint: {\n _: 'inputGeoPoint',\n lat: obj.latitude,\n long: obj.longitude,\n },\n title: obj.title,\n address: obj.address,\n provider: obj.source?.provider ?? '',\n venueId: obj.source?.id ?? '',\n venueType: obj.source?.type ?? '',\n replyMarkup: BotKeyboard._convertToTl(obj.replyMarkup),\n }\n case 'game':\n return {\n _: 'inputBotInlineMessageGame',\n replyMarkup: BotKeyboard._convertToTl(obj.replyMarkup),\n }\n case 'contact':\n return {\n _: 'inputBotInlineMessageMediaContact',\n phoneNumber: obj.phone,\n firstName: obj.firstName,\n lastName: obj.lastName ?? '',\n vcard: obj.vcard ?? '',\n replyMarkup: BotKeyboard._convertToTl(obj.replyMarkup),\n }\n case 'webpage': {\n const [message, entities] = await _normalizeInputText(client, obj.text)\n\n return {\n _: 'inputBotInlineMessageMediaWebPage',\n message,\n entities,\n replyMarkup: BotKeyboard._convertToTl(obj.replyMarkup),\n invertMedia: obj.invertMedia,\n forceLargeMedia: obj.size === 'large',\n forceSmallMedia: obj.size === 'small',\n optional: !obj.required,\n url: obj.url,\n }\n }\n default:\n assertNever(obj)\n }\n}\n"]}
1
+ {"version":3,"file":"factories.js","sourceRoot":"","sources":["../../../../../../src/highlevel/types/bots/inline-message/factories.ts"],"names":[],"mappings":"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","sourcesContent":["import { tl } from '@mtcute/tl'\n\nimport { assertNever } from '../../../../types/utils.js'\nimport { ITelegramClient } from '../../../client.types.js'\nimport { _normalizeInputText } from '../../../methods/misc/normalize-text.js'\nimport { InputText } from '../../../types/misc/entities.js'\nimport { InputMediaGeoLive } from '../../media/index.js'\nimport { BotKeyboard } from '../keyboards/index.js'\nimport {\n InputInlineMessage,\n InputInlineMessageContact,\n InputInlineMessageGame,\n InputInlineMessageGeo,\n InputInlineMessageGeoLive,\n InputInlineMessageMedia,\n InputInlineMessageText,\n InputInlineMessageVenue,\n InputInlineMessageWebpage,\n} from './types.js'\n\n/**\n * Create a text inline message\n *\n * @param text Message text\n * @param params\n */\nexport function text(\n text: InputText,\n params: Omit<InputInlineMessageText, 'type' | 'text'> = {},\n): InputInlineMessageText {\n const ret = params as tl.Mutable<InputInlineMessageText>\n ret.type = 'text'\n ret.text = text\n\n return ret\n}\n\n/**\n * Create an inline message containing\n * media from the result\n */\nexport function media(params: Omit<InputInlineMessageMedia, 'type'> = {}): InputInlineMessageMedia {\n const ret = params as tl.Mutable<InputInlineMessageMedia>\n ret.type = 'media'\n\n return ret\n}\n\n/**\n * Create an inline message containing a geolocation\n *\n * @param params Additional parameters\n */\nexport function geo(params: Omit<InputInlineMessageGeo, 'type'>): InputInlineMessageGeo {\n const ret = params as tl.Mutable<InputInlineMessageGeo>\n ret.type = 'geo'\n\n return ret\n}\n\n/**\n * Create an inline message containing a live geolocation\n *\n * @param params Additional parameters\n */\nexport function geoLive(params: Omit<InputInlineMessageGeoLive, 'type'>): InputInlineMessageGeoLive {\n const ret = params as tl.Mutable<InputInlineMessageGeoLive>\n ret.type = 'geo_live'\n\n return ret\n}\n\n/**\n * Create an inline message containing a venue\n */\nexport function venue(params: Omit<InputInlineMessageVenue, 'type'>): InputInlineMessageVenue {\n const ret = params as tl.Mutable<InputInlineMessageVenue>\n ret.type = 'venue'\n\n return ret\n}\n\n/**\n * Create an inline message containing a game\n * from the inline result\n */\nexport function game(params: Omit<InputInlineMessageGame, 'type'>): InputInlineMessageGame {\n const ret = params as tl.Mutable<InputInlineMessageGame>\n ret.type = 'game'\n\n return ret\n}\n\n/**\n * Create an inline message containing a contact\n */\nexport function contact(params: Omit<InputInlineMessageContact, 'type'>): InputInlineMessageContact {\n const ret = params as tl.Mutable<InputInlineMessageContact>\n ret.type = 'contact'\n\n return ret\n}\n\n/**\n * Create an inline message containing a webpage\n */\nexport function webpage(params: Omit<InputInlineMessageWebpage, 'type'>): InputInlineMessageWebpage {\n const ret = params as tl.Mutable<InputInlineMessageWebpage>\n ret.type = 'webpage'\n\n return ret\n}\n\n/** @internal */\nexport async function _convertToTl(\n client: ITelegramClient,\n obj: InputInlineMessage,\n): Promise<tl.TypeInputBotInlineMessage> {\n switch (obj.type) {\n case 'text': {\n const [message, entities] = await _normalizeInputText(client, obj.text)\n\n return {\n _: 'inputBotInlineMessageText',\n message,\n entities,\n replyMarkup: BotKeyboard._convertToTl(obj.replyMarkup),\n invertMedia: obj.invertMedia,\n }\n }\n case 'media': {\n const [message, entities] = await _normalizeInputText(client, obj.text)\n\n return {\n _: 'inputBotInlineMessageMediaAuto',\n message,\n entities,\n replyMarkup: BotKeyboard._convertToTl(obj.replyMarkup),\n invertMedia: obj.invertMedia,\n }\n }\n case 'geo':\n case 'geo_live':\n return {\n _: 'inputBotInlineMessageMediaGeo',\n geoPoint: {\n _: 'inputGeoPoint',\n lat: obj.latitude,\n long: obj.longitude,\n },\n // fields will be `undefined` if this is a `geo`\n heading: (obj as InputMediaGeoLive).heading,\n period: (obj as InputMediaGeoLive).period,\n proximityNotificationRadius: (obj as InputMediaGeoLive).proximityNotificationRadius,\n replyMarkup: BotKeyboard._convertToTl(obj.replyMarkup),\n }\n case 'venue':\n return {\n _: 'inputBotInlineMessageMediaVenue',\n geoPoint: {\n _: 'inputGeoPoint',\n lat: obj.latitude,\n long: obj.longitude,\n },\n title: obj.title,\n address: obj.address,\n provider: obj.source?.provider ?? '',\n venueId: obj.source?.id ?? '',\n venueType: obj.source?.type ?? '',\n replyMarkup: BotKeyboard._convertToTl(obj.replyMarkup),\n }\n case 'game':\n return {\n _: 'inputBotInlineMessageGame',\n replyMarkup: BotKeyboard._convertToTl(obj.replyMarkup),\n }\n case 'contact':\n return {\n _: 'inputBotInlineMessageMediaContact',\n phoneNumber: obj.phone,\n firstName: obj.firstName,\n lastName: obj.lastName ?? '',\n vcard: obj.vcard ?? '',\n replyMarkup: BotKeyboard._convertToTl(obj.replyMarkup),\n }\n case 'webpage': {\n const [message, entities] = await _normalizeInputText(client, obj.text)\n\n return {\n _: 'inputBotInlineMessageMediaWebPage',\n message,\n entities,\n replyMarkup: BotKeyboard._convertToTl(obj.replyMarkup),\n invertMedia: obj.invertMedia,\n forceLargeMedia: obj.size === 'large',\n forceSmallMedia: obj.size === 'small',\n optional: !obj.required,\n url: obj.url,\n }\n }\n default:\n assertNever(obj)\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"factories.js","sourceRoot":"","sources":["../../../../../../src/highlevel/types/bots/inline-result/factories.ts"],"names":[],"mappings":"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","sourcesContent":["import { tl } from '@mtcute/tl'\n\nimport { MtArgumentError } from '../../../../types/errors.js'\nimport { ITelegramClient } from '../../../client.types.js'\nimport { fileIdToInputDocument, fileIdToInputPhoto } from '../../../utils/convert-file-id.js'\nimport { extractFileName } from '../../../utils/file-utils.js'\nimport { BotInlineMessage } from '../inline-message/index.js'\nimport {\n InputInlineResult,\n InputInlineResultArticle,\n InputInlineResultAudio,\n InputInlineResultContact,\n InputInlineResultFile,\n InputInlineResultGame,\n InputInlineResultGeo,\n InputInlineResultGif,\n InputInlineResultPhoto,\n InputInlineResultSticker,\n InputInlineResultVenue,\n InputInlineResultVideo,\n InputInlineResultVoice,\n} from './types.js'\n\n/**\n * Create an inline result containing an article\n *\n * @param id Inline result ID\n * @param params Article\n */\nexport function article(id: string, params: Omit<InputInlineResultArticle, 'type' | 'id'>): InputInlineResultArticle {\n const ret = params as tl.Mutable<InputInlineResultArticle>\n ret.id = id\n ret.type = 'article'\n\n return ret\n}\n\n/**\n * Create an inline result containing a GIF\n *\n * @param id Inline result ID\n * @param media GIF animation\n * @param params Additional parameters\n */\nexport function gif(\n id: string,\n media: string | tl.RawInputWebDocument | tl.RawInputDocument,\n params: Omit<InputInlineResultGif, 'type' | 'id' | 'media'> = {},\n): InputInlineResultGif {\n const ret = params as tl.Mutable<InputInlineResultGif>\n ret.id = id\n ret.type = 'gif'\n ret.media = media\n\n return ret\n}\n\n/**\n * Create an inline result containing a video\n *\n * @param id Inline result ID\n * @param media Video\n * @param params Additional parameters\n */\nexport function video(\n id: string,\n media: string | tl.RawInputWebDocument | tl.RawInputDocument,\n params: Omit<InputInlineResultVideo, 'type' | 'id' | 'media'>,\n): InputInlineResultVideo {\n const ret = params as tl.Mutable<InputInlineResultVideo>\n ret.id = id\n ret.type = 'video'\n ret.media = media\n\n return ret\n}\n\n/**\n * Create an inline result containing an audio file\n *\n * @param id Inline result ID\n * @param media Audio file\n * @param params Additional parameters\n */\nexport function audio(\n id: string,\n media: string | tl.RawInputWebDocument | tl.RawInputDocument,\n params: Omit<InputInlineResultAudio, 'type' | 'id' | 'media'>,\n): InputInlineResultAudio {\n const ret = params as tl.Mutable<InputInlineResultAudio>\n ret.id = id\n ret.type = 'audio'\n ret.media = media\n\n return ret\n}\n\n/**\n * Create an inline result containing a voice note\n *\n * @param id Inline result ID\n * @param media Voice note\n * @param params Additional parameters\n */\nexport function voice(\n id: string,\n media: string | tl.RawInputWebDocument | tl.RawInputDocument,\n params: Omit<InputInlineResultVoice, 'type' | 'id' | 'media'>,\n): InputInlineResultVoice {\n const ret = params as tl.Mutable<InputInlineResultVoice>\n ret.id = id\n ret.type = 'voice'\n ret.media = media\n\n return ret\n}\n\n/**\n * Create an inline result containing a photo\n *\n * @param id Inline result ID\n * @param media Photo\n * @param params Additional parameters\n */\nexport function photo(\n id: string,\n media: string | tl.RawInputWebDocument | tl.RawInputPhoto,\n params: Omit<InputInlineResultPhoto, 'type' | 'id' | 'media'> = {},\n): InputInlineResultPhoto {\n const ret = params as tl.Mutable<InputInlineResultPhoto>\n ret.id = id\n ret.type = 'photo'\n ret.media = media\n\n return ret\n}\n\n/**\n * Create an inline result containing a sticker\n *\n * @param id Inline result ID\n * @param media Sticker\n */\nexport function sticker(id: string, media: string | tl.RawInputDocument): InputInlineResultSticker {\n return {\n id,\n type: 'sticker',\n media,\n }\n}\n\n/**\n * Create an inline result containing a document\n * (only PDF and ZIP are supported when using URL)\n *\n * @param id Inline result ID\n * @param media Document\n * @param params Additional parameters\n */\nexport function file(\n id: string,\n media: string | tl.RawInputWebDocument | tl.RawInputDocument,\n params: Omit<InputInlineResultFile, 'type' | 'id' | 'media'>,\n): InputInlineResultFile {\n const ret = params as tl.Mutable<InputInlineResultFile>\n ret.id = id\n ret.type = 'file'\n ret.media = media\n\n return ret\n}\n\n/**\n * Create an inline result containing a geolocation\n *\n * @param id Inline result ID\n * @param params Additional parameters\n */\nexport function geo(id: string, params: Omit<InputInlineResultGeo, 'type' | 'id'>): InputInlineResultGeo {\n const ret = params as tl.Mutable<InputInlineResultGeo>\n ret.id = id\n ret.type = 'geo'\n\n return ret\n}\n\n/**\n * Create an inline result containing a venue\n *\n * @param id Inline result ID\n * @param params Venue parameters\n */\nexport function venue(id: string, params: Omit<InputInlineResultVenue, 'type' | 'id'>): InputInlineResultVenue {\n const ret = params as tl.Mutable<InputInlineResultVenue>\n ret.id = id\n ret.type = 'venue'\n\n return ret\n}\n\n/**\n * Create an inline result containing a contact\n *\n * @param id Inline result ID\n * @param params Contact parameters\n */\nexport function contact(id: string, params: Omit<InputInlineResultContact, 'type' | 'id'>): InputInlineResultContact {\n const ret = params as tl.Mutable<InputInlineResultContact>\n ret.id = id\n ret.type = 'contact'\n\n return ret\n}\n\n/**\n * Create an inline result containing a game\n *\n * @param id Inline result ID\n * @param shortName Short name of the game\n * @param params Additional parameters\n */\nexport function game(\n id: string,\n shortName: string,\n params: Omit<InputInlineResultGame, 'type' | 'id' | 'shortName'> = {},\n): InputInlineResultGame {\n const ret = params as tl.Mutable<InputInlineResultGame>\n ret.id = id\n ret.type = 'game'\n ret.shortName = shortName\n\n return ret\n}\n\n/** @internal */\nexport async function _convertToTl(\n client: ITelegramClient,\n results: InputInlineResult[],\n): Promise<[boolean, tl.TypeInputBotInlineResult[]]> {\n const normalizeThumb = (obj: InputInlineResult, fallback?: string): tl.RawInputWebDocument | undefined => {\n if (obj.type !== 'voice' && obj.type !== 'audio' && obj.type !== 'sticker' && obj.type !== 'game') {\n if (!obj.thumb || typeof obj.thumb === 'string') {\n if (!obj.thumb && !fallback) {\n return undefined\n }\n\n return {\n _: 'inputWebDocument',\n size: 0,\n url: obj.thumb || fallback!,\n mimeType: obj.type === 'gif' ? obj.thumbMime ?? obj.mime ?? 'video/mp4' : 'image/jpeg',\n attributes: [],\n }\n }\n\n return obj.thumb\n }\n }\n\n const items: tl.TypeInputBotInlineResult[] = []\n\n let isGallery = false\n let forceVertical = false\n\n for (const obj of results) {\n switch (obj.type) {\n case 'article': {\n forceVertical = true\n\n let sendMessage: tl.TypeInputBotInlineMessage\n\n if (obj.message) {\n sendMessage = await BotInlineMessage._convertToTl(client, obj.message)\n } else {\n let message = obj.title\n const entities: tl.TypeMessageEntity[] = [\n {\n _: 'messageEntityBold',\n offset: 0,\n length: message.length,\n },\n ]\n\n if (obj.url) {\n entities.push({\n _: 'messageEntityTextUrl',\n url: obj.url,\n offset: 0,\n length: message.length,\n })\n }\n\n if (obj.description) {\n message += '\\n' + obj.description\n }\n\n sendMessage = {\n _: 'inputBotInlineMessageText',\n message,\n entities,\n }\n }\n\n items.push({\n _: 'inputBotInlineResult',\n id: obj.id,\n type: obj.type,\n title: obj.title,\n description: obj.description,\n url: obj.hideUrl ? undefined : obj.url,\n content:\n obj.url && obj.hideUrl ?\n {\n _: 'inputWebDocument',\n url: obj.url,\n mimeType: 'text/html',\n size: 0,\n attributes: [],\n } :\n undefined,\n thumb: typeof obj.thumb === 'string' ? normalizeThumb(obj) : obj.thumb,\n sendMessage,\n })\n continue\n }\n case 'game': {\n let sendMessage: tl.TypeInputBotInlineMessage\n\n if (obj.message) {\n sendMessage = await BotInlineMessage._convertToTl(client, obj.message)\n\n if (sendMessage._ !== 'inputBotInlineMessageGame') {\n throw new MtArgumentError('game inline result must contain a game inline message')\n }\n } else {\n sendMessage = {\n _: 'inputBotInlineMessageGame',\n }\n }\n\n items.push({\n _: 'inputBotInlineResultGame',\n id: obj.id,\n shortName: obj.shortName,\n sendMessage,\n })\n continue\n }\n case 'gif':\n case 'photo':\n case 'sticker':\n isGallery = true\n break\n case 'audio':\n case 'contact':\n case 'voice':\n forceVertical = true\n }\n\n let sendMessage: tl.TypeInputBotInlineMessage\n\n if (obj.message) {\n sendMessage = await BotInlineMessage._convertToTl(client, obj.message)\n } else if (obj.type === 'venue') {\n if (obj.latitude && obj.longitude) {\n sendMessage = {\n _: 'inputBotInlineMessageMediaVenue',\n title: obj.title,\n address: obj.address,\n geoPoint: {\n _: 'inputGeoPoint',\n lat: obj.latitude,\n long: obj.longitude,\n },\n provider: '',\n venueId: '',\n venueType: '',\n }\n } else {\n throw new MtArgumentError('message or location (lat&lon) bust be supplied for venue inline result')\n }\n } else if (obj.type === 'video' && obj.isEmbed && typeof obj.media === 'string') {\n sendMessage = {\n _: 'inputBotInlineMessageText',\n message: obj.media,\n }\n } else if (obj.type === 'geo') {\n sendMessage = {\n _: 'inputBotInlineMessageMediaGeo',\n geoPoint: {\n _: 'inputGeoPoint',\n lat: obj.latitude,\n long: obj.longitude,\n },\n }\n } else if (obj.type === 'contact') {\n sendMessage = {\n _: 'inputBotInlineMessageMediaContact',\n phoneNumber: obj.phone,\n firstName: obj.firstName,\n lastName: obj.lastName ?? '',\n vcard: '',\n }\n } else {\n sendMessage = {\n _: 'inputBotInlineMessageMediaAuto',\n message: '',\n }\n }\n\n let media: tl.TypeInputWebDocument | tl.TypeInputDocument | tl.TypeInputPhoto | undefined = undefined\n\n if (obj.type !== 'geo' && obj.type !== 'venue' && obj.type !== 'contact') {\n if (typeof obj.media === 'string') {\n // file id or url\n if (obj.media.match(/^https?:\\/\\//)) {\n if (obj.type === 'sticker') {\n throw new MtArgumentError('sticker inline result cannot contain a URL')\n }\n\n let mime: string\n if (obj.type === 'video') mime = 'video/mp4'\n else if (obj.type === 'audio') {\n mime = obj.mime ?? 'audio/mpeg'\n } else if (obj.type === 'gif') {\n mime = obj.mime ?? 'video/mp4'\n } else if (obj.type === 'voice') mime = 'audio/ogg'\n else if (obj.type === 'file') {\n if (!obj.mime) {\n throw new MtArgumentError('MIME type must be specified for file inline result')\n }\n\n mime = obj.mime\n } else mime = 'image/jpeg'\n\n const attributes: tl.TypeDocumentAttribute[] = []\n\n if (\n (obj.type === 'video' || obj.type === 'gif' || obj.type === 'photo') &&\n obj.width &&\n obj.height\n ) {\n if (obj.type !== 'photo' && obj.duration) {\n attributes.push({\n _: 'documentAttributeVideo',\n w: obj.width,\n h: obj.height,\n duration: obj.duration,\n })\n } else {\n attributes.push({\n _: 'documentAttributeImageSize',\n w: obj.width,\n h: obj.height,\n })\n }\n } else if (obj.type === 'audio' || obj.type === 'voice') {\n attributes.push({\n _: 'documentAttributeAudio',\n voice: obj.type === 'voice',\n duration: obj.duration ?? 0,\n title: obj.type === 'audio' ? obj.title : '',\n performer: obj.type === 'audio' ? obj.performer : '',\n })\n }\n\n attributes.push({\n _: 'documentAttributeFilename',\n fileName: extractFileName(obj.media),\n })\n\n media = {\n _: 'inputWebDocument',\n url: obj.media,\n mimeType: mime,\n size: 0,\n attributes,\n }\n } else if (obj.type === 'photo') {\n media = fileIdToInputPhoto(obj.media)\n } else {\n media = fileIdToInputDocument(obj.media)\n }\n } else {\n media = obj.media\n }\n }\n\n let title: string | undefined = undefined\n let description: string | undefined = undefined\n\n // incredible hacks by durov team.\n // i honestly don't understand why didn't they just\n // make a bunch of types, as they normally do,\n // but whatever.\n // ref: https://github.com/tdlib/td/blob/master/td/telegram/InlineQueriesManager.cpp\n if (obj.type === 'contact') {\n title = obj.lastName?.length ? `${obj.firstName} ${obj.lastName}` : obj.firstName\n } else if (obj.type !== 'sticker') {\n title = obj.title\n }\n\n if (obj.type === 'audio') {\n description = obj.performer\n } else if (obj.type === 'geo') {\n description = `${obj.latitude} ${obj.longitude}`\n } else if (obj.type === 'venue') {\n description = obj.address\n } else if (obj.type === 'contact') {\n description = obj.phone\n } else if (obj.type !== 'voice' && obj.type !== 'sticker') {\n description = obj.description\n }\n\n if (!media || media._ === 'inputWebDocument') {\n items.push({\n _: 'inputBotInlineResult',\n id: obj.id,\n type: obj.type,\n title,\n description,\n content: media,\n thumb: normalizeThumb(obj, media?.url),\n sendMessage,\n })\n continue\n }\n\n if (media._ === 'inputPhoto') {\n items.push({\n _: 'inputBotInlineResultPhoto',\n id: obj.id,\n type: obj.type,\n photo: media,\n sendMessage,\n })\n continue\n }\n\n items.push({\n _: 'inputBotInlineResultDocument',\n id: obj.id,\n type: obj.type,\n title,\n description,\n document: media,\n sendMessage,\n })\n }\n\n return [isGallery && !forceVertical, items]\n}\n"]}
1
+ {"version":3,"file":"factories.js","sourceRoot":"","sources":["../../../../../../src/highlevel/types/bots/inline-result/factories.ts"],"names":[],"mappings":"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","sourcesContent":["import { tl } from '@mtcute/tl'\n\nimport { MtArgumentError } from '../../../../types/errors.js'\nimport { ITelegramClient } from '../../../client.types.js'\nimport { fileIdToInputDocument, fileIdToInputPhoto } from '../../../utils/convert-file-id.js'\nimport { extractFileName } from '../../../utils/file-utils.js'\nimport { BotInlineMessage } from '../inline-message/index.js'\nimport {\n InputInlineResult,\n InputInlineResultArticle,\n InputInlineResultAudio,\n InputInlineResultContact,\n InputInlineResultFile,\n InputInlineResultGame,\n InputInlineResultGeo,\n InputInlineResultGif,\n InputInlineResultPhoto,\n InputInlineResultSticker,\n InputInlineResultVenue,\n InputInlineResultVideo,\n InputInlineResultVoice,\n} from './types.js'\n\n/**\n * Create an inline result containing an article\n *\n * @param id Inline result ID\n * @param params Article\n */\nexport function article(id: string, params: Omit<InputInlineResultArticle, 'type' | 'id'>): InputInlineResultArticle {\n const ret = params as tl.Mutable<InputInlineResultArticle>\n ret.id = id\n ret.type = 'article'\n\n return ret\n}\n\n/**\n * Create an inline result containing a GIF\n *\n * @param id Inline result ID\n * @param media GIF animation\n * @param params Additional parameters\n */\nexport function gif(\n id: string,\n media: string | tl.RawInputWebDocument | tl.RawInputDocument,\n params: Omit<InputInlineResultGif, 'type' | 'id' | 'media'> = {},\n): InputInlineResultGif {\n const ret = params as tl.Mutable<InputInlineResultGif>\n ret.id = id\n ret.type = 'gif'\n ret.media = media\n\n return ret\n}\n\n/**\n * Create an inline result containing a video\n *\n * @param id Inline result ID\n * @param media Video\n * @param params Additional parameters\n */\nexport function video(\n id: string,\n media: string | tl.RawInputWebDocument | tl.RawInputDocument,\n params: Omit<InputInlineResultVideo, 'type' | 'id' | 'media'>,\n): InputInlineResultVideo {\n const ret = params as tl.Mutable<InputInlineResultVideo>\n ret.id = id\n ret.type = 'video'\n ret.media = media\n\n return ret\n}\n\n/**\n * Create an inline result containing an audio file\n *\n * @param id Inline result ID\n * @param media Audio file\n * @param params Additional parameters\n */\nexport function audio(\n id: string,\n media: string | tl.RawInputWebDocument | tl.RawInputDocument,\n params: Omit<InputInlineResultAudio, 'type' | 'id' | 'media'>,\n): InputInlineResultAudio {\n const ret = params as tl.Mutable<InputInlineResultAudio>\n ret.id = id\n ret.type = 'audio'\n ret.media = media\n\n return ret\n}\n\n/**\n * Create an inline result containing a voice note\n *\n * @param id Inline result ID\n * @param media Voice note\n * @param params Additional parameters\n */\nexport function voice(\n id: string,\n media: string | tl.RawInputWebDocument | tl.RawInputDocument,\n params: Omit<InputInlineResultVoice, 'type' | 'id' | 'media'>,\n): InputInlineResultVoice {\n const ret = params as tl.Mutable<InputInlineResultVoice>\n ret.id = id\n ret.type = 'voice'\n ret.media = media\n\n return ret\n}\n\n/**\n * Create an inline result containing a photo\n *\n * @param id Inline result ID\n * @param media Photo\n * @param params Additional parameters\n */\nexport function photo(\n id: string,\n media: string | tl.RawInputWebDocument | tl.RawInputPhoto,\n params: Omit<InputInlineResultPhoto, 'type' | 'id' | 'media'> = {},\n): InputInlineResultPhoto {\n const ret = params as tl.Mutable<InputInlineResultPhoto>\n ret.id = id\n ret.type = 'photo'\n ret.media = media\n\n return ret\n}\n\n/**\n * Create an inline result containing a sticker\n *\n * @param id Inline result ID\n * @param media Sticker\n */\nexport function sticker(id: string, media: string | tl.RawInputDocument): InputInlineResultSticker {\n return {\n id,\n type: 'sticker',\n media,\n }\n}\n\n/**\n * Create an inline result containing a document\n * (only PDF and ZIP are supported when using URL)\n *\n * @param id Inline result ID\n * @param media Document\n * @param params Additional parameters\n */\nexport function file(\n id: string,\n media: string | tl.RawInputWebDocument | tl.RawInputDocument,\n params: Omit<InputInlineResultFile, 'type' | 'id' | 'media'>,\n): InputInlineResultFile {\n const ret = params as tl.Mutable<InputInlineResultFile>\n ret.id = id\n ret.type = 'file'\n ret.media = media\n\n return ret\n}\n\n/**\n * Create an inline result containing a geolocation\n *\n * @param id Inline result ID\n * @param params Additional parameters\n */\nexport function geo(id: string, params: Omit<InputInlineResultGeo, 'type' | 'id'>): InputInlineResultGeo {\n const ret = params as tl.Mutable<InputInlineResultGeo>\n ret.id = id\n ret.type = 'geo'\n\n return ret\n}\n\n/**\n * Create an inline result containing a venue\n *\n * @param id Inline result ID\n * @param params Venue parameters\n */\nexport function venue(id: string, params: Omit<InputInlineResultVenue, 'type' | 'id'>): InputInlineResultVenue {\n const ret = params as tl.Mutable<InputInlineResultVenue>\n ret.id = id\n ret.type = 'venue'\n\n return ret\n}\n\n/**\n * Create an inline result containing a contact\n *\n * @param id Inline result ID\n * @param params Contact parameters\n */\nexport function contact(id: string, params: Omit<InputInlineResultContact, 'type' | 'id'>): InputInlineResultContact {\n const ret = params as tl.Mutable<InputInlineResultContact>\n ret.id = id\n ret.type = 'contact'\n\n return ret\n}\n\n/**\n * Create an inline result containing a game\n *\n * @param id Inline result ID\n * @param shortName Short name of the game\n * @param params Additional parameters\n */\nexport function game(\n id: string,\n shortName: string,\n params: Omit<InputInlineResultGame, 'type' | 'id' | 'shortName'> = {},\n): InputInlineResultGame {\n const ret = params as tl.Mutable<InputInlineResultGame>\n ret.id = id\n ret.type = 'game'\n ret.shortName = shortName\n\n return ret\n}\n\n/** @internal */\nexport async function _convertToTl(\n client: ITelegramClient,\n results: InputInlineResult[],\n): Promise<[boolean, tl.TypeInputBotInlineResult[]]> {\n const normalizeThumb = (obj: InputInlineResult, fallback?: string): tl.RawInputWebDocument | undefined => {\n if (obj.type !== 'voice' && obj.type !== 'audio' && obj.type !== 'sticker' && obj.type !== 'game') {\n if (!obj.thumb || typeof obj.thumb === 'string') {\n if (!obj.thumb && !fallback) {\n return undefined\n }\n\n return {\n _: 'inputWebDocument',\n size: 0,\n url: obj.thumb || fallback!,\n mimeType: obj.type === 'gif' ? obj.thumbMime ?? obj.mime ?? 'video/mp4' : 'image/jpeg',\n attributes: [],\n }\n }\n\n return obj.thumb\n }\n }\n\n const items: tl.TypeInputBotInlineResult[] = []\n\n let isGallery = false\n let forceVertical = false\n\n for (const obj of results) {\n switch (obj.type) {\n case 'article': {\n forceVertical = true\n\n let sendMessage: tl.TypeInputBotInlineMessage\n\n if (obj.message) {\n sendMessage = await BotInlineMessage._convertToTl(client, obj.message)\n } else {\n let message = obj.title\n const entities: tl.TypeMessageEntity[] = [\n {\n _: 'messageEntityBold',\n offset: 0,\n length: message.length,\n },\n ]\n\n if (obj.url) {\n entities.push({\n _: 'messageEntityTextUrl',\n url: obj.url,\n offset: 0,\n length: message.length,\n })\n }\n\n if (obj.description) {\n message += '\\n' + obj.description\n }\n\n sendMessage = {\n _: 'inputBotInlineMessageText',\n message,\n entities,\n }\n }\n\n items.push({\n _: 'inputBotInlineResult',\n id: obj.id,\n type: obj.type,\n title: obj.title,\n description: obj.description,\n url: obj.hideUrl ? undefined : obj.url,\n content:\n obj.url && obj.hideUrl ?\n {\n _: 'inputWebDocument',\n url: obj.url,\n mimeType: 'text/html',\n size: 0,\n attributes: [],\n } :\n undefined,\n thumb: typeof obj.thumb === 'string' ? normalizeThumb(obj) : obj.thumb,\n sendMessage,\n })\n continue\n }\n case 'game': {\n let sendMessage: tl.TypeInputBotInlineMessage\n\n if (obj.message) {\n sendMessage = await BotInlineMessage._convertToTl(client, obj.message)\n\n if (sendMessage._ !== 'inputBotInlineMessageGame') {\n throw new MtArgumentError('game inline result must contain a game inline message')\n }\n } else {\n sendMessage = {\n _: 'inputBotInlineMessageGame',\n }\n }\n\n items.push({\n _: 'inputBotInlineResultGame',\n id: obj.id,\n shortName: obj.shortName,\n sendMessage,\n })\n continue\n }\n case 'gif':\n case 'photo':\n case 'sticker':\n isGallery = true\n break\n case 'audio':\n case 'contact':\n case 'voice':\n forceVertical = true\n }\n\n let sendMessage: tl.TypeInputBotInlineMessage\n\n if (obj.message) {\n sendMessage = await BotInlineMessage._convertToTl(client, obj.message)\n } else if (obj.type === 'venue') {\n if (obj.latitude && obj.longitude) {\n sendMessage = {\n _: 'inputBotInlineMessageMediaVenue',\n title: obj.title,\n address: obj.address,\n geoPoint: {\n _: 'inputGeoPoint',\n lat: obj.latitude,\n long: obj.longitude,\n },\n provider: '',\n venueId: '',\n venueType: '',\n }\n } else {\n throw new MtArgumentError('message or location (lat&lon) bust be supplied for venue inline result')\n }\n } else if (obj.type === 'video' && obj.isEmbed && typeof obj.media === 'string') {\n sendMessage = {\n _: 'inputBotInlineMessageText',\n message: obj.media,\n }\n } else if (obj.type === 'geo') {\n sendMessage = {\n _: 'inputBotInlineMessageMediaGeo',\n geoPoint: {\n _: 'inputGeoPoint',\n lat: obj.latitude,\n long: obj.longitude,\n },\n }\n } else if (obj.type === 'contact') {\n sendMessage = {\n _: 'inputBotInlineMessageMediaContact',\n phoneNumber: obj.phone,\n firstName: obj.firstName,\n lastName: obj.lastName ?? '',\n vcard: '',\n }\n } else {\n sendMessage = {\n _: 'inputBotInlineMessageMediaAuto',\n message: '',\n }\n }\n\n let media: tl.TypeInputWebDocument | tl.TypeInputDocument | tl.TypeInputPhoto | undefined = undefined\n\n if (obj.type !== 'geo' && obj.type !== 'venue' && obj.type !== 'contact') {\n if (typeof obj.media === 'string') {\n // file id or url\n if (obj.media.match(/^https?:\\/\\//)) {\n if (obj.type === 'sticker') {\n throw new MtArgumentError('sticker inline result cannot contain a URL')\n }\n\n let mime: string\n if (obj.type === 'video') mime = 'video/mp4'\n else if (obj.type === 'audio') {\n mime = obj.mime ?? 'audio/mpeg'\n } else if (obj.type === 'gif') {\n mime = obj.mime ?? 'video/mp4'\n } else if (obj.type === 'voice') mime = 'audio/ogg'\n else if (obj.type === 'file') {\n if (!obj.mime) {\n throw new MtArgumentError('MIME type must be specified for file inline result')\n }\n\n mime = obj.mime\n } else mime = 'image/jpeg'\n\n const attributes: tl.TypeDocumentAttribute[] = []\n\n if (\n (obj.type === 'video' || obj.type === 'gif' || obj.type === 'photo') &&\n obj.width &&\n obj.height\n ) {\n if (obj.type !== 'photo' && obj.duration) {\n attributes.push({\n _: 'documentAttributeVideo',\n w: obj.width,\n h: obj.height,\n duration: obj.duration,\n })\n } else {\n attributes.push({\n _: 'documentAttributeImageSize',\n w: obj.width,\n h: obj.height,\n })\n }\n } else if (obj.type === 'audio' || obj.type === 'voice') {\n attributes.push({\n _: 'documentAttributeAudio',\n voice: obj.type === 'voice',\n duration: obj.duration ?? 0,\n title: obj.type === 'audio' ? obj.title : '',\n performer: obj.type === 'audio' ? obj.performer : '',\n })\n }\n\n attributes.push({\n _: 'documentAttributeFilename',\n fileName: extractFileName(obj.media),\n })\n\n media = {\n _: 'inputWebDocument',\n url: obj.media,\n mimeType: mime,\n size: 0,\n attributes,\n }\n } else if (obj.type === 'photo') {\n media = fileIdToInputPhoto(obj.media)\n } else {\n media = fileIdToInputDocument(obj.media)\n }\n } else {\n media = obj.media\n }\n }\n\n let title: string | undefined = undefined\n let description: string | undefined = undefined\n\n // incredible hacks by durov team.\n // i honestly don't understand why didn't they just\n // make a bunch of types, as they normally do,\n // but whatever.\n // ref: https://github.com/tdlib/td/blob/master/td/telegram/InlineQueriesManager.cpp\n if (obj.type === 'contact') {\n title = obj.lastName?.length ? `${obj.firstName} ${obj.lastName}` : obj.firstName\n } else if (obj.type !== 'sticker') {\n title = obj.title\n }\n\n if (obj.type === 'audio') {\n description = obj.performer\n } else if (obj.type === 'geo') {\n description = `${obj.latitude} ${obj.longitude}`\n } else if (obj.type === 'venue') {\n description = obj.address\n } else if (obj.type === 'contact') {\n description = obj.phone\n } else if (obj.type !== 'voice' && obj.type !== 'sticker') {\n description = obj.description\n }\n\n if (!media || media._ === 'inputWebDocument') {\n items.push({\n _: 'inputBotInlineResult',\n id: obj.id,\n type: obj.type,\n title,\n description,\n content: media,\n thumb: normalizeThumb(obj, media?.url),\n sendMessage,\n })\n continue\n }\n\n if (media._ === 'inputPhoto') {\n items.push({\n _: 'inputBotInlineResultPhoto',\n id: obj.id,\n type: obj.type,\n photo: media,\n sendMessage,\n })\n continue\n }\n\n items.push({\n _: 'inputBotInlineResultDocument',\n id: obj.id,\n type: obj.type,\n title,\n description,\n document: media,\n sendMessage,\n })\n }\n\n return [isGallery && !forceVertical, items]\n}\n"]}
@@ -5,9 +5,10 @@ exports.BotKeyboardBuilder = void 0;
5
5
  * Builder for bot keyboards
6
6
  */
7
7
  class BotKeyboardBuilder {
8
+ maxRowWidth;
9
+ _buttons = [];
8
10
  constructor(maxRowWidth = 3) {
9
11
  this.maxRowWidth = maxRowWidth;
10
- this._buttons = [];
11
12
  }
12
13
  /**
13
14
  * Add buttons, wrapping them once {@link maxRowWidth} is reached
@@ -1 +1 @@
1
- {"version":3,"file":"builder.js","sourceRoot":"","sources":["../../../../../../src/highlevel/types/bots/keyboards/builder.ts"],"names":[],"mappings":";;;AAMA;;GAEG;AACH,MAAa,kBAAkB;IAG3B,YAAqB,cAA6B,CAAC;QAA9B,gBAAW,GAAX,WAAW,CAAmB;QAF3C,aAAQ,GAA8B,EAAE,CAAA;IAEM,CAAC;IAEvD;;;;OAIG;IACH,IAAI,CAAC,GAAG,OAA4C;QAChD,IAAI,CAAC,OAAO,CAAC,MAAM;YAAE,OAAO,IAAI,CAAA;QAEhC,IAAI,GAAG,GAA4B,EAAE,CAAA;QACrC,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;YACpB,IAAI,OAAO,GAAG,KAAK,UAAU;gBAAE,GAAG,GAAG,GAAG,EAAE,CAAA;YAC1C,IAAI,CAAC,GAAG;gBAAE,OAAM;YAEhB,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;YAEb,IAAI,GAAG,CAAC,MAAM,KAAK,IAAI,CAAC,WAAW,EAAE;gBACjC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;gBACvB,GAAG,GAAG,EAAE,CAAA;aACX;QACL,CAAC,CAAC,CAAA;QAEF,IAAI,GAAG,CAAC,MAAM,EAAE;YACZ,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;SAC1B;QAED,OAAO,IAAI,CAAA;IACf,CAAC;IAED;;;;OAIG;IACH,GAAG,CAAC,GAAiD;QACjD,IAAI,OAAO,GAAG,KAAK,UAAU,EAAE;YAC3B,MAAM,EAAE,GAAG,GAAG,CAAA;YACd,GAAG,GAAG,EAAE,CAAA;YACR,EAAE,CAAC,GAAG,CAAC,CAAA;SACV;QAED,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,OAAO,CAA4B,CAAA;QAC7D,IAAI,MAAM,CAAC,MAAM;YAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QAE7C,OAAO,IAAI,CAAA;IACf,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,GAAoC,EAAE,KAAK,GAAG,KAAK;QACtD,IAAI,OAAO,GAAG,KAAK,UAAU;YAAE,GAAG,GAAG,GAAG,EAAE,CAAA;QAC1C,IAAI,CAAC,GAAG;YAAE,OAAO,IAAI,CAAA;QAErB,IACI,IAAI,CAAC,QAAQ,CAAC,MAAM;YACpB,CAAC,IAAI,CAAC,WAAW,KAAK,IAAI,IAAI,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,EAC3G;YACE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;SACpD;aAAM;YACH,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;SAC5B;QAED,OAAO,IAAI,CAAA;IACf,CAAC;IAED;;OAEG;IACH,QAAQ;QACJ,OAAO;YACH,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,IAAI,CAAC,QAAQ;SACzB,CAAA;IACL,CAAC;IAED;;OAEG;IACH,OAAO,CAAC,SAAwD,EAAE;QAC9D,MAAM,GAAG,GAAG,MAAyC,CAAA;QACrD,GAAG,CAAC,IAAI,GAAG,OAAO,CAAA;QAClB,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAA;QAE3B,OAAO,GAAG,CAAA;IACd,CAAC;CACJ;AA7FD,gDA6FC","sourcesContent":["import { tl } from '@mtcute/tl'\n\nimport type { InlineKeyboardMarkup, ReplyKeyboardMarkup } from './types.js'\n\nexport type ButtonLike = tl.TypeKeyboardButton | false | null | undefined | void\n\n/**\n * Builder for bot keyboards\n */\nexport class BotKeyboardBuilder {\n private _buttons: tl.TypeKeyboardButton[][] = []\n\n constructor(readonly maxRowWidth: number | null = 3) {}\n\n /**\n * Add buttons, wrapping them once {@link maxRowWidth} is reached\n *\n * @param buttons Buttons to add\n */\n push(...buttons: (ButtonLike | (() => ButtonLike))[]): this {\n if (!buttons.length) return this\n\n let row: tl.TypeKeyboardButton[] = []\n buttons.forEach((btn) => {\n if (typeof btn === 'function') btn = btn()\n if (!btn) return\n\n row.push(btn)\n\n if (row.length === this.maxRowWidth) {\n this._buttons.push(row)\n row = []\n }\n })\n\n if (row.length) {\n this._buttons.push(row)\n }\n\n return this\n }\n\n /**\n * Add a row of buttons. Will not be wrapped.\n *\n * @param row Row or a function that will populate it\n */\n row(row: ButtonLike[] | ((arr: ButtonLike[]) => void)): this {\n if (typeof row === 'function') {\n const fn = row\n row = []\n fn(row)\n }\n\n const normal = row.filter(Boolean) as tl.TypeKeyboardButton[]\n if (normal.length) this._buttons.push(normal)\n\n return this\n }\n\n /**\n * Append a button to the last row, wrapping if needed.\n *\n * @param btn Button to add\n * @param force Whether to forcefully add the button (i.e. do not wrap)\n */\n append(btn: ButtonLike | (() => ButtonLike), force = false): this {\n if (typeof btn === 'function') btn = btn()\n if (!btn) return this\n\n if (\n this._buttons.length &&\n (this.maxRowWidth === null || force || this._buttons[this._buttons.length - 1].length < this.maxRowWidth)\n ) {\n this._buttons[this._buttons.length - 1].push(btn)\n } else {\n this._buttons.push([btn])\n }\n\n return this\n }\n\n /**\n * Return contents of this builder as an inline keyboard\n */\n asInline(): InlineKeyboardMarkup {\n return {\n type: 'inline',\n buttons: this._buttons,\n }\n }\n\n /**\n * Return contents of this builder as a reply keyboard\n */\n asReply(params: Omit<ReplyKeyboardMarkup, 'type' | 'buttons'> = {}): ReplyKeyboardMarkup {\n const ret = params as tl.Mutable<ReplyKeyboardMarkup>\n ret.type = 'reply'\n ret.buttons = this._buttons\n\n return ret\n }\n}\n"]}
1
+ {"version":3,"file":"builder.js","sourceRoot":"","sources":["../../../../../../src/highlevel/types/bots/keyboards/builder.ts"],"names":[],"mappings":";;;AAMA;;GAEG;AACH,MAAa,kBAAkB;IAGN;IAFb,QAAQ,GAA8B,EAAE,CAAA;IAEhD,YAAqB,cAA6B,CAAC;QAA9B,gBAAW,GAAX,WAAW,CAAmB;IAAG,CAAC;IAEvD;;;;OAIG;IACH,IAAI,CAAC,GAAG,OAA4C;QAChD,IAAI,CAAC,OAAO,CAAC,MAAM;YAAE,OAAO,IAAI,CAAA;QAEhC,IAAI,GAAG,GAA4B,EAAE,CAAA;QACrC,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;YACpB,IAAI,OAAO,GAAG,KAAK,UAAU;gBAAE,GAAG,GAAG,GAAG,EAAE,CAAA;YAC1C,IAAI,CAAC,GAAG;gBAAE,OAAM;YAEhB,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;YAEb,IAAI,GAAG,CAAC,MAAM,KAAK,IAAI,CAAC,WAAW,EAAE,CAAC;gBAClC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;gBACvB,GAAG,GAAG,EAAE,CAAA;YACZ,CAAC;QACL,CAAC,CAAC,CAAA;QAEF,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;YACb,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QAC3B,CAAC;QAED,OAAO,IAAI,CAAA;IACf,CAAC;IAED;;;;OAIG;IACH,GAAG,CAAC,GAAiD;QACjD,IAAI,OAAO,GAAG,KAAK,UAAU,EAAE,CAAC;YAC5B,MAAM,EAAE,GAAG,GAAG,CAAA;YACd,GAAG,GAAG,EAAE,CAAA;YACR,EAAE,CAAC,GAAG,CAAC,CAAA;QACX,CAAC;QAED,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,OAAO,CAA4B,CAAA;QAC7D,IAAI,MAAM,CAAC,MAAM;YAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QAE7C,OAAO,IAAI,CAAA;IACf,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,GAAoC,EAAE,KAAK,GAAG,KAAK;QACtD,IAAI,OAAO,GAAG,KAAK,UAAU;YAAE,GAAG,GAAG,GAAG,EAAE,CAAA;QAC1C,IAAI,CAAC,GAAG;YAAE,OAAO,IAAI,CAAA;QAErB,IACI,IAAI,CAAC,QAAQ,CAAC,MAAM;YACpB,CAAC,IAAI,CAAC,WAAW,KAAK,IAAI,IAAI,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,EAC3G,CAAC;YACC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QACrD,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;QAC7B,CAAC;QAED,OAAO,IAAI,CAAA;IACf,CAAC;IAED;;OAEG;IACH,QAAQ;QACJ,OAAO;YACH,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,IAAI,CAAC,QAAQ;SACzB,CAAA;IACL,CAAC;IAED;;OAEG;IACH,OAAO,CAAC,SAAwD,EAAE;QAC9D,MAAM,GAAG,GAAG,MAAyC,CAAA;QACrD,GAAG,CAAC,IAAI,GAAG,OAAO,CAAA;QAClB,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAA;QAE3B,OAAO,GAAG,CAAA;IACd,CAAC;CACJ;AA7FD,gDA6FC","sourcesContent":["import { tl } from '@mtcute/tl'\n\nimport type { InlineKeyboardMarkup, ReplyKeyboardMarkup } from './types.js'\n\nexport type ButtonLike = tl.TypeKeyboardButton | false | null | undefined | void\n\n/**\n * Builder for bot keyboards\n */\nexport class BotKeyboardBuilder {\n private _buttons: tl.TypeKeyboardButton[][] = []\n\n constructor(readonly maxRowWidth: number | null = 3) {}\n\n /**\n * Add buttons, wrapping them once {@link maxRowWidth} is reached\n *\n * @param buttons Buttons to add\n */\n push(...buttons: (ButtonLike | (() => ButtonLike))[]): this {\n if (!buttons.length) return this\n\n let row: tl.TypeKeyboardButton[] = []\n buttons.forEach((btn) => {\n if (typeof btn === 'function') btn = btn()\n if (!btn) return\n\n row.push(btn)\n\n if (row.length === this.maxRowWidth) {\n this._buttons.push(row)\n row = []\n }\n })\n\n if (row.length) {\n this._buttons.push(row)\n }\n\n return this\n }\n\n /**\n * Add a row of buttons. Will not be wrapped.\n *\n * @param row Row or a function that will populate it\n */\n row(row: ButtonLike[] | ((arr: ButtonLike[]) => void)): this {\n if (typeof row === 'function') {\n const fn = row\n row = []\n fn(row)\n }\n\n const normal = row.filter(Boolean) as tl.TypeKeyboardButton[]\n if (normal.length) this._buttons.push(normal)\n\n return this\n }\n\n /**\n * Append a button to the last row, wrapping if needed.\n *\n * @param btn Button to add\n * @param force Whether to forcefully add the button (i.e. do not wrap)\n */\n append(btn: ButtonLike | (() => ButtonLike), force = false): this {\n if (typeof btn === 'function') btn = btn()\n if (!btn) return this\n\n if (\n this._buttons.length &&\n (this.maxRowWidth === null || force || this._buttons[this._buttons.length - 1].length < this.maxRowWidth)\n ) {\n this._buttons[this._buttons.length - 1].push(btn)\n } else {\n this._buttons.push([btn])\n }\n\n return this\n }\n\n /**\n * Return contents of this builder as an inline keyboard\n */\n asInline(): InlineKeyboardMarkup {\n return {\n type: 'inline',\n buttons: this._buttons,\n }\n }\n\n /**\n * Return contents of this builder as a reply keyboard\n */\n asReply(params: Omit<ReplyKeyboardMarkup, 'type' | 'buttons'> = {}): ReplyKeyboardMarkup {\n const ret = params as tl.Mutable<ReplyKeyboardMarkup>\n ret.type = 'reply'\n ret.buttons = this._buttons\n\n return ret\n }\n}\n"]}