@mtcute/core 0.29.4 → 0.29.6

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 (102) hide show
  1. package/client.cjs +4 -0
  2. package/client.js +4 -0
  3. package/highlevel/base.cjs +0 -1
  4. package/highlevel/base.js +0 -1
  5. package/highlevel/client.d.cts +30 -0
  6. package/highlevel/client.d.ts +30 -0
  7. package/highlevel/methods/chats/get-creator-after-leave.cjs +4 -14
  8. package/highlevel/methods/chats/get-creator-after-leave.js +5 -15
  9. package/highlevel/methods/files/normalize-input-media.cjs +37 -15
  10. package/highlevel/methods/files/normalize-input-media.js +37 -15
  11. package/highlevel/methods/messages/close-poll.cjs +2 -1
  12. package/highlevel/methods/messages/close-poll.js +2 -1
  13. package/highlevel/methods/messages/create-streaming-draft.cjs +57 -0
  14. package/highlevel/methods/messages/create-streaming-draft.d.cts +36 -0
  15. package/highlevel/methods/messages/create-streaming-draft.d.ts +36 -0
  16. package/highlevel/methods/messages/create-streaming-draft.js +52 -0
  17. package/highlevel/methods/messages/send-common.cjs +2 -1
  18. package/highlevel/methods/messages/send-common.d.cts +4 -0
  19. package/highlevel/methods/messages/send-common.d.ts +4 -0
  20. package/highlevel/methods/messages/send-common.js +2 -1
  21. package/highlevel/methods/messages/send-media.cjs +1 -1
  22. package/highlevel/methods/messages/send-media.d.cts +3 -0
  23. package/highlevel/methods/messages/send-media.d.ts +3 -0
  24. package/highlevel/methods/messages/send-media.js +1 -1
  25. package/highlevel/methods/messages/send-text.cjs +1 -1
  26. package/highlevel/methods/messages/send-text.d.cts +3 -0
  27. package/highlevel/methods/messages/send-text.d.ts +3 -0
  28. package/highlevel/methods/messages/send-text.js +1 -1
  29. package/highlevel/methods/messages/send-vote.cjs +3 -1
  30. package/highlevel/methods/messages/send-vote.js +4 -2
  31. package/highlevel/methods.d.cts +2 -0
  32. package/highlevel/methods.d.ts +2 -0
  33. package/highlevel/storage/service/peers.cjs +1 -0
  34. package/highlevel/storage/service/peers.js +1 -0
  35. package/highlevel/types/media/input-media/types.d.cts +23 -12
  36. package/highlevel/types/media/input-media/types.d.ts +23 -12
  37. package/highlevel/types/media/photo.cjs +8 -0
  38. package/highlevel/types/media/photo.d.cts +2 -0
  39. package/highlevel/types/media/photo.d.ts +2 -0
  40. package/highlevel/types/media/photo.js +8 -0
  41. package/highlevel/types/media/poll.cjs +48 -5
  42. package/highlevel/types/media/poll.d.cts +21 -3
  43. package/highlevel/types/media/poll.d.ts +21 -3
  44. package/highlevel/types/media/poll.js +48 -5
  45. package/highlevel/types/messages/dialog.cjs +4 -0
  46. package/highlevel/types/messages/dialog.d.cts +2 -0
  47. package/highlevel/types/messages/dialog.d.ts +2 -0
  48. package/highlevel/types/messages/dialog.js +4 -0
  49. package/highlevel/types/messages/message-action.cjs +18 -0
  50. package/highlevel/types/messages/message-action.d.cts +19 -1
  51. package/highlevel/types/messages/message-action.d.ts +19 -1
  52. package/highlevel/types/messages/message-action.js +18 -0
  53. package/highlevel/types/messages/message-media.cjs +6 -1
  54. package/highlevel/types/messages/message-media.js +6 -1
  55. package/highlevel/types/messages/replied-message.cjs +4 -0
  56. package/highlevel/types/messages/replied-message.d.cts +2 -0
  57. package/highlevel/types/messages/replied-message.d.ts +2 -0
  58. package/highlevel/types/messages/replied-message.js +4 -0
  59. package/highlevel/types/messages/search-filters.cjs +2 -1
  60. package/highlevel/types/messages/search-filters.d.cts +4 -0
  61. package/highlevel/types/messages/search-filters.d.ts +4 -0
  62. package/highlevel/types/messages/search-filters.js +2 -1
  63. package/highlevel/types/peers/forum-topic.cjs +4 -0
  64. package/highlevel/types/peers/forum-topic.d.cts +2 -0
  65. package/highlevel/types/peers/forum-topic.d.ts +2 -0
  66. package/highlevel/types/peers/forum-topic.js +4 -0
  67. package/highlevel/types/peers/full-user.cjs +8 -0
  68. package/highlevel/types/peers/full-user.d.cts +4 -0
  69. package/highlevel/types/peers/full-user.d.ts +4 -0
  70. package/highlevel/types/peers/full-user.js +8 -0
  71. package/highlevel/types/peers/user.cjs +4 -0
  72. package/highlevel/types/peers/user.d.cts +2 -0
  73. package/highlevel/types/peers/user.d.ts +2 -0
  74. package/highlevel/types/peers/user.js +4 -0
  75. package/highlevel/types/updates/poll-update.cjs +8 -2
  76. package/highlevel/types/updates/poll-update.js +8 -2
  77. package/highlevel/updates/manager.cjs +7 -0
  78. package/highlevel/updates/manager.js +7 -0
  79. package/highlevel/worker/worker.cjs +6 -1
  80. package/highlevel/worker/worker.d.cts +2 -1
  81. package/highlevel/worker/worker.d.ts +2 -1
  82. package/highlevel/worker/worker.js +6 -1
  83. package/methods.cjs +2 -0
  84. package/methods.js +2 -0
  85. package/network/middlewares/flood-waiter.cjs +2 -1
  86. package/network/middlewares/flood-waiter.js +2 -1
  87. package/network/network-manager.cjs +1 -1
  88. package/network/network-manager.js +1 -1
  89. package/package.json +1 -1
  90. package/tl/api-schema.json +1 -1
  91. package/tl/binary/reader.cjs +86 -39
  92. package/tl/binary/reader.js +86 -39
  93. package/tl/binary/writer.cjs +308 -32
  94. package/tl/binary/writer.js +308 -32
  95. package/tl/compat/reader.cjs +34 -0
  96. package/tl/compat/reader.js +34 -0
  97. package/tl/index.d.cts +295 -25
  98. package/tl/index.d.ts +295 -25
  99. package/tl/inner-tl.cjs +16 -8
  100. package/tl/inner-tl.js +16 -8
  101. package/utils/binary/compat.cjs +41 -0
  102. package/utils/binary/compat.js +41 -0
@@ -29,6 +29,7 @@ class UpdatesManager {
29
29
  throw new errors.MtArgumentError("Updates must be enabled to use updates manager");
30
30
  }
31
31
  this._onKeepAlive = this._onKeepAlive.bind(this);
32
+ this.handleUpdate = this.handleUpdate.bind(this);
32
33
  this.postponedTimer.onTimeout(() => {
33
34
  this.hasTimedoutPostponed = true;
34
35
  this.updatesLoopCv.notify();
@@ -140,6 +141,7 @@ class UpdatesManager {
140
141
  await this._fetchUpdatesState();
141
142
  }
142
143
  this.updatesLoopActive = true;
144
+ this.client.onServerUpdate.add(this.handleUpdate);
143
145
  utils.timers.clearInterval(this.keepAliveInterval);
144
146
  this.keepAliveInterval = utils.timers.setInterval(this._onKeepAlive, KEEP_ALIVE_INTERVAL);
145
147
  this._loop().catch((err) => this.client.onError.emit(utils.unknownToError(err)));
@@ -161,12 +163,16 @@ class UpdatesManager {
161
163
  }
162
164
  this.channelDiffTimeouts.clear();
163
165
  this.updatesLoopActive = false;
166
+ this.client.onServerUpdate.remove(this.handleUpdate);
164
167
  this.pendingUpdateContainers.clear();
165
168
  this.pendingUnorderedUpdates.clear();
166
169
  this.pendingPtsUpdates.clear();
167
170
  this.pendingQtsUpdates.clear();
168
171
  this.pendingPtsUpdatesPostponed.clear();
169
172
  this.pendingQtsUpdatesPostponed.clear();
173
+ this.noDispatchMsg.clear();
174
+ this.noDispatchPts.clear();
175
+ this.noDispatchQts.clear();
170
176
  this.postponedTimer.reset();
171
177
  this.updatesLoopCv.notify();
172
178
  }
@@ -188,6 +194,7 @@ class UpdatesManager {
188
194
  this.handleUpdate(UPDATES_TOO_LONG);
189
195
  }
190
196
  handleClientUpdate(update, noDispatch = true) {
197
+ if (!this.updatesLoopActive) return;
191
198
  if (noDispatch && this.noDispatchEnabled) {
192
199
  this._addToNoDispatchIndex(update);
193
200
  }
@@ -22,6 +22,7 @@ class UpdatesManager {
22
22
  throw new MtArgumentError("Updates must be enabled to use updates manager");
23
23
  }
24
24
  this._onKeepAlive = this._onKeepAlive.bind(this);
25
+ this.handleUpdate = this.handleUpdate.bind(this);
25
26
  this.postponedTimer.onTimeout(() => {
26
27
  this.hasTimedoutPostponed = true;
27
28
  this.updatesLoopCv.notify();
@@ -133,6 +134,7 @@ class UpdatesManager {
133
134
  await this._fetchUpdatesState();
134
135
  }
135
136
  this.updatesLoopActive = true;
137
+ this.client.onServerUpdate.add(this.handleUpdate);
136
138
  timers.clearInterval(this.keepAliveInterval);
137
139
  this.keepAliveInterval = timers.setInterval(this._onKeepAlive, KEEP_ALIVE_INTERVAL);
138
140
  this._loop().catch((err) => this.client.onError.emit(unknownToError(err)));
@@ -154,12 +156,16 @@ class UpdatesManager {
154
156
  }
155
157
  this.channelDiffTimeouts.clear();
156
158
  this.updatesLoopActive = false;
159
+ this.client.onServerUpdate.remove(this.handleUpdate);
157
160
  this.pendingUpdateContainers.clear();
158
161
  this.pendingUnorderedUpdates.clear();
159
162
  this.pendingPtsUpdates.clear();
160
163
  this.pendingQtsUpdates.clear();
161
164
  this.pendingPtsUpdatesPostponed.clear();
162
165
  this.pendingQtsUpdatesPostponed.clear();
166
+ this.noDispatchMsg.clear();
167
+ this.noDispatchPts.clear();
168
+ this.noDispatchQts.clear();
163
169
  this.postponedTimer.reset();
164
170
  this.updatesLoopCv.notify();
165
171
  }
@@ -181,6 +187,7 @@ class UpdatesManager {
181
187
  this.handleUpdate(UPDATES_TOO_LONG);
182
188
  }
183
189
  handleClientUpdate(update, noDispatch = true) {
190
+ if (!this.updatesLoopActive) return;
184
191
  if (noDispatch && this.noDispatchEnabled) {
185
192
  this._addToNoDispatchIndex(update);
186
193
  }
@@ -185,7 +185,12 @@ class TelegramWorker {
185
185
  }
186
186
  if (!wasActive && !hadLastSeen && !pending) return;
187
187
  if (this.activeConnections.size !== 0) return;
188
- switch (this.params.onLastDisconnected ?? "nothing") {
188
+ let onLastDisconnected = this.params.onLastDisconnected ?? "nothing";
189
+ if (typeof onLastDisconnected === "function") {
190
+ onLastDisconnected = onLastDisconnected();
191
+ return;
192
+ }
193
+ switch (onLastDisconnected) {
189
194
  case "nothing":
190
195
  return;
191
196
  case "disconnect":
@@ -10,10 +10,11 @@ export interface TelegramWorkerOptions<T extends WorkerCustomMethods> {
10
10
  * - `destroy`: destroy the client, terminating the worker
11
11
  * - `disconnect`: disconnect the client, but keep the worker running until `forceDestroy` is called
12
12
  * - `nothing`: do nothing, lifecycle is managed manually
13
+ * - function: call this function when the last connection is closed, then execute the action returned by the function
13
14
  *
14
15
  * @default 'nothing'
15
16
  */
16
- onLastDisconnected?: 'destroy' | 'disconnect' | 'nothing';
17
+ onLastDisconnected?: 'destroy' | 'disconnect' | 'nothing' | (() => 'destroy' | 'disconnect' | 'nothing');
17
18
  /** additional custom methods to expose */
18
19
  customMethods?: T;
19
20
  }
@@ -10,10 +10,11 @@ export interface TelegramWorkerOptions<T extends WorkerCustomMethods> {
10
10
  * - `destroy`: destroy the client, terminating the worker
11
11
  * - `disconnect`: disconnect the client, but keep the worker running until `forceDestroy` is called
12
12
  * - `nothing`: do nothing, lifecycle is managed manually
13
+ * - function: call this function when the last connection is closed, then execute the action returned by the function
13
14
  *
14
15
  * @default 'nothing'
15
16
  */
16
- onLastDisconnected?: 'destroy' | 'disconnect' | 'nothing';
17
+ onLastDisconnected?: 'destroy' | 'disconnect' | 'nothing' | (() => 'destroy' | 'disconnect' | 'nothing');
17
18
  /** additional custom methods to expose */
18
19
  customMethods?: T;
19
20
  }
@@ -178,7 +178,12 @@ class TelegramWorker {
178
178
  }
179
179
  if (!wasActive && !hadLastSeen && !pending) return;
180
180
  if (this.activeConnections.size !== 0) return;
181
- switch (this.params.onLastDisconnected ?? "nothing") {
181
+ let onLastDisconnected = this.params.onLastDisconnected ?? "nothing";
182
+ if (typeof onLastDisconnected === "function") {
183
+ onLastDisconnected = onLastDisconnected();
184
+ return;
185
+ }
186
+ switch (onLastDisconnected) {
182
187
  case "nothing":
183
188
  return;
184
189
  case "disconnect":
package/methods.cjs CHANGED
@@ -156,6 +156,7 @@ const iterInviteLinks = require("./highlevel/methods/invite-links/iter-invite-li
156
156
  const revokeInviteLink = require("./highlevel/methods/invite-links/revoke-invite-link.cjs");
157
157
  const appendTodoList = require("./highlevel/methods/messages/append-todo-list.cjs");
158
158
  const closePoll = require("./highlevel/methods/messages/close-poll.cjs");
159
+ const createStreamingDraft = require("./highlevel/methods/messages/create-streaming-draft.cjs");
159
160
  const deleteMessages = require("./highlevel/methods/messages/delete-messages.cjs");
160
161
  const deleteScheduledMessages = require("./highlevel/methods/messages/delete-scheduled-messages.cjs");
161
162
  const editInlineMessage = require("./highlevel/methods/messages/edit-inline-message.cjs");
@@ -441,6 +442,7 @@ exports.iterInviteLinks = iterInviteLinks.iterInviteLinks;
441
442
  exports.revokeInviteLink = revokeInviteLink.revokeInviteLink;
442
443
  exports.appendTodoList = appendTodoList.appendTodoList;
443
444
  exports.closePoll = closePoll.closePoll;
445
+ exports.createStreamingDraft = createStreamingDraft.createStreamingDraft;
444
446
  exports.deleteMessages = deleteMessages.deleteMessages;
445
447
  exports.deleteMessagesById = deleteMessages.deleteMessagesById;
446
448
  exports.deleteScheduledMessages = deleteScheduledMessages.deleteScheduledMessages;
package/methods.js CHANGED
@@ -149,6 +149,7 @@ import { iterInviteLinks } from "./highlevel/methods/invite-links/iter-invite-li
149
149
  import { revokeInviteLink } from "./highlevel/methods/invite-links/revoke-invite-link.js";
150
150
  import { appendTodoList } from "./highlevel/methods/messages/append-todo-list.js";
151
151
  import { closePoll } from "./highlevel/methods/messages/close-poll.js";
152
+ import { createStreamingDraft } from "./highlevel/methods/messages/create-streaming-draft.js";
152
153
  import { deleteMessages, deleteMessagesById } from "./highlevel/methods/messages/delete-messages.js";
153
154
  import { deleteScheduledMessages } from "./highlevel/methods/messages/delete-scheduled-messages.js";
154
155
  import { editInlineMessage } from "./highlevel/methods/messages/edit-inline-message.js";
@@ -318,6 +319,7 @@ export {
318
319
  createGroup,
319
320
  createInviteLink,
320
321
  createStickerSet,
322
+ createStreamingDraft,
321
323
  createSupergroup,
322
324
  deleteBusinessChatLink,
323
325
  deleteChannel,
@@ -29,6 +29,7 @@ function floodWaiter(options) {
29
29
  const method = ctx.request._;
30
30
  const storedWaitUntil = store ? storage.get(method) : void 0;
31
31
  const floodSleepThreshold = ctx.params?.floodSleepThreshold ?? maxWait;
32
+ const numRetries = ctx.params?.maxRetryCount ?? maxRetries;
32
33
  if (storedWaitUntil !== void 0) {
33
34
  const delta = storedWaitUntil - performance.now();
34
35
  if (delta <= minStoredWait) {
@@ -45,7 +46,7 @@ function floodWaiter(options) {
45
46
  }
46
47
  }
47
48
  let lastError;
48
- for (let i = 0; i <= maxRetries; i++) {
49
+ for (let i = 0; i <= numRetries; i++) {
49
50
  const res = await next(ctx);
50
51
  if (!typeAssertions.isTlRpcError(res)) {
51
52
  return res;
@@ -22,6 +22,7 @@ function floodWaiter(options) {
22
22
  const method = ctx.request._;
23
23
  const storedWaitUntil = store ? storage.get(method) : void 0;
24
24
  const floodSleepThreshold = ctx.params?.floodSleepThreshold ?? maxWait;
25
+ const numRetries = ctx.params?.maxRetryCount ?? maxRetries;
25
26
  if (storedWaitUntil !== void 0) {
26
27
  const delta = storedWaitUntil - performance.now();
27
28
  if (delta <= minStoredWait) {
@@ -38,7 +39,7 @@ function floodWaiter(options) {
38
39
  }
39
40
  }
40
41
  let lastError;
41
- for (let i = 0; i <= maxRetries; i++) {
42
+ for (let i = 0; i <= numRetries; i++) {
42
43
  const res = await next(ctx);
43
44
  if (!isTlRpcError(res)) {
44
45
  return res;
@@ -226,7 +226,7 @@ class NetworkManager {
226
226
  _: "initConnection",
227
227
  deviceModel,
228
228
  systemVersion: "1.0",
229
- appVersion: "0.29.4",
229
+ appVersion: "0.29.6",
230
230
  systemLangCode: "en",
231
231
  langPack: "",
232
232
  // "langPacks are for official apps only"
@@ -219,7 +219,7 @@ class NetworkManager {
219
219
  _: "initConnection",
220
220
  deviceModel,
221
221
  systemVersion: "1.0",
222
- appVersion: "0.29.4",
222
+ appVersion: "0.29.6",
223
223
  systemLangCode: "en",
224
224
  langPack: "",
225
225
  // "langPacks are for official apps only"
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@mtcute/core",
3
3
  "type": "module",
4
- "version": "0.29.4",
4
+ "version": "0.29.6",
5
5
  "description": "Type-safe library for MTProto (Telegram API)",
6
6
  "license": "MIT",
7
7
  "scripts": {},