@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/inline-result/factories.ts"],"names":[],"mappings":"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","sourcesContent":["import { tl } from '@mtcute/tl'\n\nimport { MtArgumentError } from '../../../../types/errors.js'\nimport { ITelegramClient } from '../../../client.types.js'\nimport { fileIdToInputDocument, fileIdToInputPhoto } from '../../../utils/convert-file-id.js'\nimport { extractFileName } from '../../../utils/file-utils.js'\nimport { BotInlineMessage } from '../inline-message/index.js'\nimport {\n InputInlineResult,\n InputInlineResultArticle,\n InputInlineResultAudio,\n InputInlineResultContact,\n InputInlineResultFile,\n InputInlineResultGame,\n InputInlineResultGeo,\n InputInlineResultGif,\n InputInlineResultPhoto,\n InputInlineResultSticker,\n InputInlineResultVenue,\n InputInlineResultVideo,\n InputInlineResultVoice,\n} from './types.js'\n\n/**\n * Create an inline result containing an article\n *\n * @param id Inline result ID\n * @param params Article\n */\nexport function article(id: string, params: Omit<InputInlineResultArticle, 'type' | 'id'>): InputInlineResultArticle {\n const ret = params as tl.Mutable<InputInlineResultArticle>\n ret.id = id\n ret.type = 'article'\n\n return ret\n}\n\n/**\n * Create an inline result containing a GIF\n *\n * @param id Inline result ID\n * @param media GIF animation\n * @param params Additional parameters\n */\nexport function gif(\n id: string,\n media: string | tl.RawInputWebDocument | tl.RawInputDocument,\n params: Omit<InputInlineResultGif, 'type' | 'id' | 'media'> = {},\n): InputInlineResultGif {\n const ret = params as tl.Mutable<InputInlineResultGif>\n ret.id = id\n ret.type = 'gif'\n ret.media = media\n\n return ret\n}\n\n/**\n * Create an inline result containing a video\n *\n * @param id Inline result ID\n * @param media Video\n * @param params Additional parameters\n */\nexport function video(\n id: string,\n media: string | tl.RawInputWebDocument | tl.RawInputDocument,\n params: Omit<InputInlineResultVideo, 'type' | 'id' | 'media'>,\n): InputInlineResultVideo {\n const ret = params as tl.Mutable<InputInlineResultVideo>\n ret.id = id\n ret.type = 'video'\n ret.media = media\n\n return ret\n}\n\n/**\n * Create an inline result containing an audio file\n *\n * @param id Inline result ID\n * @param media Audio file\n * @param params Additional parameters\n */\nexport function audio(\n id: string,\n media: string | tl.RawInputWebDocument | tl.RawInputDocument,\n params: Omit<InputInlineResultAudio, 'type' | 'id' | 'media'>,\n): InputInlineResultAudio {\n const ret = params as tl.Mutable<InputInlineResultAudio>\n ret.id = id\n ret.type = 'audio'\n ret.media = media\n\n return ret\n}\n\n/**\n * Create an inline result containing a voice note\n *\n * @param id Inline result ID\n * @param media Voice note\n * @param params Additional parameters\n */\nexport function voice(\n id: string,\n media: string | tl.RawInputWebDocument | tl.RawInputDocument,\n params: Omit<InputInlineResultVoice, 'type' | 'id' | 'media'>,\n): InputInlineResultVoice {\n const ret = params as tl.Mutable<InputInlineResultVoice>\n ret.id = id\n ret.type = 'voice'\n ret.media = media\n\n return ret\n}\n\n/**\n * Create an inline result containing a photo\n *\n * @param id Inline result ID\n * @param media Photo\n * @param params Additional parameters\n */\nexport function photo(\n id: string,\n media: string | tl.RawInputWebDocument | tl.RawInputPhoto,\n params: Omit<InputInlineResultPhoto, 'type' | 'id' | 'media'> = {},\n): InputInlineResultPhoto {\n const ret = params as tl.Mutable<InputInlineResultPhoto>\n ret.id = id\n ret.type = 'photo'\n ret.media = media\n\n return ret\n}\n\n/**\n * Create an inline result containing a sticker\n *\n * @param id Inline result ID\n * @param media Sticker\n */\nexport function sticker(id: string, media: string | tl.RawInputDocument): InputInlineResultSticker {\n return {\n id,\n type: 'sticker',\n media,\n }\n}\n\n/**\n * Create an inline result containing a document\n * (only PDF and ZIP are supported when using URL)\n *\n * @param id Inline result ID\n * @param media Document\n * @param params Additional parameters\n */\nexport function file(\n id: string,\n media: string | tl.RawInputWebDocument | tl.RawInputDocument,\n params: Omit<InputInlineResultFile, 'type' | 'id' | 'media'>,\n): InputInlineResultFile {\n const ret = params as tl.Mutable<InputInlineResultFile>\n ret.id = id\n ret.type = 'file'\n ret.media = media\n\n return ret\n}\n\n/**\n * Create an inline result containing a geolocation\n *\n * @param id Inline result ID\n * @param params Additional parameters\n */\nexport function geo(id: string, params: Omit<InputInlineResultGeo, 'type' | 'id'>): InputInlineResultGeo {\n const ret = params as tl.Mutable<InputInlineResultGeo>\n ret.id = id\n ret.type = 'geo'\n\n return ret\n}\n\n/**\n * Create an inline result containing a venue\n *\n * @param id Inline result ID\n * @param params Venue parameters\n */\nexport function venue(id: string, params: Omit<InputInlineResultVenue, 'type' | 'id'>): InputInlineResultVenue {\n const ret = params as tl.Mutable<InputInlineResultVenue>\n ret.id = id\n ret.type = 'venue'\n\n return ret\n}\n\n/**\n * Create an inline result containing a contact\n *\n * @param id Inline result ID\n * @param params Contact parameters\n */\nexport function contact(id: string, params: Omit<InputInlineResultContact, 'type' | 'id'>): InputInlineResultContact {\n const ret = params as tl.Mutable<InputInlineResultContact>\n ret.id = id\n ret.type = 'contact'\n\n return ret\n}\n\n/**\n * Create an inline result containing a game\n *\n * @param id Inline result ID\n * @param shortName Short name of the game\n * @param params Additional parameters\n */\nexport function game(\n id: string,\n shortName: string,\n params: Omit<InputInlineResultGame, 'type' | 'id' | 'shortName'> = {},\n): InputInlineResultGame {\n const ret = params as tl.Mutable<InputInlineResultGame>\n ret.id = id\n ret.type = 'game'\n ret.shortName = shortName\n\n return ret\n}\n\n/** @internal */\nexport async function _convertToTl(\n client: ITelegramClient,\n results: InputInlineResult[],\n): Promise<[boolean, tl.TypeInputBotInlineResult[]]> {\n const normalizeThumb = (obj: InputInlineResult, fallback?: string): tl.RawInputWebDocument | undefined => {\n if (obj.type !== 'voice' && obj.type !== 'audio' && obj.type !== 'sticker' && obj.type !== 'game') {\n if (!obj.thumb || typeof obj.thumb === 'string') {\n if (!obj.thumb && !fallback) {\n return undefined\n }\n\n return {\n _: 'inputWebDocument',\n size: 0,\n url: obj.thumb || fallback!,\n mimeType: obj.type === 'gif' ? obj.thumbMime ?? obj.mime ?? 'video/mp4' : 'image/jpeg',\n attributes: [],\n }\n }\n\n return obj.thumb\n }\n }\n\n const items: tl.TypeInputBotInlineResult[] = []\n\n let isGallery = false\n let forceVertical = false\n\n for (const obj of results) {\n switch (obj.type) {\n case 'article': {\n forceVertical = true\n\n let sendMessage: tl.TypeInputBotInlineMessage\n\n if (obj.message) {\n sendMessage = await BotInlineMessage._convertToTl(client, obj.message)\n } else {\n let message = obj.title\n const entities: tl.TypeMessageEntity[] = [\n {\n _: 'messageEntityBold',\n offset: 0,\n length: message.length,\n },\n ]\n\n if (obj.url) {\n entities.push({\n _: 'messageEntityTextUrl',\n url: obj.url,\n offset: 0,\n length: message.length,\n })\n }\n\n if (obj.description) {\n message += '\\n' + obj.description\n }\n\n sendMessage = {\n _: 'inputBotInlineMessageText',\n message,\n entities,\n }\n }\n\n items.push({\n _: 'inputBotInlineResult',\n id: obj.id,\n type: obj.type,\n title: obj.title,\n description: obj.description,\n url: obj.hideUrl ? undefined : obj.url,\n content:\n obj.url && obj.hideUrl ?\n {\n _: 'inputWebDocument',\n url: obj.url,\n mimeType: 'text/html',\n size: 0,\n attributes: [],\n } :\n undefined,\n thumb: typeof obj.thumb === 'string' ? normalizeThumb(obj) : obj.thumb,\n sendMessage,\n })\n continue\n }\n case 'game': {\n let sendMessage: tl.TypeInputBotInlineMessage\n\n if (obj.message) {\n sendMessage = await BotInlineMessage._convertToTl(client, obj.message)\n\n if (sendMessage._ !== 'inputBotInlineMessageGame') {\n throw new MtArgumentError('game inline result must contain a game inline message')\n }\n } else {\n sendMessage = {\n _: 'inputBotInlineMessageGame',\n }\n }\n\n items.push({\n _: 'inputBotInlineResultGame',\n id: obj.id,\n shortName: obj.shortName,\n sendMessage,\n })\n continue\n }\n case 'gif':\n case 'photo':\n case 'sticker':\n isGallery = true\n break\n case 'audio':\n case 'contact':\n case 'voice':\n forceVertical = true\n }\n\n let sendMessage: tl.TypeInputBotInlineMessage\n\n if (obj.message) {\n sendMessage = await BotInlineMessage._convertToTl(client, obj.message)\n } else if (obj.type === 'venue') {\n if (obj.latitude && obj.longitude) {\n sendMessage = {\n _: 'inputBotInlineMessageMediaVenue',\n title: obj.title,\n address: obj.address,\n geoPoint: {\n _: 'inputGeoPoint',\n lat: obj.latitude,\n long: obj.longitude,\n },\n provider: '',\n venueId: '',\n venueType: '',\n }\n } else {\n throw new MtArgumentError('message or location (lat&lon) bust be supplied for venue inline result')\n }\n } else if (obj.type === 'video' && obj.isEmbed && typeof obj.media === 'string') {\n sendMessage = {\n _: 'inputBotInlineMessageText',\n message: obj.media,\n }\n } else if (obj.type === 'geo') {\n sendMessage = {\n _: 'inputBotInlineMessageMediaGeo',\n geoPoint: {\n _: 'inputGeoPoint',\n lat: obj.latitude,\n long: obj.longitude,\n },\n }\n } else if (obj.type === 'contact') {\n sendMessage = {\n _: 'inputBotInlineMessageMediaContact',\n phoneNumber: obj.phone,\n firstName: obj.firstName,\n lastName: obj.lastName ?? '',\n vcard: '',\n }\n } else {\n sendMessage = {\n _: 'inputBotInlineMessageMediaAuto',\n message: '',\n }\n }\n\n let media: tl.TypeInputWebDocument | tl.TypeInputDocument | tl.TypeInputPhoto | undefined = undefined\n\n if (obj.type !== 'geo' && obj.type !== 'venue' && obj.type !== 'contact') {\n if (typeof obj.media === 'string') {\n // file id or url\n if (obj.media.match(/^https?:\\/\\//)) {\n if (obj.type === 'sticker') {\n throw new MtArgumentError('sticker inline result cannot contain a URL')\n }\n\n let mime: string\n if (obj.type === 'video') mime = 'video/mp4'\n else if (obj.type === 'audio') {\n mime = obj.mime ?? 'audio/mpeg'\n } else if (obj.type === 'gif') {\n mime = obj.mime ?? 'video/mp4'\n } else if (obj.type === 'voice') mime = 'audio/ogg'\n else if (obj.type === 'file') {\n if (!obj.mime) {\n throw new MtArgumentError('MIME type must be specified for file inline result')\n }\n\n mime = obj.mime\n } else mime = 'image/jpeg'\n\n const attributes: tl.TypeDocumentAttribute[] = []\n\n if (\n (obj.type === 'video' || obj.type === 'gif' || obj.type === 'photo') &&\n obj.width &&\n obj.height\n ) {\n if (obj.type !== 'photo' && obj.duration) {\n attributes.push({\n _: 'documentAttributeVideo',\n w: obj.width,\n h: obj.height,\n duration: obj.duration,\n })\n } else {\n attributes.push({\n _: 'documentAttributeImageSize',\n w: obj.width,\n h: obj.height,\n })\n }\n } else if (obj.type === 'audio' || obj.type === 'voice') {\n attributes.push({\n _: 'documentAttributeAudio',\n voice: obj.type === 'voice',\n duration: obj.duration ?? 0,\n title: obj.type === 'audio' ? obj.title : '',\n performer: obj.type === 'audio' ? obj.performer : '',\n })\n }\n\n attributes.push({\n _: 'documentAttributeFilename',\n fileName: extractFileName(obj.media),\n })\n\n media = {\n _: 'inputWebDocument',\n url: obj.media,\n mimeType: mime,\n size: 0,\n attributes,\n }\n } else if (obj.type === 'photo') {\n media = fileIdToInputPhoto(obj.media)\n } else {\n media = fileIdToInputDocument(obj.media)\n }\n } else {\n media = obj.media\n }\n }\n\n let title: string | undefined = undefined\n let description: string | undefined = undefined\n\n // incredible hacks by durov team.\n // i honestly don't understand why didn't they just\n // make a bunch of types, as they normally do,\n // but whatever.\n // ref: https://github.com/tdlib/td/blob/master/td/telegram/InlineQueriesManager.cpp\n if (obj.type === 'contact') {\n title = obj.lastName?.length ? `${obj.firstName} ${obj.lastName}` : obj.firstName\n } else if (obj.type !== 'sticker') {\n title = obj.title\n }\n\n if (obj.type === 'audio') {\n description = obj.performer\n } else if (obj.type === 'geo') {\n description = `${obj.latitude} ${obj.longitude}`\n } else if (obj.type === 'venue') {\n description = obj.address\n } else if (obj.type === 'contact') {\n description = obj.phone\n } else if (obj.type !== 'voice' && obj.type !== 'sticker') {\n description = obj.description\n }\n\n if (!media || media._ === 'inputWebDocument') {\n items.push({\n _: 'inputBotInlineResult',\n id: obj.id,\n type: obj.type,\n title,\n description,\n content: media,\n thumb: normalizeThumb(obj, media?.url),\n sendMessage,\n })\n continue\n }\n\n if (media._ === 'inputPhoto') {\n items.push({\n _: 'inputBotInlineResultPhoto',\n id: obj.id,\n type: obj.type,\n photo: media,\n sendMessage,\n })\n continue\n }\n\n items.push({\n _: 'inputBotInlineResultDocument',\n id: obj.id,\n type: obj.type,\n title,\n description,\n document: media,\n sendMessage,\n })\n }\n\n return [isGallery && !forceVertical, items]\n}\n"]}
|
|
1
|
+
{"version":3,"file":"factories.js","sourceRoot":"","sources":["../../../../../../src/highlevel/types/bots/inline-result/factories.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAA;AAE7D,OAAO,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAA;AAC7F,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAA;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAA;AAiB7D;;;;;GAKG;AACH,MAAM,UAAU,OAAO,CAAC,EAAU,EAAE,MAAqD;IACrF,MAAM,GAAG,GAAG,MAA8C,CAAA;IAC1D,GAAG,CAAC,EAAE,GAAG,EAAE,CAAA;IACX,GAAG,CAAC,IAAI,GAAG,SAAS,CAAA;IAEpB,OAAO,GAAG,CAAA;AACd,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,GAAG,CACf,EAAU,EACV,KAA4D,EAC5D,SAA8D,EAAE;IAEhE,MAAM,GAAG,GAAG,MAA0C,CAAA;IACtD,GAAG,CAAC,EAAE,GAAG,EAAE,CAAA;IACX,GAAG,CAAC,IAAI,GAAG,KAAK,CAAA;IAChB,GAAG,CAAC,KAAK,GAAG,KAAK,CAAA;IAEjB,OAAO,GAAG,CAAA;AACd,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,KAAK,CACjB,EAAU,EACV,KAA4D,EAC5D,MAA6D;IAE7D,MAAM,GAAG,GAAG,MAA4C,CAAA;IACxD,GAAG,CAAC,EAAE,GAAG,EAAE,CAAA;IACX,GAAG,CAAC,IAAI,GAAG,OAAO,CAAA;IAClB,GAAG,CAAC,KAAK,GAAG,KAAK,CAAA;IAEjB,OAAO,GAAG,CAAA;AACd,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,KAAK,CACjB,EAAU,EACV,KAA4D,EAC5D,MAA6D;IAE7D,MAAM,GAAG,GAAG,MAA4C,CAAA;IACxD,GAAG,CAAC,EAAE,GAAG,EAAE,CAAA;IACX,GAAG,CAAC,IAAI,GAAG,OAAO,CAAA;IAClB,GAAG,CAAC,KAAK,GAAG,KAAK,CAAA;IAEjB,OAAO,GAAG,CAAA;AACd,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,KAAK,CACjB,EAAU,EACV,KAA4D,EAC5D,MAA6D;IAE7D,MAAM,GAAG,GAAG,MAA4C,CAAA;IACxD,GAAG,CAAC,EAAE,GAAG,EAAE,CAAA;IACX,GAAG,CAAC,IAAI,GAAG,OAAO,CAAA;IAClB,GAAG,CAAC,KAAK,GAAG,KAAK,CAAA;IAEjB,OAAO,GAAG,CAAA;AACd,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,KAAK,CACjB,EAAU,EACV,KAAyD,EACzD,SAAgE,EAAE;IAElE,MAAM,GAAG,GAAG,MAA4C,CAAA;IACxD,GAAG,CAAC,EAAE,GAAG,EAAE,CAAA;IACX,GAAG,CAAC,IAAI,GAAG,OAAO,CAAA;IAClB,GAAG,CAAC,KAAK,GAAG,KAAK,CAAA;IAEjB,OAAO,GAAG,CAAA;AACd,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,OAAO,CAAC,EAAU,EAAE,KAAmC;IACnE,OAAO;QACH,EAAE;QACF,IAAI,EAAE,SAAS;QACf,KAAK;KACR,CAAA;AACL,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,IAAI,CAChB,EAAU,EACV,KAA4D,EAC5D,MAA4D;IAE5D,MAAM,GAAG,GAAG,MAA2C,CAAA;IACvD,GAAG,CAAC,EAAE,GAAG,EAAE,CAAA;IACX,GAAG,CAAC,IAAI,GAAG,MAAM,CAAA;IACjB,GAAG,CAAC,KAAK,GAAG,KAAK,CAAA;IAEjB,OAAO,GAAG,CAAA;AACd,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,GAAG,CAAC,EAAU,EAAE,MAAiD;IAC7E,MAAM,GAAG,GAAG,MAA0C,CAAA;IACtD,GAAG,CAAC,EAAE,GAAG,EAAE,CAAA;IACX,GAAG,CAAC,IAAI,GAAG,KAAK,CAAA;IAEhB,OAAO,GAAG,CAAA;AACd,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,KAAK,CAAC,EAAU,EAAE,MAAmD;IACjF,MAAM,GAAG,GAAG,MAA4C,CAAA;IACxD,GAAG,CAAC,EAAE,GAAG,EAAE,CAAA;IACX,GAAG,CAAC,IAAI,GAAG,OAAO,CAAA;IAElB,OAAO,GAAG,CAAA;AACd,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,OAAO,CAAC,EAAU,EAAE,MAAqD;IACrF,MAAM,GAAG,GAAG,MAA8C,CAAA;IAC1D,GAAG,CAAC,EAAE,GAAG,EAAE,CAAA;IACX,GAAG,CAAC,IAAI,GAAG,SAAS,CAAA;IAEpB,OAAO,GAAG,CAAA;AACd,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,IAAI,CAChB,EAAU,EACV,SAAiB,EACjB,SAAmE,EAAE;IAErE,MAAM,GAAG,GAAG,MAA2C,CAAA;IACvD,GAAG,CAAC,EAAE,GAAG,EAAE,CAAA;IACX,GAAG,CAAC,IAAI,GAAG,MAAM,CAAA;IACjB,GAAG,CAAC,SAAS,GAAG,SAAS,CAAA;IAEzB,OAAO,GAAG,CAAA;AACd,CAAC;AAED,gBAAgB;AAChB,MAAM,CAAC,KAAK,UAAU,YAAY,CAC9B,MAAuB,EACvB,OAA4B;IAE5B,MAAM,cAAc,GAAG,CAAC,GAAsB,EAAE,QAAiB,EAAsC,EAAE;QACrG,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YAChG,IAAI,CAAC,GAAG,CAAC,KAAK,IAAI,OAAO,GAAG,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;gBAC9C,IAAI,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,QAAQ,EAAE,CAAC;oBAC1B,OAAO,SAAS,CAAA;gBACpB,CAAC;gBAED,OAAO;oBACH,CAAC,EAAE,kBAAkB;oBACrB,IAAI,EAAE,CAAC;oBACP,GAAG,EAAE,GAAG,CAAC,KAAK,IAAI,QAAS;oBAC3B,QAAQ,EAAE,GAAG,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,IAAI,IAAI,WAAW,CAAC,CAAC,CAAC,YAAY;oBACtF,UAAU,EAAE,EAAE;iBACjB,CAAA;YACL,CAAC;YAED,OAAO,GAAG,CAAC,KAAK,CAAA;QACpB,CAAC;IACL,CAAC,CAAA;IAED,MAAM,KAAK,GAAkC,EAAE,CAAA;IAE/C,IAAI,SAAS,GAAG,KAAK,CAAA;IACrB,IAAI,aAAa,GAAG,KAAK,CAAA;IAEzB,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;QACxB,QAAQ,GAAG,CAAC,IAAI,EAAE,CAAC;YACf,KAAK,SAAS,CAAC,CAAC,CAAC;gBACb,aAAa,GAAG,IAAI,CAAA;gBAEpB,IAAI,WAAyC,CAAA;gBAE7C,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;oBACd,WAAW,GAAG,MAAM,gBAAgB,CAAC,YAAY,CAAC,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,CAAA;gBAC1E,CAAC;qBAAM,CAAC;oBACJ,IAAI,OAAO,GAAG,GAAG,CAAC,KAAK,CAAA;oBACvB,MAAM,QAAQ,GAA2B;wBACrC;4BACI,CAAC,EAAE,mBAAmB;4BACtB,MAAM,EAAE,CAAC;4BACT,MAAM,EAAE,OAAO,CAAC,MAAM;yBACzB;qBACJ,CAAA;oBAED,IAAI,GAAG,CAAC,GAAG,EAAE,CAAC;wBACV,QAAQ,CAAC,IAAI,CAAC;4BACV,CAAC,EAAE,sBAAsB;4BACzB,GAAG,EAAE,GAAG,CAAC,GAAG;4BACZ,MAAM,EAAE,CAAC;4BACT,MAAM,EAAE,OAAO,CAAC,MAAM;yBACzB,CAAC,CAAA;oBACN,CAAC;oBAED,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC;wBAClB,OAAO,IAAI,IAAI,GAAG,GAAG,CAAC,WAAW,CAAA;oBACrC,CAAC;oBAED,WAAW,GAAG;wBACV,CAAC,EAAE,2BAA2B;wBAC9B,OAAO;wBACP,QAAQ;qBACX,CAAA;gBACL,CAAC;gBAED,KAAK,CAAC,IAAI,CAAC;oBACP,CAAC,EAAE,sBAAsB;oBACzB,EAAE,EAAE,GAAG,CAAC,EAAE;oBACV,IAAI,EAAE,GAAG,CAAC,IAAI;oBACd,KAAK,EAAE,GAAG,CAAC,KAAK;oBAChB,WAAW,EAAE,GAAG,CAAC,WAAW;oBAC5B,GAAG,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG;oBACtC,OAAO,EACH,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC;wBACpB;4BACI,CAAC,EAAE,kBAAkB;4BACrB,GAAG,EAAE,GAAG,CAAC,GAAG;4BACZ,QAAQ,EAAE,WAAW;4BACrB,IAAI,EAAE,CAAC;4BACP,UAAU,EAAE,EAAE;yBACjB,CAAC,CAAC;wBACH,SAAS;oBACjB,KAAK,EAAE,OAAO,GAAG,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK;oBACtE,WAAW;iBACd,CAAC,CAAA;gBACF,SAAQ;YACZ,CAAC;YACD,KAAK,MAAM,CAAC,CAAC,CAAC;gBACV,IAAI,WAAyC,CAAA;gBAE7C,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;oBACd,WAAW,GAAG,MAAM,gBAAgB,CAAC,YAAY,CAAC,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,CAAA;oBAEtE,IAAI,WAAW,CAAC,CAAC,KAAK,2BAA2B,EAAE,CAAC;wBAChD,MAAM,IAAI,eAAe,CAAC,uDAAuD,CAAC,CAAA;oBACtF,CAAC;gBACL,CAAC;qBAAM,CAAC;oBACJ,WAAW,GAAG;wBACV,CAAC,EAAE,2BAA2B;qBACjC,CAAA;gBACL,CAAC;gBAED,KAAK,CAAC,IAAI,CAAC;oBACP,CAAC,EAAE,0BAA0B;oBAC7B,EAAE,EAAE,GAAG,CAAC,EAAE;oBACV,SAAS,EAAE,GAAG,CAAC,SAAS;oBACxB,WAAW;iBACd,CAAC,CAAA;gBACF,SAAQ;YACZ,CAAC;YACD,KAAK,KAAK,CAAC;YACX,KAAK,OAAO,CAAC;YACb,KAAK,SAAS;gBACV,SAAS,GAAG,IAAI,CAAA;gBAChB,MAAK;YACT,KAAK,OAAO,CAAC;YACb,KAAK,SAAS,CAAC;YACf,KAAK,OAAO;gBACR,aAAa,GAAG,IAAI,CAAA;QAC5B,CAAC;QAED,IAAI,WAAyC,CAAA;QAE7C,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;YACd,WAAW,GAAG,MAAM,gBAAgB,CAAC,YAAY,CAAC,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,CAAA;QAC1E,CAAC;aAAM,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YAC9B,IAAI,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;gBAChC,WAAW,GAAG;oBACV,CAAC,EAAE,iCAAiC;oBACpC,KAAK,EAAE,GAAG,CAAC,KAAK;oBAChB,OAAO,EAAE,GAAG,CAAC,OAAO;oBACpB,QAAQ,EAAE;wBACN,CAAC,EAAE,eAAe;wBAClB,GAAG,EAAE,GAAG,CAAC,QAAQ;wBACjB,IAAI,EAAE,GAAG,CAAC,SAAS;qBACtB;oBACD,QAAQ,EAAE,EAAE;oBACZ,OAAO,EAAE,EAAE;oBACX,SAAS,EAAE,EAAE;iBAChB,CAAA;YACL,CAAC;iBAAM,CAAC;gBACJ,MAAM,IAAI,eAAe,CAAC,wEAAwE,CAAC,CAAA;YACvG,CAAC;QACL,CAAC;aAAM,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO,IAAI,GAAG,CAAC,OAAO,IAAI,OAAO,GAAG,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9E,WAAW,GAAG;gBACV,CAAC,EAAE,2BAA2B;gBAC9B,OAAO,EAAE,GAAG,CAAC,KAAK;aACrB,CAAA;QACL,CAAC;aAAM,IAAI,GAAG,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;YAC5B,WAAW,GAAG;gBACV,CAAC,EAAE,+BAA+B;gBAClC,QAAQ,EAAE;oBACN,CAAC,EAAE,eAAe;oBAClB,GAAG,EAAE,GAAG,CAAC,QAAQ;oBACjB,IAAI,EAAE,GAAG,CAAC,SAAS;iBACtB;aACJ,CAAA;QACL,CAAC;aAAM,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAChC,WAAW,GAAG;gBACV,CAAC,EAAE,mCAAmC;gBACtC,WAAW,EAAE,GAAG,CAAC,KAAK;gBACtB,SAAS,EAAE,GAAG,CAAC,SAAS;gBACxB,QAAQ,EAAE,GAAG,CAAC,QAAQ,IAAI,EAAE;gBAC5B,KAAK,EAAE,EAAE;aACZ,CAAA;QACL,CAAC;aAAM,CAAC;YACJ,WAAW,GAAG;gBACV,CAAC,EAAE,gCAAgC;gBACnC,OAAO,EAAE,EAAE;aACd,CAAA;QACL,CAAC;QAED,IAAI,KAAK,GAAmF,SAAS,CAAA;QAErG,IAAI,GAAG,CAAC,IAAI,KAAK,KAAK,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YACvE,IAAI,OAAO,GAAG,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;gBAChC,iBAAiB;gBACjB,IAAI,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,cAAc,CAAC,EAAE,CAAC;oBAClC,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;wBACzB,MAAM,IAAI,eAAe,CAAC,4CAA4C,CAAC,CAAA;oBAC3E,CAAC;oBAED,IAAI,IAAY,CAAA;oBAChB,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO;wBAAE,IAAI,GAAG,WAAW,CAAA;yBACvC,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;wBAC5B,IAAI,GAAG,GAAG,CAAC,IAAI,IAAI,YAAY,CAAA;oBACnC,CAAC;yBAAM,IAAI,GAAG,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;wBAC5B,IAAI,GAAG,GAAG,CAAC,IAAI,IAAI,WAAW,CAAA;oBAClC,CAAC;yBAAM,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO;wBAAE,IAAI,GAAG,WAAW,CAAA;yBAC9C,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;wBAC3B,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;4BACZ,MAAM,IAAI,eAAe,CAAC,oDAAoD,CAAC,CAAA;wBACnF,CAAC;wBAED,IAAI,GAAG,GAAG,CAAC,IAAI,CAAA;oBACnB,CAAC;;wBAAM,IAAI,GAAG,YAAY,CAAA;oBAE1B,MAAM,UAAU,GAA+B,EAAE,CAAA;oBAEjD,IACI,CAAC,GAAG,CAAC,IAAI,KAAK,OAAO,IAAI,GAAG,CAAC,IAAI,KAAK,KAAK,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO,CAAC;wBACpE,GAAG,CAAC,KAAK;wBACT,GAAG,CAAC,MAAM,EACZ,CAAC;wBACC,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;4BACvC,UAAU,CAAC,IAAI,CAAC;gCACZ,CAAC,EAAE,wBAAwB;gCAC3B,CAAC,EAAE,GAAG,CAAC,KAAK;gCACZ,CAAC,EAAE,GAAG,CAAC,MAAM;gCACb,QAAQ,EAAE,GAAG,CAAC,QAAQ;6BACzB,CAAC,CAAA;wBACN,CAAC;6BAAM,CAAC;4BACJ,UAAU,CAAC,IAAI,CAAC;gCACZ,CAAC,EAAE,4BAA4B;gCAC/B,CAAC,EAAE,GAAG,CAAC,KAAK;gCACZ,CAAC,EAAE,GAAG,CAAC,MAAM;6BAChB,CAAC,CAAA;wBACN,CAAC;oBACL,CAAC;yBAAM,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;wBACtD,UAAU,CAAC,IAAI,CAAC;4BACZ,CAAC,EAAE,wBAAwB;4BAC3B,KAAK,EAAE,GAAG,CAAC,IAAI,KAAK,OAAO;4BAC3B,QAAQ,EAAE,GAAG,CAAC,QAAQ,IAAI,CAAC;4BAC3B,KAAK,EAAE,GAAG,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;4BAC5C,SAAS,EAAE,GAAG,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE;yBACvD,CAAC,CAAA;oBACN,CAAC;oBAED,UAAU,CAAC,IAAI,CAAC;wBACZ,CAAC,EAAE,2BAA2B;wBAC9B,QAAQ,EAAE,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC;qBACvC,CAAC,CAAA;oBAEF,KAAK,GAAG;wBACJ,CAAC,EAAE,kBAAkB;wBACrB,GAAG,EAAE,GAAG,CAAC,KAAK;wBACd,QAAQ,EAAE,IAAI;wBACd,IAAI,EAAE,CAAC;wBACP,UAAU;qBACb,CAAA;gBACL,CAAC;qBAAM,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;oBAC9B,KAAK,GAAG,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;gBACzC,CAAC;qBAAM,CAAC;oBACJ,KAAK,GAAG,qBAAqB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;gBAC5C,CAAC;YACL,CAAC;iBAAM,CAAC;gBACJ,KAAK,GAAG,GAAG,CAAC,KAAK,CAAA;YACrB,CAAC;QACL,CAAC;QAED,IAAI,KAAK,GAAuB,SAAS,CAAA;QACzC,IAAI,WAAW,GAAuB,SAAS,CAAA;QAE/C,kCAAkC;QAClC,mDAAmD;QACnD,8CAA8C;QAC9C,gBAAgB;QAChB,oFAAoF;QACpF,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YACzB,KAAK,GAAG,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAA;QACrF,CAAC;aAAM,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAChC,KAAK,GAAG,GAAG,CAAC,KAAK,CAAA;QACrB,CAAC;QAED,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YACvB,WAAW,GAAG,GAAG,CAAC,SAAS,CAAA;QAC/B,CAAC;aAAM,IAAI,GAAG,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;YAC5B,WAAW,GAAG,GAAG,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,SAAS,EAAE,CAAA;QACpD,CAAC;aAAM,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YAC9B,WAAW,GAAG,GAAG,CAAC,OAAO,CAAA;QAC7B,CAAC;aAAM,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAChC,WAAW,GAAG,GAAG,CAAC,KAAK,CAAA;QAC3B,CAAC;aAAM,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YACxD,WAAW,GAAG,GAAG,CAAC,WAAW,CAAA;QACjC,CAAC;QAED,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,CAAC,KAAK,kBAAkB,EAAE,CAAC;YAC3C,KAAK,CAAC,IAAI,CAAC;gBACP,CAAC,EAAE,sBAAsB;gBACzB,EAAE,EAAE,GAAG,CAAC,EAAE;gBACV,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,KAAK;gBACL,WAAW;gBACX,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,cAAc,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,CAAC;gBACtC,WAAW;aACd,CAAC,CAAA;YACF,SAAQ;QACZ,CAAC;QAED,IAAI,KAAK,CAAC,CAAC,KAAK,YAAY,EAAE,CAAC;YAC3B,KAAK,CAAC,IAAI,CAAC;gBACP,CAAC,EAAE,2BAA2B;gBAC9B,EAAE,EAAE,GAAG,CAAC,EAAE;gBACV,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,KAAK,EAAE,KAAK;gBACZ,WAAW;aACd,CAAC,CAAA;YACF,SAAQ;QACZ,CAAC;QAED,KAAK,CAAC,IAAI,CAAC;YACP,CAAC,EAAE,8BAA8B;YACjC,EAAE,EAAE,GAAG,CAAC,EAAE;YACV,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,KAAK;YACL,WAAW;YACX,QAAQ,EAAE,KAAK;YACf,WAAW;SACd,CAAC,CAAA;IACN,CAAC;IAED,OAAO,CAAC,SAAS,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC,CAAA;AAC/C,CAAC","sourcesContent":["import { tl } from '@mtcute/tl'\n\nimport { MtArgumentError } from '../../../../types/errors.js'\nimport { ITelegramClient } from '../../../client.types.js'\nimport { fileIdToInputDocument, fileIdToInputPhoto } from '../../../utils/convert-file-id.js'\nimport { extractFileName } from '../../../utils/file-utils.js'\nimport { BotInlineMessage } from '../inline-message/index.js'\nimport {\n InputInlineResult,\n InputInlineResultArticle,\n InputInlineResultAudio,\n InputInlineResultContact,\n InputInlineResultFile,\n InputInlineResultGame,\n InputInlineResultGeo,\n InputInlineResultGif,\n InputInlineResultPhoto,\n InputInlineResultSticker,\n InputInlineResultVenue,\n InputInlineResultVideo,\n InputInlineResultVoice,\n} from './types.js'\n\n/**\n * Create an inline result containing an article\n *\n * @param id Inline result ID\n * @param params Article\n */\nexport function article(id: string, params: Omit<InputInlineResultArticle, 'type' | 'id'>): InputInlineResultArticle {\n const ret = params as tl.Mutable<InputInlineResultArticle>\n ret.id = id\n ret.type = 'article'\n\n return ret\n}\n\n/**\n * Create an inline result containing a GIF\n *\n * @param id Inline result ID\n * @param media GIF animation\n * @param params Additional parameters\n */\nexport function gif(\n id: string,\n media: string | tl.RawInputWebDocument | tl.RawInputDocument,\n params: Omit<InputInlineResultGif, 'type' | 'id' | 'media'> = {},\n): InputInlineResultGif {\n const ret = params as tl.Mutable<InputInlineResultGif>\n ret.id = id\n ret.type = 'gif'\n ret.media = media\n\n return ret\n}\n\n/**\n * Create an inline result containing a video\n *\n * @param id Inline result ID\n * @param media Video\n * @param params Additional parameters\n */\nexport function video(\n id: string,\n media: string | tl.RawInputWebDocument | tl.RawInputDocument,\n params: Omit<InputInlineResultVideo, 'type' | 'id' | 'media'>,\n): InputInlineResultVideo {\n const ret = params as tl.Mutable<InputInlineResultVideo>\n ret.id = id\n ret.type = 'video'\n ret.media = media\n\n return ret\n}\n\n/**\n * Create an inline result containing an audio file\n *\n * @param id Inline result ID\n * @param media Audio file\n * @param params Additional parameters\n */\nexport function audio(\n id: string,\n media: string | tl.RawInputWebDocument | tl.RawInputDocument,\n params: Omit<InputInlineResultAudio, 'type' | 'id' | 'media'>,\n): InputInlineResultAudio {\n const ret = params as tl.Mutable<InputInlineResultAudio>\n ret.id = id\n ret.type = 'audio'\n ret.media = media\n\n return ret\n}\n\n/**\n * Create an inline result containing a voice note\n *\n * @param id Inline result ID\n * @param media Voice note\n * @param params Additional parameters\n */\nexport function voice(\n id: string,\n media: string | tl.RawInputWebDocument | tl.RawInputDocument,\n params: Omit<InputInlineResultVoice, 'type' | 'id' | 'media'>,\n): InputInlineResultVoice {\n const ret = params as tl.Mutable<InputInlineResultVoice>\n ret.id = id\n ret.type = 'voice'\n ret.media = media\n\n return ret\n}\n\n/**\n * Create an inline result containing a photo\n *\n * @param id Inline result ID\n * @param media Photo\n * @param params Additional parameters\n */\nexport function photo(\n id: string,\n media: string | tl.RawInputWebDocument | tl.RawInputPhoto,\n params: Omit<InputInlineResultPhoto, 'type' | 'id' | 'media'> = {},\n): InputInlineResultPhoto {\n const ret = params as tl.Mutable<InputInlineResultPhoto>\n ret.id = id\n ret.type = 'photo'\n ret.media = media\n\n return ret\n}\n\n/**\n * Create an inline result containing a sticker\n *\n * @param id Inline result ID\n * @param media Sticker\n */\nexport function sticker(id: string, media: string | tl.RawInputDocument): InputInlineResultSticker {\n return {\n id,\n type: 'sticker',\n media,\n }\n}\n\n/**\n * Create an inline result containing a document\n * (only PDF and ZIP are supported when using URL)\n *\n * @param id Inline result ID\n * @param media Document\n * @param params Additional parameters\n */\nexport function file(\n id: string,\n media: string | tl.RawInputWebDocument | tl.RawInputDocument,\n params: Omit<InputInlineResultFile, 'type' | 'id' | 'media'>,\n): InputInlineResultFile {\n const ret = params as tl.Mutable<InputInlineResultFile>\n ret.id = id\n ret.type = 'file'\n ret.media = media\n\n return ret\n}\n\n/**\n * Create an inline result containing a geolocation\n *\n * @param id Inline result ID\n * @param params Additional parameters\n */\nexport function geo(id: string, params: Omit<InputInlineResultGeo, 'type' | 'id'>): InputInlineResultGeo {\n const ret = params as tl.Mutable<InputInlineResultGeo>\n ret.id = id\n ret.type = 'geo'\n\n return ret\n}\n\n/**\n * Create an inline result containing a venue\n *\n * @param id Inline result ID\n * @param params Venue parameters\n */\nexport function venue(id: string, params: Omit<InputInlineResultVenue, 'type' | 'id'>): InputInlineResultVenue {\n const ret = params as tl.Mutable<InputInlineResultVenue>\n ret.id = id\n ret.type = 'venue'\n\n return ret\n}\n\n/**\n * Create an inline result containing a contact\n *\n * @param id Inline result ID\n * @param params Contact parameters\n */\nexport function contact(id: string, params: Omit<InputInlineResultContact, 'type' | 'id'>): InputInlineResultContact {\n const ret = params as tl.Mutable<InputInlineResultContact>\n ret.id = id\n ret.type = 'contact'\n\n return ret\n}\n\n/**\n * Create an inline result containing a game\n *\n * @param id Inline result ID\n * @param shortName Short name of the game\n * @param params Additional parameters\n */\nexport function game(\n id: string,\n shortName: string,\n params: Omit<InputInlineResultGame, 'type' | 'id' | 'shortName'> = {},\n): InputInlineResultGame {\n const ret = params as tl.Mutable<InputInlineResultGame>\n ret.id = id\n ret.type = 'game'\n ret.shortName = shortName\n\n return ret\n}\n\n/** @internal */\nexport async function _convertToTl(\n client: ITelegramClient,\n results: InputInlineResult[],\n): Promise<[boolean, tl.TypeInputBotInlineResult[]]> {\n const normalizeThumb = (obj: InputInlineResult, fallback?: string): tl.RawInputWebDocument | undefined => {\n if (obj.type !== 'voice' && obj.type !== 'audio' && obj.type !== 'sticker' && obj.type !== 'game') {\n if (!obj.thumb || typeof obj.thumb === 'string') {\n if (!obj.thumb && !fallback) {\n return undefined\n }\n\n return {\n _: 'inputWebDocument',\n size: 0,\n url: obj.thumb || fallback!,\n mimeType: obj.type === 'gif' ? obj.thumbMime ?? obj.mime ?? 'video/mp4' : 'image/jpeg',\n attributes: [],\n }\n }\n\n return obj.thumb\n }\n }\n\n const items: tl.TypeInputBotInlineResult[] = []\n\n let isGallery = false\n let forceVertical = false\n\n for (const obj of results) {\n switch (obj.type) {\n case 'article': {\n forceVertical = true\n\n let sendMessage: tl.TypeInputBotInlineMessage\n\n if (obj.message) {\n sendMessage = await BotInlineMessage._convertToTl(client, obj.message)\n } else {\n let message = obj.title\n const entities: tl.TypeMessageEntity[] = [\n {\n _: 'messageEntityBold',\n offset: 0,\n length: message.length,\n },\n ]\n\n if (obj.url) {\n entities.push({\n _: 'messageEntityTextUrl',\n url: obj.url,\n offset: 0,\n length: message.length,\n })\n }\n\n if (obj.description) {\n message += '\\n' + obj.description\n }\n\n sendMessage = {\n _: 'inputBotInlineMessageText',\n message,\n entities,\n }\n }\n\n items.push({\n _: 'inputBotInlineResult',\n id: obj.id,\n type: obj.type,\n title: obj.title,\n description: obj.description,\n url: obj.hideUrl ? undefined : obj.url,\n content:\n obj.url && obj.hideUrl ?\n {\n _: 'inputWebDocument',\n url: obj.url,\n mimeType: 'text/html',\n size: 0,\n attributes: [],\n } :\n undefined,\n thumb: typeof obj.thumb === 'string' ? normalizeThumb(obj) : obj.thumb,\n sendMessage,\n })\n continue\n }\n case 'game': {\n let sendMessage: tl.TypeInputBotInlineMessage\n\n if (obj.message) {\n sendMessage = await BotInlineMessage._convertToTl(client, obj.message)\n\n if (sendMessage._ !== 'inputBotInlineMessageGame') {\n throw new MtArgumentError('game inline result must contain a game inline message')\n }\n } else {\n sendMessage = {\n _: 'inputBotInlineMessageGame',\n }\n }\n\n items.push({\n _: 'inputBotInlineResultGame',\n id: obj.id,\n shortName: obj.shortName,\n sendMessage,\n })\n continue\n }\n case 'gif':\n case 'photo':\n case 'sticker':\n isGallery = true\n break\n case 'audio':\n case 'contact':\n case 'voice':\n forceVertical = true\n }\n\n let sendMessage: tl.TypeInputBotInlineMessage\n\n if (obj.message) {\n sendMessage = await BotInlineMessage._convertToTl(client, obj.message)\n } else if (obj.type === 'venue') {\n if (obj.latitude && obj.longitude) {\n sendMessage = {\n _: 'inputBotInlineMessageMediaVenue',\n title: obj.title,\n address: obj.address,\n geoPoint: {\n _: 'inputGeoPoint',\n lat: obj.latitude,\n long: obj.longitude,\n },\n provider: '',\n venueId: '',\n venueType: '',\n }\n } else {\n throw new MtArgumentError('message or location (lat&lon) bust be supplied for venue inline result')\n }\n } else if (obj.type === 'video' && obj.isEmbed && typeof obj.media === 'string') {\n sendMessage = {\n _: 'inputBotInlineMessageText',\n message: obj.media,\n }\n } else if (obj.type === 'geo') {\n sendMessage = {\n _: 'inputBotInlineMessageMediaGeo',\n geoPoint: {\n _: 'inputGeoPoint',\n lat: obj.latitude,\n long: obj.longitude,\n },\n }\n } else if (obj.type === 'contact') {\n sendMessage = {\n _: 'inputBotInlineMessageMediaContact',\n phoneNumber: obj.phone,\n firstName: obj.firstName,\n lastName: obj.lastName ?? '',\n vcard: '',\n }\n } else {\n sendMessage = {\n _: 'inputBotInlineMessageMediaAuto',\n message: '',\n }\n }\n\n let media: tl.TypeInputWebDocument | tl.TypeInputDocument | tl.TypeInputPhoto | undefined = undefined\n\n if (obj.type !== 'geo' && obj.type !== 'venue' && obj.type !== 'contact') {\n if (typeof obj.media === 'string') {\n // file id or url\n if (obj.media.match(/^https?:\\/\\//)) {\n if (obj.type === 'sticker') {\n throw new MtArgumentError('sticker inline result cannot contain a URL')\n }\n\n let mime: string\n if (obj.type === 'video') mime = 'video/mp4'\n else if (obj.type === 'audio') {\n mime = obj.mime ?? 'audio/mpeg'\n } else if (obj.type === 'gif') {\n mime = obj.mime ?? 'video/mp4'\n } else if (obj.type === 'voice') mime = 'audio/ogg'\n else if (obj.type === 'file') {\n if (!obj.mime) {\n throw new MtArgumentError('MIME type must be specified for file inline result')\n }\n\n mime = obj.mime\n } else mime = 'image/jpeg'\n\n const attributes: tl.TypeDocumentAttribute[] = []\n\n if (\n (obj.type === 'video' || obj.type === 'gif' || obj.type === 'photo') &&\n obj.width &&\n obj.height\n ) {\n if (obj.type !== 'photo' && obj.duration) {\n attributes.push({\n _: 'documentAttributeVideo',\n w: obj.width,\n h: obj.height,\n duration: obj.duration,\n })\n } else {\n attributes.push({\n _: 'documentAttributeImageSize',\n w: obj.width,\n h: obj.height,\n })\n }\n } else if (obj.type === 'audio' || obj.type === 'voice') {\n attributes.push({\n _: 'documentAttributeAudio',\n voice: obj.type === 'voice',\n duration: obj.duration ?? 0,\n title: obj.type === 'audio' ? obj.title : '',\n performer: obj.type === 'audio' ? obj.performer : '',\n })\n }\n\n attributes.push({\n _: 'documentAttributeFilename',\n fileName: extractFileName(obj.media),\n })\n\n media = {\n _: 'inputWebDocument',\n url: obj.media,\n mimeType: mime,\n size: 0,\n attributes,\n }\n } else if (obj.type === 'photo') {\n media = fileIdToInputPhoto(obj.media)\n } else {\n media = fileIdToInputDocument(obj.media)\n }\n } else {\n media = obj.media\n }\n }\n\n let title: string | undefined = undefined\n let description: string | undefined = undefined\n\n // incredible hacks by durov team.\n // i honestly don't understand why didn't they just\n // make a bunch of types, as they normally do,\n // but whatever.\n // ref: https://github.com/tdlib/td/blob/master/td/telegram/InlineQueriesManager.cpp\n if (obj.type === 'contact') {\n title = obj.lastName?.length ? `${obj.firstName} ${obj.lastName}` : obj.firstName\n } else if (obj.type !== 'sticker') {\n title = obj.title\n }\n\n if (obj.type === 'audio') {\n description = obj.performer\n } else if (obj.type === 'geo') {\n description = `${obj.latitude} ${obj.longitude}`\n } else if (obj.type === 'venue') {\n description = obj.address\n } else if (obj.type === 'contact') {\n description = obj.phone\n } else if (obj.type !== 'voice' && obj.type !== 'sticker') {\n description = obj.description\n }\n\n if (!media || media._ === 'inputWebDocument') {\n items.push({\n _: 'inputBotInlineResult',\n id: obj.id,\n type: obj.type,\n title,\n description,\n content: media,\n thumb: normalizeThumb(obj, media?.url),\n sendMessage,\n })\n continue\n }\n\n if (media._ === 'inputPhoto') {\n items.push({\n _: 'inputBotInlineResultPhoto',\n id: obj.id,\n type: obj.type,\n photo: media,\n sendMessage,\n })\n continue\n }\n\n items.push({\n _: 'inputBotInlineResultDocument',\n id: obj.id,\n type: obj.type,\n title,\n description,\n document: media,\n sendMessage,\n })\n }\n\n return [isGallery && !forceVertical, items]\n}\n"]}
|
|
@@ -2,9 +2,10 @@
|
|
|
2
2
|
* Builder for bot keyboards
|
|
3
3
|
*/
|
|
4
4
|
export class BotKeyboardBuilder {
|
|
5
|
+
maxRowWidth;
|
|
6
|
+
_buttons = [];
|
|
5
7
|
constructor(maxRowWidth = 3) {
|
|
6
8
|
this.maxRowWidth = maxRowWidth;
|
|
7
|
-
this._buttons = [];
|
|
8
9
|
}
|
|
9
10
|
/**
|
|
10
11
|
* Add buttons, wrapping them once {@link maxRowWidth} is reached
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"builder.js","sourceRoot":"","sources":["../../../../../../src/highlevel/types/bots/keyboards/builder.ts"],"names":[],"mappings":"AAMA;;GAEG;AACH,MAAM,OAAO,kBAAkB;
|
|
1
|
+
{"version":3,"file":"builder.js","sourceRoot":"","sources":["../../../../../../src/highlevel/types/bots/keyboards/builder.ts"],"names":[],"mappings":"AAMA;;GAEG;AACH,MAAM,OAAO,kBAAkB;IAGN;IAFb,QAAQ,GAA8B,EAAE,CAAA;IAEhD,YAAqB,cAA6B,CAAC;QAA9B,gBAAW,GAAX,WAAW,CAAmB;IAAG,CAAC;IAEvD;;;;OAIG;IACH,IAAI,CAAC,GAAG,OAA4C;QAChD,IAAI,CAAC,OAAO,CAAC,MAAM;YAAE,OAAO,IAAI,CAAA;QAEhC,IAAI,GAAG,GAA4B,EAAE,CAAA;QACrC,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;YACpB,IAAI,OAAO,GAAG,KAAK,UAAU;gBAAE,GAAG,GAAG,GAAG,EAAE,CAAA;YAC1C,IAAI,CAAC,GAAG;gBAAE,OAAM;YAEhB,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;YAEb,IAAI,GAAG,CAAC,MAAM,KAAK,IAAI,CAAC,WAAW,EAAE,CAAC;gBAClC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;gBACvB,GAAG,GAAG,EAAE,CAAA;YACZ,CAAC;QACL,CAAC,CAAC,CAAA;QAEF,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;YACb,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QAC3B,CAAC;QAED,OAAO,IAAI,CAAA;IACf,CAAC;IAED;;;;OAIG;IACH,GAAG,CAAC,GAAiD;QACjD,IAAI,OAAO,GAAG,KAAK,UAAU,EAAE,CAAC;YAC5B,MAAM,EAAE,GAAG,GAAG,CAAA;YACd,GAAG,GAAG,EAAE,CAAA;YACR,EAAE,CAAC,GAAG,CAAC,CAAA;QACX,CAAC;QAED,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,OAAO,CAA4B,CAAA;QAC7D,IAAI,MAAM,CAAC,MAAM;YAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QAE7C,OAAO,IAAI,CAAA;IACf,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,GAAoC,EAAE,KAAK,GAAG,KAAK;QACtD,IAAI,OAAO,GAAG,KAAK,UAAU;YAAE,GAAG,GAAG,GAAG,EAAE,CAAA;QAC1C,IAAI,CAAC,GAAG;YAAE,OAAO,IAAI,CAAA;QAErB,IACI,IAAI,CAAC,QAAQ,CAAC,MAAM;YACpB,CAAC,IAAI,CAAC,WAAW,KAAK,IAAI,IAAI,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,EAC3G,CAAC;YACC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QACrD,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;QAC7B,CAAC;QAED,OAAO,IAAI,CAAA;IACf,CAAC;IAED;;OAEG;IACH,QAAQ;QACJ,OAAO;YACH,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,IAAI,CAAC,QAAQ;SACzB,CAAA;IACL,CAAC;IAED;;OAEG;IACH,OAAO,CAAC,SAAwD,EAAE;QAC9D,MAAM,GAAG,GAAG,MAAyC,CAAA;QACrD,GAAG,CAAC,IAAI,GAAG,OAAO,CAAA;QAClB,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAA;QAE3B,OAAO,GAAG,CAAA;IACd,CAAC;CACJ","sourcesContent":["import { tl } from '@mtcute/tl'\n\nimport type { InlineKeyboardMarkup, ReplyKeyboardMarkup } from './types.js'\n\nexport type ButtonLike = tl.TypeKeyboardButton | false | null | undefined | void\n\n/**\n * Builder for bot keyboards\n */\nexport class BotKeyboardBuilder {\n private _buttons: tl.TypeKeyboardButton[][] = []\n\n constructor(readonly maxRowWidth: number | null = 3) {}\n\n /**\n * Add buttons, wrapping them once {@link maxRowWidth} is reached\n *\n * @param buttons Buttons to add\n */\n push(...buttons: (ButtonLike | (() => ButtonLike))[]): this {\n if (!buttons.length) return this\n\n let row: tl.TypeKeyboardButton[] = []\n buttons.forEach((btn) => {\n if (typeof btn === 'function') btn = btn()\n if (!btn) return\n\n row.push(btn)\n\n if (row.length === this.maxRowWidth) {\n this._buttons.push(row)\n row = []\n }\n })\n\n if (row.length) {\n this._buttons.push(row)\n }\n\n return this\n }\n\n /**\n * Add a row of buttons. Will not be wrapped.\n *\n * @param row Row or a function that will populate it\n */\n row(row: ButtonLike[] | ((arr: ButtonLike[]) => void)): this {\n if (typeof row === 'function') {\n const fn = row\n row = []\n fn(row)\n }\n\n const normal = row.filter(Boolean) as tl.TypeKeyboardButton[]\n if (normal.length) this._buttons.push(normal)\n\n return this\n }\n\n /**\n * Append a button to the last row, wrapping if needed.\n *\n * @param btn Button to add\n * @param force Whether to forcefully add the button (i.e. do not wrap)\n */\n append(btn: ButtonLike | (() => ButtonLike), force = false): this {\n if (typeof btn === 'function') btn = btn()\n if (!btn) return this\n\n if (\n this._buttons.length &&\n (this.maxRowWidth === null || force || this._buttons[this._buttons.length - 1].length < this.maxRowWidth)\n ) {\n this._buttons[this._buttons.length - 1].push(btn)\n } else {\n this._buttons.push([btn])\n }\n\n return this\n }\n\n /**\n * Return contents of this builder as an inline keyboard\n */\n asInline(): InlineKeyboardMarkup {\n return {\n type: 'inline',\n buttons: this._buttons,\n }\n }\n\n /**\n * Return contents of this builder as a reply keyboard\n */\n asReply(params: Omit<ReplyKeyboardMarkup, 'type' | 'buttons'> = {}): ReplyKeyboardMarkup {\n const ret = params as tl.Mutable<ReplyKeyboardMarkup>\n ret.type = 'reply'\n ret.buttons = this._buttons\n\n return ret\n }\n}\n"]}
|
|
@@ -1 +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,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AAWrD,gBAAgB;AAChB,MAAM,UAAU,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,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AAWrD,gBAAgB;AAChB,MAAM,UAAU,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,WAAW,CAAC,GAAG,CAAC,CAAA;IACxB,CAAC;AACL,CAAC;AAED,gBAAgB;AAChB,MAAM,UAAU,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,WAAW,CAAC,CAAC,CAAC,CAAA;IACtB,CAAC;AACL,CAAC","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"]}
|
|
@@ -22,16 +22,22 @@ const CONVERSATION_SYMBOL = Symbol('conversation');
|
|
|
22
22
|
* and synchronize them manually.
|
|
23
23
|
*/
|
|
24
24
|
export class Conversation {
|
|
25
|
+
client;
|
|
26
|
+
chat;
|
|
27
|
+
_inputPeer;
|
|
28
|
+
_chatId;
|
|
29
|
+
_started = false;
|
|
30
|
+
_lastMessage;
|
|
31
|
+
_lastReceivedMessage;
|
|
32
|
+
_queuedNewMessage = new Deque();
|
|
33
|
+
_pendingNewMessages = new Deque();
|
|
34
|
+
_lock = new AsyncLock();
|
|
35
|
+
_pendingEditMessage = new Map();
|
|
36
|
+
_recentEdits = new Deque(10);
|
|
37
|
+
_pendingRead = new Map();
|
|
25
38
|
constructor(client, chat) {
|
|
26
39
|
this.client = client;
|
|
27
40
|
this.chat = chat;
|
|
28
|
-
this._started = false;
|
|
29
|
-
this._queuedNewMessage = new Deque();
|
|
30
|
-
this._pendingNewMessages = new Deque();
|
|
31
|
-
this._lock = new AsyncLock();
|
|
32
|
-
this._pendingEditMessage = new Map();
|
|
33
|
-
this._recentEdits = new Deque(10);
|
|
34
|
-
this._pendingRead = new Map();
|
|
35
41
|
if (!(CONVERSATION_SYMBOL in client)) {
|
|
36
42
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
37
43
|
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"]}
|
|
@@ -8,6 +8,9 @@ export class MtPeerNotFoundError extends MtcuteError {
|
|
|
8
8
|
* Could not find a message by the provided information
|
|
9
9
|
*/
|
|
10
10
|
export class MtMessageNotFoundError extends MtcuteError {
|
|
11
|
+
peerId;
|
|
12
|
+
messageId;
|
|
13
|
+
context;
|
|
11
14
|
constructor(peerId, messageId, context) {
|
|
12
15
|
super(`Message${context ? ' ' + context : ''} ${messageId} not found in ${peerId}`);
|
|
13
16
|
this.peerId = peerId;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../../src/highlevel/types/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AAGnD;;GAEG;AACH,MAAM,OAAO,mBAAoB,SAAQ,WAAW;CAAG;AAEvD;;GAEG;AACH,MAAM,OAAO,sBAAuB,SAAQ,WAAW;
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../../src/highlevel/types/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AAGnD;;GAEG;AACH,MAAM,OAAO,mBAAoB,SAAQ,WAAW;CAAG;AAEvD;;GAEG;AACH,MAAM,OAAO,sBAAuB,SAAQ,WAAW;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;AAED;;;;;;GAMG;AACH,MAAM,OAAO,sBAAuB,SAAQ,WAAW;IACnD,YAAY,IAAmB,EAAE,QAAgB;QAC7C,KAAK,CAAC,uBAAuB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,QAAQ,EAAE,CAAC,CAAA;IAC7E,CAAC;CACJ;AAED;;;GAGG;AACH,MAAM,OAAO,YAAa,SAAQ,WAAW;IACzC;QACI,KAAK,CAAC,8CAA8C,CAAC,CAAA;IACzD,CAAC;CACJ","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,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAEtD;;;;;GAKG;AACH,MAAM,OAAO,YAAY;
|
|
1
|
+
{"version":3,"file":"file-location.js","sourceRoot":"","sources":["../../../../../src/highlevel/types/files/file-location.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAEtD;;;;;GAKG;AACH,MAAM,OAAO,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;AAED,eAAe,CAAC,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"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/** @internal */
|
|
2
2
|
export function isUploadedFile(obj) {
|
|
3
|
-
return obj && typeof obj === 'object' && 'inputFile' in obj && 'size' in obj && 'mime' in obj;
|
|
3
|
+
return obj !== null && typeof obj === 'object' && 'inputFile' in obj && 'size' in obj && 'mime' in obj;
|
|
4
4
|
}
|
|
5
5
|
//# 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,MAAM,UAAU,cAAc,CAAC,
|
|
1
|
+
{"version":3,"file":"uploaded-file.js","sourceRoot":"","sources":["../../../../../src/highlevel/types/files/uploaded-file.ts"],"names":[],"mappings":"AA0BA,gBAAgB;AAChB,MAAM,UAAU,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","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
1
|
/// <reference types="node" resolution-mode="require"/>
|
|
2
2
|
/// <reference types="node" resolution-mode="require"/>
|
|
3
|
-
import type { ReadStream } from 'fs';
|
|
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"]}
|