@mtcute/core 0.30.0 → 0.30.2

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 (148) hide show
  1. package/client.cjs +8 -0
  2. package/client.js +8 -0
  3. package/highlevel/client.d.cts +63 -1
  4. package/highlevel/client.d.ts +63 -1
  5. package/highlevel/methods/files/download-iterable.cjs +80 -45
  6. package/highlevel/methods/files/download-iterable.js +80 -45
  7. package/highlevel/methods/files/normalize-input-media.cjs +9 -1
  8. package/highlevel/methods/files/normalize-input-media.js +10 -2
  9. package/highlevel/methods/files/upload-file.cjs +6 -1
  10. package/highlevel/methods/files/upload-file.js +6 -1
  11. package/highlevel/methods/messages/create-rich-streaming-draft.cjs +39 -0
  12. package/highlevel/methods/messages/create-rich-streaming-draft.d.cts +42 -0
  13. package/highlevel/methods/messages/create-rich-streaming-draft.d.ts +42 -0
  14. package/highlevel/methods/messages/create-rich-streaming-draft.js +34 -0
  15. package/highlevel/methods/messages/normalize-rich-message.cjs +168 -0
  16. package/highlevel/methods/messages/normalize-rich-message.d.cts +10 -0
  17. package/highlevel/methods/messages/normalize-rich-message.d.ts +10 -0
  18. package/highlevel/methods/messages/normalize-rich-message.js +163 -0
  19. package/highlevel/methods/messages/send-common.cjs +3 -2
  20. package/highlevel/methods/messages/send-common.d.cts +4 -1
  21. package/highlevel/methods/messages/send-common.d.ts +4 -1
  22. package/highlevel/methods/messages/send-common.js +3 -2
  23. package/highlevel/methods/messages/send-rich-message.cjs +49 -0
  24. package/highlevel/methods/messages/send-rich-message.d.cts +38 -0
  25. package/highlevel/methods/messages/send-rich-message.d.ts +38 -0
  26. package/highlevel/methods/messages/send-rich-message.js +44 -0
  27. package/highlevel/methods.d.cts +3 -0
  28. package/highlevel/methods.d.ts +3 -0
  29. package/highlevel/types/bots/inline-message/factories.cjs +14 -0
  30. package/highlevel/types/bots/inline-message/factories.d.cts +9 -1
  31. package/highlevel/types/bots/inline-message/factories.d.ts +9 -1
  32. package/highlevel/types/bots/inline-message/factories.js +14 -0
  33. package/highlevel/types/bots/inline-message/types.d.cts +17 -1
  34. package/highlevel/types/bots/inline-message/types.d.ts +17 -1
  35. package/highlevel/types/files/utils.d.cts +9 -0
  36. package/highlevel/types/files/utils.d.ts +9 -0
  37. package/highlevel/types/media/input-media/types.d.cts +1 -1
  38. package/highlevel/types/media/input-media/types.d.ts +1 -1
  39. package/highlevel/types/messages/index.d.cts +1 -1
  40. package/highlevel/types/messages/index.d.ts +1 -1
  41. package/highlevel/types/messages/message.cjs +1 -1
  42. package/highlevel/types/messages/message.d.cts +1 -1
  43. package/highlevel/types/messages/message.d.ts +1 -1
  44. package/highlevel/types/messages/message.js +1 -1
  45. package/highlevel/types/messages/rich/index.d.cts +4 -0
  46. package/highlevel/types/messages/rich/index.d.ts +4 -0
  47. package/highlevel/types/messages/rich/inner.cjs +219 -0
  48. package/highlevel/types/messages/rich/inner.d.cts +127 -0
  49. package/highlevel/types/messages/rich/inner.d.ts +127 -0
  50. package/highlevel/types/messages/rich/inner.js +214 -0
  51. package/highlevel/types/messages/{rich-message.cjs → rich/rich-message.cjs} +6 -6
  52. package/highlevel/types/messages/{rich-message.d.cts → rich/rich-message.d.cts} +5 -5
  53. package/highlevel/types/messages/{rich-message.d.ts → rich/rich-message.d.ts} +5 -5
  54. package/highlevel/types/messages/{rich-message.js → rich/rich-message.js} +6 -6
  55. package/highlevel/types/messages/rich/types.d.cts +76 -0
  56. package/highlevel/types/messages/rich/types.d.ts +76 -0
  57. package/highlevel/updates/manager.cjs +10 -169
  58. package/highlevel/updates/manager.js +10 -169
  59. package/highlevel/utils/entities.cjs +176 -0
  60. package/highlevel/utils/entities.d.cts +18 -0
  61. package/highlevel/utils/entities.d.ts +18 -0
  62. package/highlevel/utils/entities.js +177 -1
  63. package/highlevel/utils/index.d.cts +1 -0
  64. package/highlevel/utils/index.d.ts +1 -0
  65. package/highlevel/utils/walk-page-blocks.cjs +164 -0
  66. package/highlevel/utils/walk-page-blocks.d.cts +9 -0
  67. package/highlevel/utils/walk-page-blocks.d.ts +9 -0
  68. package/highlevel/utils/walk-page-blocks.js +159 -0
  69. package/index.cjs +3 -1
  70. package/index.js +3 -1
  71. package/methods.cjs +4 -0
  72. package/methods.js +4 -0
  73. package/network/authorization.cjs +1 -1
  74. package/network/authorization.js +1 -1
  75. package/network/delay-gate.cjs +29 -0
  76. package/network/delay-gate.d.cts +5 -0
  77. package/network/delay-gate.d.ts +5 -0
  78. package/network/delay-gate.js +24 -0
  79. package/network/delay-gate.test.d.cts +1 -0
  80. package/network/delay-gate.test.d.ts +1 -0
  81. package/network/message-id-store.cjs +30 -0
  82. package/network/message-id-store.d.cts +7 -0
  83. package/network/message-id-store.d.ts +7 -0
  84. package/network/message-id-store.js +25 -0
  85. package/network/message-id-store.test.d.cts +1 -0
  86. package/network/message-id-store.test.d.ts +1 -0
  87. package/network/middlewares/bundle.cjs +2 -0
  88. package/network/middlewares/bundle.d.cts +1 -0
  89. package/network/middlewares/bundle.d.ts +1 -0
  90. package/network/middlewares/bundle.js +2 -0
  91. package/network/middlewares/default.cjs +6 -1
  92. package/network/middlewares/default.js +6 -1
  93. package/network/middlewares/flood-waiter.test.d.cts +1 -0
  94. package/network/middlewares/flood-waiter.test.d.ts +1 -0
  95. package/network/middlewares/internal-errors.test.d.cts +1 -0
  96. package/network/middlewares/internal-errors.test.d.ts +1 -0
  97. package/network/middlewares/media-throttle.cjs +65 -0
  98. package/network/middlewares/media-throttle.d.cts +5 -0
  99. package/network/middlewares/media-throttle.d.ts +5 -0
  100. package/network/middlewares/media-throttle.js +60 -0
  101. package/network/middlewares/media-throttle.test.d.cts +1 -0
  102. package/network/middlewares/media-throttle.test.d.ts +1 -0
  103. package/network/middlewares/on-error.test.d.cts +1 -0
  104. package/network/middlewares/on-error.test.d.ts +1 -0
  105. package/network/middlewares/on-method.test.d.cts +1 -0
  106. package/network/middlewares/on-method.test.d.ts +1 -0
  107. package/network/mtproto-session.cjs +9 -2
  108. package/network/mtproto-session.d.cts +5 -2
  109. package/network/mtproto-session.d.ts +5 -2
  110. package/network/mtproto-session.js +9 -2
  111. package/network/mtproxy/_fake-tls.cjs +169 -107
  112. package/network/mtproxy/_fake-tls.js +169 -107
  113. package/network/mtproxy/_fake-tls.test.d.cts +1 -0
  114. package/network/mtproxy/_fake-tls.test.d.ts +1 -0
  115. package/network/multi-session-connection.cjs +7 -0
  116. package/network/multi-session-connection.d.cts +2 -0
  117. package/network/multi-session-connection.d.ts +2 -0
  118. package/network/multi-session-connection.js +7 -0
  119. package/network/network-manager.cjs +7 -1
  120. package/network/network-manager.js +7 -1
  121. package/network/resource-limiter.cjs +60 -0
  122. package/network/resource-limiter.d.cts +11 -0
  123. package/network/resource-limiter.d.ts +11 -0
  124. package/network/resource-limiter.js +55 -0
  125. package/network/resource-limiter.test.d.cts +1 -0
  126. package/network/resource-limiter.test.d.ts +1 -0
  127. package/network/server-salt.cjs +7 -3
  128. package/network/server-salt.d.cts +2 -0
  129. package/network/server-salt.d.ts +2 -0
  130. package/network/server-salt.js +7 -3
  131. package/network/session-connection.cjs +106 -20
  132. package/network/session-connection.d.cts +11 -0
  133. package/network/session-connection.d.ts +11 -0
  134. package/network/session-connection.js +106 -20
  135. package/package.json +1 -1
  136. package/tl/api-schema.json +1 -1
  137. package/tl/binary/reader.cjs +115 -109
  138. package/tl/binary/reader.js +115 -109
  139. package/tl/binary/writer.cjs +243 -245
  140. package/tl/binary/writer.js +243 -245
  141. package/tl/index.d.cts +227 -216
  142. package/tl/index.d.ts +227 -216
  143. package/tl/inner-tl.cjs +3 -1
  144. package/tl/inner-tl.js +3 -1
  145. package/types/utils.d.cts +4 -0
  146. package/types/utils.d.ts +4 -0
  147. package/utils.cjs +4 -0
  148. package/utils.js +5 -1
@@ -0,0 +1,159 @@
1
+ import { assertNever } from "../../types/utils.js";
2
+ function walkRichText(text, visitor) {
3
+ if (!text) return;
4
+ visitor.richText?.(text);
5
+ switch (text._) {
6
+ case "textEmpty":
7
+ case "textPlain":
8
+ case "textEmail":
9
+ case "textPhone":
10
+ case "textImage":
11
+ case "textMath":
12
+ case "textCustomEmoji":
13
+ break;
14
+ case "textBold":
15
+ case "textItalic":
16
+ case "textUnderline":
17
+ case "textStrike":
18
+ case "textFixed":
19
+ case "textUrl":
20
+ case "textSubscript":
21
+ case "textSuperscript":
22
+ case "textMarked":
23
+ case "textAnchor":
24
+ case "textSpoiler":
25
+ case "textMention":
26
+ case "textHashtag":
27
+ case "textBotCommand":
28
+ case "textCashtag":
29
+ case "textAutoUrl":
30
+ case "textAutoEmail":
31
+ case "textAutoPhone":
32
+ case "textBankCard":
33
+ case "textDate":
34
+ case "textMentionName":
35
+ walkRichText(text.text, visitor);
36
+ break;
37
+ case "textConcat":
38
+ for (const child of text.texts) walkRichText(child, visitor);
39
+ break;
40
+ default:
41
+ assertNever();
42
+ }
43
+ }
44
+ function walkPageCaption(caption, visitor) {
45
+ if (!caption) return;
46
+ walkRichText(caption.text, visitor);
47
+ walkRichText(caption.credit, visitor);
48
+ }
49
+ function walkPageBlock(block, visitor) {
50
+ if (!block) return;
51
+ visitor.pageBlock?.(block);
52
+ switch (block._) {
53
+ case "pageBlockUnsupported":
54
+ case "pageBlockDivider":
55
+ case "pageBlockAnchor":
56
+ case "pageBlockMath":
57
+ break;
58
+ case "pageBlockTitle":
59
+ case "pageBlockSubtitle":
60
+ case "pageBlockHeader":
61
+ case "pageBlockSubheader":
62
+ case "pageBlockParagraph":
63
+ case "pageBlockPreformatted":
64
+ case "pageBlockFooter":
65
+ case "pageBlockKicker":
66
+ case "pageBlockThinking":
67
+ case "pageBlockHeading1":
68
+ case "pageBlockHeading2":
69
+ case "pageBlockHeading3":
70
+ case "pageBlockHeading4":
71
+ case "pageBlockHeading5":
72
+ case "pageBlockHeading6":
73
+ walkRichText(block.text, visitor);
74
+ break;
75
+ case "pageBlockAuthorDate":
76
+ walkRichText(block.author, visitor);
77
+ break;
78
+ case "pageBlockList":
79
+ for (const item of block.items) {
80
+ switch (item._) {
81
+ case "pageListItemText":
82
+ walkRichText(item.text, visitor);
83
+ break;
84
+ case "pageListItemBlocks":
85
+ for (const block2 of item.blocks) walkPageBlock(block2, visitor);
86
+ break;
87
+ default:
88
+ assertNever();
89
+ }
90
+ }
91
+ break;
92
+ case "pageBlockOrderedList":
93
+ for (const item of block.items) {
94
+ switch (item._) {
95
+ case "pageListOrderedItemText":
96
+ walkRichText(item.text, visitor);
97
+ break;
98
+ case "pageListOrderedItemBlocks":
99
+ for (const block2 of item.blocks) walkPageBlock(block2, visitor);
100
+ break;
101
+ default:
102
+ assertNever();
103
+ }
104
+ }
105
+ break;
106
+ case "pageBlockBlockquote":
107
+ case "pageBlockPullquote":
108
+ walkRichText(block.text, visitor);
109
+ walkRichText(block.caption, visitor);
110
+ break;
111
+ case "pageBlockPhoto":
112
+ case "pageBlockVideo":
113
+ case "pageBlockEmbed":
114
+ case "pageBlockAudio":
115
+ case "pageBlockMap":
116
+ case "inputPageBlockMap":
117
+ walkPageCaption(block.caption, visitor);
118
+ break;
119
+ case "pageBlockCover":
120
+ walkPageBlock(block.cover, visitor);
121
+ break;
122
+ case "pageBlockEmbedPost":
123
+ for (const child of block.blocks) walkPageBlock(child, visitor);
124
+ walkPageCaption(block.caption, visitor);
125
+ break;
126
+ case "pageBlockCollage":
127
+ case "pageBlockSlideshow":
128
+ for (const child of block.items) walkPageBlock(child, visitor);
129
+ walkPageCaption(block.caption, visitor);
130
+ break;
131
+ case "pageBlockChannel":
132
+ break;
133
+ case "pageBlockTable":
134
+ walkRichText(block.title, visitor);
135
+ for (const row of block.rows) {
136
+ for (const cell of row.cells) walkRichText(cell.text, visitor);
137
+ }
138
+ break;
139
+ case "pageBlockDetails":
140
+ for (const child of block.blocks) walkPageBlock(child, visitor);
141
+ walkRichText(block.title, visitor);
142
+ break;
143
+ case "pageBlockRelatedArticles":
144
+ walkRichText(block.title, visitor);
145
+ break;
146
+ case "pageBlockBlockquoteBlocks":
147
+ for (const child of block.blocks) walkPageBlock(child, visitor);
148
+ walkRichText(block.caption, visitor);
149
+ break;
150
+ default:
151
+ assertNever();
152
+ }
153
+ }
154
+ function walkPageBlocks(blocks, visitor) {
155
+ for (const block of blocks) walkPageBlock(block, visitor);
156
+ }
157
+ export {
158
+ walkPageBlocks
159
+ };
package/index.cjs CHANGED
@@ -56,7 +56,8 @@ const messageReactions = require("./highlevel/types/messages/message-reactions.c
56
56
  const messageReplies = require("./highlevel/types/messages/message-replies.cjs");
57
57
  const message = require("./highlevel/types/messages/message.cjs");
58
58
  const repliedMessage = require("./highlevel/types/messages/replied-message.cjs");
59
- const richMessage = require("./highlevel/types/messages/rich-message.cjs");
59
+ const richMessage = require("./highlevel/types/messages/rich/rich-message.cjs");
60
+ const inner$1 = require("./highlevel/types/messages/rich/inner.cjs");
60
61
  const searchFilters = require("./highlevel/types/messages/search-filters.cjs");
61
62
  const suggestedPost = require("./highlevel/types/messages/suggested-post.cjs");
62
63
  const collectibleInfo = require("./highlevel/types/misc/collectible-info.cjs");
@@ -227,6 +228,7 @@ exports.MessageRepliesInfo = messageReplies.MessageRepliesInfo;
227
228
  exports.Message = message.Message;
228
229
  exports.RepliedMessageInfo = repliedMessage.RepliedMessageInfo;
229
230
  exports.RichMessage = richMessage.RichMessage;
231
+ exports.Rich = inner$1;
230
232
  exports.SearchFilters = searchFilters.SearchFilters;
231
233
  exports.SuggestedPostInfo = suggestedPost.SuggestedPostInfo;
232
234
  exports.CollectibleInfo = collectibleInfo.CollectibleInfo;
package/index.js CHANGED
@@ -49,7 +49,8 @@ import { MessageReactions } from "./highlevel/types/messages/message-reactions.j
49
49
  import { MessageRepliesInfo } from "./highlevel/types/messages/message-replies.js";
50
50
  import { Message } from "./highlevel/types/messages/message.js";
51
51
  import { RepliedMessageInfo } from "./highlevel/types/messages/replied-message.js";
52
- import { RichMessage } from "./highlevel/types/messages/rich-message.js";
52
+ import { RichMessage } from "./highlevel/types/messages/rich/rich-message.js";
53
+ import * as inner$1 from "./highlevel/types/messages/rich/inner.js";
53
54
  import { SearchFilters } from "./highlevel/types/messages/search-filters.js";
54
55
  import { SuggestedPostInfo } from "./highlevel/types/messages/suggested-post.js";
55
56
  import { CollectibleInfo } from "./highlevel/types/misc/collectible-info.js";
@@ -272,6 +273,7 @@ export {
272
273
  RawUpdateInfo,
273
274
  ReactionCount,
274
275
  RepliedMessageInfo,
276
+ inner$1 as Rich,
275
277
  RichMessage,
276
278
  SavedStarGift,
277
279
  SearchFilters,
package/methods.cjs CHANGED
@@ -157,6 +157,7 @@ const iterInviteLinks = require("./highlevel/methods/invite-links/iter-invite-li
157
157
  const revokeInviteLink = require("./highlevel/methods/invite-links/revoke-invite-link.cjs");
158
158
  const appendTodoList = require("./highlevel/methods/messages/append-todo-list.cjs");
159
159
  const closePoll = require("./highlevel/methods/messages/close-poll.cjs");
160
+ const createRichStreamingDraft = require("./highlevel/methods/messages/create-rich-streaming-draft.cjs");
160
161
  const createStreamingDraft = require("./highlevel/methods/messages/create-streaming-draft.cjs");
161
162
  const deleteMessages = require("./highlevel/methods/messages/delete-messages.cjs");
162
163
  const deleteScheduledMessages = require("./highlevel/methods/messages/delete-scheduled-messages.cjs");
@@ -199,6 +200,7 @@ const sendPaidReaction = require("./highlevel/methods/messages/send-paid-reactio
199
200
  const sendQuote = require("./highlevel/methods/messages/send-quote.cjs");
200
201
  const sendReaction = require("./highlevel/methods/messages/send-reaction.cjs");
201
202
  const sendReply = require("./highlevel/methods/messages/send-reply.cjs");
203
+ const sendRichMessage = require("./highlevel/methods/messages/send-rich-message.cjs");
202
204
  const sendScheduled = require("./highlevel/methods/messages/send-scheduled.cjs");
203
205
  const sendText = require("./highlevel/methods/messages/send-text.cjs");
204
206
  const sendTyping = require("./highlevel/methods/messages/send-typing.cjs");
@@ -444,6 +446,7 @@ exports.iterInviteLinks = iterInviteLinks.iterInviteLinks;
444
446
  exports.revokeInviteLink = revokeInviteLink.revokeInviteLink;
445
447
  exports.appendTodoList = appendTodoList.appendTodoList;
446
448
  exports.closePoll = closePoll.closePoll;
449
+ exports.createRichStreamingDraft = createRichStreamingDraft.createRichStreamingDraft;
447
450
  exports.createStreamingDraft = createStreamingDraft.createStreamingDraft;
448
451
  exports.deleteMessages = deleteMessages.deleteMessages;
449
452
  exports.deleteMessagesById = deleteMessages.deleteMessagesById;
@@ -498,6 +501,7 @@ exports.sendReaction = sendReaction.sendReaction;
498
501
  exports.replyMedia = sendReply.replyMedia;
499
502
  exports.replyMediaGroup = sendReply.replyMediaGroup;
500
503
  exports.replyText = sendReply.replyText;
504
+ exports.sendRichMessage = sendRichMessage.sendRichMessage;
501
505
  exports.sendScheduled = sendScheduled.sendScheduled;
502
506
  exports.sendText = sendText.sendText;
503
507
  exports.sendTyping = sendTyping.sendTyping;
package/methods.js CHANGED
@@ -150,6 +150,7 @@ import { iterInviteLinks } from "./highlevel/methods/invite-links/iter-invite-li
150
150
  import { revokeInviteLink } from "./highlevel/methods/invite-links/revoke-invite-link.js";
151
151
  import { appendTodoList } from "./highlevel/methods/messages/append-todo-list.js";
152
152
  import { closePoll } from "./highlevel/methods/messages/close-poll.js";
153
+ import { createRichStreamingDraft } from "./highlevel/methods/messages/create-rich-streaming-draft.js";
153
154
  import { createStreamingDraft } from "./highlevel/methods/messages/create-streaming-draft.js";
154
155
  import { deleteMessages, deleteMessagesById } from "./highlevel/methods/messages/delete-messages.js";
155
156
  import { deleteScheduledMessages } from "./highlevel/methods/messages/delete-scheduled-messages.js";
@@ -192,6 +193,7 @@ import { sendPaidReaction } from "./highlevel/methods/messages/send-paid-reactio
192
193
  import { quoteWithMedia, quoteWithMediaGroup, quoteWithText } from "./highlevel/methods/messages/send-quote.js";
193
194
  import { sendReaction } from "./highlevel/methods/messages/send-reaction.js";
194
195
  import { replyMedia, replyMediaGroup, replyText } from "./highlevel/methods/messages/send-reply.js";
196
+ import { sendRichMessage } from "./highlevel/methods/messages/send-rich-message.js";
195
197
  import { sendScheduled } from "./highlevel/methods/messages/send-scheduled.js";
196
198
  import { sendText } from "./highlevel/methods/messages/send-text.js";
197
199
  import { sendTyping } from "./highlevel/methods/messages/send-typing.js";
@@ -320,6 +322,7 @@ export {
320
322
  createForumTopic,
321
323
  createGroup,
322
324
  createInviteLink,
325
+ createRichStreamingDraft,
323
326
  createStickerSet,
324
327
  createStreamingDraft,
325
328
  createSupergroup,
@@ -520,6 +523,7 @@ export {
520
523
  sendPaidReaction,
521
524
  sendReaction,
522
525
  sendRecoveryCode,
526
+ sendRichMessage,
523
527
  sendScheduled,
524
528
  sendStarGift,
525
529
  sendStarGiftOffer,
@@ -240,7 +240,7 @@ async function doAuthorization(connection, crypto, expiresIn) {
240
240
  }
241
241
  const dhPrime = utils.bigint.fromBytes(serverDhInner.dhPrime);
242
242
  const timeOffset = serverDhInner.serverTime - Math.floor(performance.now() / 1e3);
243
- session.updateTimeOffset(timeOffset);
243
+ session.updateTimeOffset(timeOffset, true);
244
244
  const g = BigInt(serverDhInner.g);
245
245
  const gA = utils.bigint.fromBytes(serverDhInner.gA);
246
246
  checkDhPrime(crypto, log, dhPrime, serverDhInner.g);
@@ -233,7 +233,7 @@ async function doAuthorization(connection, crypto, expiresIn) {
233
233
  }
234
234
  const dhPrime = bigint.fromBytes(serverDhInner.dhPrime);
235
235
  const timeOffset = serverDhInner.serverTime - Math.floor(performance.now() / 1e3);
236
- session.updateTimeOffset(timeOffset);
236
+ session.updateTimeOffset(timeOffset, true);
237
237
  const g = BigInt(serverDhInner.g);
238
238
  const gA = bigint.fromBytes(serverDhInner.gA);
239
239
  checkDhPrime(crypto, log, dhPrime, serverDhInner.g);
@@ -0,0 +1,29 @@
1
+ if (typeof globalThis !== "undefined" && !globalThis._MTCUTE_CJS_DEPRECATION_WARNED) {
2
+ globalThis._MTCUTE_CJS_DEPRECATION_WARNED = true;
3
+ console.warn("[@mtcute/core] CommonJS bundles are deprecated. They will be removed completely in one of the upcoming releases. No support is provided for CommonJS users. Please consider switching to ESM, it's " + (/* @__PURE__ */ new Date()).getFullYear() + " already.");
4
+ console.warn("[@mtcute/core] Learn more about switching to ESM: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c");
5
+ }
6
+ "use strict";
7
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
8
+ const utils = require("@fuman/utils");
9
+ const miscUtils = require("../utils/misc-utils.cjs");
10
+ const INITIAL_DELAY_MS = 50;
11
+ const MIN_DELAY_MS = 3;
12
+ const DELAY_DECAY = 0.8;
13
+ class DownloadDelayGate {
14
+ _nextAt = 0;
15
+ _delay = INITIAL_DELAY_MS;
16
+ wait(signal) {
17
+ const now = performance.now();
18
+ const at = Math.max(now, this._nextAt);
19
+ this._nextAt = at + this._delay;
20
+ this._delay = Math.max(this._delay * DELAY_DECAY, MIN_DELAY_MS);
21
+ const ms = at - now;
22
+ if (ms <= 0) return Promise.resolve();
23
+ if (signal) return miscUtils.sleepWithAbort(ms, signal);
24
+ return new Promise((resolve) => {
25
+ utils.timers.setTimeout(resolve, ms);
26
+ });
27
+ }
28
+ }
29
+ exports.DownloadDelayGate = DownloadDelayGate;
@@ -0,0 +1,5 @@
1
+ export declare class DownloadDelayGate {
2
+ private _nextAt;
3
+ private _delay;
4
+ wait(signal?: AbortSignal): Promise<void>;
5
+ }
@@ -0,0 +1,5 @@
1
+ export declare class DownloadDelayGate {
2
+ private _nextAt;
3
+ private _delay;
4
+ wait(signal?: AbortSignal): Promise<void>;
5
+ }
@@ -0,0 +1,24 @@
1
+ import { timers } from "@fuman/utils";
2
+ import { sleepWithAbort } from "../utils/misc-utils.js";
3
+ const INITIAL_DELAY_MS = 50;
4
+ const MIN_DELAY_MS = 3;
5
+ const DELAY_DECAY = 0.8;
6
+ class DownloadDelayGate {
7
+ _nextAt = 0;
8
+ _delay = INITIAL_DELAY_MS;
9
+ wait(signal) {
10
+ const now = performance.now();
11
+ const at = Math.max(now, this._nextAt);
12
+ this._nextAt = at + this._delay;
13
+ this._delay = Math.max(this._delay * DELAY_DECAY, MIN_DELAY_MS);
14
+ const ms = at - now;
15
+ if (ms <= 0) return Promise.resolve();
16
+ if (signal) return sleepWithAbort(ms, signal);
17
+ return new Promise((resolve) => {
18
+ timers.setTimeout(resolve, ms);
19
+ });
20
+ }
21
+ }
22
+ export {
23
+ DownloadDelayGate
24
+ };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,30 @@
1
+ if (typeof globalThis !== "undefined" && !globalThis._MTCUTE_CJS_DEPRECATION_WARNED) {
2
+ globalThis._MTCUTE_CJS_DEPRECATION_WARNED = true;
3
+ console.warn("[@mtcute/core] CommonJS bundles are deprecated. They will be removed completely in one of the upcoming releases. No support is provided for CommonJS users. Please consider switching to ESM, it's " + (/* @__PURE__ */ new Date()).getFullYear() + " already.");
4
+ console.warn("[@mtcute/core] Learn more about switching to ESM: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c");
5
+ }
6
+ "use strict";
7
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
8
+ const longUtils = require("../utils/long-utils.cjs");
9
+ const sortedArray = require("../utils/sorted-array.cjs");
10
+ const MAX_SAVED_MESSAGE_IDS = 1e3;
11
+ class MessageIdStore {
12
+ _ids = new sortedArray.SortedArray([], longUtils.compareLongs);
13
+ add(msgId) {
14
+ const ids = this._ids;
15
+ if (ids.index(msgId) !== -1) return false;
16
+ if (ids.length >= MAX_SAVED_MESSAGE_IDS && longUtils.compareLongs(ids.raw[0], msgId) > 0) {
17
+ return false;
18
+ }
19
+ ids.insert(msgId);
20
+ if (ids.length > MAX_SAVED_MESSAGE_IDS) ids.raw.shift();
21
+ return true;
22
+ }
23
+ has(msgId) {
24
+ return this._ids.index(msgId) !== -1;
25
+ }
26
+ clear() {
27
+ this._ids.clear();
28
+ }
29
+ }
30
+ exports.MessageIdStore = MessageIdStore;
@@ -0,0 +1,7 @@
1
+ import { default as Long } from 'long';
2
+ export declare class MessageIdStore {
3
+ private _ids;
4
+ add(msgId: Long): boolean;
5
+ has(msgId: Long): boolean;
6
+ clear(): void;
7
+ }
@@ -0,0 +1,7 @@
1
+ import { default as Long } from 'long';
2
+ export declare class MessageIdStore {
3
+ private _ids;
4
+ add(msgId: Long): boolean;
5
+ has(msgId: Long): boolean;
6
+ clear(): void;
7
+ }
@@ -0,0 +1,25 @@
1
+ import { compareLongs } from "../utils/long-utils.js";
2
+ import { SortedArray } from "../utils/sorted-array.js";
3
+ const MAX_SAVED_MESSAGE_IDS = 1e3;
4
+ class MessageIdStore {
5
+ _ids = new SortedArray([], compareLongs);
6
+ add(msgId) {
7
+ const ids = this._ids;
8
+ if (ids.index(msgId) !== -1) return false;
9
+ if (ids.length >= MAX_SAVED_MESSAGE_IDS && compareLongs(ids.raw[0], msgId) > 0) {
10
+ return false;
11
+ }
12
+ ids.insert(msgId);
13
+ if (ids.length > MAX_SAVED_MESSAGE_IDS) ids.raw.shift();
14
+ return true;
15
+ }
16
+ has(msgId) {
17
+ return this._ids.index(msgId) !== -1;
18
+ }
19
+ clear() {
20
+ this._ids.clear();
21
+ }
22
+ }
23
+ export {
24
+ MessageIdStore
25
+ };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -8,10 +8,12 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
8
8
  const _default = require("./default.cjs");
9
9
  const floodWaiter = require("./flood-waiter.cjs");
10
10
  const internalErrors = require("./internal-errors.cjs");
11
+ const mediaThrottle = require("./media-throttle.cjs");
11
12
  const onError = require("./on-error.cjs");
12
13
  const onMethod = require("./on-method.cjs");
13
14
  exports.basic = _default.basic;
14
15
  exports.floodWaiter = floodWaiter.floodWaiter;
15
16
  exports.internalErrorsHandler = internalErrors.internalErrorsHandler;
17
+ exports.mediaThrottle = mediaThrottle.mediaThrottle;
16
18
  exports.onRpcError = onError.onRpcError;
17
19
  exports.onMethod = onMethod.onMethod;
@@ -1,5 +1,6 @@
1
1
  export * from './default.js';
2
2
  export * from './flood-waiter.js';
3
3
  export * from './internal-errors.js';
4
+ export * from './media-throttle.js';
4
5
  export * from './on-error.js';
5
6
  export * from './on-method.js';
@@ -1,5 +1,6 @@
1
1
  export * from './default.js';
2
2
  export * from './flood-waiter.js';
3
3
  export * from './internal-errors.js';
4
+ export * from './media-throttle.js';
4
5
  export * from './on-error.js';
5
6
  export * from './on-method.js';
@@ -1,12 +1,14 @@
1
1
  import { basic } from "./default.js";
2
2
  import { floodWaiter } from "./flood-waiter.js";
3
3
  import { internalErrorsHandler } from "./internal-errors.js";
4
+ import { mediaThrottle } from "./media-throttle.js";
4
5
  import { onRpcError } from "./on-error.js";
5
6
  import { onMethod } from "./on-method.js";
6
7
  export {
7
8
  basic,
8
9
  floodWaiter,
9
10
  internalErrorsHandler,
11
+ mediaThrottle,
10
12
  onMethod,
11
13
  onRpcError
12
14
  };
@@ -7,7 +7,12 @@ if (typeof globalThis !== "undefined" && !globalThis._MTCUTE_CJS_DEPRECATION_WAR
7
7
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
8
8
  const floodWaiter = require("./flood-waiter.cjs");
9
9
  const internalErrors = require("./internal-errors.cjs");
10
+ const mediaThrottle = require("./media-throttle.cjs");
10
11
  function basic(options) {
11
- return [floodWaiter.floodWaiter(options?.floodWaiter ?? {}), internalErrors.internalErrorsHandler(options?.internalErrors ?? {})];
12
+ return [
13
+ mediaThrottle.mediaThrottle(),
14
+ floodWaiter.floodWaiter(options?.floodWaiter ?? {}),
15
+ internalErrors.internalErrorsHandler(options?.internalErrors ?? {})
16
+ ];
12
17
  }
13
18
  exports.basic = basic;
@@ -1,7 +1,12 @@
1
1
  import { floodWaiter } from "./flood-waiter.js";
2
2
  import { internalErrorsHandler } from "./internal-errors.js";
3
+ import { mediaThrottle } from "./media-throttle.js";
3
4
  function basic(options) {
4
- return [floodWaiter(options?.floodWaiter ?? {}), internalErrorsHandler(options?.internalErrors ?? {})];
5
+ return [
6
+ mediaThrottle(),
7
+ floodWaiter(options?.floodWaiter ?? {}),
8
+ internalErrorsHandler(options?.internalErrors ?? {})
9
+ ];
5
10
  }
6
11
  export {
7
12
  basic
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,65 @@
1
+ if (typeof globalThis !== "undefined" && !globalThis._MTCUTE_CJS_DEPRECATION_WARNED) {
2
+ globalThis._MTCUTE_CJS_DEPRECATION_WARNED = true;
3
+ console.warn("[@mtcute/core] CommonJS bundles are deprecated. They will be removed completely in one of the upcoming releases. No support is provided for CommonJS users. Please consider switching to ESM, it's " + (/* @__PURE__ */ new Date()).getFullYear() + " already.");
4
+ console.warn("[@mtcute/core] Learn more about switching to ESM: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c");
5
+ }
6
+ "use strict";
7
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
8
+ const abortSignal = require("../../utils/abort-signal.cjs");
9
+ const resourceLimiter = require("../resource-limiter.cjs");
10
+ const DOWNLOAD_RESOURCE_LIMIT = 2 * 1024 * 1024;
11
+ const DOWNLOAD_RESOURCE_LIMIT_PREMIUM = 16 * 1024 * 1024;
12
+ const UPLOAD_RESOURCE_LIMIT = 4 * 1024 * 1024;
13
+ function defaultResourceLimit(kind, isPremium) {
14
+ if (kind === "upload") return UPLOAD_RESOURCE_LIMIT;
15
+ return isPremium ? DOWNLOAD_RESOURCE_LIMIT_PREMIUM : DOWNLOAD_RESOURCE_LIMIT;
16
+ }
17
+ function mediaThrottle(params) {
18
+ const { getResourceLimit = defaultResourceLimit } = params ?? {};
19
+ const limiters = /* @__PURE__ */ new Map();
20
+ const getLimiter = (kind, dcId, isPremium) => {
21
+ let byDc = limiters.get(kind);
22
+ if (!byDc) {
23
+ byDc = /* @__PURE__ */ new Map();
24
+ limiters.set(kind, byDc);
25
+ }
26
+ const max = getResourceLimit(kind, isPremium);
27
+ let limiter = byDc.get(dcId);
28
+ if (!limiter) {
29
+ limiter = new resourceLimiter.ResourceLimiter(max);
30
+ byDc.set(dcId, limiter);
31
+ } else if (limiter.max !== max) {
32
+ limiter.setMax(max);
33
+ }
34
+ return limiter;
35
+ };
36
+ return async (ctx, next) => {
37
+ let kind;
38
+ let bytes = 0;
39
+ switch (ctx.request._) {
40
+ case "upload.getFile":
41
+ case "upload.getWebFile":
42
+ kind = ctx.params?.kind ?? "download";
43
+ bytes = ctx.request.limit;
44
+ break;
45
+ case "upload.saveFilePart":
46
+ case "upload.saveBigFilePart":
47
+ kind = "upload";
48
+ bytes = ctx.request.bytes.length;
49
+ break;
50
+ }
51
+ if (kind === void 0) return next(ctx);
52
+ const dcId = ctx.params?.dcId ?? ctx.manager.getPrimaryDcId();
53
+ const limiter = getLimiter(kind, dcId, ctx.manager.params.isPremium);
54
+ if (!limiter.tryAcquire(bytes)) {
55
+ const abortSignal$1 = abortSignal.combineAbortSignals(ctx.manager.params.stopSignal, ctx.params?.abortSignal);
56
+ await limiter.acquire(bytes, abortSignal$1);
57
+ }
58
+ try {
59
+ return await next(ctx);
60
+ } finally {
61
+ limiter.release(bytes);
62
+ }
63
+ };
64
+ }
65
+ exports.mediaThrottle = mediaThrottle;
@@ -0,0 +1,5 @@
1
+ import { ConnectionKind, RpcCallMiddleware } from '../network-manager.js';
2
+ export interface MediaThrottleOptions {
3
+ getResourceLimit?: (kind: ConnectionKind, isPremium: boolean) => number;
4
+ }
5
+ export declare function mediaThrottle(params?: MediaThrottleOptions): RpcCallMiddleware;
@@ -0,0 +1,5 @@
1
+ import { ConnectionKind, RpcCallMiddleware } from '../network-manager.js';
2
+ export interface MediaThrottleOptions {
3
+ getResourceLimit?: (kind: ConnectionKind, isPremium: boolean) => number;
4
+ }
5
+ export declare function mediaThrottle(params?: MediaThrottleOptions): RpcCallMiddleware;