@mtcute/core 0.30.3 → 0.32.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (313) hide show
  1. package/client.cjs +85 -0
  2. package/client.js +85 -0
  3. package/highlevel/client.d.cts +411 -116
  4. package/highlevel/client.d.ts +411 -116
  5. package/highlevel/methods/auth/sign-in-qr.cjs +2 -0
  6. package/highlevel/methods/auth/sign-in-qr.js +2 -0
  7. package/highlevel/methods/auth/sign-in-qr.test.d.cts +1 -0
  8. package/highlevel/methods/auth/sign-in-qr.test.d.ts +1 -0
  9. package/highlevel/methods/chats/build-peers-index.cjs +45 -0
  10. package/highlevel/methods/chats/build-peers-index.d.cts +13 -0
  11. package/highlevel/methods/chats/build-peers-index.d.ts +13 -0
  12. package/highlevel/methods/chats/build-peers-index.js +40 -0
  13. package/highlevel/methods/chats/join-chat.cjs +1 -1
  14. package/highlevel/methods/chats/join-chat.d.cts +2 -1
  15. package/highlevel/methods/chats/join-chat.d.ts +2 -1
  16. package/highlevel/methods/chats/join-chat.js +1 -1
  17. package/highlevel/methods/chats/transfer-chat-ownership.cjs +6 -17
  18. package/highlevel/methods/chats/transfer-chat-ownership.js +6 -17
  19. package/highlevel/methods/communities/ban-community-participant.cjs +30 -0
  20. package/highlevel/methods/communities/ban-community-participant.d.cts +20 -0
  21. package/highlevel/methods/communities/ban-community-participant.d.ts +20 -0
  22. package/highlevel/methods/communities/ban-community-participant.js +25 -0
  23. package/highlevel/methods/communities/create-community.cjs +29 -0
  24. package/highlevel/methods/communities/create-community.d.cts +22 -0
  25. package/highlevel/methods/communities/create-community.d.ts +22 -0
  26. package/highlevel/methods/communities/create-community.js +24 -0
  27. package/highlevel/methods/communities/get-community-link-requests.cjs +27 -0
  28. package/highlevel/methods/communities/get-community-link-requests.d.cts +17 -0
  29. package/highlevel/methods/communities/get-community-link-requests.d.ts +17 -0
  30. package/highlevel/methods/communities/get-community-link-requests.js +22 -0
  31. package/highlevel/methods/communities/get-community-participant-chats.cjs +24 -0
  32. package/highlevel/methods/communities/get-community-participant-chats.d.cts +17 -0
  33. package/highlevel/methods/communities/get-community-participant-chats.d.ts +17 -0
  34. package/highlevel/methods/communities/get-community-participant-chats.js +19 -0
  35. package/highlevel/methods/communities/get-joined-communities.cjs +21 -0
  36. package/highlevel/methods/communities/get-joined-communities.d.cts +6 -0
  37. package/highlevel/methods/communities/get-joined-communities.d.ts +6 -0
  38. package/highlevel/methods/communities/get-joined-communities.js +16 -0
  39. package/highlevel/methods/communities/hide-community-link-request.cjs +30 -0
  40. package/highlevel/methods/communities/hide-community-link-request.d.cts +22 -0
  41. package/highlevel/methods/communities/hide-community-link-request.d.ts +22 -0
  42. package/highlevel/methods/communities/hide-community-link-request.js +25 -0
  43. package/highlevel/methods/communities/link-community-peer.cjs +32 -0
  44. package/highlevel/methods/communities/link-community-peer.d.cts +22 -0
  45. package/highlevel/methods/communities/link-community-peer.d.ts +22 -0
  46. package/highlevel/methods/communities/link-community-peer.js +27 -0
  47. package/highlevel/methods/communities/toggle-community-collapsed.cjs +18 -0
  48. package/highlevel/methods/communities/toggle-community-collapsed.d.cts +16 -0
  49. package/highlevel/methods/communities/toggle-community-collapsed.d.ts +16 -0
  50. package/highlevel/methods/communities/toggle-community-collapsed.js +13 -0
  51. package/highlevel/methods/ephemeral/delete-all-welcome-messages.cjs +17 -0
  52. package/highlevel/methods/ephemeral/delete-all-welcome-messages.d.cts +8 -0
  53. package/highlevel/methods/ephemeral/delete-all-welcome-messages.d.ts +8 -0
  54. package/highlevel/methods/ephemeral/delete-all-welcome-messages.js +12 -0
  55. package/highlevel/methods/ephemeral/delete-ephemeral-message.cjs +20 -0
  56. package/highlevel/methods/ephemeral/delete-ephemeral-message.d.cts +13 -0
  57. package/highlevel/methods/ephemeral/delete-ephemeral-message.d.ts +13 -0
  58. package/highlevel/methods/ephemeral/delete-ephemeral-message.js +15 -0
  59. package/highlevel/methods/ephemeral/delete-welcome-message.cjs +18 -0
  60. package/highlevel/methods/ephemeral/delete-welcome-message.d.cts +9 -0
  61. package/highlevel/methods/ephemeral/delete-welcome-message.d.ts +9 -0
  62. package/highlevel/methods/ephemeral/delete-welcome-message.js +13 -0
  63. package/highlevel/methods/ephemeral/edit-ephemeral-message.cjs +41 -0
  64. package/highlevel/methods/ephemeral/edit-ephemeral-message.d.cts +39 -0
  65. package/highlevel/methods/ephemeral/edit-ephemeral-message.d.ts +39 -0
  66. package/highlevel/methods/ephemeral/edit-ephemeral-message.js +36 -0
  67. package/highlevel/methods/ephemeral/find-in-update.cjs +27 -0
  68. package/highlevel/methods/ephemeral/find-in-update.d.cts +8 -0
  69. package/highlevel/methods/ephemeral/find-in-update.d.ts +8 -0
  70. package/highlevel/methods/ephemeral/find-in-update.js +22 -0
  71. package/highlevel/methods/ephemeral/get-ephemeral-callback-answer.cjs +31 -0
  72. package/highlevel/methods/ephemeral/get-ephemeral-callback-answer.d.cts +29 -0
  73. package/highlevel/methods/ephemeral/get-ephemeral-callback-answer.d.ts +29 -0
  74. package/highlevel/methods/ephemeral/get-ephemeral-callback-answer.js +26 -0
  75. package/highlevel/methods/ephemeral/get-welcome-messages.cjs +29 -0
  76. package/highlevel/methods/ephemeral/get-welcome-messages.d.cts +8 -0
  77. package/highlevel/methods/ephemeral/get-welcome-messages.d.ts +8 -0
  78. package/highlevel/methods/ephemeral/get-welcome-messages.js +24 -0
  79. package/highlevel/methods/ephemeral/send-ephemeral-message.cjs +48 -0
  80. package/highlevel/methods/ephemeral/send-ephemeral-message.d.cts +47 -0
  81. package/highlevel/methods/ephemeral/send-ephemeral-message.d.ts +47 -0
  82. package/highlevel/methods/ephemeral/send-ephemeral-message.js +43 -0
  83. package/highlevel/methods/files/download-iterable.cjs +7 -2
  84. package/highlevel/methods/files/download-iterable.js +7 -2
  85. package/highlevel/methods/files/download-iterable.test.d.cts +1 -0
  86. package/highlevel/methods/files/download-iterable.test.d.ts +1 -0
  87. package/highlevel/methods/files/download-stream.cjs +5 -6
  88. package/highlevel/methods/files/download-stream.js +5 -6
  89. package/highlevel/methods/files/normalize-input-media.cjs +25 -4
  90. package/highlevel/methods/files/normalize-input-media.js +25 -4
  91. package/highlevel/methods/forums/create-forum-topic.d.cts +7 -0
  92. package/highlevel/methods/forums/create-forum-topic.d.ts +7 -0
  93. package/highlevel/methods/forums/delete-forum-topic-history.d.cts +1 -1
  94. package/highlevel/methods/forums/delete-forum-topic-history.d.ts +1 -1
  95. package/highlevel/methods/forums/edit-forum-topic.cjs +2 -2
  96. package/highlevel/methods/forums/edit-forum-topic.d.cts +2 -2
  97. package/highlevel/methods/forums/edit-forum-topic.d.ts +2 -2
  98. package/highlevel/methods/forums/edit-forum-topic.js +2 -2
  99. package/highlevel/methods/forums/get-forum-topics-by-id.cjs +5 -1
  100. package/highlevel/methods/forums/get-forum-topics-by-id.d.cts +9 -1
  101. package/highlevel/methods/forums/get-forum-topics-by-id.d.ts +9 -1
  102. package/highlevel/methods/forums/get-forum-topics-by-id.js +5 -1
  103. package/highlevel/methods/forums/get-forum-topics-by-id.test.d.cts +1 -0
  104. package/highlevel/methods/forums/get-forum-topics-by-id.test.d.ts +1 -0
  105. package/highlevel/methods/forums/get-forum-topics.cjs +1 -1
  106. package/highlevel/methods/forums/get-forum-topics.js +1 -1
  107. package/highlevel/methods/forums/toggle-forum-topic-closed.cjs +1 -1
  108. package/highlevel/methods/forums/toggle-forum-topic-closed.d.cts +1 -1
  109. package/highlevel/methods/forums/toggle-forum-topic-closed.d.ts +1 -1
  110. package/highlevel/methods/forums/toggle-forum-topic-closed.js +1 -1
  111. package/highlevel/methods/forums/toggle-forum-topic-pinned.d.cts +1 -1
  112. package/highlevel/methods/forums/toggle-forum-topic-pinned.d.ts +1 -1
  113. package/highlevel/methods/forums/toggle-general-topic-hidden.cjs +3 -3
  114. package/highlevel/methods/forums/toggle-general-topic-hidden.js +4 -4
  115. package/highlevel/methods/gifts/buy-resale-gift.cjs +5 -2
  116. package/highlevel/methods/gifts/buy-resale-gift.d.cts +11 -1
  117. package/highlevel/methods/gifts/buy-resale-gift.d.ts +11 -1
  118. package/highlevel/methods/gifts/buy-resale-gift.js +5 -2
  119. package/highlevel/methods/messages/forward-messages.cjs +1 -0
  120. package/highlevel/methods/messages/forward-messages.d.cts +2 -0
  121. package/highlevel/methods/messages/forward-messages.d.ts +2 -0
  122. package/highlevel/methods/messages/forward-messages.js +1 -0
  123. package/highlevel/methods/messages/normalize-rich-message.cjs +3 -0
  124. package/highlevel/methods/messages/normalize-rich-message.js +3 -0
  125. package/highlevel/methods/messages/send-common.d.cts +7 -1
  126. package/highlevel/methods/messages/send-common.d.ts +7 -1
  127. package/highlevel/methods/messages/send-text.cjs +70 -35
  128. package/highlevel/methods/messages/send-text.js +70 -35
  129. package/highlevel/methods/messages/send-typing.d.cts +3 -3
  130. package/highlevel/methods/messages/send-typing.d.ts +3 -3
  131. package/highlevel/methods/messages/set-typing.cjs +1 -1
  132. package/highlevel/methods/messages/set-typing.d.cts +2 -2
  133. package/highlevel/methods/messages/set-typing.d.ts +2 -2
  134. package/highlevel/methods/messages/set-typing.js +1 -1
  135. package/highlevel/methods/users/resolve-peer.cjs +11 -1
  136. package/highlevel/methods/users/resolve-peer.js +11 -1
  137. package/highlevel/methods.d.cts +19 -0
  138. package/highlevel/methods.d.ts +19 -0
  139. package/highlevel/storage/service/peers.cjs +25 -0
  140. package/highlevel/storage/service/peers.js +25 -0
  141. package/highlevel/storage/service/peers.test.d.cts +1 -0
  142. package/highlevel/storage/service/peers.test.d.ts +1 -0
  143. package/highlevel/types/bots/keyboards/builder.cjs +5 -5
  144. package/highlevel/types/bots/keyboards/builder.d.cts +8 -9
  145. package/highlevel/types/bots/keyboards/builder.d.ts +8 -9
  146. package/highlevel/types/bots/keyboards/builder.js +5 -5
  147. package/highlevel/types/bots/keyboards/factories.cjs +51 -103
  148. package/highlevel/types/bots/keyboards/factories.d.cts +58 -89
  149. package/highlevel/types/bots/keyboards/factories.d.ts +58 -89
  150. package/highlevel/types/bots/keyboards/factories.js +51 -103
  151. package/highlevel/types/bots/keyboards/index.d.cts +3 -3
  152. package/highlevel/types/bots/keyboards/index.d.ts +3 -3
  153. package/highlevel/types/bots/keyboards/normalize.cjs +131 -0
  154. package/highlevel/types/bots/keyboards/normalize.d.cts +10 -0
  155. package/highlevel/types/bots/keyboards/normalize.d.ts +10 -0
  156. package/highlevel/types/bots/keyboards/normalize.js +126 -0
  157. package/highlevel/types/bots/keyboards/types.d.cts +160 -4
  158. package/highlevel/types/bots/keyboards/types.d.ts +160 -4
  159. package/highlevel/types/conversation.cjs +8 -0
  160. package/highlevel/types/conversation.d.cts +1 -0
  161. package/highlevel/types/conversation.d.ts +1 -0
  162. package/highlevel/types/conversation.js +10 -2
  163. package/highlevel/types/conversation.test.d.cts +1 -0
  164. package/highlevel/types/conversation.test.d.ts +1 -0
  165. package/highlevel/types/messages/dialog.cjs +8 -1
  166. package/highlevel/types/messages/dialog.d.cts +3 -0
  167. package/highlevel/types/messages/dialog.d.ts +3 -0
  168. package/highlevel/types/messages/dialog.js +8 -1
  169. package/highlevel/types/messages/dialog.test.d.cts +1 -0
  170. package/highlevel/types/messages/dialog.test.d.ts +1 -0
  171. package/highlevel/types/messages/ephemeral-message.cjs +135 -0
  172. package/highlevel/types/messages/ephemeral-message.d.cts +75 -0
  173. package/highlevel/types/messages/ephemeral-message.d.ts +75 -0
  174. package/highlevel/types/messages/ephemeral-message.js +130 -0
  175. package/highlevel/types/messages/index.d.cts +1 -0
  176. package/highlevel/types/messages/index.d.ts +1 -0
  177. package/highlevel/types/messages/message-action.cjs +14 -1
  178. package/highlevel/types/messages/message-action.d.cts +18 -1
  179. package/highlevel/types/messages/message-action.d.ts +18 -1
  180. package/highlevel/types/messages/message-action.js +14 -1
  181. package/highlevel/types/messages/message.cjs +7 -2
  182. package/highlevel/types/messages/message.d.cts +2 -2
  183. package/highlevel/types/messages/message.d.ts +2 -2
  184. package/highlevel/types/messages/message.js +8 -3
  185. package/highlevel/types/messages/replied-message.cjs +5 -1
  186. package/highlevel/types/messages/replied-message.d.cts +5 -1
  187. package/highlevel/types/messages/replied-message.d.ts +5 -1
  188. package/highlevel/types/messages/replied-message.js +5 -1
  189. package/highlevel/types/messages/rich/inner.cjs +37 -0
  190. package/highlevel/types/messages/rich/inner.d.cts +19 -0
  191. package/highlevel/types/messages/rich/inner.d.ts +19 -0
  192. package/highlevel/types/messages/rich/inner.js +37 -0
  193. package/highlevel/types/peers/chat.cjs +23 -3
  194. package/highlevel/types/peers/chat.d.cts +8 -3
  195. package/highlevel/types/peers/chat.d.ts +8 -3
  196. package/highlevel/types/peers/chat.js +24 -4
  197. package/highlevel/types/peers/community-peer.cjs +60 -0
  198. package/highlevel/types/peers/community-peer.d.cts +37 -0
  199. package/highlevel/types/peers/community-peer.d.ts +37 -0
  200. package/highlevel/types/peers/community-peer.js +55 -0
  201. package/highlevel/types/peers/full-chat.cjs +24 -5
  202. package/highlevel/types/peers/full-chat.d.cts +7 -0
  203. package/highlevel/types/peers/full-chat.d.ts +7 -0
  204. package/highlevel/types/peers/full-chat.js +24 -5
  205. package/highlevel/types/peers/index.d.cts +1 -0
  206. package/highlevel/types/peers/index.d.ts +1 -0
  207. package/highlevel/types/peers/peer.cjs +2 -0
  208. package/highlevel/types/peers/peer.js +2 -0
  209. package/highlevel/types/peers/typing-status.d.cts +4 -1
  210. package/highlevel/types/peers/typing-status.d.ts +4 -1
  211. package/highlevel/types/peers/user.cjs +6 -0
  212. package/highlevel/types/peers/user.d.cts +2 -0
  213. package/highlevel/types/peers/user.d.ts +2 -0
  214. package/highlevel/types/peers/user.js +6 -0
  215. package/highlevel/types/updates/delete-ephemeral-messages-update.cjs +27 -0
  216. package/highlevel/types/updates/delete-ephemeral-messages-update.d.cts +15 -0
  217. package/highlevel/types/updates/delete-ephemeral-messages-update.d.ts +15 -0
  218. package/highlevel/types/updates/delete-ephemeral-messages-update.js +22 -0
  219. package/highlevel/types/updates/ephemeral-callback-query.cjs +69 -0
  220. package/highlevel/types/updates/ephemeral-callback-query.d.cts +44 -0
  221. package/highlevel/types/updates/ephemeral-callback-query.d.ts +44 -0
  222. package/highlevel/types/updates/ephemeral-callback-query.js +64 -0
  223. package/highlevel/types/updates/index.d.cts +16 -2
  224. package/highlevel/types/updates/index.d.ts +16 -2
  225. package/highlevel/types/updates/parse-update.cjs +12 -1
  226. package/highlevel/types/updates/parse-update.js +12 -1
  227. package/highlevel/types/updates/user-typing-update.cjs +18 -0
  228. package/highlevel/types/updates/user-typing-update.d.cts +9 -0
  229. package/highlevel/types/updates/user-typing-update.d.ts +9 -0
  230. package/highlevel/types/updates/user-typing-update.js +18 -0
  231. package/highlevel/updates/manager.cjs +71 -41
  232. package/highlevel/updates/manager.d.cts +1 -0
  233. package/highlevel/updates/manager.d.ts +1 -0
  234. package/highlevel/updates/manager.js +71 -41
  235. package/highlevel/updates/manager.test.d.cts +1 -0
  236. package/highlevel/updates/manager.test.d.ts +1 -0
  237. package/highlevel/utils/stream-utils.cjs +8 -4
  238. package/highlevel/utils/stream-utils.js +8 -4
  239. package/highlevel/utils/stream-utils.test.d.cts +1 -0
  240. package/highlevel/utils/stream-utils.test.d.ts +1 -0
  241. package/highlevel/utils/walk-page-blocks.cjs +9 -0
  242. package/highlevel/utils/walk-page-blocks.js +9 -0
  243. package/index.cjs +10 -0
  244. package/index.js +11 -1
  245. package/methods.cjs +33 -0
  246. package/methods.js +33 -0
  247. package/network/client.cjs +4 -3
  248. package/network/client.d.cts +1 -0
  249. package/network/client.d.ts +1 -0
  250. package/network/client.js +4 -3
  251. package/network/middlewares/flood-waiter.cjs +2 -2
  252. package/network/middlewares/flood-waiter.js +2 -2
  253. package/network/middlewares/internal-errors.cjs +1 -1
  254. package/network/middlewares/internal-errors.js +1 -1
  255. package/network/middlewares/media-throttle.cjs +1 -1
  256. package/network/middlewares/media-throttle.js +1 -1
  257. package/network/mtproto-session.cjs +9 -2
  258. package/network/mtproto-session.d.cts +3 -1
  259. package/network/mtproto-session.d.ts +3 -1
  260. package/network/mtproto-session.js +9 -2
  261. package/network/mtproxy/index.cjs +4 -3
  262. package/network/mtproxy/index.d.cts +2 -2
  263. package/network/mtproxy/index.d.ts +2 -2
  264. package/network/mtproxy/index.js +4 -3
  265. package/network/network-manager.cjs +44 -16
  266. package/network/network-manager.d.cts +10 -3
  267. package/network/network-manager.d.ts +10 -3
  268. package/network/network-manager.js +45 -17
  269. package/network/network-manager.test.d.cts +1 -0
  270. package/network/network-manager.test.d.ts +1 -0
  271. package/network/persistent-connection.cjs +10 -2
  272. package/network/persistent-connection.js +10 -2
  273. package/network/session-connection.cjs +15 -6
  274. package/network/session-connection.js +15 -6
  275. package/network/session-connection.test.d.cts +1 -0
  276. package/network/session-connection.test.d.ts +1 -0
  277. package/network/transports/abstract.cjs +16 -0
  278. package/network/transports/abstract.d.cts +8 -2
  279. package/network/transports/abstract.d.ts +8 -2
  280. package/network/transports/abstract.js +17 -1
  281. package/network/transports/obfuscated.cjs +3 -1
  282. package/network/transports/obfuscated.js +3 -1
  283. package/package.json +6 -6
  284. package/tl/api-schema.json +1 -1
  285. package/tl/binary/reader.cjs +221 -103
  286. package/tl/binary/reader.js +221 -103
  287. package/tl/binary/writer.cjs +693 -277
  288. package/tl/binary/writer.js +693 -277
  289. package/tl/compat/reader.cjs +93 -0
  290. package/tl/compat/reader.js +93 -0
  291. package/tl/index.d.cts +12529 -4762
  292. package/tl/index.d.ts +12529 -4762
  293. package/tl/inner-tl.cjs +90 -24
  294. package/tl/inner-tl.js +90 -24
  295. package/tl/raw-errors.json +1 -1
  296. package/tl/rpc-error.test.d.cts +1 -0
  297. package/tl/rpc-error.test.d.ts +1 -0
  298. package/utils/abort-signal.cjs +1 -12
  299. package/utils/abort-signal.js +1 -12
  300. package/utils/abort-signal.test.d.cts +1 -0
  301. package/utils/abort-signal.test.d.ts +1 -0
  302. package/utils/binary/compat.cjs +189 -29
  303. package/utils/binary/compat.js +189 -29
  304. package/utils/early-timer.cjs +3 -11
  305. package/utils/early-timer.js +3 -11
  306. package/utils/early-timer.test.d.cts +1 -0
  307. package/utils/early-timer.test.d.ts +1 -0
  308. package/utils/function-utils.cjs +9 -4
  309. package/utils/function-utils.js +9 -4
  310. package/utils/links/bots.cjs +10 -2
  311. package/utils/links/bots.js +10 -2
  312. package/utils/peer-utils.cjs +8 -0
  313. package/utils/peer-utils.js +8 -0
@@ -0,0 +1,10 @@
1
+ import { tl } from '../../../../tl/index.js';
2
+ import { BotKeyboardButton, BotKeyboardButtonStyle, InputInlineKeyboardButton, InputReplyKeyboardButton } from './types.js';
3
+ /** @internal */
4
+ export declare function _toRichButtonStyle(style?: BotKeyboardButtonStyle): tl.RawRichButtonStyle | undefined;
5
+ /** @internal */
6
+ export declare function _toInlineButtonType(btn: BotKeyboardButton): tl.TypeInlineButtonType;
7
+ /** @internal */
8
+ export declare function _toInlineButton(btn: InputInlineKeyboardButton): tl.TypeKeyboardInlineButton;
9
+ /** @internal */
10
+ export declare function _toReplyButton(btn: InputReplyKeyboardButton): tl.TypeKeyboardButton;
@@ -0,0 +1,126 @@
1
+ import { MtArgumentError } from "../../../../types/errors.js";
2
+ function toKeyboardStyle(style) {
3
+ if (!style) return void 0;
4
+ return {
5
+ _: "keyboardButtonStyle",
6
+ bgPrimary: style.bgPrimary,
7
+ bgDanger: style.bgDanger,
8
+ bgSuccess: style.bgSuccess,
9
+ icon: style.icon
10
+ };
11
+ }
12
+ function _toRichButtonStyle(style) {
13
+ if (!style) return void 0;
14
+ return {
15
+ _: "richButtonStyle",
16
+ bgPrimary: style.bgPrimary,
17
+ bgDanger: style.bgDanger,
18
+ bgSuccess: style.bgSuccess,
19
+ link: style.link
20
+ };
21
+ }
22
+ function _toInlineButtonType(btn) {
23
+ switch (btn.type) {
24
+ case "url":
25
+ return { _: "inlineButtonTypeUrl", url: btn.url };
26
+ case "webview":
27
+ return { _: "inlineButtonTypeWebView", url: btn.url };
28
+ case "callback":
29
+ return { _: "inlineButtonTypeCallback", data: btn.data, requiresPassword: btn.requiresPassword };
30
+ case "switch_inline":
31
+ return {
32
+ _: "inlineButtonTypeSwitchInline",
33
+ samePeer: btn.currentChat,
34
+ query: btn.query ?? "",
35
+ peerTypes: btn.peerTypes
36
+ };
37
+ case "game":
38
+ return { _: "inlineButtonTypeGame" };
39
+ case "pay":
40
+ return { _: "inlineButtonTypeBuy" };
41
+ case "url_auth":
42
+ return {
43
+ _: "inputInlineButtonTypeUrlAuth",
44
+ url: btn.url,
45
+ fwdText: btn.fwdText,
46
+ requestWriteAccess: btn.requestWriteAccess,
47
+ bot: btn.bot ?? { _: "inputUserSelf" }
48
+ };
49
+ case "user_profile":
50
+ return { _: "inputInlineButtonTypeUserProfile", userId: btn.user };
51
+ case "copy":
52
+ return { _: "inlineButtonTypeCopy", copyText: btn.copyText ?? btn.text };
53
+ case "disabled":
54
+ return { _: "inlineButtonTypeDisabled" };
55
+ default:
56
+ throw new MtArgumentError(`"${btn.type}" buttons can only be used in reply keyboards`);
57
+ }
58
+ }
59
+ function toReplyButtonType(btn) {
60
+ switch (btn.type) {
61
+ case "text":
62
+ return { _: "buttonTypeDefault" };
63
+ case "request_contact":
64
+ return { _: "buttonTypeRequestPhone" };
65
+ case "request_geo":
66
+ return { _: "buttonTypeRequestGeoLocation" };
67
+ case "request_poll":
68
+ return { _: "buttonTypeRequestPoll", quiz: btn.quiz };
69
+ case "webview":
70
+ return { _: "buttonTypeSimpleWebView", url: btn.url };
71
+ case "request_peer":
72
+ if (btn.nameRequested || btn.usernameRequested || btn.photoRequested) {
73
+ return {
74
+ _: "inputButtonTypeRequestPeer",
75
+ nameRequested: btn.nameRequested,
76
+ usernameRequested: btn.usernameRequested,
77
+ photoRequested: btn.photoRequested,
78
+ buttonId: btn.buttonId,
79
+ peerType: btn.peerType,
80
+ maxQuantity: btn.count ?? 1
81
+ };
82
+ }
83
+ return {
84
+ _: "buttonTypeRequestPeer",
85
+ buttonId: btn.buttonId,
86
+ peerType: btn.peerType,
87
+ maxQuantity: btn.count ?? 1
88
+ };
89
+ default:
90
+ throw new MtArgumentError(`"${btn.type}" buttons can only be used in inline keyboards`);
91
+ }
92
+ }
93
+ function _toInlineButton(btn) {
94
+ if ("_" in btn) {
95
+ if (btn._ !== "keyboardInlineButton") {
96
+ throw new MtArgumentError("reply keyboard buttons cannot be used in inline keyboards");
97
+ }
98
+ return btn;
99
+ }
100
+ return {
101
+ _: "keyboardInlineButton",
102
+ text: btn.text,
103
+ type: _toInlineButtonType(btn),
104
+ style: toKeyboardStyle(btn.style)
105
+ };
106
+ }
107
+ function _toReplyButton(btn) {
108
+ if ("_" in btn) {
109
+ if (btn._ !== "keyboardButton") {
110
+ throw new MtArgumentError("inline keyboard buttons cannot be used in reply keyboards");
111
+ }
112
+ return btn;
113
+ }
114
+ return {
115
+ _: "keyboardButton",
116
+ text: btn.text,
117
+ type: toReplyButtonType(btn),
118
+ style: toKeyboardStyle(btn.style)
119
+ };
120
+ }
121
+ export {
122
+ _toInlineButton,
123
+ _toInlineButtonType,
124
+ _toReplyButton,
125
+ _toRichButtonStyle
126
+ };
@@ -1,13 +1,166 @@
1
1
  import { tl } from '../../../../tl/index.js';
2
+ /**
3
+ * Style of a bot keyboard button.
4
+ *
5
+ * Note that not every field is supported everywhere: {@link icon} is only
6
+ * used in keyboards, and {@link link} is only used in rich messages.
7
+ * Unsupported fields are silently dropped.
8
+ */
9
+ export interface BotKeyboardButtonStyle {
10
+ /** Render the button with the primary background color */
11
+ bgPrimary?: boolean;
12
+ /** Render the button with the "danger" background color */
13
+ bgDanger?: boolean;
14
+ /** Render the button with the "success" background color */
15
+ bgSuccess?: boolean;
16
+ /** Custom emoji to be shown on the button (keyboards only) */
17
+ icon?: tl.Long;
18
+ /** Render the button as a link (rich messages only) */
19
+ link?: boolean;
20
+ }
21
+ interface BotKeyboardButtonBase {
22
+ /** Text of the button */
23
+ text: string;
24
+ /** Style of the button */
25
+ style?: BotKeyboardButtonStyle;
26
+ }
27
+ /** A text-only button (reply keyboards only) */
28
+ export interface TextButton extends BotKeyboardButtonBase {
29
+ readonly type: 'text';
30
+ }
31
+ /** A button requesting the user's phone number (reply keyboards only) */
32
+ export interface RequestContactButton extends BotKeyboardButtonBase {
33
+ readonly type: 'request_contact';
34
+ }
35
+ /** A button requesting the user's geolocation (reply keyboards only) */
36
+ export interface RequestGeoButton extends BotKeyboardButtonBase {
37
+ readonly type: 'request_geo';
38
+ }
39
+ /** A button requesting the user to create a poll (reply keyboards only) */
40
+ export interface RequestPollButton extends BotKeyboardButtonBase {
41
+ readonly type: 'request_poll';
42
+ /** If set, only quiz polls can be sent */
43
+ quiz?: boolean;
44
+ }
45
+ /** A button requesting the user to choose a peer (reply keyboards only) */
46
+ export interface RequestPeerButton extends BotKeyboardButtonBase {
47
+ readonly type: 'request_peer';
48
+ /** ID of the button, later passed to the service message */
49
+ buttonId: number;
50
+ /** Peer type, along with filters */
51
+ peerType: tl.TypeRequestPeerType;
52
+ /**
53
+ * Maximum number of peers to be selected
54
+ *
55
+ * @default 1
56
+ */
57
+ count?: number;
58
+ /** Whether to request the name of the peer */
59
+ nameRequested?: boolean;
60
+ /** Whether to request the username of the peer */
61
+ usernameRequested?: boolean;
62
+ /** Whether to request the photo of the peer */
63
+ photoRequested?: boolean;
64
+ }
65
+ /** A button opening a webview. Usable in both inline and reply keyboards */
66
+ export interface WebViewButton extends BotKeyboardButtonBase {
67
+ readonly type: 'webview';
68
+ /** URL of the webview */
69
+ url: string;
70
+ }
71
+ /** A button opening a link */
72
+ export interface UrlButton extends BotKeyboardButtonBase {
73
+ readonly type: 'url';
74
+ /** URL to open */
75
+ url: string;
76
+ }
77
+ /** A button sending a callback query to the bot */
78
+ export interface CallbackButton extends BotKeyboardButtonBase {
79
+ readonly type: 'callback';
80
+ /** Callback data (1-64 bytes) */
81
+ data: Uint8Array;
82
+ /** Whether the user should verify their identity by entering their 2FA password */
83
+ requiresPassword?: boolean;
84
+ }
85
+ /** A button prompting the user to switch to inline mode */
86
+ export interface SwitchInlineButton extends BotKeyboardButtonBase {
87
+ readonly type: 'switch_inline';
88
+ /** Inline query (can be empty) */
89
+ query?: string;
90
+ /** Whether to insert the query in the current chat instead of prompting for one */
91
+ currentChat?: boolean;
92
+ /** Types of the peers that can be chosen by the user */
93
+ peerTypes?: tl.TypeInlineQueryPeerType[];
94
+ }
95
+ /** A button starting a game. Must be the first button in the first row */
96
+ export interface GameButton extends BotKeyboardButtonBase {
97
+ readonly type: 'game';
98
+ }
99
+ /** A button paying for a product. Must be the first button in the first row */
100
+ export interface PayButton extends BotKeyboardButtonBase {
101
+ readonly type: 'pay';
102
+ }
103
+ /** A button authorizing the user on a website */
104
+ export interface UrlAuthButton extends BotKeyboardButtonBase {
105
+ readonly type: 'url_auth';
106
+ /** Authorization URL */
107
+ url: string;
108
+ /** Button label when forwarded */
109
+ fwdText?: string;
110
+ /** Whether to request the permission for the bot to send messages to the user */
111
+ requestWriteAccess?: boolean;
112
+ /**
113
+ * Bot which will be used for user authorization.
114
+ *
115
+ * @default current bot
116
+ */
117
+ bot?: tl.TypeInputUser;
118
+ }
119
+ /** A button opening a user's profile */
120
+ export interface UserProfileButton extends BotKeyboardButtonBase {
121
+ readonly type: 'user_profile';
122
+ /** User whose profile should be opened */
123
+ user: tl.TypeInputUser;
124
+ }
125
+ /** A button copying text to the user's clipboard */
126
+ export interface CopyButton extends BotKeyboardButtonBase {
127
+ readonly type: 'copy';
128
+ /** Text to be copied (defaults to the button text) */
129
+ copyText?: string;
130
+ }
131
+ /** A button that does nothing when pressed */
132
+ export interface DisabledButton extends BotKeyboardButtonBase {
133
+ readonly type: 'disabled';
134
+ }
135
+ /** A button usable in reply keyboards */
136
+ export type ReplyBotKeyboardButton = TextButton | RequestContactButton | RequestGeoButton | RequestPollButton | RequestPeerButton | WebViewButton;
137
+ /** A button usable in inline keyboards (and in rich messages) */
138
+ export type InlineBotKeyboardButton = WebViewButton | UrlButton | CallbackButton | SwitchInlineButton | GameButton | PayButton | UrlAuthButton | UserProfileButton | CopyButton | DisabledButton;
139
+ /** A bot keyboard button */
140
+ export type BotKeyboardButton = ReplyBotKeyboardButton | InlineBotKeyboardButton;
141
+ /**
142
+ * A button accepted by the reply keyboard factories.
143
+ *
144
+ * Raw TL objects are passed through as-is.
145
+ */
146
+ export type InputReplyKeyboardButton = ReplyBotKeyboardButton | tl.TypeKeyboardButton;
147
+ /**
148
+ * A button accepted by the inline keyboard and rich message factories.
149
+ *
150
+ * Raw TL objects are passed through as-is.
151
+ */
152
+ export type InputInlineKeyboardButton = InlineBotKeyboardButton | tl.TypeKeyboardInlineButton;
153
+ /** A button accepted by any of the keyboard factories */
154
+ export type InputBotKeyboardButton = InputReplyKeyboardButton | InputInlineKeyboardButton;
2
155
  /**
3
156
  * Reply keyboard markup
4
157
  */
5
- export interface ReplyKeyboardMarkup extends Omit<tl.RawReplyKeyboardMarkup, '_' | 'rows'> {
158
+ export interface ReplyKeyboardMarkup<Button = InputReplyKeyboardButton> extends Omit<tl.RawReplyKeyboardMarkup, '_' | 'rows'> {
6
159
  readonly type: 'reply';
7
160
  /**
8
161
  * Two-dimensional array of buttons
9
162
  */
10
- readonly buttons: tl.TypeKeyboardButton[][];
163
+ readonly buttons: Button[][];
11
164
  }
12
165
  /**
13
166
  * Hide previously sent bot keyboard
@@ -24,11 +177,14 @@ export interface ReplyKeyboardForceReply extends Omit<tl.RawReplyKeyboardForceRe
24
177
  /**
25
178
  * Inline keyboard markup
26
179
  */
27
- export interface InlineKeyboardMarkup {
180
+ export interface InlineKeyboardMarkup<Button = InputInlineKeyboardButton> extends Omit<tl.RawReplyInlineMarkup, '_' | 'rows'> {
28
181
  readonly type: 'inline';
29
182
  /**
30
183
  * Two-dimensional array of buttons
31
184
  */
32
- readonly buttons: tl.TypeKeyboardButton[][];
185
+ readonly buttons: Button[][];
33
186
  }
34
187
  export type ReplyMarkup = ReplyKeyboardMarkup | ReplyKeyboardHide | ReplyKeyboardForceReply | InlineKeyboardMarkup | tl.TypeReplyMarkup;
188
+ /** Reply markup as parsed from an existing message */
189
+ export type ParsedReplyMarkup = ReplyKeyboardMarkup<tl.TypeKeyboardButton> | ReplyKeyboardHide | ReplyKeyboardForceReply | InlineKeyboardMarkup<tl.TypeKeyboardInlineButton>;
190
+ export {};
@@ -1,13 +1,166 @@
1
1
  import { tl } from '../../../../tl/index.js';
2
+ /**
3
+ * Style of a bot keyboard button.
4
+ *
5
+ * Note that not every field is supported everywhere: {@link icon} is only
6
+ * used in keyboards, and {@link link} is only used in rich messages.
7
+ * Unsupported fields are silently dropped.
8
+ */
9
+ export interface BotKeyboardButtonStyle {
10
+ /** Render the button with the primary background color */
11
+ bgPrimary?: boolean;
12
+ /** Render the button with the "danger" background color */
13
+ bgDanger?: boolean;
14
+ /** Render the button with the "success" background color */
15
+ bgSuccess?: boolean;
16
+ /** Custom emoji to be shown on the button (keyboards only) */
17
+ icon?: tl.Long;
18
+ /** Render the button as a link (rich messages only) */
19
+ link?: boolean;
20
+ }
21
+ interface BotKeyboardButtonBase {
22
+ /** Text of the button */
23
+ text: string;
24
+ /** Style of the button */
25
+ style?: BotKeyboardButtonStyle;
26
+ }
27
+ /** A text-only button (reply keyboards only) */
28
+ export interface TextButton extends BotKeyboardButtonBase {
29
+ readonly type: 'text';
30
+ }
31
+ /** A button requesting the user's phone number (reply keyboards only) */
32
+ export interface RequestContactButton extends BotKeyboardButtonBase {
33
+ readonly type: 'request_contact';
34
+ }
35
+ /** A button requesting the user's geolocation (reply keyboards only) */
36
+ export interface RequestGeoButton extends BotKeyboardButtonBase {
37
+ readonly type: 'request_geo';
38
+ }
39
+ /** A button requesting the user to create a poll (reply keyboards only) */
40
+ export interface RequestPollButton extends BotKeyboardButtonBase {
41
+ readonly type: 'request_poll';
42
+ /** If set, only quiz polls can be sent */
43
+ quiz?: boolean;
44
+ }
45
+ /** A button requesting the user to choose a peer (reply keyboards only) */
46
+ export interface RequestPeerButton extends BotKeyboardButtonBase {
47
+ readonly type: 'request_peer';
48
+ /** ID of the button, later passed to the service message */
49
+ buttonId: number;
50
+ /** Peer type, along with filters */
51
+ peerType: tl.TypeRequestPeerType;
52
+ /**
53
+ * Maximum number of peers to be selected
54
+ *
55
+ * @default 1
56
+ */
57
+ count?: number;
58
+ /** Whether to request the name of the peer */
59
+ nameRequested?: boolean;
60
+ /** Whether to request the username of the peer */
61
+ usernameRequested?: boolean;
62
+ /** Whether to request the photo of the peer */
63
+ photoRequested?: boolean;
64
+ }
65
+ /** A button opening a webview. Usable in both inline and reply keyboards */
66
+ export interface WebViewButton extends BotKeyboardButtonBase {
67
+ readonly type: 'webview';
68
+ /** URL of the webview */
69
+ url: string;
70
+ }
71
+ /** A button opening a link */
72
+ export interface UrlButton extends BotKeyboardButtonBase {
73
+ readonly type: 'url';
74
+ /** URL to open */
75
+ url: string;
76
+ }
77
+ /** A button sending a callback query to the bot */
78
+ export interface CallbackButton extends BotKeyboardButtonBase {
79
+ readonly type: 'callback';
80
+ /** Callback data (1-64 bytes) */
81
+ data: Uint8Array;
82
+ /** Whether the user should verify their identity by entering their 2FA password */
83
+ requiresPassword?: boolean;
84
+ }
85
+ /** A button prompting the user to switch to inline mode */
86
+ export interface SwitchInlineButton extends BotKeyboardButtonBase {
87
+ readonly type: 'switch_inline';
88
+ /** Inline query (can be empty) */
89
+ query?: string;
90
+ /** Whether to insert the query in the current chat instead of prompting for one */
91
+ currentChat?: boolean;
92
+ /** Types of the peers that can be chosen by the user */
93
+ peerTypes?: tl.TypeInlineQueryPeerType[];
94
+ }
95
+ /** A button starting a game. Must be the first button in the first row */
96
+ export interface GameButton extends BotKeyboardButtonBase {
97
+ readonly type: 'game';
98
+ }
99
+ /** A button paying for a product. Must be the first button in the first row */
100
+ export interface PayButton extends BotKeyboardButtonBase {
101
+ readonly type: 'pay';
102
+ }
103
+ /** A button authorizing the user on a website */
104
+ export interface UrlAuthButton extends BotKeyboardButtonBase {
105
+ readonly type: 'url_auth';
106
+ /** Authorization URL */
107
+ url: string;
108
+ /** Button label when forwarded */
109
+ fwdText?: string;
110
+ /** Whether to request the permission for the bot to send messages to the user */
111
+ requestWriteAccess?: boolean;
112
+ /**
113
+ * Bot which will be used for user authorization.
114
+ *
115
+ * @default current bot
116
+ */
117
+ bot?: tl.TypeInputUser;
118
+ }
119
+ /** A button opening a user's profile */
120
+ export interface UserProfileButton extends BotKeyboardButtonBase {
121
+ readonly type: 'user_profile';
122
+ /** User whose profile should be opened */
123
+ user: tl.TypeInputUser;
124
+ }
125
+ /** A button copying text to the user's clipboard */
126
+ export interface CopyButton extends BotKeyboardButtonBase {
127
+ readonly type: 'copy';
128
+ /** Text to be copied (defaults to the button text) */
129
+ copyText?: string;
130
+ }
131
+ /** A button that does nothing when pressed */
132
+ export interface DisabledButton extends BotKeyboardButtonBase {
133
+ readonly type: 'disabled';
134
+ }
135
+ /** A button usable in reply keyboards */
136
+ export type ReplyBotKeyboardButton = TextButton | RequestContactButton | RequestGeoButton | RequestPollButton | RequestPeerButton | WebViewButton;
137
+ /** A button usable in inline keyboards (and in rich messages) */
138
+ export type InlineBotKeyboardButton = WebViewButton | UrlButton | CallbackButton | SwitchInlineButton | GameButton | PayButton | UrlAuthButton | UserProfileButton | CopyButton | DisabledButton;
139
+ /** A bot keyboard button */
140
+ export type BotKeyboardButton = ReplyBotKeyboardButton | InlineBotKeyboardButton;
141
+ /**
142
+ * A button accepted by the reply keyboard factories.
143
+ *
144
+ * Raw TL objects are passed through as-is.
145
+ */
146
+ export type InputReplyKeyboardButton = ReplyBotKeyboardButton | tl.TypeKeyboardButton;
147
+ /**
148
+ * A button accepted by the inline keyboard and rich message factories.
149
+ *
150
+ * Raw TL objects are passed through as-is.
151
+ */
152
+ export type InputInlineKeyboardButton = InlineBotKeyboardButton | tl.TypeKeyboardInlineButton;
153
+ /** A button accepted by any of the keyboard factories */
154
+ export type InputBotKeyboardButton = InputReplyKeyboardButton | InputInlineKeyboardButton;
2
155
  /**
3
156
  * Reply keyboard markup
4
157
  */
5
- export interface ReplyKeyboardMarkup extends Omit<tl.RawReplyKeyboardMarkup, '_' | 'rows'> {
158
+ export interface ReplyKeyboardMarkup<Button = InputReplyKeyboardButton> extends Omit<tl.RawReplyKeyboardMarkup, '_' | 'rows'> {
6
159
  readonly type: 'reply';
7
160
  /**
8
161
  * Two-dimensional array of buttons
9
162
  */
10
- readonly buttons: tl.TypeKeyboardButton[][];
163
+ readonly buttons: Button[][];
11
164
  }
12
165
  /**
13
166
  * Hide previously sent bot keyboard
@@ -24,11 +177,14 @@ export interface ReplyKeyboardForceReply extends Omit<tl.RawReplyKeyboardForceRe
24
177
  /**
25
178
  * Inline keyboard markup
26
179
  */
27
- export interface InlineKeyboardMarkup {
180
+ export interface InlineKeyboardMarkup<Button = InputInlineKeyboardButton> extends Omit<tl.RawReplyInlineMarkup, '_' | 'rows'> {
28
181
  readonly type: 'inline';
29
182
  /**
30
183
  * Two-dimensional array of buttons
31
184
  */
32
- readonly buttons: tl.TypeKeyboardButton[][];
185
+ readonly buttons: Button[][];
33
186
  }
34
187
  export type ReplyMarkup = ReplyKeyboardMarkup | ReplyKeyboardHide | ReplyKeyboardForceReply | InlineKeyboardMarkup | tl.TypeReplyMarkup;
188
+ /** Reply markup as parsed from an existing message */
189
+ export type ParsedReplyMarkup = ReplyKeyboardMarkup<tl.TypeKeyboardButton> | ReplyKeyboardHide | ReplyKeyboardForceReply | InlineKeyboardMarkup<tl.TypeKeyboardInlineButton>;
190
+ export {};
@@ -145,6 +145,10 @@ class Conversation {
145
145
  state.pendingConversations.delete(this._chatId);
146
146
  }
147
147
  state.hasConversations = Boolean(state.pendingConversations.size);
148
+ const error = new errors.MtcuteError("Conversation stopped");
149
+ for (const it of this._queuedNewMessage) this._rejectPending(it, error);
150
+ for (const it of this._pendingEditMessage.values()) this._rejectPending(it, error);
151
+ for (const it of this._pendingRead.values()) this._rejectPending(it, error);
148
152
  this._queuedNewMessage.clear();
149
153
  this._pendingNewMessages.clear();
150
154
  this._pendingEditMessage.clear();
@@ -152,6 +156,10 @@ class Conversation {
152
156
  this._pendingRead.clear();
153
157
  this._started = false;
154
158
  }
159
+ _rejectPending(it, error) {
160
+ if (it.timeout) utils.timers.clearTimeout(it.timeout);
161
+ it.promise.reject(error);
162
+ }
155
163
  _recordMessage(msg, incoming = false) {
156
164
  this._lastMessage = msg.id;
157
165
  if (incoming) this._lastReceivedMessage = msg.id;
@@ -65,6 +65,7 @@ export declare class Conversation {
65
65
  * Stop the conversation
66
66
  */
67
67
  stop(): void;
68
+ private _rejectPending;
68
69
  private _recordMessage;
69
70
  /**
70
71
  * Send a text message to this conversation.
@@ -65,6 +65,7 @@ export declare class Conversation {
65
65
  * Stop the conversation
66
66
  */
67
67
  stop(): void;
68
+ private _rejectPending;
68
69
  private _recordMessage;
69
70
  /**
70
71
  * Send a text message to this conversation.
@@ -1,5 +1,5 @@
1
- import { Deque, AsyncLock, Deferred, timers, unknownToError } from "@fuman/utils";
2
- import { MtArgumentError, MtTimeoutError } from "../../types/errors.js";
1
+ import { Deque, AsyncLock, timers, Deferred, unknownToError } from "@fuman/utils";
2
+ import { MtArgumentError, MtcuteError, MtTimeoutError } from "../../types/errors.js";
3
3
  import { getMarkedPeerId } from "../../utils/peer-utils.js";
4
4
  import { getPeerDialogs } from "../methods/dialogs/get-peer-dialogs.js";
5
5
  import { readHistory } from "../methods/messages/read-history.js";
@@ -138,6 +138,10 @@ class Conversation {
138
138
  state.pendingConversations.delete(this._chatId);
139
139
  }
140
140
  state.hasConversations = Boolean(state.pendingConversations.size);
141
+ const error = new MtcuteError("Conversation stopped");
142
+ for (const it of this._queuedNewMessage) this._rejectPending(it, error);
143
+ for (const it of this._pendingEditMessage.values()) this._rejectPending(it, error);
144
+ for (const it of this._pendingRead.values()) this._rejectPending(it, error);
141
145
  this._queuedNewMessage.clear();
142
146
  this._pendingNewMessages.clear();
143
147
  this._pendingEditMessage.clear();
@@ -145,6 +149,10 @@ class Conversation {
145
149
  this._pendingRead.clear();
146
150
  this._started = false;
147
151
  }
152
+ _rejectPending(it, error) {
153
+ if (it.timeout) timers.clearTimeout(it.timeout);
154
+ it.promise.reject(error);
155
+ }
148
156
  _recordMessage(msg, incoming = false) {
149
157
  this._lastMessage = msg.id;
150
158
  if (incoming) this._lastReceivedMessage = msg.id;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -135,10 +135,17 @@ class Dialog {
135
135
  /**
136
136
  * Whether this dialog is muted.
137
137
  *
138
+ * Accounts for both the `silent` flag and the `muteUntil` timestamp
139
+ * (a peer muted until a future date is considered muted).
140
+ *
138
141
  * If `null`, the default account-level setting should be used.
139
142
  */
140
143
  get isMuted() {
141
- return this.raw.notifySettings.silent ?? null;
144
+ const { silent, muteUntil } = this.raw.notifySettings;
145
+ if (muteUntil !== void 0) {
146
+ return muteUntil > Date.now() / 1e3;
147
+ }
148
+ return silent ?? null;
142
149
  }
143
150
  /**
144
151
  * Whether this dialog is archived
@@ -60,6 +60,9 @@ export declare class Dialog {
60
60
  /**
61
61
  * Whether this dialog is muted.
62
62
  *
63
+ * Accounts for both the `silent` flag and the `muteUntil` timestamp
64
+ * (a peer muted until a future date is considered muted).
65
+ *
63
66
  * If `null`, the default account-level setting should be used.
64
67
  */
65
68
  get isMuted(): boolean | null;
@@ -60,6 +60,9 @@ export declare class Dialog {
60
60
  /**
61
61
  * Whether this dialog is muted.
62
62
  *
63
+ * Accounts for both the `silent` flag and the `muteUntil` timestamp
64
+ * (a peer muted until a future date is considered muted).
65
+ *
63
66
  * If `null`, the default account-level setting should be used.
64
67
  */
65
68
  get isMuted(): boolean | null;
@@ -128,10 +128,17 @@ class Dialog {
128
128
  /**
129
129
  * Whether this dialog is muted.
130
130
  *
131
+ * Accounts for both the `silent` flag and the `muteUntil` timestamp
132
+ * (a peer muted until a future date is considered muted).
133
+ *
131
134
  * If `null`, the default account-level setting should be used.
132
135
  */
133
136
  get isMuted() {
134
- return this.raw.notifySettings.silent ?? null;
137
+ const { silent, muteUntil } = this.raw.notifySettings;
138
+ if (muteUntil !== void 0) {
139
+ return muteUntil > Date.now() / 1e3;
140
+ }
141
+ return silent ?? null;
135
142
  }
136
143
  /**
137
144
  * Whether this dialog is archived
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};