@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.
- package/cjs/highlevel/base.d.ts +1 -1
- package/cjs/highlevel/base.js +29 -23
- package/cjs/highlevel/base.js.map +1 -1
- package/cjs/highlevel/client.d.ts +3 -2
- package/cjs/highlevel/client.js +1 -0
- package/cjs/highlevel/client.js.map +1 -1
- package/cjs/highlevel/managers/app-config-manager.js +7 -5
- package/cjs/highlevel/managers/app-config-manager.js.map +1 -1
- package/cjs/highlevel/methods/_init.js.map +1 -1
- package/cjs/highlevel/methods/auth/start-test.js.map +1 -1
- package/cjs/highlevel/methods/auth/start.js.map +1 -1
- package/cjs/highlevel/methods/auth/utils.js.map +1 -1
- package/cjs/highlevel/methods/bots/get-callback-answer.js.map +1 -1
- package/cjs/highlevel/methods/bots/get-game-high-scores.js.map +1 -1
- package/cjs/highlevel/methods/bots/normalize-command-scope.js.map +1 -1
- package/cjs/highlevel/methods/bots/set-my-commands.js.map +1 -1
- package/cjs/highlevel/methods/chats/add-chat-members.js.map +1 -1
- package/cjs/highlevel/methods/chats/ban-chat-member.js.map +1 -1
- package/cjs/highlevel/methods/chats/batched-queries.js.map +1 -1
- package/cjs/highlevel/methods/chats/delete-chat-photo.js.map +1 -1
- package/cjs/highlevel/methods/chats/delete-history.js.map +1 -1
- package/cjs/highlevel/methods/chats/get-chat-event-log.js.map +1 -1
- package/cjs/highlevel/methods/chats/get-chat-member.js.map +1 -1
- package/cjs/highlevel/methods/chats/get-chat-members.js.map +1 -1
- package/cjs/highlevel/methods/chats/get-chat-preview.js.map +1 -1
- package/cjs/highlevel/methods/chats/get-chat.js.map +1 -1
- package/cjs/highlevel/methods/chats/get-full-chat.js.map +1 -1
- package/cjs/highlevel/methods/chats/get-nearby-chats.js.map +1 -1
- package/cjs/highlevel/methods/chats/get-similar-channels.js.map +1 -1
- package/cjs/highlevel/methods/chats/iter-chat-event-log.js.map +1 -1
- package/cjs/highlevel/methods/chats/iter-chat-members.js.map +1 -1
- package/cjs/highlevel/methods/chats/join-chat.js.map +1 -1
- package/cjs/highlevel/methods/chats/kick-chat-member.js.map +1 -1
- package/cjs/highlevel/methods/chats/leave-chat.js.map +1 -1
- package/cjs/highlevel/methods/chats/open-chat.js.map +1 -1
- package/cjs/highlevel/methods/chats/reorder-usernames.js.map +1 -1
- package/cjs/highlevel/methods/chats/restrict-chat-member.js.map +1 -1
- package/cjs/highlevel/methods/chats/save-draft.js.map +1 -1
- package/cjs/highlevel/methods/chats/set-chat-color.js.map +1 -1
- package/cjs/highlevel/methods/chats/set-chat-photo.js.map +1 -1
- package/cjs/highlevel/methods/chats/set-chat-title.js.map +1 -1
- package/cjs/highlevel/methods/chats/toggle-fragment-username.js.map +1 -1
- package/cjs/highlevel/methods/chats/unarchive-chats.js.map +1 -1
- package/cjs/highlevel/methods/chats/unban-chat-member.js.map +1 -1
- package/cjs/highlevel/methods/contacts/delete-contacts.js.map +1 -1
- package/cjs/highlevel/methods/dialogs/create-folder.js.map +1 -1
- package/cjs/highlevel/methods/dialogs/edit-folder.js.map +1 -1
- package/cjs/highlevel/methods/dialogs/find-folder.js.map +1 -1
- package/cjs/highlevel/methods/dialogs/get-folders.js.map +1 -1
- package/cjs/highlevel/methods/dialogs/iter-dialogs.js.map +1 -1
- package/cjs/highlevel/methods/files/download-buffer.js.map +1 -1
- package/cjs/highlevel/methods/files/download-iterable.js +1 -1
- package/cjs/highlevel/methods/files/download-iterable.js.map +1 -1
- package/cjs/highlevel/methods/files/download-node-stream.js.map +1 -1
- package/cjs/highlevel/methods/files/download-stream.js.map +1 -1
- package/cjs/highlevel/methods/files/normalize-file-to-document.js.map +1 -1
- package/cjs/highlevel/methods/files/normalize-input-file.js.map +1 -1
- package/cjs/highlevel/methods/files/normalize-input-media.js +1 -2
- package/cjs/highlevel/methods/files/normalize-input-media.js.map +1 -1
- package/cjs/highlevel/methods/files/upload-file.js +7 -6
- package/cjs/highlevel/methods/files/upload-file.js.map +1 -1
- package/cjs/highlevel/methods/files/upload-media.js.map +1 -1
- package/cjs/highlevel/methods/forums/iter-forum-topics.js.map +1 -1
- package/cjs/highlevel/methods/invite-links/get-primary-invite-link.js.map +1 -1
- package/cjs/highlevel/methods/invite-links/iter-invite-link-members.js.map +1 -1
- package/cjs/highlevel/methods/invite-links/iter-invite-links.js.map +1 -1
- package/cjs/highlevel/methods/messages/close-poll.js.map +1 -1
- package/cjs/highlevel/methods/messages/delete-messages.js.map +1 -1
- package/cjs/highlevel/methods/messages/edit-inline-message.js.map +1 -1
- package/cjs/highlevel/methods/messages/edit-message.js.map +1 -1
- package/cjs/highlevel/methods/messages/find-in-update.js.map +1 -1
- package/cjs/highlevel/methods/messages/forward-messages.js.map +1 -1
- package/cjs/highlevel/methods/messages/get-callback-query-message.js.map +1 -1
- package/cjs/highlevel/methods/messages/get-discussion-message.js.map +1 -1
- package/cjs/highlevel/methods/messages/get-history.js +5 -1
- package/cjs/highlevel/methods/messages/get-history.js.map +1 -1
- package/cjs/highlevel/methods/messages/get-message-by-link.js.map +1 -1
- package/cjs/highlevel/methods/messages/get-message-group.js.map +1 -1
- package/cjs/highlevel/methods/messages/get-message-reactions.js.map +1 -1
- package/cjs/highlevel/methods/messages/get-messages.js.map +1 -1
- package/cjs/highlevel/methods/messages/get-reply-to.js.map +1 -1
- package/cjs/highlevel/methods/messages/iter-history.js.map +1 -1
- package/cjs/highlevel/methods/messages/iter-reaction-users.js.map +1 -1
- package/cjs/highlevel/methods/messages/iter-search-global.js.map +1 -1
- package/cjs/highlevel/methods/messages/iter-search-messages.js.map +1 -1
- package/cjs/highlevel/methods/messages/read-history.js.map +1 -1
- package/cjs/highlevel/methods/messages/send-answer.js.map +1 -1
- package/cjs/highlevel/methods/messages/send-comment.js.map +1 -1
- package/cjs/highlevel/methods/messages/send-common.js.map +1 -1
- package/cjs/highlevel/methods/messages/send-copy-group.js.map +1 -1
- package/cjs/highlevel/methods/messages/send-copy.js.map +1 -1
- package/cjs/highlevel/methods/messages/send-media-group.js.map +1 -1
- package/cjs/highlevel/methods/messages/send-media.js.map +1 -1
- package/cjs/highlevel/methods/messages/send-quote.js.map +1 -1
- package/cjs/highlevel/methods/messages/send-text.js.map +1 -1
- package/cjs/highlevel/methods/messages/send-typing.js.map +1 -1
- package/cjs/highlevel/methods/messages/send-vote.js.map +1 -1
- package/cjs/highlevel/methods/messages/translate-text.js.map +1 -1
- package/cjs/highlevel/methods/messages/unpin-all-messages.js.map +1 -1
- package/cjs/highlevel/methods/misc/normalize-privacy-rules.js.map +1 -1
- package/cjs/highlevel/methods/misc/normalize-text.js.map +1 -1
- package/cjs/highlevel/methods/misc/with-params.js.map +1 -1
- package/cjs/highlevel/methods/password/change-cloud-password.js.map +1 -1
- package/cjs/highlevel/methods/password/enable-cloud-password.js.map +1 -1
- package/cjs/highlevel/methods/password/remove-cloud-password.js.map +1 -1
- package/cjs/highlevel/methods/premium/can-apply-boost.js.map +1 -1
- package/cjs/highlevel/methods/premium/iter-boosters.js.map +1 -1
- package/cjs/highlevel/methods/stickers/create-sticker-set.js.map +1 -1
- package/cjs/highlevel/methods/stickers/delete-sticker-from-set.js.map +1 -1
- package/cjs/highlevel/methods/stickers/get-custom-emojis.js.map +1 -1
- package/cjs/highlevel/methods/stickers/move-sticker-in-set.js.map +1 -1
- package/cjs/highlevel/methods/stories/can-send-story.js.map +1 -1
- package/cjs/highlevel/methods/stories/edit-story.js.map +1 -1
- package/cjs/highlevel/methods/stories/find-in-update.js.map +1 -1
- package/cjs/highlevel/methods/stories/hide-my-stories-views.js.map +1 -1
- package/cjs/highlevel/methods/stories/iter-all-stories.js.map +1 -1
- package/cjs/highlevel/methods/stories/iter-profile-stories.js.map +1 -1
- package/cjs/highlevel/methods/stories/iter-story-viewers.js.map +1 -1
- package/cjs/highlevel/methods/stories/send-story.js.map +1 -1
- package/cjs/highlevel/methods/users/delete-profile-photos.js.map +1 -1
- package/cjs/highlevel/methods/users/get-users.js.map +1 -1
- package/cjs/highlevel/methods/users/iter-profile-photos.js.map +1 -1
- package/cjs/highlevel/methods/users/resolve-peer-many.js.map +1 -1
- package/cjs/highlevel/methods/users/resolve-peer.js.map +1 -1
- package/cjs/highlevel/methods/users/set-my-emoji-status.js.map +1 -1
- package/cjs/highlevel/methods/users/set-my-profile-photo.js.map +1 -1
- package/cjs/highlevel/storage/service/current-user.js +2 -0
- package/cjs/highlevel/storage/service/current-user.js.map +1 -1
- package/cjs/highlevel/storage/service/peers.js +5 -1
- package/cjs/highlevel/storage/service/peers.js.map +1 -1
- package/cjs/highlevel/storage/service/ref-messages.js +3 -0
- package/cjs/highlevel/storage/service/ref-messages.js.map +1 -1
- package/cjs/highlevel/storage/service/updates.js +1 -0
- package/cjs/highlevel/storage/service/updates.js.map +1 -1
- package/cjs/highlevel/storage/storage.d.ts +1 -1
- package/cjs/highlevel/storage/storage.js +17 -4
- package/cjs/highlevel/storage/storage.js.map +1 -1
- package/cjs/highlevel/types/auth/sent-code.js +1 -0
- package/cjs/highlevel/types/auth/sent-code.js.map +1 -1
- package/cjs/highlevel/types/bots/game-high-score.js +2 -0
- package/cjs/highlevel/types/bots/game-high-score.js.map +1 -1
- package/cjs/highlevel/types/bots/inline-message/factories.js.map +1 -1
- package/cjs/highlevel/types/bots/inline-result/factories.js.map +1 -1
- package/cjs/highlevel/types/bots/keyboards/builder.js +2 -1
- package/cjs/highlevel/types/bots/keyboards/builder.js.map +1 -1
- package/cjs/highlevel/types/bots/keyboards/factories.js.map +1 -1
- package/cjs/highlevel/types/calls/discard-reason.js.map +1 -1
- package/cjs/highlevel/types/conversation.js +13 -7
- package/cjs/highlevel/types/conversation.js.map +1 -1
- package/cjs/highlevel/types/errors.js +3 -0
- package/cjs/highlevel/types/errors.js.map +1 -1
- package/cjs/highlevel/types/files/file-location.js +3 -0
- package/cjs/highlevel/types/files/file-location.js.map +1 -1
- package/cjs/highlevel/types/files/uploaded-file.js +1 -1
- package/cjs/highlevel/types/files/uploaded-file.js.map +1 -1
- package/cjs/highlevel/types/files/utils.d.ts +3 -3
- package/cjs/highlevel/types/files/utils.js.map +1 -1
- package/cjs/highlevel/types/files/web-document.js +1 -0
- package/cjs/highlevel/types/files/web-document.js.map +1 -1
- package/cjs/highlevel/types/media/audio.js +3 -2
- package/cjs/highlevel/types/media/audio.js.map +1 -1
- package/cjs/highlevel/types/media/contact.js +2 -1
- package/cjs/highlevel/types/media/contact.js.map +1 -1
- package/cjs/highlevel/types/media/dice.js +125 -124
- package/cjs/highlevel/types/media/dice.js.map +1 -1
- package/cjs/highlevel/types/media/document-utils.js.map +1 -1
- package/cjs/highlevel/types/media/document.js +2 -4
- package/cjs/highlevel/types/media/document.js.map +1 -1
- package/cjs/highlevel/types/media/game.js +2 -1
- package/cjs/highlevel/types/media/game.js.map +1 -1
- package/cjs/highlevel/types/media/invoice.js +4 -1
- package/cjs/highlevel/types/media/invoice.js.map +1 -1
- package/cjs/highlevel/types/media/location.js +4 -5
- package/cjs/highlevel/types/media/location.js.map +1 -1
- package/cjs/highlevel/types/media/photo.js +8 -1
- package/cjs/highlevel/types/media/photo.js.map +1 -1
- package/cjs/highlevel/types/media/poll.js +4 -1
- package/cjs/highlevel/types/media/poll.js.map +1 -1
- package/cjs/highlevel/types/media/sticker.js +3 -1
- package/cjs/highlevel/types/media/sticker.js.map +1 -1
- package/cjs/highlevel/types/media/story.js +3 -1
- package/cjs/highlevel/types/media/story.js.map +1 -1
- package/cjs/highlevel/types/media/thumbnail.js +35 -22
- package/cjs/highlevel/types/media/thumbnail.js.map +1 -1
- package/cjs/highlevel/types/media/venue.js +2 -1
- package/cjs/highlevel/types/media/venue.js.map +1 -1
- package/cjs/highlevel/types/media/video.js +3 -1
- package/cjs/highlevel/types/media/video.js.map +1 -1
- package/cjs/highlevel/types/media/voice.js +2 -1
- package/cjs/highlevel/types/media/voice.js.map +1 -1
- package/cjs/highlevel/types/media/web-page.js +2 -1
- package/cjs/highlevel/types/media/web-page.js.map +1 -1
- package/cjs/highlevel/types/messages/dialog.js +3 -0
- package/cjs/highlevel/types/messages/dialog.js.map +1 -1
- package/cjs/highlevel/types/messages/draft-message.js +1 -0
- package/cjs/highlevel/types/messages/draft-message.js.map +1 -1
- package/cjs/highlevel/types/messages/message-action.js.map +1 -1
- package/cjs/highlevel/types/messages/message-entity.js +2 -0
- package/cjs/highlevel/types/messages/message-entity.js.map +1 -1
- package/cjs/highlevel/types/messages/message-forward.js +2 -0
- package/cjs/highlevel/types/messages/message-forward.js.map +1 -1
- package/cjs/highlevel/types/messages/message-media.js.map +1 -1
- package/cjs/highlevel/types/messages/message-reactions.js +4 -0
- package/cjs/highlevel/types/messages/message-reactions.js.map +1 -1
- package/cjs/highlevel/types/messages/message-replies.js +2 -0
- package/cjs/highlevel/types/messages/message-replies.js.map +1 -1
- package/cjs/highlevel/types/messages/message.js +6 -0
- package/cjs/highlevel/types/messages/message.js.map +1 -1
- package/cjs/highlevel/types/messages/replied-message.js +2 -0
- package/cjs/highlevel/types/messages/replied-message.js.map +1 -1
- package/cjs/highlevel/types/misc/sticker-set.js +7 -1
- package/cjs/highlevel/types/misc/sticker-set.js.map +1 -1
- package/cjs/highlevel/types/misc/takeout-session.js +5 -0
- package/cjs/highlevel/types/misc/takeout-session.js.map +1 -1
- package/cjs/highlevel/types/peers/chat-colors.js +2 -0
- package/cjs/highlevel/types/peers/chat-colors.js.map +1 -1
- package/cjs/highlevel/types/peers/chat-event/actions.js.map +1 -1
- package/cjs/highlevel/types/peers/chat-event/filters.js.map +1 -1
- package/cjs/highlevel/types/peers/chat-event/index.js +2 -0
- package/cjs/highlevel/types/peers/chat-event/index.js.map +1 -1
- package/cjs/highlevel/types/peers/chat-invite-link-member.js +2 -0
- package/cjs/highlevel/types/peers/chat-invite-link-member.js.map +1 -1
- package/cjs/highlevel/types/peers/chat-invite-link.js +2 -0
- package/cjs/highlevel/types/peers/chat-invite-link.js.map +1 -1
- package/cjs/highlevel/types/peers/chat-location.js +1 -0
- package/cjs/highlevel/types/peers/chat-location.js.map +1 -1
- package/cjs/highlevel/types/peers/chat-member.js +2 -0
- package/cjs/highlevel/types/peers/chat-member.js.map +1 -1
- package/cjs/highlevel/types/peers/chat-permissions.js +1 -0
- package/cjs/highlevel/types/peers/chat-permissions.js.map +1 -1
- package/cjs/highlevel/types/peers/chat-photo.js +5 -0
- package/cjs/highlevel/types/peers/chat-photo.js.map +1 -1
- package/cjs/highlevel/types/peers/chat-preview.js +2 -0
- package/cjs/highlevel/types/peers/chat-preview.js.map +1 -1
- package/cjs/highlevel/types/peers/chat.js +12 -1
- package/cjs/highlevel/types/peers/chat.js.map +1 -1
- package/cjs/highlevel/types/peers/forum-topic.js +9 -6
- package/cjs/highlevel/types/peers/forum-topic.js.map +1 -1
- package/cjs/highlevel/types/peers/peer.js.map +1 -1
- package/cjs/highlevel/types/peers/peers-index.js +3 -1
- package/cjs/highlevel/types/peers/peers-index.js.map +1 -1
- package/cjs/highlevel/types/peers/user.js +5 -1
- package/cjs/highlevel/types/peers/user.js.map +1 -1
- package/cjs/highlevel/types/premium/boost-slot.js +2 -0
- package/cjs/highlevel/types/premium/boost-slot.js.map +1 -1
- package/cjs/highlevel/types/premium/boost-stats.js +1 -0
- package/cjs/highlevel/types/premium/boost-stats.js.map +1 -1
- package/cjs/highlevel/types/premium/boost.js +2 -0
- package/cjs/highlevel/types/premium/boost.js.map +1 -1
- package/cjs/highlevel/types/reactions/emoji-status.js +1 -0
- package/cjs/highlevel/types/reactions/emoji-status.js.map +1 -1
- package/cjs/highlevel/types/reactions/peer-reaction.js +2 -0
- package/cjs/highlevel/types/reactions/peer-reaction.js.map +1 -1
- package/cjs/highlevel/types/reactions/reaction-count.js +1 -0
- package/cjs/highlevel/types/reactions/reaction-count.js.map +1 -1
- package/cjs/highlevel/types/reactions/types.js.map +1 -1
- package/cjs/highlevel/types/stories/all-stories.d.ts +2 -2
- package/cjs/highlevel/types/stories/all-stories.js +3 -1
- package/cjs/highlevel/types/stories/all-stories.js.map +1 -1
- package/cjs/highlevel/types/stories/interactive/base.js +1 -0
- package/cjs/highlevel/types/stories/interactive/base.js.map +1 -1
- package/cjs/highlevel/types/stories/interactive/channel-post.js +3 -1
- package/cjs/highlevel/types/stories/interactive/channel-post.js.map +1 -1
- package/cjs/highlevel/types/stories/interactive/index.js.map +1 -1
- package/cjs/highlevel/types/stories/interactive/input.js +1 -0
- package/cjs/highlevel/types/stories/interactive/input.js.map +1 -1
- package/cjs/highlevel/types/stories/interactive/location.js +2 -1
- package/cjs/highlevel/types/stories/interactive/location.js.map +1 -1
- package/cjs/highlevel/types/stories/interactive/reaction.js +2 -1
- package/cjs/highlevel/types/stories/interactive/reaction.js.map +1 -1
- package/cjs/highlevel/types/stories/interactive/venue.js +2 -1
- package/cjs/highlevel/types/stories/interactive/venue.js.map +1 -1
- package/cjs/highlevel/types/stories/peer-stories.js +2 -0
- package/cjs/highlevel/types/stories/peer-stories.js.map +1 -1
- package/cjs/highlevel/types/stories/stealth-mode.js +1 -0
- package/cjs/highlevel/types/stories/stealth-mode.js.map +1 -1
- package/cjs/highlevel/types/stories/story-interactions.js +2 -0
- package/cjs/highlevel/types/stories/story-interactions.js.map +1 -1
- package/cjs/highlevel/types/stories/story-viewer.d.ts +1 -1
- package/cjs/highlevel/types/stories/story-viewer.js +6 -0
- package/cjs/highlevel/types/stories/story-viewer.js.map +1 -1
- package/cjs/highlevel/types/stories/story.js +2 -0
- package/cjs/highlevel/types/stories/story.js.map +1 -1
- package/cjs/highlevel/types/updates/bot-chat-join-request.js +2 -0
- package/cjs/highlevel/types/updates/bot-chat-join-request.js.map +1 -1
- package/cjs/highlevel/types/updates/bot-reaction.js +4 -0
- package/cjs/highlevel/types/updates/bot-reaction.js.map +1 -1
- package/cjs/highlevel/types/updates/bot-stopped.js +2 -0
- package/cjs/highlevel/types/updates/bot-stopped.js.map +1 -1
- package/cjs/highlevel/types/updates/callback-query.js +4 -0
- package/cjs/highlevel/types/updates/callback-query.js.map +1 -1
- package/cjs/highlevel/types/updates/chat-join-request.js +2 -0
- package/cjs/highlevel/types/updates/chat-join-request.js.map +1 -1
- package/cjs/highlevel/types/updates/chat-member-update.js +2 -0
- package/cjs/highlevel/types/updates/chat-member-update.js.map +1 -1
- package/cjs/highlevel/types/updates/chosen-inline-result.js +2 -0
- package/cjs/highlevel/types/updates/chosen-inline-result.js.map +1 -1
- package/cjs/highlevel/types/updates/delete-message-update.js +1 -0
- package/cjs/highlevel/types/updates/delete-message-update.js.map +1 -1
- package/cjs/highlevel/types/updates/delete-story-update.js +2 -0
- package/cjs/highlevel/types/updates/delete-story-update.js.map +1 -1
- package/cjs/highlevel/types/updates/history-read-update.js +1 -0
- package/cjs/highlevel/types/updates/history-read-update.js.map +1 -1
- package/cjs/highlevel/types/updates/inline-query.js +2 -0
- package/cjs/highlevel/types/updates/inline-query.js.map +1 -1
- package/cjs/highlevel/types/updates/parse-update.js.map +1 -1
- package/cjs/highlevel/types/updates/poll-update.js +2 -0
- package/cjs/highlevel/types/updates/poll-update.js.map +1 -1
- package/cjs/highlevel/types/updates/poll-vote.js +2 -0
- package/cjs/highlevel/types/updates/poll-vote.js.map +1 -1
- package/cjs/highlevel/types/updates/pre-checkout-query.js +2 -0
- package/cjs/highlevel/types/updates/pre-checkout-query.js.map +1 -1
- package/cjs/highlevel/types/updates/story-update.js +2 -0
- package/cjs/highlevel/types/updates/story-update.js.map +1 -1
- package/cjs/highlevel/types/updates/user-status-update.js +1 -0
- package/cjs/highlevel/types/updates/user-status-update.js.map +1 -1
- package/cjs/highlevel/types/updates/user-typing-update.js +1 -0
- package/cjs/highlevel/types/updates/user-typing-update.js.map +1 -1
- package/cjs/highlevel/updates/manager.d.ts +1 -1
- package/cjs/highlevel/updates/manager.js +50 -28
- package/cjs/highlevel/updates/manager.js.map +1 -1
- package/cjs/highlevel/updates/parsed.js.map +1 -1
- package/cjs/highlevel/updates/utils.js.map +1 -1
- package/cjs/highlevel/utils/convert-file-id.js.map +1 -1
- package/cjs/highlevel/utils/entities.js.map +1 -1
- package/cjs/highlevel/utils/file-type.d.ts +1 -0
- package/cjs/highlevel/utils/file-type.js +35 -1
- package/cjs/highlevel/utils/file-type.js.map +1 -1
- package/cjs/highlevel/utils/file-utils.js +1 -1
- package/cjs/highlevel/utils/file-utils.js.map +1 -1
- package/cjs/highlevel/utils/inline-utils.js.map +1 -1
- package/cjs/highlevel/utils/inspectable.js.map +1 -1
- package/cjs/highlevel/utils/memoize.js.map +1 -1
- package/cjs/highlevel/utils/peer-utils.js.map +1 -1
- package/cjs/highlevel/utils/query-batcher.js.map +1 -1
- package/cjs/highlevel/utils/rps-meter.js +3 -0
- package/cjs/highlevel/utils/rps-meter.js.map +1 -1
- package/cjs/highlevel/utils/stream-utils.js.map +1 -1
- package/cjs/highlevel/utils/string-session.d.ts +1 -2
- package/cjs/highlevel/utils/string-session.js +27 -7
- package/cjs/highlevel/utils/string-session.js.map +1 -1
- package/cjs/highlevel/utils/voice-utils.js.map +1 -1
- package/cjs/highlevel/worker/app-config.d.ts +2 -3
- package/cjs/highlevel/worker/app-config.js +6 -3
- package/cjs/highlevel/worker/app-config.js.map +1 -1
- package/cjs/highlevel/worker/errors.js.map +1 -1
- package/cjs/highlevel/worker/invoker.js +3 -2
- package/cjs/highlevel/worker/invoker.js.map +1 -1
- package/cjs/highlevel/worker/port.d.ts +16 -17
- package/cjs/highlevel/worker/port.js +74 -49
- package/cjs/highlevel/worker/port.js.map +1 -1
- package/cjs/highlevel/worker/protocol.d.ts +2 -2
- package/cjs/highlevel/worker/protocol.js.map +1 -1
- package/cjs/highlevel/worker/storage.d.ts +9 -13
- package/cjs/highlevel/worker/storage.js +34 -19
- package/cjs/highlevel/worker/storage.js.map +1 -1
- package/cjs/highlevel/worker/worker.js +3 -0
- package/cjs/highlevel/worker/worker.js.map +1 -1
- package/cjs/network/auth-key.js +8 -1
- package/cjs/network/auth-key.js.map +1 -1
- package/cjs/network/authorization.js.map +1 -1
- package/cjs/network/client.d.ts +1 -1
- package/cjs/network/client.js +39 -14
- package/cjs/network/client.js.map +1 -1
- package/cjs/network/config-manager.js.map +1 -1
- package/cjs/network/mtproto-session.d.ts +1 -1
- package/cjs/network/mtproto-session.js +40 -30
- package/cjs/network/mtproto-session.js.map +1 -1
- package/cjs/network/multi-session-connection.d.ts +2 -2
- package/cjs/network/multi-session-connection.js +13 -7
- package/cjs/network/multi-session-connection.js.map +1 -1
- package/cjs/network/network-manager.d.ts +2 -3
- package/cjs/network/network-manager.js +49 -28
- package/cjs/network/network-manager.js.map +1 -1
- package/cjs/network/persistent-connection.d.ts +3 -3
- package/cjs/network/persistent-connection.js +33 -22
- package/cjs/network/persistent-connection.js.map +1 -1
- package/cjs/network/server-salt.js +4 -5
- package/cjs/network/server-salt.js.map +1 -1
- package/cjs/network/session-connection.d.ts +1 -1
- package/cjs/network/session-connection.js +22 -12
- package/cjs/network/session-connection.js.map +1 -1
- package/cjs/network/transports/abstract.d.ts +2 -2
- package/cjs/network/transports/abstract.js +1 -0
- package/cjs/network/transports/abstract.js.map +1 -1
- package/cjs/network/transports/intermediate.js +1 -0
- package/cjs/network/transports/intermediate.js.map +1 -1
- package/cjs/network/transports/obfuscated.js +3 -0
- package/cjs/network/transports/obfuscated.js.map +1 -1
- package/cjs/network/transports/streamed.d.ts +1 -1
- package/cjs/network/transports/streamed.js +1 -4
- package/cjs/network/transports/streamed.js.map +1 -1
- package/cjs/network/transports/wrapped.d.ts +1 -1
- package/cjs/network/transports/wrapped.js +2 -0
- package/cjs/network/transports/wrapped.js.map +1 -1
- package/cjs/platform.js.map +1 -1
- package/cjs/storage/driver.js +3 -4
- package/cjs/storage/driver.js.map +1 -1
- package/cjs/storage/memory/driver.js +1 -3
- package/cjs/storage/memory/driver.js.map +1 -1
- package/cjs/storage/memory/index.js +5 -7
- package/cjs/storage/memory/index.js.map +1 -1
- package/cjs/storage/memory/repository/auth-keys.d.ts +1 -1
- package/cjs/storage/memory/repository/auth-keys.js +2 -0
- package/cjs/storage/memory/repository/auth-keys.js.map +1 -1
- package/cjs/storage/memory/repository/kv.d.ts +1 -1
- package/cjs/storage/memory/repository/kv.js +2 -0
- package/cjs/storage/memory/repository/kv.js.map +1 -1
- package/cjs/storage/memory/repository/peers.d.ts +1 -1
- package/cjs/storage/memory/repository/peers.js +2 -0
- package/cjs/storage/memory/repository/peers.js.map +1 -1
- package/cjs/storage/memory/repository/ref-messages.d.ts +1 -1
- package/cjs/storage/memory/repository/ref-messages.js +2 -0
- package/cjs/storage/memory/repository/ref-messages.js.map +1 -1
- package/cjs/storage/service/auth-keys.js +2 -0
- package/cjs/storage/service/auth-keys.js.map +1 -1
- package/cjs/storage/service/base.js +4 -0
- package/cjs/storage/service/base.js.map +1 -1
- package/cjs/storage/service/default-dcs.js +2 -0
- package/cjs/storage/service/default-dcs.js.map +1 -1
- package/cjs/storage/service/future-salts.js +2 -1
- package/cjs/storage/service/future-salts.js.map +1 -1
- package/cjs/storage/sqlite/driver.js +10 -10
- package/cjs/storage/sqlite/driver.js.map +1 -1
- package/cjs/storage/sqlite/index.d.ts +1 -1
- package/cjs/storage/sqlite/index.js +5 -0
- package/cjs/storage/sqlite/index.js.map +1 -1
- package/cjs/storage/sqlite/repository/auth-keys.js +9 -0
- package/cjs/storage/sqlite/repository/auth-keys.js.map +1 -1
- package/cjs/storage/sqlite/repository/kv.js +5 -0
- package/cjs/storage/sqlite/repository/kv.js.map +1 -1
- package/cjs/storage/sqlite/repository/peers.js +6 -0
- package/cjs/storage/sqlite/repository/peers.js.map +1 -1
- package/cjs/storage/sqlite/repository/ref-messages.d.ts +1 -1
- package/cjs/storage/sqlite/repository/ref-messages.js +6 -0
- package/cjs/storage/sqlite/repository/ref-messages.js.map +1 -1
- package/cjs/storage/storage.d.ts +1 -3
- package/cjs/storage/storage.js +21 -13
- package/cjs/storage/storage.js.map +1 -1
- package/cjs/types/errors.js +13 -0
- package/cjs/types/errors.js.map +1 -1
- package/cjs/utils/async-lock.js +1 -3
- package/cjs/utils/async-lock.js.map +1 -1
- package/cjs/utils/bigint-utils.js.map +1 -1
- package/cjs/utils/binary/asn1-parser.js.map +1 -1
- package/cjs/utils/buffer-utils.js.map +1 -1
- package/cjs/utils/condition-variable.js +2 -0
- package/cjs/utils/condition-variable.js.map +1 -1
- package/cjs/utils/crypto/factorization.js.map +1 -1
- package/cjs/utils/crypto/keys.js.map +1 -1
- package/cjs/utils/crypto/miller-rabin.js.map +1 -1
- package/cjs/utils/crypto/password.js.map +1 -1
- package/cjs/utils/crypto/utils.js.map +1 -1
- package/cjs/utils/dcs.js +1 -1
- package/cjs/utils/dcs.js.map +1 -1
- package/cjs/utils/deque.js +8 -2
- package/cjs/utils/deque.js.map +1 -1
- package/cjs/utils/early-timer.js +4 -1
- package/cjs/utils/early-timer.js.map +1 -1
- package/cjs/utils/error-reporting.js.map +1 -1
- package/cjs/utils/function-utils.js.map +1 -1
- package/cjs/utils/linked-list.js +4 -1
- package/cjs/utils/linked-list.js.map +1 -1
- package/cjs/utils/links/bots.js.map +1 -1
- package/cjs/utils/links/chat.js.map +1 -1
- package/cjs/utils/links/common.js.map +1 -1
- package/cjs/utils/links/misc.js.map +1 -1
- package/cjs/utils/logger.d.ts +2 -2
- package/cjs/utils/logger.js +21 -14
- package/cjs/utils/logger.js.map +1 -1
- package/cjs/utils/long-utils.js +2 -6
- package/cjs/utils/long-utils.js.map +1 -1
- package/cjs/utils/lru-map.js +5 -1
- package/cjs/utils/lru-map.js.map +1 -1
- package/cjs/utils/lru-set.js +4 -0
- package/cjs/utils/lru-set.js.map +1 -1
- package/cjs/utils/peer-utils.js.map +1 -1
- package/cjs/utils/reloadable.d.ts +1 -1
- package/cjs/utils/reloadable.js +10 -7
- package/cjs/utils/reloadable.js.map +1 -1
- package/cjs/utils/sorted-array.js +2 -0
- package/cjs/utils/sorted-array.js.map +1 -1
- package/cjs/utils/tl-json.js.map +1 -1
- package/cjs/utils/type-assertions.js.map +1 -1
- package/esm/highlevel/base.d.ts +1 -1
- package/esm/highlevel/base.js +29 -23
- package/esm/highlevel/base.js.map +1 -1
- package/esm/highlevel/client.d.ts +2 -1
- package/esm/highlevel/client.js +1 -0
- package/esm/highlevel/client.js.map +1 -1
- package/esm/highlevel/managers/app-config-manager.js +7 -5
- package/esm/highlevel/managers/app-config-manager.js.map +1 -1
- package/esm/highlevel/methods/_init.js.map +1 -1
- package/esm/highlevel/methods/auth/start-test.js.map +1 -1
- package/esm/highlevel/methods/auth/start.js.map +1 -1
- package/esm/highlevel/methods/auth/utils.js.map +1 -1
- package/esm/highlevel/methods/bots/get-callback-answer.js.map +1 -1
- package/esm/highlevel/methods/bots/get-game-high-scores.js.map +1 -1
- package/esm/highlevel/methods/bots/normalize-command-scope.js.map +1 -1
- package/esm/highlevel/methods/bots/set-my-commands.js.map +1 -1
- package/esm/highlevel/methods/chats/add-chat-members.js.map +1 -1
- package/esm/highlevel/methods/chats/ban-chat-member.js.map +1 -1
- package/esm/highlevel/methods/chats/batched-queries.js.map +1 -1
- package/esm/highlevel/methods/chats/delete-chat-photo.js.map +1 -1
- package/esm/highlevel/methods/chats/delete-history.js.map +1 -1
- package/esm/highlevel/methods/chats/get-chat-event-log.js.map +1 -1
- package/esm/highlevel/methods/chats/get-chat-member.js.map +1 -1
- package/esm/highlevel/methods/chats/get-chat-members.js.map +1 -1
- package/esm/highlevel/methods/chats/get-chat-preview.js.map +1 -1
- package/esm/highlevel/methods/chats/get-chat.js.map +1 -1
- package/esm/highlevel/methods/chats/get-full-chat.js.map +1 -1
- package/esm/highlevel/methods/chats/get-nearby-chats.js.map +1 -1
- package/esm/highlevel/methods/chats/get-similar-channels.js.map +1 -1
- package/esm/highlevel/methods/chats/iter-chat-event-log.js.map +1 -1
- package/esm/highlevel/methods/chats/iter-chat-members.js.map +1 -1
- package/esm/highlevel/methods/chats/join-chat.js.map +1 -1
- package/esm/highlevel/methods/chats/kick-chat-member.js.map +1 -1
- package/esm/highlevel/methods/chats/leave-chat.js.map +1 -1
- package/esm/highlevel/methods/chats/open-chat.js.map +1 -1
- package/esm/highlevel/methods/chats/reorder-usernames.js.map +1 -1
- package/esm/highlevel/methods/chats/restrict-chat-member.js.map +1 -1
- package/esm/highlevel/methods/chats/save-draft.js.map +1 -1
- package/esm/highlevel/methods/chats/set-chat-color.js.map +1 -1
- package/esm/highlevel/methods/chats/set-chat-photo.js.map +1 -1
- package/esm/highlevel/methods/chats/set-chat-title.js.map +1 -1
- package/esm/highlevel/methods/chats/toggle-fragment-username.js.map +1 -1
- package/esm/highlevel/methods/chats/unarchive-chats.js.map +1 -1
- package/esm/highlevel/methods/chats/unban-chat-member.js.map +1 -1
- package/esm/highlevel/methods/contacts/delete-contacts.js.map +1 -1
- package/esm/highlevel/methods/dialogs/create-folder.js.map +1 -1
- package/esm/highlevel/methods/dialogs/edit-folder.js.map +1 -1
- package/esm/highlevel/methods/dialogs/find-folder.js.map +1 -1
- package/esm/highlevel/methods/dialogs/get-folders.js.map +1 -1
- package/esm/highlevel/methods/dialogs/iter-dialogs.js.map +1 -1
- package/esm/highlevel/methods/files/download-buffer.js.map +1 -1
- package/esm/highlevel/methods/files/download-iterable.js +1 -1
- package/esm/highlevel/methods/files/download-iterable.js.map +1 -1
- package/esm/highlevel/methods/files/download-node-stream.js.map +1 -1
- package/esm/highlevel/methods/files/download-stream.js.map +1 -1
- package/esm/highlevel/methods/files/normalize-file-to-document.js.map +1 -1
- package/esm/highlevel/methods/files/normalize-input-file.js.map +1 -1
- package/esm/highlevel/methods/files/normalize-input-media.js +1 -2
- package/esm/highlevel/methods/files/normalize-input-media.js.map +1 -1
- package/esm/highlevel/methods/files/upload-file.js +8 -7
- package/esm/highlevel/methods/files/upload-file.js.map +1 -1
- package/esm/highlevel/methods/files/upload-media.js.map +1 -1
- package/esm/highlevel/methods/forums/iter-forum-topics.js.map +1 -1
- package/esm/highlevel/methods/invite-links/get-primary-invite-link.js.map +1 -1
- package/esm/highlevel/methods/invite-links/iter-invite-link-members.js.map +1 -1
- package/esm/highlevel/methods/invite-links/iter-invite-links.js.map +1 -1
- package/esm/highlevel/methods/messages/close-poll.js.map +1 -1
- package/esm/highlevel/methods/messages/delete-messages.js.map +1 -1
- package/esm/highlevel/methods/messages/edit-inline-message.js.map +1 -1
- package/esm/highlevel/methods/messages/edit-message.js.map +1 -1
- package/esm/highlevel/methods/messages/find-in-update.js.map +1 -1
- package/esm/highlevel/methods/messages/forward-messages.js.map +1 -1
- package/esm/highlevel/methods/messages/get-callback-query-message.js.map +1 -1
- package/esm/highlevel/methods/messages/get-discussion-message.js.map +1 -1
- package/esm/highlevel/methods/messages/get-history.js +5 -1
- package/esm/highlevel/methods/messages/get-history.js.map +1 -1
- package/esm/highlevel/methods/messages/get-message-by-link.js.map +1 -1
- package/esm/highlevel/methods/messages/get-message-group.js.map +1 -1
- package/esm/highlevel/methods/messages/get-message-reactions.js.map +1 -1
- package/esm/highlevel/methods/messages/get-messages.js.map +1 -1
- package/esm/highlevel/methods/messages/get-reply-to.js.map +1 -1
- package/esm/highlevel/methods/messages/iter-history.js.map +1 -1
- package/esm/highlevel/methods/messages/iter-reaction-users.js.map +1 -1
- package/esm/highlevel/methods/messages/iter-search-global.js.map +1 -1
- package/esm/highlevel/methods/messages/iter-search-messages.js.map +1 -1
- package/esm/highlevel/methods/messages/read-history.js.map +1 -1
- package/esm/highlevel/methods/messages/send-answer.js.map +1 -1
- package/esm/highlevel/methods/messages/send-comment.js.map +1 -1
- package/esm/highlevel/methods/messages/send-common.js.map +1 -1
- package/esm/highlevel/methods/messages/send-copy-group.js.map +1 -1
- package/esm/highlevel/methods/messages/send-copy.js.map +1 -1
- package/esm/highlevel/methods/messages/send-media-group.js.map +1 -1
- package/esm/highlevel/methods/messages/send-media.js.map +1 -1
- package/esm/highlevel/methods/messages/send-quote.js.map +1 -1
- package/esm/highlevel/methods/messages/send-text.js.map +1 -1
- package/esm/highlevel/methods/messages/send-typing.js.map +1 -1
- package/esm/highlevel/methods/messages/send-vote.js.map +1 -1
- package/esm/highlevel/methods/messages/translate-text.js.map +1 -1
- package/esm/highlevel/methods/messages/unpin-all-messages.js.map +1 -1
- package/esm/highlevel/methods/misc/normalize-privacy-rules.js.map +1 -1
- package/esm/highlevel/methods/misc/normalize-text.js.map +1 -1
- package/esm/highlevel/methods/misc/with-params.js.map +1 -1
- package/esm/highlevel/methods/password/change-cloud-password.js.map +1 -1
- package/esm/highlevel/methods/password/enable-cloud-password.js.map +1 -1
- package/esm/highlevel/methods/password/remove-cloud-password.js.map +1 -1
- package/esm/highlevel/methods/premium/can-apply-boost.js.map +1 -1
- package/esm/highlevel/methods/premium/iter-boosters.js.map +1 -1
- package/esm/highlevel/methods/stickers/create-sticker-set.js.map +1 -1
- package/esm/highlevel/methods/stickers/delete-sticker-from-set.js.map +1 -1
- package/esm/highlevel/methods/stickers/get-custom-emojis.js.map +1 -1
- package/esm/highlevel/methods/stickers/move-sticker-in-set.js.map +1 -1
- package/esm/highlevel/methods/stories/can-send-story.js.map +1 -1
- package/esm/highlevel/methods/stories/edit-story.js.map +1 -1
- package/esm/highlevel/methods/stories/find-in-update.js.map +1 -1
- package/esm/highlevel/methods/stories/hide-my-stories-views.js.map +1 -1
- package/esm/highlevel/methods/stories/iter-all-stories.js.map +1 -1
- package/esm/highlevel/methods/stories/iter-profile-stories.js.map +1 -1
- package/esm/highlevel/methods/stories/iter-story-viewers.js.map +1 -1
- package/esm/highlevel/methods/stories/send-story.js.map +1 -1
- package/esm/highlevel/methods/users/delete-profile-photos.js.map +1 -1
- package/esm/highlevel/methods/users/get-users.js.map +1 -1
- package/esm/highlevel/methods/users/iter-profile-photos.js.map +1 -1
- package/esm/highlevel/methods/users/resolve-peer-many.js.map +1 -1
- package/esm/highlevel/methods/users/resolve-peer.js.map +1 -1
- package/esm/highlevel/methods/users/set-my-emoji-status.js.map +1 -1
- package/esm/highlevel/methods/users/set-my-profile-photo.js.map +1 -1
- package/esm/highlevel/storage/service/current-user.js +2 -0
- package/esm/highlevel/storage/service/current-user.js.map +1 -1
- package/esm/highlevel/storage/service/peers.js +5 -1
- package/esm/highlevel/storage/service/peers.js.map +1 -1
- package/esm/highlevel/storage/service/ref-messages.js +3 -0
- package/esm/highlevel/storage/service/ref-messages.js.map +1 -1
- package/esm/highlevel/storage/service/updates.js +1 -0
- package/esm/highlevel/storage/service/updates.js.map +1 -1
- package/esm/highlevel/storage/storage.d.ts +1 -1
- package/esm/highlevel/storage/storage.js +17 -4
- package/esm/highlevel/storage/storage.js.map +1 -1
- package/esm/highlevel/types/auth/sent-code.js +1 -0
- package/esm/highlevel/types/auth/sent-code.js.map +1 -1
- package/esm/highlevel/types/bots/game-high-score.js +2 -0
- package/esm/highlevel/types/bots/game-high-score.js.map +1 -1
- package/esm/highlevel/types/bots/inline-message/factories.js.map +1 -1
- package/esm/highlevel/types/bots/inline-result/factories.js.map +1 -1
- package/esm/highlevel/types/bots/keyboards/builder.js +2 -1
- package/esm/highlevel/types/bots/keyboards/builder.js.map +1 -1
- package/esm/highlevel/types/bots/keyboards/factories.js.map +1 -1
- package/esm/highlevel/types/calls/discard-reason.js.map +1 -1
- package/esm/highlevel/types/conversation.js +13 -7
- package/esm/highlevel/types/conversation.js.map +1 -1
- package/esm/highlevel/types/errors.js +3 -0
- package/esm/highlevel/types/errors.js.map +1 -1
- package/esm/highlevel/types/files/file-location.js +3 -0
- package/esm/highlevel/types/files/file-location.js.map +1 -1
- package/esm/highlevel/types/files/uploaded-file.js +1 -1
- package/esm/highlevel/types/files/uploaded-file.js.map +1 -1
- package/esm/highlevel/types/files/utils.d.ts +1 -1
- package/esm/highlevel/types/files/utils.js.map +1 -1
- package/esm/highlevel/types/files/web-document.js +1 -0
- package/esm/highlevel/types/files/web-document.js.map +1 -1
- package/esm/highlevel/types/media/audio.js +3 -2
- package/esm/highlevel/types/media/audio.js.map +1 -1
- package/esm/highlevel/types/media/contact.js +2 -1
- package/esm/highlevel/types/media/contact.js.map +1 -1
- package/esm/highlevel/types/media/dice.js +125 -124
- package/esm/highlevel/types/media/dice.js.map +1 -1
- package/esm/highlevel/types/media/document-utils.js.map +1 -1
- package/esm/highlevel/types/media/document.js +2 -4
- package/esm/highlevel/types/media/document.js.map +1 -1
- package/esm/highlevel/types/media/game.js +2 -1
- package/esm/highlevel/types/media/game.js.map +1 -1
- package/esm/highlevel/types/media/invoice.js +4 -1
- package/esm/highlevel/types/media/invoice.js.map +1 -1
- package/esm/highlevel/types/media/location.js +4 -5
- package/esm/highlevel/types/media/location.js.map +1 -1
- package/esm/highlevel/types/media/photo.js +8 -1
- package/esm/highlevel/types/media/photo.js.map +1 -1
- package/esm/highlevel/types/media/poll.js +4 -1
- package/esm/highlevel/types/media/poll.js.map +1 -1
- package/esm/highlevel/types/media/sticker.js +3 -1
- package/esm/highlevel/types/media/sticker.js.map +1 -1
- package/esm/highlevel/types/media/story.js +3 -1
- package/esm/highlevel/types/media/story.js.map +1 -1
- package/esm/highlevel/types/media/thumbnail.js +35 -22
- package/esm/highlevel/types/media/thumbnail.js.map +1 -1
- package/esm/highlevel/types/media/venue.js +2 -1
- package/esm/highlevel/types/media/venue.js.map +1 -1
- package/esm/highlevel/types/media/video.js +3 -1
- package/esm/highlevel/types/media/video.js.map +1 -1
- package/esm/highlevel/types/media/voice.js +2 -1
- package/esm/highlevel/types/media/voice.js.map +1 -1
- package/esm/highlevel/types/media/web-page.js +2 -1
- package/esm/highlevel/types/media/web-page.js.map +1 -1
- package/esm/highlevel/types/messages/dialog.js +3 -0
- package/esm/highlevel/types/messages/dialog.js.map +1 -1
- package/esm/highlevel/types/messages/draft-message.js +1 -0
- package/esm/highlevel/types/messages/draft-message.js.map +1 -1
- package/esm/highlevel/types/messages/message-action.js.map +1 -1
- package/esm/highlevel/types/messages/message-entity.js +2 -0
- package/esm/highlevel/types/messages/message-entity.js.map +1 -1
- package/esm/highlevel/types/messages/message-forward.js +2 -0
- package/esm/highlevel/types/messages/message-forward.js.map +1 -1
- package/esm/highlevel/types/messages/message-media.js.map +1 -1
- package/esm/highlevel/types/messages/message-reactions.js +4 -0
- package/esm/highlevel/types/messages/message-reactions.js.map +1 -1
- package/esm/highlevel/types/messages/message-replies.js +2 -0
- package/esm/highlevel/types/messages/message-replies.js.map +1 -1
- package/esm/highlevel/types/messages/message.js +6 -0
- package/esm/highlevel/types/messages/message.js.map +1 -1
- package/esm/highlevel/types/messages/replied-message.js +2 -0
- package/esm/highlevel/types/messages/replied-message.js.map +1 -1
- package/esm/highlevel/types/misc/sticker-set.js +7 -1
- package/esm/highlevel/types/misc/sticker-set.js.map +1 -1
- package/esm/highlevel/types/misc/takeout-session.js +5 -0
- package/esm/highlevel/types/misc/takeout-session.js.map +1 -1
- package/esm/highlevel/types/peers/chat-colors.js +2 -0
- package/esm/highlevel/types/peers/chat-colors.js.map +1 -1
- package/esm/highlevel/types/peers/chat-event/actions.js.map +1 -1
- package/esm/highlevel/types/peers/chat-event/filters.js.map +1 -1
- package/esm/highlevel/types/peers/chat-event/index.js +2 -0
- package/esm/highlevel/types/peers/chat-event/index.js.map +1 -1
- package/esm/highlevel/types/peers/chat-invite-link-member.js +2 -0
- package/esm/highlevel/types/peers/chat-invite-link-member.js.map +1 -1
- package/esm/highlevel/types/peers/chat-invite-link.js +2 -0
- package/esm/highlevel/types/peers/chat-invite-link.js.map +1 -1
- package/esm/highlevel/types/peers/chat-location.js +1 -0
- package/esm/highlevel/types/peers/chat-location.js.map +1 -1
- package/esm/highlevel/types/peers/chat-member.js +2 -0
- package/esm/highlevel/types/peers/chat-member.js.map +1 -1
- package/esm/highlevel/types/peers/chat-permissions.js +1 -0
- package/esm/highlevel/types/peers/chat-permissions.js.map +1 -1
- package/esm/highlevel/types/peers/chat-photo.js +5 -0
- package/esm/highlevel/types/peers/chat-photo.js.map +1 -1
- package/esm/highlevel/types/peers/chat-preview.js +2 -0
- package/esm/highlevel/types/peers/chat-preview.js.map +1 -1
- package/esm/highlevel/types/peers/chat.js +12 -1
- package/esm/highlevel/types/peers/chat.js.map +1 -1
- package/esm/highlevel/types/peers/forum-topic.js +9 -6
- package/esm/highlevel/types/peers/forum-topic.js.map +1 -1
- package/esm/highlevel/types/peers/peer.js.map +1 -1
- package/esm/highlevel/types/peers/peers-index.js +3 -1
- package/esm/highlevel/types/peers/peers-index.js.map +1 -1
- package/esm/highlevel/types/peers/user.js +5 -1
- package/esm/highlevel/types/peers/user.js.map +1 -1
- package/esm/highlevel/types/premium/boost-slot.js +2 -0
- package/esm/highlevel/types/premium/boost-slot.js.map +1 -1
- package/esm/highlevel/types/premium/boost-stats.js +1 -0
- package/esm/highlevel/types/premium/boost-stats.js.map +1 -1
- package/esm/highlevel/types/premium/boost.js +2 -0
- package/esm/highlevel/types/premium/boost.js.map +1 -1
- package/esm/highlevel/types/reactions/emoji-status.js +1 -0
- package/esm/highlevel/types/reactions/emoji-status.js.map +1 -1
- package/esm/highlevel/types/reactions/peer-reaction.js +2 -0
- package/esm/highlevel/types/reactions/peer-reaction.js.map +1 -1
- package/esm/highlevel/types/reactions/reaction-count.js +1 -0
- package/esm/highlevel/types/reactions/reaction-count.js.map +1 -1
- package/esm/highlevel/types/reactions/types.js.map +1 -1
- package/esm/highlevel/types/stories/all-stories.d.ts +2 -2
- package/esm/highlevel/types/stories/all-stories.js +3 -1
- package/esm/highlevel/types/stories/all-stories.js.map +1 -1
- package/esm/highlevel/types/stories/interactive/base.js +1 -0
- package/esm/highlevel/types/stories/interactive/base.js.map +1 -1
- package/esm/highlevel/types/stories/interactive/channel-post.js +3 -1
- package/esm/highlevel/types/stories/interactive/channel-post.js.map +1 -1
- package/esm/highlevel/types/stories/interactive/index.js.map +1 -1
- package/esm/highlevel/types/stories/interactive/input.js +1 -0
- package/esm/highlevel/types/stories/interactive/input.js.map +1 -1
- package/esm/highlevel/types/stories/interactive/location.js +2 -1
- package/esm/highlevel/types/stories/interactive/location.js.map +1 -1
- package/esm/highlevel/types/stories/interactive/reaction.js +2 -1
- package/esm/highlevel/types/stories/interactive/reaction.js.map +1 -1
- package/esm/highlevel/types/stories/interactive/venue.js +2 -1
- package/esm/highlevel/types/stories/interactive/venue.js.map +1 -1
- package/esm/highlevel/types/stories/peer-stories.js +2 -0
- package/esm/highlevel/types/stories/peer-stories.js.map +1 -1
- package/esm/highlevel/types/stories/stealth-mode.js +1 -0
- package/esm/highlevel/types/stories/stealth-mode.js.map +1 -1
- package/esm/highlevel/types/stories/story-interactions.js +2 -0
- package/esm/highlevel/types/stories/story-interactions.js.map +1 -1
- package/esm/highlevel/types/stories/story-viewer.d.ts +1 -1
- package/esm/highlevel/types/stories/story-viewer.js +6 -0
- package/esm/highlevel/types/stories/story-viewer.js.map +1 -1
- package/esm/highlevel/types/stories/story.js +2 -0
- package/esm/highlevel/types/stories/story.js.map +1 -1
- package/esm/highlevel/types/updates/bot-chat-join-request.js +2 -0
- package/esm/highlevel/types/updates/bot-chat-join-request.js.map +1 -1
- package/esm/highlevel/types/updates/bot-reaction.js +4 -0
- package/esm/highlevel/types/updates/bot-reaction.js.map +1 -1
- package/esm/highlevel/types/updates/bot-stopped.js +2 -0
- package/esm/highlevel/types/updates/bot-stopped.js.map +1 -1
- package/esm/highlevel/types/updates/callback-query.js +4 -0
- package/esm/highlevel/types/updates/callback-query.js.map +1 -1
- package/esm/highlevel/types/updates/chat-join-request.js +2 -0
- package/esm/highlevel/types/updates/chat-join-request.js.map +1 -1
- package/esm/highlevel/types/updates/chat-member-update.js +2 -0
- package/esm/highlevel/types/updates/chat-member-update.js.map +1 -1
- package/esm/highlevel/types/updates/chosen-inline-result.js +2 -0
- package/esm/highlevel/types/updates/chosen-inline-result.js.map +1 -1
- package/esm/highlevel/types/updates/delete-message-update.js +1 -0
- package/esm/highlevel/types/updates/delete-message-update.js.map +1 -1
- package/esm/highlevel/types/updates/delete-story-update.js +2 -0
- package/esm/highlevel/types/updates/delete-story-update.js.map +1 -1
- package/esm/highlevel/types/updates/history-read-update.js +1 -0
- package/esm/highlevel/types/updates/history-read-update.js.map +1 -1
- package/esm/highlevel/types/updates/inline-query.js +2 -0
- package/esm/highlevel/types/updates/inline-query.js.map +1 -1
- package/esm/highlevel/types/updates/parse-update.js.map +1 -1
- package/esm/highlevel/types/updates/poll-update.js +2 -0
- package/esm/highlevel/types/updates/poll-update.js.map +1 -1
- package/esm/highlevel/types/updates/poll-vote.js +2 -0
- package/esm/highlevel/types/updates/poll-vote.js.map +1 -1
- package/esm/highlevel/types/updates/pre-checkout-query.js +2 -0
- package/esm/highlevel/types/updates/pre-checkout-query.js.map +1 -1
- package/esm/highlevel/types/updates/story-update.js +2 -0
- package/esm/highlevel/types/updates/story-update.js.map +1 -1
- package/esm/highlevel/types/updates/user-status-update.js +1 -0
- package/esm/highlevel/types/updates/user-status-update.js.map +1 -1
- package/esm/highlevel/types/updates/user-typing-update.js +1 -0
- package/esm/highlevel/types/updates/user-typing-update.js.map +1 -1
- package/esm/highlevel/updates/manager.js +50 -28
- package/esm/highlevel/updates/manager.js.map +1 -1
- package/esm/highlevel/updates/parsed.js.map +1 -1
- package/esm/highlevel/updates/utils.js.map +1 -1
- package/esm/highlevel/utils/convert-file-id.js.map +1 -1
- package/esm/highlevel/utils/entities.js.map +1 -1
- package/esm/highlevel/utils/file-type.d.ts +1 -0
- package/esm/highlevel/utils/file-type.js +34 -0
- package/esm/highlevel/utils/file-type.js.map +1 -1
- package/esm/highlevel/utils/file-utils.js +1 -1
- package/esm/highlevel/utils/file-utils.js.map +1 -1
- package/esm/highlevel/utils/inline-utils.js.map +1 -1
- package/esm/highlevel/utils/inspectable.js.map +1 -1
- package/esm/highlevel/utils/memoize.js.map +1 -1
- package/esm/highlevel/utils/peer-utils.js.map +1 -1
- package/esm/highlevel/utils/query-batcher.js.map +1 -1
- package/esm/highlevel/utils/rps-meter.js +3 -0
- package/esm/highlevel/utils/rps-meter.js.map +1 -1
- package/esm/highlevel/utils/stream-utils.js.map +1 -1
- package/esm/highlevel/utils/string-session.d.ts +1 -2
- package/esm/highlevel/utils/string-session.js +27 -7
- package/esm/highlevel/utils/string-session.js.map +1 -1
- package/esm/highlevel/utils/voice-utils.js.map +1 -1
- package/esm/highlevel/worker/app-config.d.ts +2 -3
- package/esm/highlevel/worker/app-config.js +6 -3
- package/esm/highlevel/worker/app-config.js.map +1 -1
- package/esm/highlevel/worker/errors.js.map +1 -1
- package/esm/highlevel/worker/invoker.js +3 -2
- package/esm/highlevel/worker/invoker.js.map +1 -1
- package/esm/highlevel/worker/port.d.ts +16 -17
- package/esm/highlevel/worker/port.js +74 -49
- package/esm/highlevel/worker/port.js.map +1 -1
- package/esm/highlevel/worker/protocol.d.ts +1 -1
- package/esm/highlevel/worker/protocol.js.map +1 -1
- package/esm/highlevel/worker/storage.d.ts +9 -13
- package/esm/highlevel/worker/storage.js +34 -19
- package/esm/highlevel/worker/storage.js.map +1 -1
- package/esm/highlevel/worker/worker.js +3 -0
- package/esm/highlevel/worker/worker.js.map +1 -1
- package/esm/network/auth-key.js +8 -1
- package/esm/network/auth-key.js.map +1 -1
- package/esm/network/authorization.js.map +1 -1
- package/esm/network/client.js +39 -14
- package/esm/network/client.js.map +1 -1
- package/esm/network/config-manager.js.map +1 -1
- package/esm/network/mtproto-session.js +40 -30
- package/esm/network/mtproto-session.js.map +1 -1
- package/esm/network/multi-session-connection.d.ts +1 -1
- package/esm/network/multi-session-connection.js +13 -7
- package/esm/network/multi-session-connection.js.map +1 -1
- package/esm/network/network-manager.d.ts +2 -3
- package/esm/network/network-manager.js +49 -28
- package/esm/network/network-manager.js.map +1 -1
- package/esm/network/persistent-connection.d.ts +2 -2
- package/esm/network/persistent-connection.js +33 -22
- package/esm/network/persistent-connection.js.map +1 -1
- package/esm/network/server-salt.js +4 -5
- package/esm/network/server-salt.js.map +1 -1
- package/esm/network/session-connection.d.ts +1 -1
- package/esm/network/session-connection.js +22 -12
- package/esm/network/session-connection.js.map +1 -1
- package/esm/network/transports/abstract.d.ts +1 -1
- package/esm/network/transports/abstract.js +1 -0
- package/esm/network/transports/abstract.js.map +1 -1
- package/esm/network/transports/intermediate.js +1 -0
- package/esm/network/transports/intermediate.js.map +1 -1
- package/esm/network/transports/obfuscated.js +3 -0
- package/esm/network/transports/obfuscated.js.map +1 -1
- package/esm/network/transports/streamed.js +1 -4
- package/esm/network/transports/streamed.js.map +1 -1
- package/esm/network/transports/wrapped.js +2 -0
- package/esm/network/transports/wrapped.js.map +1 -1
- package/esm/platform.js.map +1 -1
- package/esm/storage/driver.js +3 -4
- package/esm/storage/driver.js.map +1 -1
- package/esm/storage/memory/driver.js +1 -3
- package/esm/storage/memory/driver.js.map +1 -1
- package/esm/storage/memory/index.js +5 -7
- package/esm/storage/memory/index.js.map +1 -1
- package/esm/storage/memory/repository/auth-keys.d.ts +1 -1
- package/esm/storage/memory/repository/auth-keys.js +2 -0
- package/esm/storage/memory/repository/auth-keys.js.map +1 -1
- package/esm/storage/memory/repository/kv.d.ts +1 -1
- package/esm/storage/memory/repository/kv.js +2 -0
- package/esm/storage/memory/repository/kv.js.map +1 -1
- package/esm/storage/memory/repository/peers.d.ts +1 -1
- package/esm/storage/memory/repository/peers.js +2 -0
- package/esm/storage/memory/repository/peers.js.map +1 -1
- package/esm/storage/memory/repository/ref-messages.d.ts +1 -1
- package/esm/storage/memory/repository/ref-messages.js +2 -0
- package/esm/storage/memory/repository/ref-messages.js.map +1 -1
- package/esm/storage/service/auth-keys.js +2 -0
- package/esm/storage/service/auth-keys.js.map +1 -1
- package/esm/storage/service/base.js +4 -0
- package/esm/storage/service/base.js.map +1 -1
- package/esm/storage/service/default-dcs.js +2 -0
- package/esm/storage/service/default-dcs.js.map +1 -1
- package/esm/storage/service/future-salts.js +2 -1
- package/esm/storage/service/future-salts.js.map +1 -1
- package/esm/storage/sqlite/driver.js +10 -10
- package/esm/storage/sqlite/driver.js.map +1 -1
- package/esm/storage/sqlite/index.d.ts +1 -1
- package/esm/storage/sqlite/index.js +5 -0
- package/esm/storage/sqlite/index.js.map +1 -1
- package/esm/storage/sqlite/repository/auth-keys.js +9 -0
- package/esm/storage/sqlite/repository/auth-keys.js.map +1 -1
- package/esm/storage/sqlite/repository/kv.js +5 -0
- package/esm/storage/sqlite/repository/kv.js.map +1 -1
- package/esm/storage/sqlite/repository/peers.js +6 -0
- package/esm/storage/sqlite/repository/peers.js.map +1 -1
- package/esm/storage/sqlite/repository/ref-messages.d.ts +1 -1
- package/esm/storage/sqlite/repository/ref-messages.js +6 -0
- package/esm/storage/sqlite/repository/ref-messages.js.map +1 -1
- package/esm/storage/storage.d.ts +1 -3
- package/esm/storage/storage.js +21 -13
- package/esm/storage/storage.js.map +1 -1
- package/esm/types/errors.js +13 -0
- package/esm/types/errors.js.map +1 -1
- package/esm/utils/async-lock.js +1 -3
- package/esm/utils/async-lock.js.map +1 -1
- package/esm/utils/bigint-utils.js.map +1 -1
- package/esm/utils/binary/asn1-parser.js.map +1 -1
- package/esm/utils/buffer-utils.js.map +1 -1
- package/esm/utils/condition-variable.js +2 -0
- package/esm/utils/condition-variable.js.map +1 -1
- package/esm/utils/crypto/factorization.js.map +1 -1
- package/esm/utils/crypto/keys.js.map +1 -1
- package/esm/utils/crypto/miller-rabin.js.map +1 -1
- package/esm/utils/crypto/password.js.map +1 -1
- package/esm/utils/crypto/utils.js.map +1 -1
- package/esm/utils/dcs.js +1 -1
- package/esm/utils/dcs.js.map +1 -1
- package/esm/utils/deque.js +8 -2
- package/esm/utils/deque.js.map +1 -1
- package/esm/utils/early-timer.js +4 -1
- package/esm/utils/early-timer.js.map +1 -1
- package/esm/utils/error-reporting.js.map +1 -1
- package/esm/utils/function-utils.js.map +1 -1
- package/esm/utils/linked-list.js +4 -1
- package/esm/utils/linked-list.js.map +1 -1
- package/esm/utils/links/bots.js.map +1 -1
- package/esm/utils/links/chat.js.map +1 -1
- package/esm/utils/links/common.js.map +1 -1
- package/esm/utils/links/misc.js.map +1 -1
- package/esm/utils/logger.d.ts +2 -2
- package/esm/utils/logger.js +21 -14
- package/esm/utils/logger.js.map +1 -1
- package/esm/utils/long-utils.js +2 -6
- package/esm/utils/long-utils.js.map +1 -1
- package/esm/utils/lru-map.js +5 -1
- package/esm/utils/lru-map.js.map +1 -1
- package/esm/utils/lru-set.js +4 -0
- package/esm/utils/lru-set.js.map +1 -1
- package/esm/utils/peer-utils.js.map +1 -1
- package/esm/utils/reloadable.js +10 -7
- package/esm/utils/reloadable.js.map +1 -1
- package/esm/utils/sorted-array.js +2 -0
- package/esm/utils/sorted-array.js.map +1 -1
- package/esm/utils/tl-json.js.map +1 -1
- package/esm/utils/type-assertions.js.map +1 -1
- package/package.json +11 -11
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"factories.js","sourceRoot":"","sources":["../../../../../../src/highlevel/types/bots/keyboards/factories.ts"],"names":[],"mappings":"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","sourcesContent":["import { tl } from '@mtcute/tl'\n\nimport { getPlatform } from '../../../../platform.js'\nimport { assertNever } from '../../../../types/utils.js'\nimport { toInputUser } from '../../../utils/peer-utils.js'\nimport { BotKeyboardBuilder } from './builder.js'\nimport {\n InlineKeyboardMarkup,\n ReplyKeyboardForceReply,\n ReplyKeyboardHide,\n ReplyKeyboardMarkup,\n ReplyMarkup,\n} from './types.js'\n\n/** Create a keyboard builder */\nexport function builder(maxRowWidth?: number | null): BotKeyboardBuilder {\n return new BotKeyboardBuilder(maxRowWidth)\n}\n\n/**\n * Create an inline keyboard markup\n *\n * @param buttons Two-dimensional array of buttons\n */\nexport function inline(buttons: tl.TypeKeyboardButton[][]): InlineKeyboardMarkup {\n return {\n type: 'inline',\n buttons,\n }\n}\n\n/**\n * Create a reply keyboard markup\n *\n * @param buttons Two-dimensional array of buttons\n * @param params Additional parameters for the keyboard\n */\nexport function reply(\n buttons: tl.TypeKeyboardButton[][],\n params: Omit<ReplyKeyboardMarkup, 'type' | 'buttons'> = {},\n): ReplyKeyboardMarkup {\n const ret = params as tl.Mutable<ReplyKeyboardMarkup>\n ret.type = 'reply'\n ret.buttons = buttons\n\n return ret\n}\n\n/**\n * Hide the previously sent reply keyboard\n *\n * @param selective\n * Whether to remove the keyboard for specific users only. Targets:\n * - users that are @mentioned in the text of the Message\n * - in case this is a reply, sender of the original message\n */\nexport function hideReply(selective?: boolean): ReplyKeyboardHide {\n return {\n type: 'reply_hide',\n selective,\n }\n}\n\n/**\n * Force the user to send a reply\n */\nexport function forceReply(params: Omit<ReplyKeyboardForceReply, 'type'> = {}): ReplyKeyboardForceReply {\n const ret = params as tl.Mutable<ReplyKeyboardForceReply>\n ret.type = 'force_reply'\n\n return ret\n}\n\n/**\n * Create a text-only keyboard button.\n *\n * Used for reply keyboards, not inline!\n *\n * @param text Button text\n */\nexport function text(text: string): tl.RawKeyboardButton {\n return {\n _: 'keyboardButton',\n text,\n }\n}\n\n/**\n * Create a keyboard button requesting for user's contact.\n * Available only for private chats.\n *\n * Used for reply keyboards, not inline!\n *\n * @param text Button text\n */\nexport function requestContact(text: string): tl.RawKeyboardButtonRequestPhone {\n return {\n _: 'keyboardButtonRequestPhone',\n text,\n }\n}\n\n/**\n * Create a keyboard button requesting for user's geo location.\n * Available only for private chats.\n *\n * Used for reply keyboards, not inline!\n *\n * @param text Button text\n */\nexport function requestGeo(text: string): tl.RawKeyboardButtonRequestGeoLocation {\n return {\n _: 'keyboardButtonRequestGeoLocation',\n text,\n }\n}\n\n/**\n * Create a keyboard button requesting the user to create and send a poll.\n * Available only for private chats.\n *\n * Used for reply keyboards, not inline!\n *\n * @param text Button text\n * @param quiz If set, only quiz polls can be sent\n */\nexport function requestPoll(text: string, quiz?: boolean): tl.RawKeyboardButtonRequestPoll {\n return {\n _: 'keyboardButtonRequestPoll',\n text,\n quiz,\n }\n}\n\n/**\n * Create a keyboard button with a link.\n *\n * Used for inline keyboards, not reply!\n *\n * @param text Button text\n * @param url URL\n */\nexport function url(text: string, url: string): tl.RawKeyboardButtonUrl {\n return {\n _: 'keyboardButtonUrl',\n text,\n url,\n }\n}\n\n/**\n * Create a keyboard button with a link.\n *\n * Used for inline keyboards, not reply!\n *\n * @param text Button text\n * @param data Callback data (1-64 bytes). String will be converted to `Buffer`\n * @param requiresPassword\n * Whether the user should verify their identity by entering 2FA password.\n * See more: {@link tl.RawKeyboardButtonCallback#requiresPassword}\n */\nexport function callback(\n text: string,\n data: string | Uint8Array,\n requiresPassword?: boolean,\n): tl.RawKeyboardButtonCallback {\n return {\n _: 'keyboardButtonCallback',\n text,\n requiresPassword,\n data: typeof data === 'string' ? getPlatform().utf8Encode(data) : data,\n }\n}\n\n/**\n * Button to force a user to switch to inline mode.\n *\n * Pressing the button will prompt the user to select\n * one of their chats, open that chat and insert the bot‘s\n * username and the specified inline query (if any) in the input field.\n *\n * Used for inline keyboards, not reply!\n *\n * @param text Button text\n * @param query Inline query (can be empty or omitted)\n * @param currentChat\n * If set, pressing the button will insert the bot's username\n * and the specified inline query in the current chat's input field\n */\nexport function switchInline(text: string, query = '', currentChat?: boolean): tl.RawKeyboardButtonSwitchInline {\n return {\n _: 'keyboardButtonSwitchInline',\n samePeer: currentChat,\n text,\n query,\n }\n}\n\n/**\n * Button to start a game\n *\n * Used for inline keyboards, not reply!\n *\n * **Note**: This type of button must always be\n * the first button in the first row. ID of the\n * game is inferred from {@link InputMedia.game},\n * thus this button should only be used with it.\n */\nexport function game(text: string): tl.RawKeyboardButtonGame {\n return { _: 'keyboardButtonGame', text }\n}\n\n/**\n * Button to pay for a product.\n *\n * Used for inline keyboards, not reply!\n *\n * **Note**: This type of button must always be\n * the first button in the first row. Related\n * invoice is inferred from {@link InputMedia.invoice},\n * thus this button should only be used with it.\n */\nexport function pay(text: string): tl.RawKeyboardButtonBuy {\n return { _: 'keyboardButtonBuy', text }\n}\n\n/**\n * Button to authorize a user\n *\n * Used for inline keyboards, not reply!\n *\n * @param text Button label\n * @param url Authorization URL (see {@link tl.RawInputKeyboardButtonUrlAuth})\n * @param params\n */\nexport function urlAuth(\n text: string,\n url: string,\n params: {\n /**\n * Button label when forwarded\n */\n fwdText?: string\n\n /**\n * Whether to request the permission for\n * your bot to send messages to the user\n */\n requestWriteAccess?: boolean\n\n /**\n * Bot, which will be used for user authorization.\n * `url` domain must be the same as the domain linked\n * with the bot.\n *\n * @default current bot\n */\n bot?: tl.TypeInputUser\n } = {},\n): tl.RawInputKeyboardButtonUrlAuth {\n return {\n _: 'inputKeyboardButtonUrlAuth',\n text,\n url,\n bot: params.bot ?? {\n _: 'inputUserSelf',\n },\n fwdText: params.fwdText,\n requestWriteAccess: params.requestWriteAccess,\n }\n}\n\n/**\n * Button to open webview\n *\n * Used for both inline keyboards and reply ones\n *\n * @param text Button label\n * @param url WebView URL\n */\nexport function webView(text: string, url: string): tl.RawKeyboardButtonWebView {\n return {\n _: 'keyboardButtonWebView',\n text,\n url,\n }\n}\n\n/**\n * Button to open user profile\n *\n * @param text Text of the button\n * @param user User to be opened (use {@link TelegramClient.resolvePeer})\n */\nexport function userProfile(text: string, user: tl.TypeInputPeer): tl.RawInputKeyboardButtonUserProfile {\n return {\n _: 'inputKeyboardButtonUserProfile',\n text,\n userId: toInputUser(user),\n }\n}\n\n/**\n * Button to request a peer from the user\n *\n * @param text Text of the button\n * @param buttonId ID of the button that will later be passed to the service message\n */\nexport function requestPeer(\n text: string,\n buttonId: number,\n params: {\n /**\n * Peer type, along with filters\n */\n peerType: tl.TypeRequestPeerType\n\n /**\n * Maximum number of peers to be selected\n *\n * @default 1\n */\n count?: number\n },\n): tl.RawKeyboardButtonRequestPeer {\n return {\n _: 'keyboardButtonRequestPeer',\n text,\n buttonId,\n peerType: params.peerType,\n maxQuantity: params.count ?? 1,\n }\n}\n\n/**\n * Find a button in the keyboard by its text or by predicate\n *\n * @param buttons Two-dimensional array of buttons\n * @param predicate Button text or predicate function\n */\nexport function findButton(\n buttons: tl.TypeKeyboardButton[][],\n predicate: string | ((btn: tl.TypeKeyboardButton) => boolean),\n): tl.TypeKeyboardButton | null {\n if (typeof predicate === 'string') {\n const text = predicate\n\n predicate = (btn) => {\n return 'text' in btn && btn.text === text\n }\n }\n\n for (const row of buttons) {\n for (const btn of row) {\n if (predicate(btn)) {\n return btn\n }\n }\n }\n\n return null\n}\n\n/** @internal */\nexport function _rowsTo2d(rows: tl.RawKeyboardButtonRow[]): tl.TypeKeyboardButton[][] {\n return rows.map((it) => it.buttons)\n}\n\n/** @internal */\nexport function _2dToRows(arr: tl.TypeKeyboardButton[][], inline: boolean): tl.RawKeyboardButtonRow[] {\n return arr.map((row) => {\n if (!inline) {\n // le cringe\n row = row.map((btn) =>\n btn._ === 'keyboardButtonWebView' ?\n {\n ...btn,\n _: 'keyboardButtonSimpleWebView',\n } :\n btn,\n )\n }\n\n return {\n _: 'keyboardButtonRow',\n buttons: row,\n }\n })\n}\n\n/** @internal */\nexport function _convertToTl(obj?: ReplyMarkup): tl.TypeReplyMarkup | undefined {\n if (!obj) return obj\n if (tl.isAnyReplyMarkup(obj)) return obj\n\n switch (obj.type) {\n case 'reply':\n return {\n _: 'replyKeyboardMarkup',\n resize: obj.resize,\n singleUse: obj.singleUse,\n selective: obj.selective,\n persistent: obj.persistent,\n placeholder: obj.placeholder,\n rows: _2dToRows(obj.buttons, false),\n }\n case 'reply_hide':\n return {\n _: 'replyKeyboardHide',\n selective: obj.selective,\n }\n case 'force_reply':\n return {\n _: 'replyKeyboardForceReply',\n singleUse: obj.singleUse,\n selective: obj.selective,\n placeholder: obj.placeholder,\n }\n case 'inline':\n return {\n _: 'replyInlineMarkup',\n rows: _2dToRows(obj.buttons, true),\n }\n default:\n assertNever(obj)\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"factories.js","sourceRoot":"","sources":["../../../../../../src/highlevel/types/bots/keyboards/factories.ts"],"names":[],"mappings":"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","sourcesContent":["import { tl } from '@mtcute/tl'\n\nimport { getPlatform } from '../../../../platform.js'\nimport { assertNever } from '../../../../types/utils.js'\nimport { toInputUser } from '../../../utils/peer-utils.js'\nimport { BotKeyboardBuilder } from './builder.js'\nimport {\n InlineKeyboardMarkup,\n ReplyKeyboardForceReply,\n ReplyKeyboardHide,\n ReplyKeyboardMarkup,\n ReplyMarkup,\n} from './types.js'\n\n/** Create a keyboard builder */\nexport function builder(maxRowWidth?: number | null): BotKeyboardBuilder {\n return new BotKeyboardBuilder(maxRowWidth)\n}\n\n/**\n * Create an inline keyboard markup\n *\n * @param buttons Two-dimensional array of buttons\n */\nexport function inline(buttons: tl.TypeKeyboardButton[][]): InlineKeyboardMarkup {\n return {\n type: 'inline',\n buttons,\n }\n}\n\n/**\n * Create a reply keyboard markup\n *\n * @param buttons Two-dimensional array of buttons\n * @param params Additional parameters for the keyboard\n */\nexport function reply(\n buttons: tl.TypeKeyboardButton[][],\n params: Omit<ReplyKeyboardMarkup, 'type' | 'buttons'> = {},\n): ReplyKeyboardMarkup {\n const ret = params as tl.Mutable<ReplyKeyboardMarkup>\n ret.type = 'reply'\n ret.buttons = buttons\n\n return ret\n}\n\n/**\n * Hide the previously sent reply keyboard\n *\n * @param selective\n * Whether to remove the keyboard for specific users only. Targets:\n * - users that are @mentioned in the text of the Message\n * - in case this is a reply, sender of the original message\n */\nexport function hideReply(selective?: boolean): ReplyKeyboardHide {\n return {\n type: 'reply_hide',\n selective,\n }\n}\n\n/**\n * Force the user to send a reply\n */\nexport function forceReply(params: Omit<ReplyKeyboardForceReply, 'type'> = {}): ReplyKeyboardForceReply {\n const ret = params as tl.Mutable<ReplyKeyboardForceReply>\n ret.type = 'force_reply'\n\n return ret\n}\n\n/**\n * Create a text-only keyboard button.\n *\n * Used for reply keyboards, not inline!\n *\n * @param text Button text\n */\nexport function text(text: string): tl.RawKeyboardButton {\n return {\n _: 'keyboardButton',\n text,\n }\n}\n\n/**\n * Create a keyboard button requesting for user's contact.\n * Available only for private chats.\n *\n * Used for reply keyboards, not inline!\n *\n * @param text Button text\n */\nexport function requestContact(text: string): tl.RawKeyboardButtonRequestPhone {\n return {\n _: 'keyboardButtonRequestPhone',\n text,\n }\n}\n\n/**\n * Create a keyboard button requesting for user's geo location.\n * Available only for private chats.\n *\n * Used for reply keyboards, not inline!\n *\n * @param text Button text\n */\nexport function requestGeo(text: string): tl.RawKeyboardButtonRequestGeoLocation {\n return {\n _: 'keyboardButtonRequestGeoLocation',\n text,\n }\n}\n\n/**\n * Create a keyboard button requesting the user to create and send a poll.\n * Available only for private chats.\n *\n * Used for reply keyboards, not inline!\n *\n * @param text Button text\n * @param quiz If set, only quiz polls can be sent\n */\nexport function requestPoll(text: string, quiz?: boolean): tl.RawKeyboardButtonRequestPoll {\n return {\n _: 'keyboardButtonRequestPoll',\n text,\n quiz,\n }\n}\n\n/**\n * Create a keyboard button with a link.\n *\n * Used for inline keyboards, not reply!\n *\n * @param text Button text\n * @param url URL\n */\nexport function url(text: string, url: string): tl.RawKeyboardButtonUrl {\n return {\n _: 'keyboardButtonUrl',\n text,\n url,\n }\n}\n\n/**\n * Create a keyboard button with a link.\n *\n * Used for inline keyboards, not reply!\n *\n * @param text Button text\n * @param data Callback data (1-64 bytes). String will be converted to `Buffer`\n * @param requiresPassword\n * Whether the user should verify their identity by entering 2FA password.\n * See more: {@link tl.RawKeyboardButtonCallback#requiresPassword}\n */\nexport function callback(\n text: string,\n data: string | Uint8Array,\n requiresPassword?: boolean,\n): tl.RawKeyboardButtonCallback {\n return {\n _: 'keyboardButtonCallback',\n text,\n requiresPassword,\n data: typeof data === 'string' ? getPlatform().utf8Encode(data) : data,\n }\n}\n\n/**\n * Button to force a user to switch to inline mode.\n *\n * Pressing the button will prompt the user to select\n * one of their chats, open that chat and insert the bot‘s\n * username and the specified inline query (if any) in the input field.\n *\n * Used for inline keyboards, not reply!\n *\n * @param text Button text\n * @param query Inline query (can be empty or omitted)\n * @param currentChat\n * If set, pressing the button will insert the bot's username\n * and the specified inline query in the current chat's input field\n */\nexport function switchInline(text: string, query = '', currentChat?: boolean): tl.RawKeyboardButtonSwitchInline {\n return {\n _: 'keyboardButtonSwitchInline',\n samePeer: currentChat,\n text,\n query,\n }\n}\n\n/**\n * Button to start a game\n *\n * Used for inline keyboards, not reply!\n *\n * **Note**: This type of button must always be\n * the first button in the first row. ID of the\n * game is inferred from {@link InputMedia.game},\n * thus this button should only be used with it.\n */\nexport function game(text: string): tl.RawKeyboardButtonGame {\n return { _: 'keyboardButtonGame', text }\n}\n\n/**\n * Button to pay for a product.\n *\n * Used for inline keyboards, not reply!\n *\n * **Note**: This type of button must always be\n * the first button in the first row. Related\n * invoice is inferred from {@link InputMedia.invoice},\n * thus this button should only be used with it.\n */\nexport function pay(text: string): tl.RawKeyboardButtonBuy {\n return { _: 'keyboardButtonBuy', text }\n}\n\n/**\n * Button to authorize a user\n *\n * Used for inline keyboards, not reply!\n *\n * @param text Button label\n * @param url Authorization URL (see {@link tl.RawInputKeyboardButtonUrlAuth})\n * @param params\n */\nexport function urlAuth(\n text: string,\n url: string,\n params: {\n /**\n * Button label when forwarded\n */\n fwdText?: string\n\n /**\n * Whether to request the permission for\n * your bot to send messages to the user\n */\n requestWriteAccess?: boolean\n\n /**\n * Bot, which will be used for user authorization.\n * `url` domain must be the same as the domain linked\n * with the bot.\n *\n * @default current bot\n */\n bot?: tl.TypeInputUser\n } = {},\n): tl.RawInputKeyboardButtonUrlAuth {\n return {\n _: 'inputKeyboardButtonUrlAuth',\n text,\n url,\n bot: params.bot ?? {\n _: 'inputUserSelf',\n },\n fwdText: params.fwdText,\n requestWriteAccess: params.requestWriteAccess,\n }\n}\n\n/**\n * Button to open webview\n *\n * Used for both inline keyboards and reply ones\n *\n * @param text Button label\n * @param url WebView URL\n */\nexport function webView(text: string, url: string): tl.RawKeyboardButtonWebView {\n return {\n _: 'keyboardButtonWebView',\n text,\n url,\n }\n}\n\n/**\n * Button to open user profile\n *\n * @param text Text of the button\n * @param user User to be opened (use {@link TelegramClient.resolvePeer})\n */\nexport function userProfile(text: string, user: tl.TypeInputPeer): tl.RawInputKeyboardButtonUserProfile {\n return {\n _: 'inputKeyboardButtonUserProfile',\n text,\n userId: toInputUser(user),\n }\n}\n\n/**\n * Button to request a peer from the user\n *\n * @param text Text of the button\n * @param buttonId ID of the button that will later be passed to the service message\n */\nexport function requestPeer(\n text: string,\n buttonId: number,\n params: {\n /**\n * Peer type, along with filters\n */\n peerType: tl.TypeRequestPeerType\n\n /**\n * Maximum number of peers to be selected\n *\n * @default 1\n */\n count?: number\n },\n): tl.RawKeyboardButtonRequestPeer {\n return {\n _: 'keyboardButtonRequestPeer',\n text,\n buttonId,\n peerType: params.peerType,\n maxQuantity: params.count ?? 1,\n }\n}\n\n/**\n * Find a button in the keyboard by its text or by predicate\n *\n * @param buttons Two-dimensional array of buttons\n * @param predicate Button text or predicate function\n */\nexport function findButton(\n buttons: tl.TypeKeyboardButton[][],\n predicate: string | ((btn: tl.TypeKeyboardButton) => boolean),\n): tl.TypeKeyboardButton | null {\n if (typeof predicate === 'string') {\n const text = predicate\n\n predicate = (btn) => {\n return 'text' in btn && btn.text === text\n }\n }\n\n for (const row of buttons) {\n for (const btn of row) {\n if (predicate(btn)) {\n return btn\n }\n }\n }\n\n return null\n}\n\n/** @internal */\nexport function _rowsTo2d(rows: tl.RawKeyboardButtonRow[]): tl.TypeKeyboardButton[][] {\n return rows.map((it) => it.buttons)\n}\n\n/** @internal */\nexport function _2dToRows(arr: tl.TypeKeyboardButton[][], inline: boolean): tl.RawKeyboardButtonRow[] {\n return arr.map((row) => {\n if (!inline) {\n // le cringe\n row = row.map((btn) =>\n btn._ === 'keyboardButtonWebView' ?\n {\n ...btn,\n _: 'keyboardButtonSimpleWebView',\n } :\n btn,\n )\n }\n\n return {\n _: 'keyboardButtonRow',\n buttons: row,\n }\n })\n}\n\n/** @internal */\nexport function _convertToTl(obj?: ReplyMarkup): tl.TypeReplyMarkup | undefined {\n if (!obj) return obj\n if (tl.isAnyReplyMarkup(obj)) return obj\n\n switch (obj.type) {\n case 'reply':\n return {\n _: 'replyKeyboardMarkup',\n resize: obj.resize,\n singleUse: obj.singleUse,\n selective: obj.selective,\n persistent: obj.persistent,\n placeholder: obj.placeholder,\n rows: _2dToRows(obj.buttons, false),\n }\n case 'reply_hide':\n return {\n _: 'replyKeyboardHide',\n selective: obj.selective,\n }\n case 'force_reply':\n return {\n _: 'replyKeyboardForceReply',\n singleUse: obj.singleUse,\n selective: obj.selective,\n placeholder: obj.placeholder,\n }\n case 'inline':\n return {\n _: 'replyInlineMarkup',\n rows: _2dToRows(obj.buttons, true),\n }\n default:\n assertNever(obj)\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"discard-reason.js","sourceRoot":"","sources":["../../../../../src/highlevel/types/calls/discard-reason.ts"],"names":[],"mappings":";;;AAEA,sDAAqD;AAWrD,gBAAgB;AAChB,SAAgB,wBAAwB,CAAC,GAAkC;IACvE,QAAQ,GAAG,CAAC,CAAC,EAAE;
|
|
1
|
+
{"version":3,"file":"discard-reason.js","sourceRoot":"","sources":["../../../../../src/highlevel/types/calls/discard-reason.ts"],"names":[],"mappings":";;;AAEA,sDAAqD;AAWrD,gBAAgB;AAChB,SAAgB,wBAAwB,CAAC,GAAkC;IACvE,QAAQ,GAAG,CAAC,CAAC,EAAE,CAAC;QACZ,KAAK,8BAA8B;YAC/B,OAAO,QAAQ,CAAA;QACnB,KAAK,kCAAkC;YACnC,OAAO,YAAY,CAAA;QACvB,KAAK,8BAA8B;YAC/B,OAAO,QAAQ,CAAA;QACnB,KAAK,4BAA4B;YAC7B,OAAO,MAAM,CAAA;QACjB;YACI,IAAA,sBAAW,EAAC,GAAG,CAAC,CAAA;IACxB,CAAC;AACL,CAAC;AAbD,4DAaC;AAED,gBAAgB;AAChB,SAAgB,sBAAsB,CAAC,CAAoB;IACvD,QAAQ,CAAC,EAAE,CAAC;QACR,KAAK,QAAQ;YACT,OAAO,EAAE,CAAC,EAAE,8BAA8B,EAAE,CAAA;QAChD,KAAK,YAAY;YACb,OAAO,EAAE,CAAC,EAAE,kCAAkC,EAAE,CAAA;QACpD,KAAK,QAAQ;YACT,OAAO,EAAE,CAAC,EAAE,8BAA8B,EAAE,CAAA;QAChD,KAAK,MAAM;YACP,OAAO,EAAE,CAAC,EAAE,4BAA4B,EAAE,CAAA;QAC9C;YACI,IAAA,sBAAW,EAAC,CAAC,CAAC,CAAA;IACtB,CAAC;AACL,CAAC;AAbD,wDAaC","sourcesContent":["import { tl } from '@mtcute/tl'\n\nimport { assertNever } from '../../../types/utils.js'\n\n/**\n * Phone call discard reason. Can be:\n * - `missed`: The call was missed\n * - `disconnect`: The connection has interrupted\n * - `hangup`: The call was ended normally\n * - `busy`: The call was discarded because the user is in another call\n */\nexport type CallDiscardReason = 'missed' | 'disconnect' | 'hangup' | 'busy'\n\n/** @internal */\nexport function _callDiscardReasonFromTl(raw: tl.TypePhoneCallDiscardReason): CallDiscardReason {\n switch (raw._) {\n case 'phoneCallDiscardReasonMissed':\n return 'missed'\n case 'phoneCallDiscardReasonDisconnect':\n return 'disconnect'\n case 'phoneCallDiscardReasonHangup':\n return 'hangup'\n case 'phoneCallDiscardReasonBusy':\n return 'busy'\n default:\n assertNever(raw)\n }\n}\n\n/** @internal */\nexport function _callDiscardReasonToTl(r: CallDiscardReason): tl.TypePhoneCallDiscardReason {\n switch (r) {\n case 'missed':\n return { _: 'phoneCallDiscardReasonMissed' }\n case 'disconnect':\n return { _: 'phoneCallDiscardReasonDisconnect' }\n case 'hangup':\n return { _: 'phoneCallDiscardReasonHangup' }\n case 'busy':\n return { _: 'phoneCallDiscardReasonBusy' }\n default:\n assertNever(r)\n }\n}\n"]}
|
|
@@ -25,16 +25,22 @@ const CONVERSATION_SYMBOL = Symbol('conversation');
|
|
|
25
25
|
* and synchronize them manually.
|
|
26
26
|
*/
|
|
27
27
|
class Conversation {
|
|
28
|
+
client;
|
|
29
|
+
chat;
|
|
30
|
+
_inputPeer;
|
|
31
|
+
_chatId;
|
|
32
|
+
_started = false;
|
|
33
|
+
_lastMessage;
|
|
34
|
+
_lastReceivedMessage;
|
|
35
|
+
_queuedNewMessage = new deque_js_1.Deque();
|
|
36
|
+
_pendingNewMessages = new deque_js_1.Deque();
|
|
37
|
+
_lock = new async_lock_js_1.AsyncLock();
|
|
38
|
+
_pendingEditMessage = new Map();
|
|
39
|
+
_recentEdits = new deque_js_1.Deque(10);
|
|
40
|
+
_pendingRead = new Map();
|
|
28
41
|
constructor(client, chat) {
|
|
29
42
|
this.client = client;
|
|
30
43
|
this.chat = chat;
|
|
31
|
-
this._started = false;
|
|
32
|
-
this._queuedNewMessage = new deque_js_1.Deque();
|
|
33
|
-
this._pendingNewMessages = new deque_js_1.Deque();
|
|
34
|
-
this._lock = new async_lock_js_1.AsyncLock();
|
|
35
|
-
this._pendingEditMessage = new Map();
|
|
36
|
-
this._recentEdits = new deque_js_1.Deque(10);
|
|
37
|
-
this._pendingRead = new Map();
|
|
38
44
|
if (!(CONVERSATION_SYMBOL in client)) {
|
|
39
45
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
40
46
|
client[CONVERSATION_SYMBOL] = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conversation.js","sourceRoot":"","sources":["../../../../src/highlevel/types/conversation.ts"],"names":[],"mappings":"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","sourcesContent":["import { tl } from '@mtcute/tl'\n\nimport { MtArgumentError, MtTimeoutError } from '../../types/errors.js'\nimport { MaybePromise } from '../../types/utils.js'\nimport { AsyncLock } from '../../utils/async-lock.js'\nimport { ControllablePromise, createControllablePromise } from '../../utils/controllable-promise.js'\nimport { Deque } from '../../utils/deque.js'\nimport { getMarkedPeerId } from '../../utils/peer-utils.js'\nimport { ITelegramClient } from '../client.types.js'\nimport { getPeerDialogs } from '../methods/dialogs/get-peer-dialogs.js'\nimport { readHistory } from '../methods/messages/read-history.js'\nimport { sendMedia } from '../methods/messages/send-media.js'\nimport { sendMediaGroup } from '../methods/messages/send-media-group.js'\nimport { sendText } from '../methods/messages/send-text.js'\nimport { resolvePeer } from '../methods/users/resolve-peer.js'\nimport type { Message } from './messages/message.js'\nimport type { InputPeerLike } from './peers/index.js'\nimport type { HistoryReadUpdate, ParsedUpdate } from './updates/index.js'\nimport { ParametersSkip2 } from './utils.js'\n\ninterface QueuedHandler<T> {\n promise: ControllablePromise<T>\n check?: (update: T) => MaybePromise<boolean>\n timeout?: NodeJS.Timeout\n}\n\nconst CONVERSATION_SYMBOL = Symbol('conversation')\n\ninterface ConversationsState {\n pendingConversations: Map<number, Conversation[]>\n hasConversations: boolean\n}\n\n/**\n * Represents a conversation inside some chat.\n *\n * A conversation keeps track of any messages sent or edited\n * since it was started and until it was stopped,\n * and allows waiting for events in it.\n *\n * If you need a conversation across multiple chats,\n * you should use multiple {@link Conversation} objects\n * and synchronize them manually.\n */\nexport class Conversation {\n private _inputPeer!: tl.TypeInputPeer\n private _chatId!: number\n private _started = false\n\n private _lastMessage!: number\n private _lastReceivedMessage!: number\n\n private _queuedNewMessage = new Deque<QueuedHandler<Message>>()\n private _pendingNewMessages = new Deque<Message>()\n private _lock = new AsyncLock()\n\n private _pendingEditMessage: Map<number, QueuedHandler<Message>> = new Map()\n private _recentEdits = new Deque<Message>(10)\n\n private _pendingRead: Map<number, QueuedHandler<void>> = new Map()\n\n constructor(\n readonly client: ITelegramClient,\n readonly chat: InputPeerLike,\n ) {\n if (!(CONVERSATION_SYMBOL in client)) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (client as any)[CONVERSATION_SYMBOL] = {\n pendingConversations: new Map(),\n hasConversations: false,\n } satisfies ConversationsState\n }\n }\n\n private static _getState(client: ITelegramClient): ConversationsState {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return (client as any)[CONVERSATION_SYMBOL] as ConversationsState\n }\n\n /**\n * Pass the update to the conversation manager and all registered\n * conversations on this client.\n *\n * @returns `true` if the update was handled by some conversation\n */\n static handleUpdate(client: ITelegramClient, update: ParsedUpdate): boolean {\n const state = Conversation._getState(client)\n if (!state?.hasConversations) return false\n\n let chatId\n\n switch (update.name) {\n case 'new_message':\n case 'edit_message':\n chatId = getMarkedPeerId(update.data.raw.peerId)\n break\n case 'history_read':\n chatId = update.data.chatId\n break\n default:\n return false\n }\n\n const conv = state.pendingConversations.get(chatId)\n if (!conv) return false\n\n for (const c of conv) {\n switch (update.name) {\n case 'new_message':\n c._onNewMessage(update.data)\n\n return true\n case 'edit_message':\n c._onEditMessage(update.data)\n\n return true\n case 'history_read':\n c._onHistoryRead(update.data)\n\n return true\n }\n }\n\n return false\n }\n\n /**\n * Get the input peer that this conversation is with\n */\n get inputPeer(): tl.TypeInputPeer {\n if (!this._started) {\n throw new MtArgumentError(\"Conversation hasn't started yet\")\n }\n\n return this._inputPeer\n }\n\n /**\n * ID of the very last message in this conversation.\n */\n get lastMessage(): number {\n if (!this._started) {\n throw new MtArgumentError(\"Conversation hasn't started yet\")\n }\n\n return this._lastMessage\n }\n\n /**\n * ID of the last incoming message in this conversation.\n *\n * Note that before any messages were received since the {@link start}\n * of the conversation, this will equal to {@link lastMessage}\n */\n get lastReceivedMessage(): number {\n if (!this._started) {\n throw new MtArgumentError(\"Conversation hasn't started yet\")\n }\n\n return this._lastReceivedMessage\n }\n\n /**\n * Start the conversation\n */\n async start(): Promise<void> {\n if (this._started) return\n\n this._started = true\n this._inputPeer = await resolvePeer(this.client, this.chat)\n this._chatId = getMarkedPeerId(this._inputPeer)\n\n const [dialog] = await getPeerDialogs(this.client, this._inputPeer)\n const lastMessage = dialog.lastMessage\n\n if (lastMessage) {\n this._lastMessage = this._lastReceivedMessage = lastMessage.id\n } else {\n this._lastMessage = this._lastReceivedMessage = 0\n }\n\n const state = Conversation._getState(this.client)\n\n if (!state.pendingConversations.has(this._chatId)) {\n state.pendingConversations.set(this._chatId, [])\n }\n state.pendingConversations.get(this._chatId)!.push(this)\n state.hasConversations = true\n }\n\n /**\n * Stop the conversation\n */\n stop(): void {\n if (!this._started) return\n\n const state = Conversation._getState(this.client)\n\n const pending = state.pendingConversations.get(this._chatId)\n const pendingIdx = pending?.indexOf(this) ?? -1\n\n if (pendingIdx > -1) {\n // just in case\n pending!.splice(pendingIdx, 1)\n }\n if (pending && !pending.length) {\n state.pendingConversations.delete(this._chatId)\n }\n state.hasConversations = Boolean(state.pendingConversations.size)\n\n // reset pending status\n this._queuedNewMessage.clear()\n this._pendingNewMessages.clear()\n this._pendingEditMessage.clear()\n this._recentEdits.clear()\n this._pendingRead.clear()\n\n this._started = false\n }\n\n private _recordMessage(msg: Message, incoming = false): Message {\n this._lastMessage = msg.id\n if (incoming) this._lastReceivedMessage = msg.id\n\n return msg\n }\n\n /**\n * Send a text message to this conversation.\n *\n * Wrapper over {@link sendText}\n */\n async sendText(...params: ParametersSkip2<typeof sendText>): ReturnType<typeof sendText> {\n if (!this._started) {\n throw new MtArgumentError(\"Conversation hasn't started yet\")\n }\n\n return this._recordMessage(await sendText(this.client, this._inputPeer, ...params))\n }\n\n /**\n * Send a media to this conversation.\n *\n * Wrapper over {@link sendMedia}\n */\n async sendMedia(...params: ParametersSkip2<typeof sendMedia>): ReturnType<typeof sendMedia> {\n if (!this._started) {\n throw new MtArgumentError(\"Conversation hasn't started yet\")\n }\n\n return this._recordMessage(await sendMedia(this.client, this._inputPeer, ...params))\n }\n\n /**\n * Send a media group to this conversation.\n *\n * Wrapper over {@link sendMediaGroup}\n */\n async sendMediaGroup(...params: ParametersSkip2<typeof sendMediaGroup>): ReturnType<typeof sendMediaGroup> {\n if (!this._started) {\n throw new MtArgumentError(\"Conversation hasn't started yet\")\n }\n\n const msgs = await sendMediaGroup(this.client, this._inputPeer, ...params)\n\n this._recordMessage(msgs[msgs.length - 1])\n\n return msgs\n }\n\n /**\n * Mark the conversation as read up to a certain point.\n *\n * By default, reads until the last message.\n * You can pass `message=null` to read the entire conversation,\n * or pass message ID to read up until that ID.\n */\n markRead({\n message,\n clearMentions = true,\n }: { message?: number | null; clearMentions?: boolean } = {}): Promise<void> {\n if (!this._started) {\n throw new MtArgumentError(\"Conversation hasn't started yet\")\n }\n\n if (message === null) {\n message = 0\n } else if (message === undefined) {\n message = this._lastMessage ?? 0\n }\n\n return readHistory(this.client, this._inputPeer, { maxId: message, clearMentions })\n }\n\n /**\n * Helper method that calls {@link start},\n * the provided function and then {@link stop}.\n *\n * It is preferred that you use this function rather than\n * manually starting and stopping the conversation.\n *\n * If you don't stop the conversation when you're done,\n * it *will* lead to memory leaks.\n *\n * @param handler\n */\n async with<T>(handler: () => MaybePromise<T>): Promise<T> {\n await this.start()\n\n let err: unknown\n let res: T\n\n try {\n res = await handler()\n } catch (e) {\n err = e\n }\n\n this.stop()\n\n // eslint-disable-next-line @typescript-eslint/no-throw-literal\n if (err) throw err\n\n return res!\n }\n\n /**\n * Wait for a new message in the conversation\n *\n * @param filter Filter for the handler. You can use any filter you can use for dispatcher\n * @param [timeout=15000] Timeout for the handler in ms. Pass `null` to disable.\n * When the timeout is reached, `MtTimeoutError` is thrown.\n */\n waitForNewMessage(\n filter?: (msg: Message) => MaybePromise<boolean>,\n timeout: number | null = 15000,\n ): Promise<Message> {\n if (!this._started) {\n throw new MtArgumentError(\"Conversation hasn't started yet\")\n }\n\n const promise = createControllablePromise<Message>()\n\n let timer: NodeJS.Timeout | undefined = undefined\n\n if (timeout !== null) {\n timer = setTimeout(() => {\n promise.reject(new MtTimeoutError(timeout))\n this._queuedNewMessage.removeBy((it) => it.promise === promise)\n }, timeout)\n }\n\n this._queuedNewMessage.pushBack({\n promise,\n check: filter,\n timeout: timer,\n })\n\n this._processPendingNewMessages()\n\n return promise\n }\n\n /**\n * Wait for a response for the given message\n * (def. the last one) in the conversation.\n *\n * A message is considered to be a response if\n * it was sent after the given one.\n *\n * @param filter Filter for the handler. You can use any filter you can use for dispatcher\n * @param params\n */\n waitForResponse(\n filter?: (msg: Message) => MaybePromise<boolean>,\n params?: {\n /**\n * Message for which to wait for response for.\n *\n * @default last sent/received message\n */\n message?: number\n\n /**\n * Timeout for the handler in ms. Pass `null` to disable.\n *\n * When the timeout is reached, `TimeoutError` is thrown.\n *\n * @default `15000` (15 sec)\n */\n timeout?: number | null\n },\n ): Promise<Message> {\n const msgId = params?.message ?? this._lastMessage ?? 0\n\n const pred = filter ?\n (msg: Message) => (msg.id > msgId ? filter(msg) : false) :\n (msg: Message) => msg.id > msgId\n\n return this.waitForNewMessage(pred, params?.timeout)\n }\n\n /**\n * Wait for the reply for the given message'\n * (def. the last one) in the conversation.\n *\n * @param filter Filter for the handler. You can use any filter you can use for dispatcher\n * @param params\n */\n waitForReply(\n filter?: (msg: Message) => MaybePromise<boolean>,\n params?: {\n /**\n * Message for which to wait for reply for.\n *\n * @default last sent/received message\n */\n message?: number\n\n /**\n * Timeout for the handler in ms. Pass `null` to disable.\n *\n * When the timeout is reached, `TimeoutError` is thrown.\n *\n * @default `15000` (15 sec)\n */\n timeout?: number | null\n },\n ): Promise<Message> {\n const msgId = params?.message ?? this._lastMessage\n\n if (!msgId) {\n throw new MtArgumentError('Provide message for which to wait for reply for')\n }\n\n const pred = filter ?\n (msg: Message) => (msg.replyToMessage?.id === msgId ? filter(msg) : false) :\n (msg: Message) => msg.replyToMessage?.id === msgId\n\n return this.waitForNewMessage(pred, params?.timeout)\n }\n\n /**\n * Wait for a message to be edited in the conversation.\n * By defaults wait for the last message sent by the other party\n * (at the moment) to be edited.\n *\n * Returns the edited message.\n *\n * @param filter Filter for the handler. You can use any filter you can use for dispatcher\n * @param params\n */\n async waitForEdit(\n filter?: (msg: Message) => MaybePromise<boolean>,\n params?: {\n /**\n * Message for which to wait for reply for.\n *\n * @default last received message\n */\n message?: number\n\n /**\n * Timeout for the handler in ms. Pass `null` to disable.\n *\n * When the timeout is reached, `TimeoutError` is thrown.\n *\n * @default `15000` (15 sec)\n */\n timeout?: number | null\n },\n ): Promise<Message> {\n if (!this._started) {\n throw new MtArgumentError(\"Conversation hasn't started yet\")\n }\n\n const msgId = params?.message ?? this._lastReceivedMessage\n\n if (!msgId) {\n throw new MtArgumentError('Provide message for which to wait for edit for')\n }\n\n const promise = createControllablePromise<Message>()\n\n let timer: NodeJS.Timeout | undefined = undefined\n const timeout = params?.timeout\n\n if (timeout) {\n timer = setTimeout(() => {\n promise.reject(new MtTimeoutError(timeout))\n this._pendingEditMessage.delete(msgId)\n }, timeout)\n }\n\n this._pendingEditMessage.set(msgId, {\n promise,\n check: filter,\n timeout: timer,\n })\n\n this._processRecentEdits()\n\n return promise\n }\n\n /**\n * Wait for the message to be read by the other party.\n *\n * Note that reading the message doesn't mean the response was sent,\n * and if the response was sent, it doesn't mean that the message was read.\n *\n * @param message Message for which to wait for read for. Defaults to last message.\n * @param timeout Timeout for the handler in ms, def. 15 sec. Pass `null` to disable.\n * When the timeout is reached, `TimeoutError` is thrown.\n */\n async waitForRead(message?: number, timeout: number | null = 15000): Promise<void> {\n if (!this._started) {\n throw new MtArgumentError(\"Conversation hasn't started yet\")\n }\n\n const msgId = message ?? this._lastMessage\n\n if (!msgId) {\n throw new MtArgumentError('Provide message for which to wait for read for')\n }\n\n // check if the message is already read\n const [dialog] = await getPeerDialogs(this.client, this._inputPeer)\n if (dialog.lastRead >= msgId) return\n\n const promise = createControllablePromise<void>()\n\n let timer: NodeJS.Timeout | undefined = undefined\n\n if (timeout !== null) {\n timer = setTimeout(() => {\n promise.reject(new MtTimeoutError(timeout))\n this._pendingRead.delete(msgId)\n }, timeout)\n }\n\n this._pendingRead.set(msgId, {\n promise,\n timeout: timer,\n })\n\n return promise\n }\n\n private _onNewMessage(msg: Message) {\n if (msg.chat.id !== this._chatId) return\n\n if (!this._queuedNewMessage.length) {\n this._pendingNewMessages.pushBack(msg)\n\n return\n }\n\n const it = this._queuedNewMessage.peekFront()!\n\n // order does matter for new messages\n void this._lock.acquire().then(async () => {\n try {\n if (!it.check || (await it.check(msg))) {\n if (it.timeout) clearTimeout(it.timeout)\n it.promise.resolve(msg)\n this._queuedNewMessage.popFront()\n }\n } catch (e: unknown) {\n this.client.emitError(e)\n }\n\n this._lastMessage = this._lastReceivedMessage = msg.id\n\n // this func will *never* error, so no need to use .then\n this._lock.release()\n })\n }\n\n private _onEditMessage(msg: Message, fromRecent = false) {\n if (msg.chat.id !== this._chatId) return\n\n const it = this._pendingEditMessage.get(msg.id)\n\n if (!it) {\n if (!fromRecent) {\n this._recentEdits.pushBack(msg)\n }\n\n return\n }\n\n (async () => {\n if (!it.check || (await it.check(msg))) {\n if (it.timeout) clearTimeout(it.timeout)\n it.promise.resolve(msg)\n this._pendingEditMessage.delete(msg.id)\n }\n })().catch((e) => {\n this.client.emitError(e)\n })\n }\n\n private _onHistoryRead(upd: HistoryReadUpdate) {\n if (upd.chatId !== this._chatId) return\n\n const lastRead = upd.maxReadId\n\n for (const msgId of this._pendingRead.keys()) {\n if (msgId <= lastRead) {\n const it = this._pendingRead.get(msgId)!\n if (it.timeout) clearTimeout(it.timeout)\n it.promise.resolve()\n this._pendingRead.delete(msgId)\n }\n }\n }\n\n private _processPendingNewMessages() {\n if (!this._pendingNewMessages.length) return\n\n let it\n\n while ((it = this._pendingNewMessages.popFront())) {\n this._onNewMessage(it)\n }\n }\n\n private _processRecentEdits() {\n if (!this._recentEdits.length) return\n\n const iter = this._recentEdits.iter()\n let it\n\n while (!(it = iter.next()).done) {\n this._onEditMessage(it.value, true)\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"conversation.js","sourceRoot":"","sources":["../../../../src/highlevel/types/conversation.ts"],"names":[],"mappings":"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","sourcesContent":["import { tl } from '@mtcute/tl'\n\nimport { MtArgumentError, MtTimeoutError } from '../../types/errors.js'\nimport { MaybePromise } from '../../types/utils.js'\nimport { AsyncLock } from '../../utils/async-lock.js'\nimport { ControllablePromise, createControllablePromise } from '../../utils/controllable-promise.js'\nimport { Deque } from '../../utils/deque.js'\nimport { getMarkedPeerId } from '../../utils/peer-utils.js'\nimport { ITelegramClient } from '../client.types.js'\nimport { getPeerDialogs } from '../methods/dialogs/get-peer-dialogs.js'\nimport { readHistory } from '../methods/messages/read-history.js'\nimport { sendMedia } from '../methods/messages/send-media.js'\nimport { sendMediaGroup } from '../methods/messages/send-media-group.js'\nimport { sendText } from '../methods/messages/send-text.js'\nimport { resolvePeer } from '../methods/users/resolve-peer.js'\nimport type { Message } from './messages/message.js'\nimport type { InputPeerLike } from './peers/index.js'\nimport type { HistoryReadUpdate, ParsedUpdate } from './updates/index.js'\nimport { ParametersSkip2 } from './utils.js'\n\ninterface QueuedHandler<T> {\n promise: ControllablePromise<T>\n check?: (update: T) => MaybePromise<boolean>\n timeout?: NodeJS.Timeout\n}\n\nconst CONVERSATION_SYMBOL = Symbol('conversation')\n\ninterface ConversationsState {\n pendingConversations: Map<number, Conversation[]>\n hasConversations: boolean\n}\n\n/**\n * Represents a conversation inside some chat.\n *\n * A conversation keeps track of any messages sent or edited\n * since it was started and until it was stopped,\n * and allows waiting for events in it.\n *\n * If you need a conversation across multiple chats,\n * you should use multiple {@link Conversation} objects\n * and synchronize them manually.\n */\nexport class Conversation {\n private _inputPeer!: tl.TypeInputPeer\n private _chatId!: number\n private _started = false\n\n private _lastMessage!: number\n private _lastReceivedMessage!: number\n\n private _queuedNewMessage = new Deque<QueuedHandler<Message>>()\n private _pendingNewMessages = new Deque<Message>()\n private _lock = new AsyncLock()\n\n private _pendingEditMessage: Map<number, QueuedHandler<Message>> = new Map()\n private _recentEdits = new Deque<Message>(10)\n\n private _pendingRead: Map<number, QueuedHandler<void>> = new Map()\n\n constructor(\n readonly client: ITelegramClient,\n readonly chat: InputPeerLike,\n ) {\n if (!(CONVERSATION_SYMBOL in client)) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (client as any)[CONVERSATION_SYMBOL] = {\n pendingConversations: new Map(),\n hasConversations: false,\n } satisfies ConversationsState\n }\n }\n\n private static _getState(client: ITelegramClient): ConversationsState {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return (client as any)[CONVERSATION_SYMBOL] as ConversationsState\n }\n\n /**\n * Pass the update to the conversation manager and all registered\n * conversations on this client.\n *\n * @returns `true` if the update was handled by some conversation\n */\n static handleUpdate(client: ITelegramClient, update: ParsedUpdate): boolean {\n const state = Conversation._getState(client)\n if (!state?.hasConversations) return false\n\n let chatId\n\n switch (update.name) {\n case 'new_message':\n case 'edit_message':\n chatId = getMarkedPeerId(update.data.raw.peerId)\n break\n case 'history_read':\n chatId = update.data.chatId\n break\n default:\n return false\n }\n\n const conv = state.pendingConversations.get(chatId)\n if (!conv) return false\n\n for (const c of conv) {\n switch (update.name) {\n case 'new_message':\n c._onNewMessage(update.data)\n\n return true\n case 'edit_message':\n c._onEditMessage(update.data)\n\n return true\n case 'history_read':\n c._onHistoryRead(update.data)\n\n return true\n }\n }\n\n return false\n }\n\n /**\n * Get the input peer that this conversation is with\n */\n get inputPeer(): tl.TypeInputPeer {\n if (!this._started) {\n throw new MtArgumentError(\"Conversation hasn't started yet\")\n }\n\n return this._inputPeer\n }\n\n /**\n * ID of the very last message in this conversation.\n */\n get lastMessage(): number {\n if (!this._started) {\n throw new MtArgumentError(\"Conversation hasn't started yet\")\n }\n\n return this._lastMessage\n }\n\n /**\n * ID of the last incoming message in this conversation.\n *\n * Note that before any messages were received since the {@link start}\n * of the conversation, this will equal to {@link lastMessage}\n */\n get lastReceivedMessage(): number {\n if (!this._started) {\n throw new MtArgumentError(\"Conversation hasn't started yet\")\n }\n\n return this._lastReceivedMessage\n }\n\n /**\n * Start the conversation\n */\n async start(): Promise<void> {\n if (this._started) return\n\n this._started = true\n this._inputPeer = await resolvePeer(this.client, this.chat)\n this._chatId = getMarkedPeerId(this._inputPeer)\n\n const [dialog] = await getPeerDialogs(this.client, this._inputPeer)\n const lastMessage = dialog.lastMessage\n\n if (lastMessage) {\n this._lastMessage = this._lastReceivedMessage = lastMessage.id\n } else {\n this._lastMessage = this._lastReceivedMessage = 0\n }\n\n const state = Conversation._getState(this.client)\n\n if (!state.pendingConversations.has(this._chatId)) {\n state.pendingConversations.set(this._chatId, [])\n }\n state.pendingConversations.get(this._chatId)!.push(this)\n state.hasConversations = true\n }\n\n /**\n * Stop the conversation\n */\n stop(): void {\n if (!this._started) return\n\n const state = Conversation._getState(this.client)\n\n const pending = state.pendingConversations.get(this._chatId)\n const pendingIdx = pending?.indexOf(this) ?? -1\n\n if (pendingIdx > -1) {\n // just in case\n pending!.splice(pendingIdx, 1)\n }\n if (pending && !pending.length) {\n state.pendingConversations.delete(this._chatId)\n }\n state.hasConversations = Boolean(state.pendingConversations.size)\n\n // reset pending status\n this._queuedNewMessage.clear()\n this._pendingNewMessages.clear()\n this._pendingEditMessage.clear()\n this._recentEdits.clear()\n this._pendingRead.clear()\n\n this._started = false\n }\n\n private _recordMessage(msg: Message, incoming = false): Message {\n this._lastMessage = msg.id\n if (incoming) this._lastReceivedMessage = msg.id\n\n return msg\n }\n\n /**\n * Send a text message to this conversation.\n *\n * Wrapper over {@link sendText}\n */\n async sendText(...params: ParametersSkip2<typeof sendText>): ReturnType<typeof sendText> {\n if (!this._started) {\n throw new MtArgumentError(\"Conversation hasn't started yet\")\n }\n\n return this._recordMessage(await sendText(this.client, this._inputPeer, ...params))\n }\n\n /**\n * Send a media to this conversation.\n *\n * Wrapper over {@link sendMedia}\n */\n async sendMedia(...params: ParametersSkip2<typeof sendMedia>): ReturnType<typeof sendMedia> {\n if (!this._started) {\n throw new MtArgumentError(\"Conversation hasn't started yet\")\n }\n\n return this._recordMessage(await sendMedia(this.client, this._inputPeer, ...params))\n }\n\n /**\n * Send a media group to this conversation.\n *\n * Wrapper over {@link sendMediaGroup}\n */\n async sendMediaGroup(...params: ParametersSkip2<typeof sendMediaGroup>): ReturnType<typeof sendMediaGroup> {\n if (!this._started) {\n throw new MtArgumentError(\"Conversation hasn't started yet\")\n }\n\n const msgs = await sendMediaGroup(this.client, this._inputPeer, ...params)\n\n this._recordMessage(msgs[msgs.length - 1])\n\n return msgs\n }\n\n /**\n * Mark the conversation as read up to a certain point.\n *\n * By default, reads until the last message.\n * You can pass `message=null` to read the entire conversation,\n * or pass message ID to read up until that ID.\n */\n markRead({\n message,\n clearMentions = true,\n }: { message?: number | null; clearMentions?: boolean } = {}): Promise<void> {\n if (!this._started) {\n throw new MtArgumentError(\"Conversation hasn't started yet\")\n }\n\n if (message === null) {\n message = 0\n } else if (message === undefined) {\n message = this._lastMessage ?? 0\n }\n\n return readHistory(this.client, this._inputPeer, { maxId: message, clearMentions })\n }\n\n /**\n * Helper method that calls {@link start},\n * the provided function and then {@link stop}.\n *\n * It is preferred that you use this function rather than\n * manually starting and stopping the conversation.\n *\n * If you don't stop the conversation when you're done,\n * it *will* lead to memory leaks.\n *\n * @param handler\n */\n async with<T>(handler: () => MaybePromise<T>): Promise<T> {\n await this.start()\n\n let err: unknown\n let res: T\n\n try {\n res = await handler()\n } catch (e) {\n err = e\n }\n\n this.stop()\n\n // eslint-disable-next-line @typescript-eslint/no-throw-literal\n if (err) throw err\n\n return res!\n }\n\n /**\n * Wait for a new message in the conversation\n *\n * @param filter Filter for the handler. You can use any filter you can use for dispatcher\n * @param [timeout=15000] Timeout for the handler in ms. Pass `null` to disable.\n * When the timeout is reached, `MtTimeoutError` is thrown.\n */\n waitForNewMessage(\n filter?: (msg: Message) => MaybePromise<boolean>,\n timeout: number | null = 15000,\n ): Promise<Message> {\n if (!this._started) {\n throw new MtArgumentError(\"Conversation hasn't started yet\")\n }\n\n const promise = createControllablePromise<Message>()\n\n let timer: NodeJS.Timeout | undefined = undefined\n\n if (timeout !== null) {\n timer = setTimeout(() => {\n promise.reject(new MtTimeoutError(timeout))\n this._queuedNewMessage.removeBy((it) => it.promise === promise)\n }, timeout)\n }\n\n this._queuedNewMessage.pushBack({\n promise,\n check: filter,\n timeout: timer,\n })\n\n this._processPendingNewMessages()\n\n return promise\n }\n\n /**\n * Wait for a response for the given message\n * (def. the last one) in the conversation.\n *\n * A message is considered to be a response if\n * it was sent after the given one.\n *\n * @param filter Filter for the handler. You can use any filter you can use for dispatcher\n * @param params\n */\n waitForResponse(\n filter?: (msg: Message) => MaybePromise<boolean>,\n params?: {\n /**\n * Message for which to wait for response for.\n *\n * @default last sent/received message\n */\n message?: number\n\n /**\n * Timeout for the handler in ms. Pass `null` to disable.\n *\n * When the timeout is reached, `TimeoutError` is thrown.\n *\n * @default `15000` (15 sec)\n */\n timeout?: number | null\n },\n ): Promise<Message> {\n const msgId = params?.message ?? this._lastMessage ?? 0\n\n const pred = filter ?\n (msg: Message) => (msg.id > msgId ? filter(msg) : false) :\n (msg: Message) => msg.id > msgId\n\n return this.waitForNewMessage(pred, params?.timeout)\n }\n\n /**\n * Wait for the reply for the given message'\n * (def. the last one) in the conversation.\n *\n * @param filter Filter for the handler. You can use any filter you can use for dispatcher\n * @param params\n */\n waitForReply(\n filter?: (msg: Message) => MaybePromise<boolean>,\n params?: {\n /**\n * Message for which to wait for reply for.\n *\n * @default last sent/received message\n */\n message?: number\n\n /**\n * Timeout for the handler in ms. Pass `null` to disable.\n *\n * When the timeout is reached, `TimeoutError` is thrown.\n *\n * @default `15000` (15 sec)\n */\n timeout?: number | null\n },\n ): Promise<Message> {\n const msgId = params?.message ?? this._lastMessage\n\n if (!msgId) {\n throw new MtArgumentError('Provide message for which to wait for reply for')\n }\n\n const pred = filter ?\n (msg: Message) => (msg.replyToMessage?.id === msgId ? filter(msg) : false) :\n (msg: Message) => msg.replyToMessage?.id === msgId\n\n return this.waitForNewMessage(pred, params?.timeout)\n }\n\n /**\n * Wait for a message to be edited in the conversation.\n * By defaults wait for the last message sent by the other party\n * (at the moment) to be edited.\n *\n * Returns the edited message.\n *\n * @param filter Filter for the handler. You can use any filter you can use for dispatcher\n * @param params\n */\n async waitForEdit(\n filter?: (msg: Message) => MaybePromise<boolean>,\n params?: {\n /**\n * Message for which to wait for reply for.\n *\n * @default last received message\n */\n message?: number\n\n /**\n * Timeout for the handler in ms. Pass `null` to disable.\n *\n * When the timeout is reached, `TimeoutError` is thrown.\n *\n * @default `15000` (15 sec)\n */\n timeout?: number | null\n },\n ): Promise<Message> {\n if (!this._started) {\n throw new MtArgumentError(\"Conversation hasn't started yet\")\n }\n\n const msgId = params?.message ?? this._lastReceivedMessage\n\n if (!msgId) {\n throw new MtArgumentError('Provide message for which to wait for edit for')\n }\n\n const promise = createControllablePromise<Message>()\n\n let timer: NodeJS.Timeout | undefined = undefined\n const timeout = params?.timeout\n\n if (timeout) {\n timer = setTimeout(() => {\n promise.reject(new MtTimeoutError(timeout))\n this._pendingEditMessage.delete(msgId)\n }, timeout)\n }\n\n this._pendingEditMessage.set(msgId, {\n promise,\n check: filter,\n timeout: timer,\n })\n\n this._processRecentEdits()\n\n return promise\n }\n\n /**\n * Wait for the message to be read by the other party.\n *\n * Note that reading the message doesn't mean the response was sent,\n * and if the response was sent, it doesn't mean that the message was read.\n *\n * @param message Message for which to wait for read for. Defaults to last message.\n * @param timeout Timeout for the handler in ms, def. 15 sec. Pass `null` to disable.\n * When the timeout is reached, `TimeoutError` is thrown.\n */\n async waitForRead(message?: number, timeout: number | null = 15000): Promise<void> {\n if (!this._started) {\n throw new MtArgumentError(\"Conversation hasn't started yet\")\n }\n\n const msgId = message ?? this._lastMessage\n\n if (!msgId) {\n throw new MtArgumentError('Provide message for which to wait for read for')\n }\n\n // check if the message is already read\n const [dialog] = await getPeerDialogs(this.client, this._inputPeer)\n if (dialog.lastRead >= msgId) return\n\n const promise = createControllablePromise<void>()\n\n let timer: NodeJS.Timeout | undefined = undefined\n\n if (timeout !== null) {\n timer = setTimeout(() => {\n promise.reject(new MtTimeoutError(timeout))\n this._pendingRead.delete(msgId)\n }, timeout)\n }\n\n this._pendingRead.set(msgId, {\n promise,\n timeout: timer,\n })\n\n return promise\n }\n\n private _onNewMessage(msg: Message) {\n if (msg.chat.id !== this._chatId) return\n\n if (!this._queuedNewMessage.length) {\n this._pendingNewMessages.pushBack(msg)\n\n return\n }\n\n const it = this._queuedNewMessage.peekFront()!\n\n // order does matter for new messages\n void this._lock.acquire().then(async () => {\n try {\n if (!it.check || (await it.check(msg))) {\n if (it.timeout) clearTimeout(it.timeout)\n it.promise.resolve(msg)\n this._queuedNewMessage.popFront()\n }\n } catch (e: unknown) {\n this.client.emitError(e)\n }\n\n this._lastMessage = this._lastReceivedMessage = msg.id\n\n // this func will *never* error, so no need to use .then\n this._lock.release()\n })\n }\n\n private _onEditMessage(msg: Message, fromRecent = false) {\n if (msg.chat.id !== this._chatId) return\n\n const it = this._pendingEditMessage.get(msg.id)\n\n if (!it) {\n if (!fromRecent) {\n this._recentEdits.pushBack(msg)\n }\n\n return\n }\n\n (async () => {\n if (!it.check || (await it.check(msg))) {\n if (it.timeout) clearTimeout(it.timeout)\n it.promise.resolve(msg)\n this._pendingEditMessage.delete(msg.id)\n }\n })().catch((e) => {\n this.client.emitError(e)\n })\n }\n\n private _onHistoryRead(upd: HistoryReadUpdate) {\n if (upd.chatId !== this._chatId) return\n\n const lastRead = upd.maxReadId\n\n for (const msgId of this._pendingRead.keys()) {\n if (msgId <= lastRead) {\n const it = this._pendingRead.get(msgId)!\n if (it.timeout) clearTimeout(it.timeout)\n it.promise.resolve()\n this._pendingRead.delete(msgId)\n }\n }\n }\n\n private _processPendingNewMessages() {\n if (!this._pendingNewMessages.length) return\n\n let it\n\n while ((it = this._pendingNewMessages.popFront())) {\n this._onNewMessage(it)\n }\n }\n\n private _processRecentEdits() {\n if (!this._recentEdits.length) return\n\n const iter = this._recentEdits.iter()\n let it\n\n while (!(it = iter.next()).done) {\n this._onEditMessage(it.value, true)\n }\n }\n}\n"]}
|
|
@@ -12,6 +12,9 @@ exports.MtPeerNotFoundError = MtPeerNotFoundError;
|
|
|
12
12
|
* Could not find a message by the provided information
|
|
13
13
|
*/
|
|
14
14
|
class MtMessageNotFoundError extends errors_js_1.MtcuteError {
|
|
15
|
+
peerId;
|
|
16
|
+
messageId;
|
|
17
|
+
context;
|
|
15
18
|
constructor(peerId, messageId, context) {
|
|
16
19
|
super(`Message${context ? ' ' + context : ''} ${messageId} not found in ${peerId}`);
|
|
17
20
|
this.peerId = peerId;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../../src/highlevel/types/errors.ts"],"names":[],"mappings":";;;AAAA,qDAAmD;AAGnD;;GAEG;AACH,MAAa,mBAAoB,SAAQ,uBAAW;CAAG;AAAvD,kDAAuD;AAEvD;;GAEG;AACH,MAAa,sBAAuB,SAAQ,uBAAW;
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../../src/highlevel/types/errors.ts"],"names":[],"mappings":";;;AAAA,qDAAmD;AAGnD;;GAEG;AACH,MAAa,mBAAoB,SAAQ,uBAAW;CAAG;AAAvD,kDAAuD;AAEvD;;GAEG;AACH,MAAa,sBAAuB,SAAQ,uBAAW;IAEtC;IACA;IACA;IAHb,YACa,MAAc,EACd,SAAiB,EACjB,OAAgB;QAEzB,KAAK,CAAC,UAAU,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,SAAS,iBAAiB,MAAM,EAAE,CAAC,CAAA;QAJ1E,WAAM,GAAN,MAAM,CAAQ;QACd,cAAS,GAAT,SAAS,CAAQ;QACjB,YAAO,GAAP,OAAO,CAAS;IAG7B,CAAC;CACJ;AARD,wDAQC;AAED;;;;;;GAMG;AACH,MAAa,sBAAuB,SAAQ,uBAAW;IACnD,YAAY,IAAmB,EAAE,QAAgB;QAC7C,KAAK,CAAC,uBAAuB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,QAAQ,EAAE,CAAC,CAAA;IAC7E,CAAC;CACJ;AAJD,wDAIC;AAED;;;GAGG;AACH,MAAa,YAAa,SAAQ,uBAAW;IACzC;QACI,KAAK,CAAC,8CAA8C,CAAC,CAAA;IACzD,CAAC;CACJ;AAJD,oCAIC","sourcesContent":["import { MtcuteError } from '../../types/errors.js'\nimport { InputPeerLike } from './peers/index.js'\n\n/**\n * Could not find a peer by the provided information\n */\nexport class MtPeerNotFoundError extends MtcuteError {}\n\n/**\n * Could not find a message by the provided information\n */\nexport class MtMessageNotFoundError extends MtcuteError {\n constructor(\n readonly peerId: number,\n readonly messageId: number,\n readonly context?: string,\n ) {\n super(`Message${context ? ' ' + context : ''} ${messageId} not found in ${peerId}`)\n }\n}\n\n/**\n * Some method that requires a particular type of peer\n * is called, but the resolved peer type is invalid.\n *\n * For example, when trying to get common chats\n * while providing another chat as `userId`\n */\nexport class MtInvalidPeerTypeError extends MtcuteError {\n constructor(peer: InputPeerLike, expected: string) {\n super(`Provided identifier ${JSON.stringify(peer)} is not a ${expected}`)\n }\n}\n\n/**\n * Trying to access to some property on an object that does not\n * contain that information.\n */\nexport class MtEmptyError extends MtcuteError {\n constructor() {\n super('Property is not available on an empty object')\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-location.js","sourceRoot":"","sources":["../../../../../src/highlevel/types/files/file-location.ts"],"names":[],"mappings":";;;AAEA,mDAAsD;AAEtD;;;;;GAKG;AACH,MAAa,YAAY;
|
|
1
|
+
{"version":3,"file":"file-location.js","sourceRoot":"","sources":["../../../../../src/highlevel/types/files/file-location.ts"],"names":[],"mappings":";;;AAEA,mDAAsD;AAEtD;;;;;GAKG;AACH,MAAa,YAAY;IAYR;IAQA;IAIA;IAvBb;IACI;;;;;;;;;OASG;IACM,QAIwE;IACjF;;OAEG;IACM,QAAiB;IAC1B;;OAEG;IACM,IAAa;QAZb,aAAQ,GAAR,QAAQ,CAIgE;QAIxE,aAAQ,GAAR,QAAQ,CAAS;QAIjB,SAAI,GAAJ,IAAI,CAAS;IACvB,CAAC;CACP;AA1BD,oCA0BC;AAED,IAAA,0BAAe,EAAC,YAAY,EAAE,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAA","sourcesContent":["import { tl } from '@mtcute/tl'\n\nimport { makeInspectable } from '../../utils/index.js'\n\n/**\n * Information about file location.\n *\n * Catch-all class for all kinds of Telegram file locations,\n * including ones that are embedded directly into the entity.\n */\nexport class FileLocation {\n constructor(\n /**\n * Location of the file.\n *\n * Either a TL object declaring remote file location,\n * a Buffer containing actual file content (for stripped thumbnails and vector previews),\n * or a function that will return either of those.\n *\n * When a function is passed, it will be lazily resolved the\n * first time downloading the file.\n */\n readonly location:\n | tl.TypeInputFileLocation\n | tl.TypeInputWebFileLocation\n | Uint8Array\n | (() => tl.TypeInputFileLocation | tl.TypeInputWebFileLocation | Uint8Array),\n /**\n * File size in bytes, when available\n */\n readonly fileSize?: number,\n /**\n * DC ID of the file, when available\n */\n readonly dcId?: number,\n ) {}\n}\n\nmakeInspectable(FileLocation, ['fileSize', 'dcId'])\n"]}
|
|
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.isUploadedFile = void 0;
|
|
4
4
|
/** @internal */
|
|
5
5
|
function isUploadedFile(obj) {
|
|
6
|
-
return obj && typeof obj === 'object' && 'inputFile' in obj && 'size' in obj && 'mime' in obj;
|
|
6
|
+
return obj !== null && typeof obj === 'object' && 'inputFile' in obj && 'size' in obj && 'mime' in obj;
|
|
7
7
|
}
|
|
8
8
|
exports.isUploadedFile = isUploadedFile;
|
|
9
9
|
//# sourceMappingURL=uploaded-file.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uploaded-file.js","sourceRoot":"","sources":["../../../../../src/highlevel/types/files/uploaded-file.ts"],"names":[],"mappings":";;;AA0BA,gBAAgB;AAChB,SAAgB,cAAc,CAAC,
|
|
1
|
+
{"version":3,"file":"uploaded-file.js","sourceRoot":"","sources":["../../../../../src/highlevel/types/files/uploaded-file.ts"],"names":[],"mappings":";;;AA0BA,gBAAgB;AAChB,SAAgB,cAAc,CAAC,GAAY;IACvC,OAAO,GAAG,KAAK,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,WAAW,IAAI,GAAG,IAAI,MAAM,IAAI,GAAG,IAAI,MAAM,IAAI,GAAG,CAAA;AAC1G,CAAC;AAFD,wCAEC","sourcesContent":["import { tl } from '@mtcute/tl'\n\n/**\n * Describes a file uploaded to the Telegram servers\n * using {@link TelegramClient.uploadFile} method.\n */\nexport interface UploadedFile {\n /**\n * Raw TL input file to be used in other methods.\n *\n * Very low-level stuff, usually you shouldn't care about it.\n */\n inputFile: tl.TypeInputFile\n\n /**\n * File size in bytes\n */\n size: number\n\n /**\n * File MIME type, either the one passed or\n * the one derived from file contents.\n */\n mime: string\n}\n\n/** @internal */\nexport function isUploadedFile(obj: unknown): obj is UploadedFile {\n return obj !== null && typeof obj === 'object' && 'inputFile' in obj && 'size' in obj && 'mime' in obj\n}\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
/// <reference types="node"
|
|
3
|
-
import type { ReadStream } from 'fs';
|
|
1
|
+
|
|
2
|
+
/// <reference types="node" />
|
|
3
|
+
import type { ReadStream } from 'node:fs';
|
|
4
4
|
import { tdFileId } from '@mtcute/file-id';
|
|
5
5
|
import { tl } from '@mtcute/tl';
|
|
6
6
|
import { FileLocation } from './file-location.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../../src/highlevel/types/files/utils.ts"],"names":[],"mappings":"","sourcesContent":["/* eslint-disable no-restricted-imports */\nimport type { ReadStream } from 'fs'\n\nimport { tdFileId } from '@mtcute/file-id'\nimport { tl } from '@mtcute/tl'\n\nimport { FileLocation } from './file-location.js'\nimport { UploadedFile } from './uploaded-file.js'\n\n/**\n * Describes types that can be used in {@link TelegramClient.uploadFile}\n * method. Can be one of:\n * - `Uint8Array`/`Buffer`, which will be interpreted as raw file contents\n * - `File`, `Blob` (from the Web API)\n * - `string`, which will be interpreted as file path (**non-browser only!**)\n * - `URL` (from the Web API, will be `fetch()`-ed; `file://` URLs are not available in browsers)\n * - `ReadStream` (for Node.js/Bun, from the `fs` module)\n * - `BunFile` (from `Bun.file()`)\n * - `ReadableStream` (Web API readable stream)\n * - `Readable` (Node.js/Bun readable stream)\n * - `Response` (from `window.fetch`)\n */\nexport type UploadFileLike =\n | URL\n | Uint8Array\n | File\n | Blob\n | string\n | ReadStream\n | ReadableStream<Uint8Array>\n | NodeJS.ReadableStream\n | Response\n\n/**\n * Describes types that can be used as an input\n * to any methods that send media (like {@link TelegramClient.sendPhoto})\n *\n * Can be one of:\n * - `Buffer`, which will be interpreted as raw file contents\n * - `File` (from the Web API)\n * - `ReadStream` (for Node.js/Bun, from the `fs` module)\n * - `ReadableStream` (from the Web API, base readable stream)\n * - `Readable` (for Node.js/Bun, base readable stream)\n * - {@link UploadedFile} returned from {@link TelegramClient.uploadFile}\n * - `tl.TypeInputFile` and `tl.TypeInputMedia` TL objects\n * - `string` with a path to a local file prepended with `file:` (non-browser only) (e.g. `file:image.jpg`)\n * - `string` with a URL to remote files (e.g. `https://example.com/image.jpg`)\n * - `string` with TDLib and Bot API compatible File ID.\n * - `URL` (from the Web API, will be `fetch()`-ed if needed; `file://` URLs are not available in browsers)\n * - `td.RawFullRemoteFileLocation` (parsed File ID)\n */\nexport type InputFileLike =\n | UploadFileLike\n | UploadedFile\n | tl.TypeInputFile\n | tl.TypeInputMedia\n | tdFileId.RawFullRemoteFileLocation\n\n/**\n * File location which should be downloaded.\n * You can also provide TDLib and Bot API compatible File ID\n */\nexport type FileDownloadLocation = tl.TypeInputFileLocation | tl.TypeInputWebFileLocation | FileLocation | string\n\nexport interface FileDownloadParameters {\n /**\n * Total file size, if known.\n * Used to determine upload part size.\n * In some cases can be inferred from `file` automatically.\n */\n fileSize?: number\n\n /**\n * Download part size (in KB).\n * By default, automatically selected depending on the file size\n * (or 64, if not provided). Must not be bigger than 512,\n * must not be a fraction, and must be divisible by 4.\n */\n partSize?: number\n\n /**\n * DC id from which the file will be downloaded.\n *\n * If provided DC is not the one storing the file,\n * redirection will be handled automatically.\n */\n dcId?: number\n\n /**\n * Offset in bytes. Must be divisible by 4096 (4 KB).\n */\n offset?: number\n\n /**\n * Number of bytes to be downloaded.\n * By default, downloads the entire file\n */\n limit?: number\n\n /**\n * Function that will be called after some part has been downloaded.\n *\n * @param uploaded Number of bytes already downloaded\n * @param total Total file size (`Infinity` if not available)\n */\n progressCallback?: (downloaded: number, total: number) => void\n\n /**\n * Abort signal that can be used to cancel the download.\n */\n abortSignal?: AbortSignal\n}\n"]}
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../../src/highlevel/types/files/utils.ts"],"names":[],"mappings":"","sourcesContent":["/* eslint-disable no-restricted-imports */\nimport type { ReadStream } from 'node:fs'\n\nimport { tdFileId } from '@mtcute/file-id'\nimport { tl } from '@mtcute/tl'\n\nimport { FileLocation } from './file-location.js'\nimport { UploadedFile } from './uploaded-file.js'\n\n/**\n * Describes types that can be used in {@link TelegramClient.uploadFile}\n * method. Can be one of:\n * - `Uint8Array`/`Buffer`, which will be interpreted as raw file contents\n * - `File`, `Blob` (from the Web API)\n * - `string`, which will be interpreted as file path (**non-browser only!**)\n * - `URL` (from the Web API, will be `fetch()`-ed; `file://` URLs are not available in browsers)\n * - `ReadStream` (for Node.js/Bun, from the `fs` module)\n * - `BunFile` (from `Bun.file()`)\n * - `ReadableStream` (Web API readable stream)\n * - `Readable` (Node.js/Bun readable stream)\n * - `Response` (from `window.fetch`)\n */\nexport type UploadFileLike =\n | URL\n | Uint8Array\n | File\n | Blob\n | string\n | ReadStream\n | ReadableStream<Uint8Array>\n | NodeJS.ReadableStream\n | Response\n\n/**\n * Describes types that can be used as an input\n * to any methods that send media (like {@link TelegramClient.sendPhoto})\n *\n * Can be one of:\n * - `Buffer`, which will be interpreted as raw file contents\n * - `File` (from the Web API)\n * - `ReadStream` (for Node.js/Bun, from the `fs` module)\n * - `ReadableStream` (from the Web API, base readable stream)\n * - `Readable` (for Node.js/Bun, base readable stream)\n * - {@link UploadedFile} returned from {@link TelegramClient.uploadFile}\n * - `tl.TypeInputFile` and `tl.TypeInputMedia` TL objects\n * - `string` with a path to a local file prepended with `file:` (non-browser only) (e.g. `file:image.jpg`)\n * - `string` with a URL to remote files (e.g. `https://example.com/image.jpg`)\n * - `string` with TDLib and Bot API compatible File ID.\n * - `URL` (from the Web API, will be `fetch()`-ed if needed; `file://` URLs are not available in browsers)\n * - `td.RawFullRemoteFileLocation` (parsed File ID)\n */\nexport type InputFileLike =\n | UploadFileLike\n | UploadedFile\n | tl.TypeInputFile\n | tl.TypeInputMedia\n | tdFileId.RawFullRemoteFileLocation\n\n/**\n * File location which should be downloaded.\n * You can also provide TDLib and Bot API compatible File ID\n */\nexport type FileDownloadLocation = tl.TypeInputFileLocation | tl.TypeInputWebFileLocation | FileLocation | string\n\nexport interface FileDownloadParameters {\n /**\n * Total file size, if known.\n * Used to determine upload part size.\n * In some cases can be inferred from `file` automatically.\n */\n fileSize?: number\n\n /**\n * Download part size (in KB).\n * By default, automatically selected depending on the file size\n * (or 64, if not provided). Must not be bigger than 512,\n * must not be a fraction, and must be divisible by 4.\n */\n partSize?: number\n\n /**\n * DC id from which the file will be downloaded.\n *\n * If provided DC is not the one storing the file,\n * redirection will be handled automatically.\n */\n dcId?: number\n\n /**\n * Offset in bytes. Must be divisible by 4096 (4 KB).\n */\n offset?: number\n\n /**\n * Number of bytes to be downloaded.\n * By default, downloads the entire file\n */\n limit?: number\n\n /**\n * Function that will be called after some part has been downloaded.\n *\n * @param uploaded Number of bytes already downloaded\n * @param total Total file size (`Infinity` if not available)\n */\n progressCallback?: (downloaded: number, total: number) => void\n\n /**\n * Abort signal that can be used to cancel the download.\n */\n abortSignal?: AbortSignal\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"web-document.js","sourceRoot":"","sources":["../../../../../src/highlevel/types/files/web-document.ts"],"names":[],"mappings":";;;AAEA,wDAA0D;AAC1D,mDAAsD;AACtD,yDAAiD;AAEjD,MAAM,aAAa,GAAG,GAAG,EAAE;IACvB,MAAM,IAAI,2BAAe,CAAC,wDAAwD,CAAC,CAAA;AACvF,CAAC,CAAA;AAED;;;;;;;;;GASG;AACH,MAAa,WAAY,SAAQ,+BAAY;
|
|
1
|
+
{"version":3,"file":"web-document.js","sourceRoot":"","sources":["../../../../../src/highlevel/types/files/web-document.ts"],"names":[],"mappings":";;;AAEA,wDAA0D;AAC1D,mDAAsD;AACtD,yDAAiD;AAEjD,MAAM,aAAa,GAAG,GAAG,EAAE;IACvB,MAAM,IAAI,2BAAe,CAAC,wDAAwD,CAAC,CAAA;AACvF,CAAC,CAAA;AAED;;;;;;;;;GASG;AACH,MAAa,WAAY,SAAQ,+BAAY;IACpB;IAArB,YAAqB,GAAuB;QACxC,KAAK,CACD,GAAG,CAAC,CAAC,KAAK,aAAa,CAAC,CAAC;YACrB;gBACI,CAAC,EAAE,sBAAsB;gBACzB,GAAG,EAAE,GAAG,CAAC,GAAG;gBACZ,UAAU,EAAE,GAAG,CAAC,UAAU;aAC7B,CAAC,CAAC;YACH,aAAa,EACjB,GAAG,CAAC,IAAI,CACX,CAAA;QAVgB,QAAG,GAAH,GAAG,CAAoB;QAWxC,IAAI,CAAC,GAAG,GAAG,GAAG,CAAA;IAClB,CAAC;IAED;;OAEG;IACH,IAAI,GAAG;QACH,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAA;IACvB,CAAC;IAED;;OAEG;IACH,IAAI,QAAQ;QACR,OAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAA;IAC5B,CAAC;IAED;;;;;;OAMG;IACH,IAAI,cAAc;QACd,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,aAAa,CAAA;IACvC,CAAC;CACJ;AAvCD,kCAuCC;AAED,IAAA,0BAAe,EAAC,WAAW,CAAC,CAAA","sourcesContent":["import { tl } from '@mtcute/tl'\n\nimport { MtArgumentError } from '../../../types/errors.js'\nimport { makeInspectable } from '../../utils/index.js'\nimport { FileLocation } from './file-location.js'\n\nconst STUB_LOCATION = () => {\n throw new MtArgumentError('This web document is not downloadable through Telegram')\n}\n\n/**\n * An external web document, that is not\n * stored on Telegram severs, and is available\n * by a HTTP(s) url.\n *\n * > **Note**: not all web documents are downloadable\n * > through Telegram. Media files usually are,\n * > and web pages (i.e. `mimeType = text/html`) usually aren't.\n * > To be sure, check `isDownloadable` property.\n */\nexport class WebDocument extends FileLocation {\n constructor(readonly raw: tl.TypeWebDocument) {\n super(\n raw._ === 'webDocument' ?\n {\n _: 'inputWebFileLocation',\n url: raw.url,\n accessHash: raw.accessHash,\n } :\n STUB_LOCATION,\n raw.size,\n )\n this.raw = raw\n }\n\n /**\n * URL to the file\n */\n get url(): string {\n return this.raw.url\n }\n\n /**\n * MIME type of the file\n */\n get mimeType(): string {\n return this.raw.mimeType\n }\n\n /**\n * Whether this file can be downloaded through Telegram.\n *\n * If `false`, you should use {@link url} to manually\n * fetch data via HTTP(s), and trying to use `download*` methods\n * will result in an error\n */\n get isDownloadable(): boolean {\n return this.raw._ === 'webDocument'\n }\n}\n\nmakeInspectable(WebDocument)\n"]}
|
|
@@ -9,6 +9,9 @@ const document_js_1 = require("./document.js");
|
|
|
9
9
|
* An audio file
|
|
10
10
|
*/
|
|
11
11
|
class Audio extends document_js_1.RawDocument {
|
|
12
|
+
attr;
|
|
13
|
+
/** Type of the media (for use in a tagged union) */
|
|
14
|
+
type = 'audio';
|
|
12
15
|
/** Type of the file for File ID generation */
|
|
13
16
|
_fileIdType() {
|
|
14
17
|
return file_id_1.tdFileId.FileType.Audio;
|
|
@@ -18,8 +21,6 @@ class Audio extends document_js_1.RawDocument {
|
|
|
18
21
|
attr) {
|
|
19
22
|
super(doc);
|
|
20
23
|
this.attr = attr;
|
|
21
|
-
/** Type of the media (for use in a tagged union) */
|
|
22
|
-
this.type = 'audio';
|
|
23
24
|
}
|
|
24
25
|
/**
|
|
25
26
|
* Duration of the audio in seconds.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audio.js","sourceRoot":"","sources":["../../../../../src/highlevel/types/media/audio.ts"],"names":[],"mappings":";;;AAAA,6CAA0C;AAG1C,mDAAsD;AACtD,uDAAuD;AACvD,+CAA2C;AAE3C;;GAEG;AACH,MAAa,KAAM,SAAQ,yBAAW;
|
|
1
|
+
{"version":3,"file":"audio.js","sourceRoot":"","sources":["../../../../../src/highlevel/types/media/audio.ts"],"names":[],"mappings":";;;AAAA,6CAA0C;AAG1C,mDAAsD;AACtD,uDAAuD;AACvD,+CAA2C;AAE3C;;GAEG;AACH,MAAa,KAAM,SAAQ,yBAAW;IAYrB;IAXb,oDAAoD;IAC3C,IAAI,GAAG,OAAgB,CAAA;IAEhC,8CAA8C;IACpC,WAAW;QACjB,OAAO,kBAAQ,CAAC,QAAQ,CAAC,KAAK,CAAA;IAClC,CAAC;IAED,YACI,GAAmB;IACnB,qCAAqC;IAC5B,IAAkC;QAE3C,KAAK,CAAC,GAAG,CAAC,CAAA;QAFD,SAAI,GAAJ,IAAI,CAA8B;IAG/C,CAAC;IAED;;;;OAIG;IACH,IAAI,QAAQ;QACR,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAA;IAC7B,CAAC;IAED;;OAEG;IACH,IAAI,SAAS;QACT,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAA;IACtC,CAAC;IAED;;OAEG;IACH,IAAI,KAAK;QACL,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAA;IAClC,CAAC;CACJ;AAvCD,sBAuCC;AAED,IAAA,2BAAc,EAAC,KAAK,EAAE,CAAC,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAC,CAAA;AAC3E,IAAA,0BAAe,EAAC,KAAK,EAAE,CAAC,UAAU,EAAE,MAAM,CAAC,EAAE,CAAC,YAAY,EAAE,eAAe,CAAC,CAAC,CAAA","sourcesContent":["import { tdFileId } from '@mtcute/file-id'\nimport { tl } from '@mtcute/tl'\n\nimport { makeInspectable } from '../../utils/index.js'\nimport { memoizeGetters } from '../../utils/memoize.js'\nimport { RawDocument } from './document.js'\n\n/**\n * An audio file\n */\nexport class Audio extends RawDocument {\n /** Type of the media (for use in a tagged union) */\n readonly type = 'audio' as const\n\n /** Type of the file for File ID generation */\n protected _fileIdType(): tdFileId.FileType {\n return tdFileId.FileType.Audio\n }\n\n constructor(\n doc: tl.RawDocument,\n /** TL object describing the audio */\n readonly attr: tl.RawDocumentAttributeAudio,\n ) {\n super(doc)\n }\n\n /**\n * Duration of the audio in seconds.\n *\n * May not be accurate since provided by the sender.\n */\n get duration(): number {\n return this.attr.duration\n }\n\n /**\n * Performer of the audio track.\n */\n get performer(): string | null {\n return this.attr.performer ?? null\n }\n\n /**\n * Title of the audio track.\n */\n get title(): string | null {\n return this.attr.title ?? null\n }\n}\n\nmemoizeGetters(Audio, ['fileName', 'thumbnails', 'fileId', 'uniqueFileId'])\nmakeInspectable(Audio, ['fileSize', 'dcId'], ['inputMedia', 'inputDocument'])\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contact.js","sourceRoot":"","sources":["../../../../../src/highlevel/types/media/contact.ts"],"names":[],"mappings":";;;AAEA,mDAAsD;AAEtD;;GAEG;AACH,MAAa,OAAO;
|
|
1
|
+
{"version":3,"file":"contact.js","sourceRoot":"","sources":["../../../../../src/highlevel/types/media/contact.ts"],"names":[],"mappings":";;;AAEA,mDAAsD;AAEtD;;GAEG;AACH,MAAa,OAAO;IAGK;IAFZ,IAAI,GAAG,SAAkB,CAAA;IAElC,YAAqB,GAA8B;QAA9B,QAAG,GAAH,GAAG,CAA2B;IAAG,CAAC;IAEvD;;OAEG;IACH,IAAI,WAAW;QACX,OAAO,IAAI,CAAC,GAAG,CAAC,WAAW,CAAA;IAC/B,CAAC;IAED;;OAEG;IACH,IAAI,SAAS;QACT,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS,CAAA;IAC7B,CAAC;IAED;;OAEG;IACH,IAAI,QAAQ;QACR,OAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAA;IAC5B,CAAC;IAED;;OAEG;IACH,IAAI,MAAM;QACN,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,CAAA;IAC1B,CAAC;IAED;;;;OAIG;IACH,IAAI,UAAU;QACV,OAAO;YACH,GAAG,IAAI,CAAC,GAAG;YACX,CAAC,EAAE,mBAAmB;SACzB,CAAA;IACL,CAAC;CACJ;AA5CD,0BA4CC;AAED,IAAA,0BAAe,EAAC,OAAO,EAAE,SAAS,EAAE,CAAC,YAAY,CAAC,CAAC,CAAA","sourcesContent":["import { tl } from '@mtcute/tl'\n\nimport { makeInspectable } from '../../utils/index.js'\n\n/**\n * A phone contact\n */\nexport class Contact {\n readonly type = 'contact' as const\n\n constructor(readonly obj: tl.RawMessageMediaContact) {}\n\n /**\n * Contact's phone number\n */\n get phoneNumber(): string {\n return this.obj.phoneNumber\n }\n\n /**\n * Contact's first name\n */\n get firstName(): string {\n return this.obj.firstName\n }\n\n /**\n * Contact's last name\n */\n get lastName(): string {\n return this.obj.lastName\n }\n\n /**\n * Contact's user ID in Telegram or `0` if not available\n */\n get userId(): number {\n return this.obj.userId\n }\n\n /**\n * Input media TL object generated from this object,\n * to be used inside {@link InputMediaLike} and\n * {@link TelegramClient.sendMedia}\n */\n get inputMedia(): tl.TypeInputMedia {\n return {\n ...this.obj,\n _: 'inputMediaContact',\n }\n }\n}\n\nmakeInspectable(Contact, undefined, ['inputMedia'])\n"]}
|