From 712c1e8348c1635beaae6e4b312892f9e55783d7 Mon Sep 17 00:00:00 2001 From: Alina Sireneva Date: Sat, 16 Dec 2023 19:00:13 +0300 Subject: [PATCH] fix(client): added `true` assertions to methods returning `Bool` --- packages/client/src/client.ts | 30 +++++++++++++++++-- .../src/methods/bots/answer-callback-query.ts | 5 +++- .../methods/bots/answer-pre-checkout-query.ts | 5 +++- .../client/src/methods/bots/set-bot-info.ts | 5 +++- .../src/methods/bots/set-bot-menu-button.ts | 5 +++- .../client/src/methods/bots/set-game-score.ts | 5 +++- .../src/methods/bots/set-my-commands.ts | 9 ++++-- .../src/methods/bots/set-my-default-rights.ts | 5 +++- .../client/src/methods/chats/delete-group.ts | 5 +++- .../src/methods/chats/mark-chat-unread.ts | 5 +++- .../src/methods/chats/reorder-usernames.ts | 14 ++++++--- .../src/methods/chats/set-chat-color.ts | 19 +++++++++--- .../src/methods/chats/set-chat-description.ts | 5 +++- .../src/methods/chats/set-chat-username.ts | 5 +++- .../methods/chats/toggle-fragment-username.ts | 14 ++++++--- .../src/methods/dialogs/create-folder.ts | 5 +++- .../src/methods/dialogs/delete-folder.ts | 5 +++- .../client/src/methods/dialogs/edit-folder.ts | 5 +++- .../src/methods/dialogs/set-folders-order.ts | 5 +++- .../src/methods/messages/read-history.ts | 5 +++- .../src/methods/messages/send-typing.ts | 5 +++- .../src/methods/password/password-email.ts | 13 ++++++-- .../methods/stickers/set-chat-sticker-set.ts | 6 ++-- .../stories/increment-stories-views.ts | 7 +++-- .../src/methods/stories/report-story.ts | 5 +++- .../stories/toggle-peer-stories-archived.ts | 5 +++- .../client/src/methods/users/block-user.ts | 5 +++- .../src/methods/users/edit-close-friends.ts | 10 +++++-- .../src/methods/users/set-emoji-status.ts | 6 ++-- .../src/methods/users/set-global-ttl.ts | 5 +++- .../client/src/methods/users/set-offline.ts | 5 +++- .../client/src/methods/users/unblock-user.ts | 5 +++- .../client/src/types/misc/takeout-session.ts | 6 ++-- packages/core/src/utils/type-assertions.ts | 6 ++++ 34 files changed, 197 insertions(+), 53 deletions(-) diff --git a/packages/client/src/client.ts b/packages/client/src/client.ts index 002e0606..afc6fb0c 100644 --- a/packages/client/src/client.ts +++ b/packages/client/src/client.ts @@ -67,7 +67,7 @@ import { joinChat } from './methods/chats/join-chat.js' import { kickChatMember } from './methods/chats/kick-chat-member.js' import { leaveChat } from './methods/chats/leave-chat.js' import { markChatUnread } from './methods/chats/mark-chat-unread.js' -import { openChat } from './methods/chats/open-chat.js' +import { closeChat, openChat } from './methods/chats/open-chat.js' import { reorderUsernames } from './methods/chats/reorder-usernames.js' import { restrictChatMember } from './methods/chats/restrict-chat-member.js' import { saveDraft } from './methods/chats/save-draft.js' @@ -1683,6 +1683,18 @@ export interface TelegramClient extends BaseTelegramClient { * @param chat Chat to open */ openChat(chat: InputPeerLike): Promise + /** + * Inform the library that the user has closed a chat. + * Un-does the effect of {@link openChat}. + * + * Some library logic depends on this, for example, the library will + * periodically ping the server to keep the updates flowing. + * + * **Available**: ✅ both users and bots + * + * @param chat Chat to open + */ + closeChat(chat: InputPeerLike): Promise /** * Reorder usernames * @@ -1732,7 +1744,7 @@ export interface TelegramClient extends BaseTelegramClient { saveDraft(chatId: InputPeerLike, draft: null | Omit): Promise /** - * Set chat name/replies color and optionally background pattern + * Set peer color and optionally background pattern * **Available**: 👤 users only * */ @@ -1762,6 +1774,14 @@ export interface TelegramClient extends BaseTelegramClient { * Must be an adaptive emoji, otherwise the request will fail. */ backgroundEmojiId?: tl.Long + + /** + * Whether to set this color for the profile + * header instead of chat name/replies. + * + * Currently only available for the current user. + */ + forProfile?: boolean }): Promise /** * Change default chat permissions for all members. @@ -4582,7 +4602,7 @@ export interface TelegramClient extends BaseTelegramClient { * @param peerId Peer ID whose stories to mark as read * @param ids ID(s) of the stories to increment views of (max 200) */ - incrementStoriesViews(peerId: InputPeerLike, ids: MaybeArray): Promise + incrementStoriesViews(peerId: InputPeerLike, ids: MaybeArray): Promise /** * Iterate over all stories (e.g. to load the top bar) * @@ -5433,6 +5453,10 @@ TelegramClient.prototype.openChat = function (...args) { return openChat(this, ...args) } +TelegramClient.prototype.closeChat = function (...args) { + return closeChat(this, ...args) +} + TelegramClient.prototype.reorderUsernames = function (...args) { return reorderUsernames(this, ...args) } diff --git a/packages/client/src/methods/bots/answer-callback-query.ts b/packages/client/src/methods/bots/answer-callback-query.ts index 16a324c2..eb48918f 100644 --- a/packages/client/src/methods/bots/answer-callback-query.ts +++ b/packages/client/src/methods/bots/answer-callback-query.ts @@ -1,4 +1,5 @@ import { BaseTelegramClient, Long } from '@mtcute/core' +import { assertTrue } from '@mtcute/core/utils.js' import { CallbackQuery } from '../../types/updates/callback-query.js' @@ -49,7 +50,7 @@ export async function answerCallbackQuery( ): Promise { const { cacheTime = 0, text, alert, url } = params ?? {} - await client.call({ + const r = await client.call({ _: 'messages.setBotCallbackAnswer', queryId: Long.isLong(queryId) ? queryId : queryId.id, cacheTime, @@ -57,4 +58,6 @@ export async function answerCallbackQuery( message: text, url, }) + + assertTrue('messages.setBotCallbackAnswer', r) } diff --git a/packages/client/src/methods/bots/answer-pre-checkout-query.ts b/packages/client/src/methods/bots/answer-pre-checkout-query.ts index 82928c18..18bde294 100644 --- a/packages/client/src/methods/bots/answer-pre-checkout-query.ts +++ b/packages/client/src/methods/bots/answer-pre-checkout-query.ts @@ -1,4 +1,5 @@ import { BaseTelegramClient, Long, tl } from '@mtcute/core' +import { assertTrue } from '@mtcute/core/utils.js' import type { PreCheckoutQuery } from '../../types/updates/pre-checkout-query.js' @@ -17,10 +18,12 @@ export async function answerPreCheckoutQuery( ): Promise { const { error } = params ?? {} - await client.call({ + const r = await client.call({ _: 'messages.setBotPrecheckoutResults', queryId: Long.isLong(queryId) ? queryId : queryId.queryId, success: !error, error, }) + + assertTrue('messages.setBotPrecheckoutResults', r) } diff --git a/packages/client/src/methods/bots/set-bot-info.ts b/packages/client/src/methods/bots/set-bot-info.ts index 6bb6543f..c22f8e9e 100644 --- a/packages/client/src/methods/bots/set-bot-info.ts +++ b/packages/client/src/methods/bots/set-bot-info.ts @@ -1,4 +1,5 @@ import { BaseTelegramClient } from '@mtcute/core' +import { assertTrue } from '@mtcute/core/utils.js' import { InputPeerLike } from '../../types/index.js' import { toInputUser } from '../../utils/peer-utils.js' @@ -34,7 +35,7 @@ export async function setBotInfo( ): Promise { const { bot, langCode = '', name, bio, description } = params - await client.call({ + const r = await client.call({ _: 'bots.setBotInfo', bot: bot ? toInputUser(await resolvePeer(client, bot), bot) : undefined, langCode: langCode, @@ -42,4 +43,6 @@ export async function setBotInfo( about: bio, description, }) + + assertTrue('bots.setBotInfo', r) } diff --git a/packages/client/src/methods/bots/set-bot-menu-button.ts b/packages/client/src/methods/bots/set-bot-menu-button.ts index 505d2199..06090f58 100644 --- a/packages/client/src/methods/bots/set-bot-menu-button.ts +++ b/packages/client/src/methods/bots/set-bot-menu-button.ts @@ -1,4 +1,5 @@ import { BaseTelegramClient, tl } from '@mtcute/core' +import { assertTrue } from '@mtcute/core/utils.js' import { InputPeerLike } from '../../types/index.js' import { toInputUser } from '../../utils/peer-utils.js' @@ -12,9 +13,11 @@ export async function setBotMenuButton( user: InputPeerLike, button: tl.TypeBotMenuButton, ): Promise { - await client.call({ + const r = await client.call({ _: 'bots.setBotMenuButton', userId: toInputUser(await resolvePeer(client, user), user), button, }) + + assertTrue('bots.setBotMenuButton', r) } diff --git a/packages/client/src/methods/bots/set-game-score.ts b/packages/client/src/methods/bots/set-game-score.ts index 2dd8e439..e470c19f 100644 --- a/packages/client/src/methods/bots/set-game-score.ts +++ b/packages/client/src/methods/bots/set-game-score.ts @@ -1,4 +1,5 @@ import { BaseTelegramClient, tl } from '@mtcute/core' +import { assertTrue } from '@mtcute/core/utils.js' import { InputMessageId, InputPeerLike, Message, normalizeInputMessageId } from '../../types/index.js' import { normalizeInlineId } from '../../utils/inline-utils.js' @@ -93,7 +94,7 @@ export async function setInlineGameScore( const id = normalizeInlineId(messageId) - await client.call( + const r = await client.call( { _: 'messages.setInlineGameScore', id, @@ -104,4 +105,6 @@ export async function setInlineGameScore( }, { dcId: id.dcId }, ) + + assertTrue('messages.setInlineGameScore', r) } diff --git a/packages/client/src/methods/bots/set-my-commands.ts b/packages/client/src/methods/bots/set-my-commands.ts index 71034316..ae7e66a8 100644 --- a/packages/client/src/methods/bots/set-my-commands.ts +++ b/packages/client/src/methods/bots/set-my-commands.ts @@ -1,4 +1,5 @@ import { BaseTelegramClient, tl } from '@mtcute/core' +import { assertTrue } from '@mtcute/core/utils.js' import { BotCommands } from '../../types/index.js' import { _normalizeCommandScope } from './normalize-command-scope.js' @@ -38,17 +39,21 @@ export async function setMyCommands( } if (params.commands?.length) { - await client.call({ + const r = await client.call({ _: 'bots.setBotCommands', commands: params.commands, scope, langCode: params.langCode ?? '', }) + + assertTrue('bots.setBotCommands', r) } else { - await client.call({ + const r = await client.call({ _: 'bots.resetBotCommands', scope, langCode: params.langCode ?? '', }) + + assertTrue('bots.resetBotCommands', r) } } diff --git a/packages/client/src/methods/bots/set-my-default-rights.ts b/packages/client/src/methods/bots/set-my-default-rights.ts index a06d56ee..da1c30c0 100644 --- a/packages/client/src/methods/bots/set-my-default-rights.ts +++ b/packages/client/src/methods/bots/set-my-default-rights.ts @@ -1,4 +1,5 @@ import { BaseTelegramClient, tl } from '@mtcute/core' +import { assertTrue } from '@mtcute/core/utils.js' /** * Sets the default chat permissions for the bot in the supergroup or channel. @@ -14,11 +15,13 @@ export async function setMyDefaultRights( ): Promise { const { target, rights } = params - await client.call({ + const r = await client.call({ _: target === 'group' ? 'bots.setBotGroupDefaultAdminRights' : 'bots.setBotBroadcastDefaultAdminRights', adminRights: { _: 'chatAdminRights', ...rights, }, }) + + assertTrue('bots.setBotGroupDefaultAdminRights', r) } diff --git a/packages/client/src/methods/chats/delete-group.ts b/packages/client/src/methods/chats/delete-group.ts index 595cdeb2..7b14d703 100644 --- a/packages/client/src/methods/chats/delete-group.ts +++ b/packages/client/src/methods/chats/delete-group.ts @@ -1,4 +1,5 @@ import { BaseTelegramClient } from '@mtcute/core' +import { assertTrue } from '@mtcute/core/utils.js' import { InputPeerLike, MtInvalidPeerTypeError } from '../../types/index.js' import { isInputPeerChat } from '../../utils/peer-utils.js' @@ -21,8 +22,10 @@ export async function deleteGroup(client: BaseTelegramClient, chatId: InputPeerL }) client.network.handleUpdate(res) - await client.call({ + const r = await client.call({ _: 'messages.deleteChat', chatId: chat.chatId, }) + + assertTrue('messages.deleteChat', r) } diff --git a/packages/client/src/methods/chats/mark-chat-unread.ts b/packages/client/src/methods/chats/mark-chat-unread.ts index 8e5131fc..300c397b 100644 --- a/packages/client/src/methods/chats/mark-chat-unread.ts +++ b/packages/client/src/methods/chats/mark-chat-unread.ts @@ -1,4 +1,5 @@ import { BaseTelegramClient } from '@mtcute/core' +import { assertTrue } from '@mtcute/core/utils.js' import { InputPeerLike } from '../../types/index.js' import { resolvePeer } from '../users/resolve-peer.js' @@ -9,7 +10,7 @@ import { resolvePeer } from '../users/resolve-peer.js' * @param chatId Chat ID */ export async function markChatUnread(client: BaseTelegramClient, chatId: InputPeerLike): Promise { - await client.call({ + const r = await client.call({ _: 'messages.markDialogUnread', peer: { _: 'inputDialogPeer', @@ -17,4 +18,6 @@ export async function markChatUnread(client: BaseTelegramClient, chatId: InputPe }, unread: true, }) + + assertTrue('messages.markDialogUnread', r) } diff --git a/packages/client/src/methods/chats/reorder-usernames.ts b/packages/client/src/methods/chats/reorder-usernames.ts index 5567dc17..1d16c175 100644 --- a/packages/client/src/methods/chats/reorder-usernames.ts +++ b/packages/client/src/methods/chats/reorder-usernames.ts @@ -1,7 +1,7 @@ import { BaseTelegramClient } from '@mtcute/core' import { InputPeerLike } from '../../types/index.js' -import { isInputPeerChannel, isInputPeerUser, toInputChannel, toInputUser } from '../../utils/index.js' +import { assertTrue, isInputPeerChannel, isInputPeerUser, toInputChannel, toInputUser } from '../../utils/index.js' import { getAuthState } from '../auth/_state.js' import { resolvePeer } from '../users/resolve-peer.js' @@ -22,25 +22,31 @@ export async function reorderUsernames( if (peer._ === 'inputPeerSelf' || peer.userId === getAuthState(client).userId) { // self - await client.call({ + const r = await client.call({ _: 'account.reorderUsernames', order, }) + assertTrue('account.reorderUsernames', r) + return } // bot - await client.call({ + const r = await client.call({ _: 'bots.reorderUsernames', bot: toInputUser(peer, peerId), order, }) + + assertTrue('bots.reorderUsernames', r) } else if (isInputPeerChannel(peer)) { - await client.call({ + const r = await client.call({ _: 'channels.reorderUsernames', channel: toInputChannel(peer, peerId), order, }) + + assertTrue('channels.reorderUsernames', r) } } diff --git a/packages/client/src/methods/chats/set-chat-color.ts b/packages/client/src/methods/chats/set-chat-color.ts index 80d56955..c4c45973 100644 --- a/packages/client/src/methods/chats/set-chat-color.ts +++ b/packages/client/src/methods/chats/set-chat-color.ts @@ -1,13 +1,13 @@ import { BaseTelegramClient, MtTypeAssertionError, tl } from '@mtcute/core' import { InputPeerLike, MtInvalidPeerTypeError } from '../../types/index.js' -import { isInputPeerChannel, isInputPeerUser, toInputChannel } from '../../utils/index.js' +import { assertTrue, isInputPeerChannel, isInputPeerUser, toInputChannel } from '../../utils/index.js' import { getAuthState } from '../auth/_state.js' import { resolvePeer } from '../users/resolve-peer.js' // @available=user /** - * Set chat name/replies color and optionally background pattern + * Set peer color and optionally background pattern */ export async function setChatColor( client: BaseTelegramClient, @@ -37,9 +37,17 @@ export async function setChatColor( * Must be an adaptive emoji, otherwise the request will fail. */ backgroundEmojiId?: tl.Long + + /** + * Whether to set this color for the profile + * header instead of chat name/replies. + * + * Currently only available for the current user. + */ + forProfile?: boolean }, ): Promise { - const { color, backgroundEmojiId } = params + const { color, backgroundEmojiId, forProfile } = params const peer = await resolvePeer(client, params.peer ?? 'me') if (isInputPeerChannel(peer)) { @@ -60,11 +68,14 @@ export async function setChatColor( throw new MtTypeAssertionError('setChatColor', 'inputPeerSelf | inputPeerUser', peer._) } - await client.call({ + const r = await client.call({ _: 'account.updateColor', color, backgroundEmojiId, + forProfile, }) + + assertTrue('account.updateColor', r) } throw new MtInvalidPeerTypeError(peer, 'channel | user') diff --git a/packages/client/src/methods/chats/set-chat-description.ts b/packages/client/src/methods/chats/set-chat-description.ts index a41bc5cc..794d3893 100644 --- a/packages/client/src/methods/chats/set-chat-description.ts +++ b/packages/client/src/methods/chats/set-chat-description.ts @@ -1,4 +1,5 @@ import { BaseTelegramClient } from '@mtcute/core' +import { assertTrue } from '@mtcute/core/utils.js' import { InputPeerLike } from '../../types/index.js' import { resolvePeer } from '../users/resolve-peer.js' @@ -18,9 +19,11 @@ export async function setChatDescription( ): Promise { const chat = await resolvePeer(client, chatId) - await client.call({ + const r = await client.call({ _: 'messages.editChatAbout', peer: chat, about: description, }) + + assertTrue('messages.editChatAbout', r) } diff --git a/packages/client/src/methods/chats/set-chat-username.ts b/packages/client/src/methods/chats/set-chat-username.ts index 96fde3e9..f9a57b79 100644 --- a/packages/client/src/methods/chats/set-chat-username.ts +++ b/packages/client/src/methods/chats/set-chat-username.ts @@ -1,4 +1,5 @@ import { BaseTelegramClient } from '@mtcute/core' +import { assertTrue } from '@mtcute/core/utils.js' import { InputPeerLike } from '../../types/index.js' import { toInputChannel } from '../../utils/peer-utils.js' @@ -17,9 +18,11 @@ export async function setChatUsername( chatId: InputPeerLike, username: string | null, ): Promise { - await client.call({ + const r = await client.call({ _: 'channels.updateUsername', channel: toInputChannel(await resolvePeer(client, chatId), chatId), username: username || '', }) + + assertTrue('channels.updateUsername', r) } diff --git a/packages/client/src/methods/chats/toggle-fragment-username.ts b/packages/client/src/methods/chats/toggle-fragment-username.ts index 3b0ffe47..8fdf635b 100644 --- a/packages/client/src/methods/chats/toggle-fragment-username.ts +++ b/packages/client/src/methods/chats/toggle-fragment-username.ts @@ -1,7 +1,7 @@ import { BaseTelegramClient } from '@mtcute/core' import { InputPeerLike } from '../../types/index.js' -import { isInputPeerChannel, isInputPeerUser, toInputChannel, toInputUser } from '../../utils/index.js' +import { assertTrue, isInputPeerChannel, isInputPeerUser, toInputChannel, toInputUser } from '../../utils/index.js' import { getAuthState } from '../auth/_state.js' import { resolvePeer } from '../users/resolve-peer.js' @@ -37,28 +37,34 @@ export async function toggleFragmentUsername( if (peer._ === 'inputPeerSelf' || peer.userId === getAuthState(client).userId) { // self - await client.call({ + const r = await client.call({ _: 'account.toggleUsername', username, active, }) + assertTrue('account.toggleUsername', r) + return } // bot - await client.call({ + const r = await client.call({ _: 'bots.toggleUsername', bot: toInputUser(peer, peerId), username, active, }) + + assertTrue('bots.toggleUsername', r) } else if (isInputPeerChannel(peer)) { - await client.call({ + const r = await client.call({ _: 'channels.toggleUsername', channel: toInputChannel(peer, peerId), username, active, }) + + assertTrue('channels.toggleUsername', r) } } diff --git a/packages/client/src/methods/dialogs/create-folder.ts b/packages/client/src/methods/dialogs/create-folder.ts index 5043af43..b3e40c69 100644 --- a/packages/client/src/methods/dialogs/create-folder.ts +++ b/packages/client/src/methods/dialogs/create-folder.ts @@ -1,4 +1,5 @@ import { BaseTelegramClient, PartialExcept, tl } from '@mtcute/core' +import { assertTrue } from '@mtcute/core/utils.js' import { getFolders } from './get-folders.js' @@ -38,11 +39,13 @@ export async function createFolder( id, } - await client.call({ + const r = await client.call({ _: 'messages.updateDialogFilter', id, filter, }) + assertTrue('messages.updateDialogFilter', r) + return filter } diff --git a/packages/client/src/methods/dialogs/delete-folder.ts b/packages/client/src/methods/dialogs/delete-folder.ts index fa90a258..e861639e 100644 --- a/packages/client/src/methods/dialogs/delete-folder.ts +++ b/packages/client/src/methods/dialogs/delete-folder.ts @@ -1,4 +1,5 @@ import { BaseTelegramClient, tl } from '@mtcute/core' +import { assertTrue } from '@mtcute/core/utils.js' /** * Delete a folder by its ID @@ -6,8 +7,10 @@ import { BaseTelegramClient, tl } from '@mtcute/core' * @param id Folder ID or folder itself */ export async function deleteFolder(client: BaseTelegramClient, id: number | tl.RawDialogFilter): Promise { - await client.call({ + const r = await client.call({ _: 'messages.updateDialogFilter', id: typeof id === 'number' ? id : id.id, }) + + assertTrue('messages.updateDialogFilter', r) } diff --git a/packages/client/src/methods/dialogs/edit-folder.ts b/packages/client/src/methods/dialogs/edit-folder.ts index c711e2d4..3dfbd5cf 100644 --- a/packages/client/src/methods/dialogs/edit-folder.ts +++ b/packages/client/src/methods/dialogs/edit-folder.ts @@ -1,4 +1,5 @@ import { BaseTelegramClient, MtArgumentError, tl } from '@mtcute/core' +import { assertTrue } from '@mtcute/core/utils.js' import { getFolders } from './get-folders.js' @@ -44,11 +45,13 @@ export async function editFolder( ...modification, } - await client.call({ + const r = await client.call({ _: 'messages.updateDialogFilter', id: folder.id, filter, }) + assertTrue('messages.updateDialogFilter', r) + return filter } diff --git a/packages/client/src/methods/dialogs/set-folders-order.ts b/packages/client/src/methods/dialogs/set-folders-order.ts index c8b0cfca..9e1a39b3 100644 --- a/packages/client/src/methods/dialogs/set-folders-order.ts +++ b/packages/client/src/methods/dialogs/set-folders-order.ts @@ -1,4 +1,5 @@ import { BaseTelegramClient } from '@mtcute/core' +import { assertTrue } from '@mtcute/core/utils.js' /** * Reorder folders @@ -6,8 +7,10 @@ import { BaseTelegramClient } from '@mtcute/core' * @param order New order of folders (folder IDs, where default = 0) */ export async function setFoldersOrder(client: BaseTelegramClient, order: number[]): Promise { - await client.call({ + const r = await client.call({ _: 'messages.updateDialogFiltersOrder', order, }) + + assertTrue('messages.updateDialogFiltersOrder', r) } diff --git a/packages/client/src/methods/messages/read-history.ts b/packages/client/src/methods/messages/read-history.ts index b290e4ac..5fd1569b 100644 --- a/packages/client/src/methods/messages/read-history.ts +++ b/packages/client/src/methods/messages/read-history.ts @@ -1,4 +1,5 @@ import { BaseTelegramClient } from '@mtcute/core' +import { assertTrue } from '@mtcute/core/utils.js' import { InputPeerLike } from '../../types/index.js' import { isInputPeerChannel, toInputChannel } from '../../utils/peer-utils.js' @@ -45,11 +46,13 @@ export async function readHistory( } if (isInputPeerChannel(peer)) { - await client.call({ + const r = await client.call({ _: 'channels.readHistory', channel: toInputChannel(peer), maxId, }) + + assertTrue('channels.readHistory', r) } else { const res = await client.call({ _: 'messages.readHistory', diff --git a/packages/client/src/methods/messages/send-typing.ts b/packages/client/src/methods/messages/send-typing.ts index ec370b0f..3cb16fc4 100644 --- a/packages/client/src/methods/messages/send-typing.ts +++ b/packages/client/src/methods/messages/send-typing.ts @@ -1,4 +1,5 @@ import { assertNever, BaseTelegramClient, tl } from '@mtcute/core' +import { assertTrue } from '@mtcute/core/utils.js' import { InputPeerLike, TypingStatus } from '../../types/index.js' import { resolvePeer } from '../users/resolve-peer.js' @@ -88,10 +89,12 @@ export async function sendTyping( } } - await client.call({ + const r = await client.call({ _: 'messages.setTyping', peer: await resolvePeer(client, chatId), action: status, topMsgId: params?.threadId, }) + + assertTrue('messages.setTyping', r) } diff --git a/packages/client/src/methods/password/password-email.ts b/packages/client/src/methods/password/password-email.ts index 27dfa4c2..51ba89e6 100644 --- a/packages/client/src/methods/password/password-email.ts +++ b/packages/client/src/methods/password/password-email.ts @@ -1,4 +1,5 @@ import { BaseTelegramClient } from '@mtcute/core' +import { assertTrue } from '@mtcute/core/utils.js' /** * Verify an email to use as 2FA recovery method @@ -6,26 +7,32 @@ import { BaseTelegramClient } from '@mtcute/core' * @param code Code which was sent via email */ export async function verifyPasswordEmail(client: BaseTelegramClient, code: string): Promise { - await client.call({ + const r = await client.call({ _: 'account.confirmPasswordEmail', code, }) + + assertTrue('account.confirmPasswordEmail', r) } /** * Resend the code to verify an email to use as 2FA recovery method. */ export async function resendPasswordEmail(client: BaseTelegramClient): Promise { - await client.call({ + const r = await client.call({ _: 'account.resendPasswordEmail', }) + + assertTrue('account.resendPasswordEmail', r) } /** * Cancel the code that was sent to verify an email to use as 2FA recovery method */ export async function cancelPasswordEmail(client: BaseTelegramClient): Promise { - await client.call({ + const r = await client.call({ _: 'account.cancelPasswordEmail', }) + + assertTrue('account.cancelPasswordEmail', r) } diff --git a/packages/client/src/methods/stickers/set-chat-sticker-set.ts b/packages/client/src/methods/stickers/set-chat-sticker-set.ts index beffc165..a7ca956e 100644 --- a/packages/client/src/methods/stickers/set-chat-sticker-set.ts +++ b/packages/client/src/methods/stickers/set-chat-sticker-set.ts @@ -1,7 +1,7 @@ import { BaseTelegramClient } from '@mtcute/core' import { InputPeerLike, InputStickerSet, normalizeInputStickerSet } from '../../types/index.js' -import { toInputChannel } from '../../utils/index.js' +import { assertTrue, toInputChannel } from '../../utils/index.js' import { resolvePeer } from '../users/resolve-peer.js' /** @@ -17,9 +17,11 @@ export async function setChatStickerSet( chatId: InputPeerLike, setId: InputStickerSet, ): Promise { - await client.call({ + const r = await client.call({ _: 'channels.setStickers', channel: toInputChannel(await resolvePeer(client, chatId), chatId), stickerset: normalizeInputStickerSet(setId), }) + + assertTrue('channels.setStickers', r) } diff --git a/packages/client/src/methods/stories/increment-stories-views.ts b/packages/client/src/methods/stories/increment-stories-views.ts index ed49e05b..d29bf1c9 100644 --- a/packages/client/src/methods/stories/increment-stories-views.ts +++ b/packages/client/src/methods/stories/increment-stories-views.ts @@ -1,4 +1,5 @@ import { BaseTelegramClient, MaybeArray } from '@mtcute/core' +import { assertTrue } from '@mtcute/core/utils.js' import { InputPeerLike } from '../../types/index.js' import { resolvePeer } from '../users/resolve-peer.js' @@ -16,10 +17,12 @@ export async function incrementStoriesViews( client: BaseTelegramClient, peerId: InputPeerLike, ids: MaybeArray, -): Promise { - return client.call({ +): Promise { + const r = await client.call({ _: 'stories.incrementStoryViews', peer: await resolvePeer(client, peerId), id: Array.isArray(ids) ? ids : [ids], }) + + assertTrue('stories.incrementStoryViews', r) } diff --git a/packages/client/src/methods/stories/report-story.ts b/packages/client/src/methods/stories/report-story.ts index 5ea88969..324773d9 100644 --- a/packages/client/src/methods/stories/report-story.ts +++ b/packages/client/src/methods/stories/report-story.ts @@ -1,4 +1,5 @@ import { BaseTelegramClient, MaybeArray, tl } from '@mtcute/core' +import { assertTrue } from '@mtcute/core/utils.js' import { InputPeerLike } from '../../types/index.js' import { resolvePeer } from '../users/resolve-peer.js' @@ -26,11 +27,13 @@ export async function reportStory( ): Promise { const { reason = { _: 'inputReportReasonSpam' }, message = '' } = params ?? {} - await client.call({ + const r = await client.call({ _: 'stories.report', peer: await resolvePeer(client, peerId), id: Array.isArray(storyIds) ? storyIds : [storyIds], message, reason, }) + + assertTrue('stories.report', r) } diff --git a/packages/client/src/methods/stories/toggle-peer-stories-archived.ts b/packages/client/src/methods/stories/toggle-peer-stories-archived.ts index 4db18044..d4a85b37 100644 --- a/packages/client/src/methods/stories/toggle-peer-stories-archived.ts +++ b/packages/client/src/methods/stories/toggle-peer-stories-archived.ts @@ -1,4 +1,5 @@ import { BaseTelegramClient } from '@mtcute/core' +import { assertTrue } from '@mtcute/core/utils.js' import { InputPeerLike } from '../../types/index.js' import { resolvePeer } from '../users/resolve-peer.js' @@ -13,9 +14,11 @@ export async function togglePeerStoriesArchived( peerId: InputPeerLike, archived: boolean, ): Promise { - await client.call({ + const r = await client.call({ _: 'stories.togglePeerStoriesHidden', peer: await resolvePeer(client, peerId), hidden: archived, }) + + assertTrue('stories.togglePeerStoriesHidden', r) } diff --git a/packages/client/src/methods/users/block-user.ts b/packages/client/src/methods/users/block-user.ts index 6dd5edd9..baecc529 100644 --- a/packages/client/src/methods/users/block-user.ts +++ b/packages/client/src/methods/users/block-user.ts @@ -1,4 +1,5 @@ import { BaseTelegramClient } from '@mtcute/core' +import { assertTrue } from '@mtcute/core/utils.js' import { InputPeerLike } from '../../types/index.js' import { resolvePeer } from './resolve-peer.js' @@ -9,8 +10,10 @@ import { resolvePeer } from './resolve-peer.js' * @param id User ID, username or phone number */ export async function blockUser(client: BaseTelegramClient, id: InputPeerLike): Promise { - await client.call({ + const r = await client.call({ _: 'contacts.block', id: await resolvePeer(client, id), }) + + assertTrue('contacts.block', r) } diff --git a/packages/client/src/methods/users/edit-close-friends.ts b/packages/client/src/methods/users/edit-close-friends.ts index 593d6956..337bc6d7 100644 --- a/packages/client/src/methods/users/edit-close-friends.ts +++ b/packages/client/src/methods/users/edit-close-friends.ts @@ -1,7 +1,7 @@ import { BaseTelegramClient } from '@mtcute/core' import { InputPeerLike } from '../../types/index.js' -import { toInputUser } from '../../utils/index.js' +import { assertTrue, toInputUser } from '../../utils/index.js' import { resolvePeerMany } from './resolve-peer-many.js' /** @@ -10,10 +10,12 @@ import { resolvePeerMany } from './resolve-peer-many.js' * @param ids User IDs */ export async function editCloseFriendsRaw(client: BaseTelegramClient, ids: number[]): Promise { - await client.call({ + const r = await client.call({ _: 'contacts.editCloseFriends', id: ids, }) + + assertTrue('contacts.editCloseFriends', r) } /** @@ -22,7 +24,7 @@ export async function editCloseFriendsRaw(client: BaseTelegramClient, ids: numbe * @param ids User IDs */ export async function editCloseFriends(client: BaseTelegramClient, ids: InputPeerLike[]): Promise { - await client.call({ + const r = await client.call({ _: 'contacts.editCloseFriends', id: await resolvePeerMany(client, ids, toInputUser).then((r) => r.map((u) => { @@ -32,4 +34,6 @@ export async function editCloseFriends(client: BaseTelegramClient, ids: InputPee }), ), }) + + assertTrue('contacts.editCloseFriends', r) } diff --git a/packages/client/src/methods/users/set-emoji-status.ts b/packages/client/src/methods/users/set-emoji-status.ts index c2aa690c..3322b989 100644 --- a/packages/client/src/methods/users/set-emoji-status.ts +++ b/packages/client/src/methods/users/set-emoji-status.ts @@ -1,6 +1,6 @@ import { BaseTelegramClient, tl } from '@mtcute/core' -import { normalizeDate } from '../../utils/index.js' +import { assertTrue, normalizeDate } from '../../utils/index.js' /** * Set an emoji status for the current user @@ -36,8 +36,10 @@ export async function setEmojiStatus( } } - await client.call({ + const r = await client.call({ _: 'account.updateEmojiStatus', emojiStatus, }) + + assertTrue('account.updateEmojiStatus', r) } diff --git a/packages/client/src/methods/users/set-global-ttl.ts b/packages/client/src/methods/users/set-global-ttl.ts index 82438c50..264972f6 100644 --- a/packages/client/src/methods/users/set-global-ttl.ts +++ b/packages/client/src/methods/users/set-global-ttl.ts @@ -1,4 +1,5 @@ import { BaseTelegramClient } from '@mtcute/core' +import { assertTrue } from '@mtcute/core/utils.js' /** * Changes the current default value of the Time-To-Live setting, @@ -7,8 +8,10 @@ import { BaseTelegramClient } from '@mtcute/core' * @param period New TTL period, in seconds (or 0 to disable) */ export async function setGlobalTtl(client: BaseTelegramClient, period: number): Promise { - await client.call({ + const r = await client.call({ _: 'messages.setDefaultHistoryTTL', period, }) + + assertTrue('messages.setDefaultHistoryTTL', r) } diff --git a/packages/client/src/methods/users/set-offline.ts b/packages/client/src/methods/users/set-offline.ts index 18e71ed6..aa650a9d 100644 --- a/packages/client/src/methods/users/set-offline.ts +++ b/packages/client/src/methods/users/set-offline.ts @@ -1,4 +1,5 @@ import { BaseTelegramClient } from '@mtcute/core' +import { assertTrue } from '@mtcute/core/utils.js' /** * Change user status to offline or online @@ -6,8 +7,10 @@ import { BaseTelegramClient } from '@mtcute/core' * @param offline Whether the user is currently offline */ export async function setOffline(client: BaseTelegramClient, offline = true): Promise { - await client.call({ + const r = await client.call({ _: 'account.updateStatus', offline, }) + + assertTrue('account.updateStatus', r) } diff --git a/packages/client/src/methods/users/unblock-user.ts b/packages/client/src/methods/users/unblock-user.ts index dbf1146b..6f092d0c 100644 --- a/packages/client/src/methods/users/unblock-user.ts +++ b/packages/client/src/methods/users/unblock-user.ts @@ -1,4 +1,5 @@ import { BaseTelegramClient } from '@mtcute/core' +import { assertTrue } from '@mtcute/core/utils.js' import { InputPeerLike } from '../../types/index.js' import { resolvePeer } from './resolve-peer.js' @@ -9,8 +10,10 @@ import { resolvePeer } from './resolve-peer.js' * @param id User ID, username or phone number */ export async function unblockUser(client: BaseTelegramClient, id: InputPeerLike): Promise { - await client.call({ + const r = await client.call({ _: 'contacts.unblock', id: await resolvePeer(client, id), }) + + assertTrue('contacts.unblock', r) } diff --git a/packages/client/src/types/misc/takeout-session.ts b/packages/client/src/types/misc/takeout-session.ts index 90b00895..b29caf21 100644 --- a/packages/client/src/types/misc/takeout-session.ts +++ b/packages/client/src/types/misc/takeout-session.ts @@ -1,6 +1,6 @@ import { BaseTelegramClient, MustEqual, RpcCallOptions, tl } from '@mtcute/core' -import { makeInspectable } from '../../utils/index.js' +import { assertTrue, makeInspectable } from '../../utils/index.js' /** * Account takeout session @@ -87,10 +87,12 @@ export class TakeoutSession { * @param success Whether the data was successfully exported */ async finish(success = true): Promise { - await this.call({ + const r = await this.call({ _: 'account.finishTakeoutSession', success, }) + + assertTrue('account.finishTakeoutSession', r) } } diff --git a/packages/core/src/utils/type-assertions.ts b/packages/core/src/utils/type-assertions.ts index f6453243..d075ca51 100644 --- a/packages/core/src/utils/type-assertions.ts +++ b/packages/core/src/utils/type-assertions.ts @@ -79,3 +79,9 @@ export function mtpAssertTypeIs( throw new MtTypeAssertionError(context, expected, obj._) } } + +export function assertTrue(context: string, cond: boolean): asserts cond { + if (!cond) { + throw new MtTypeAssertionError(context, 'true', 'false') + } +}