@mtcute/core 0.13.2 → 0.13.3

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 (51) hide show
  1. package/cjs/highlevel/client.d.ts +15 -1
  2. package/cjs/highlevel/client.js.map +1 -1
  3. package/cjs/highlevel/methods/auth/log-out.d.ts +8 -1
  4. package/cjs/highlevel/methods/auth/log-out.js +4 -2
  5. package/cjs/highlevel/methods/auth/log-out.js.map +1 -1
  6. package/cjs/highlevel/methods/auth/send-code.d.ts +5 -0
  7. package/cjs/highlevel/methods/auth/send-code.js +5 -1
  8. package/cjs/highlevel/methods/auth/send-code.js.map +1 -1
  9. package/cjs/highlevel/methods/auth/start.d.ts +5 -0
  10. package/cjs/highlevel/methods/auth/start.js +81 -53
  11. package/cjs/highlevel/methods/auth/start.js.map +1 -1
  12. package/cjs/highlevel/methods/chats/open-chat.d.ts +4 -3
  13. package/cjs/highlevel/methods/chats/open-chat.js +4 -3
  14. package/cjs/highlevel/methods/chats/open-chat.js.map +1 -1
  15. package/cjs/highlevel/methods.d.ts +1 -0
  16. package/cjs/highlevel/methods.js.map +1 -1
  17. package/cjs/highlevel/updates/manager.d.ts +1 -0
  18. package/cjs/highlevel/updates/manager.js +38 -10
  19. package/cjs/highlevel/updates/manager.js.map +1 -1
  20. package/cjs/highlevel/updates/types.d.ts +36 -1
  21. package/cjs/highlevel/updates/types.js.map +1 -1
  22. package/cjs/network/client.js +1 -1
  23. package/cjs/network/client.js.map +1 -1
  24. package/cjs/network/network-manager.js +2 -1
  25. package/cjs/network/network-manager.js.map +1 -1
  26. package/esm/highlevel/client.d.ts +15 -1
  27. package/esm/highlevel/client.js.map +1 -1
  28. package/esm/highlevel/methods/auth/log-out.d.ts +8 -1
  29. package/esm/highlevel/methods/auth/log-out.js +4 -2
  30. package/esm/highlevel/methods/auth/log-out.js.map +1 -1
  31. package/esm/highlevel/methods/auth/send-code.d.ts +5 -0
  32. package/esm/highlevel/methods/auth/send-code.js +5 -1
  33. package/esm/highlevel/methods/auth/send-code.js.map +1 -1
  34. package/esm/highlevel/methods/auth/start.d.ts +5 -0
  35. package/esm/highlevel/methods/auth/start.js +82 -54
  36. package/esm/highlevel/methods/auth/start.js.map +1 -1
  37. package/esm/highlevel/methods/chats/open-chat.d.ts +4 -3
  38. package/esm/highlevel/methods/chats/open-chat.js +4 -3
  39. package/esm/highlevel/methods/chats/open-chat.js.map +1 -1
  40. package/esm/highlevel/methods.d.ts +1 -0
  41. package/esm/highlevel/methods.js.map +1 -1
  42. package/esm/highlevel/updates/manager.d.ts +1 -0
  43. package/esm/highlevel/updates/manager.js +38 -10
  44. package/esm/highlevel/updates/manager.js.map +1 -1
  45. package/esm/highlevel/updates/types.d.ts +36 -1
  46. package/esm/highlevel/updates/types.js.map +1 -1
  47. package/esm/network/client.js +1 -1
  48. package/esm/network/client.js.map +1 -1
  49. package/esm/network/network-manager.js +2 -1
  50. package/esm/network/network-manager.js.map +1 -1
  51. package/package.json +1 -1
@@ -100,6 +100,8 @@ export class UpdatesManager {
100
100
  log;
101
101
  _handler = () => { };
102
102
  _onCatchingUp = () => { };
103
+ // eslint-disable-next-line @typescript-eslint/ban-types
104
+ _channelPtsLimit;
103
105
  auth; // todo: do we need a local copy?
104
106
  keepAliveInterval;
105
107
  constructor(client, params = {}) {
@@ -116,6 +118,18 @@ export class UpdatesManager {
116
118
  this.log = client.log.create('updates');
117
119
  this.catchUpOnStart = params.catchUp ?? false;
118
120
  this.noDispatchEnabled = !params.disableNoDispatch;
121
+ if (params.channelPtsLimit) {
122
+ if (typeof params.channelPtsLimit === 'function') {
123
+ this._channelPtsLimit = params.channelPtsLimit;
124
+ }
125
+ else {
126
+ const limit = params.channelPtsLimit;
127
+ this._channelPtsLimit = () => limit;
128
+ }
129
+ }
130
+ else {
131
+ this._channelPtsLimit = () => (this.auth?.isBot ? 100000 : 100);
132
+ }
119
133
  }
120
134
  setHandler(handler) {
121
135
  this._handler = handler;
@@ -335,6 +349,12 @@ export class UpdatesManager {
335
349
  log.debug('loaded initial state: pts=%d, qts=%d, date=%d, seq=%d', this.pts, this.qts, this.date, this.seq);
336
350
  }
337
351
  catch (e) {
352
+ if (tl.RpcError.is(e, 'AUTH_KEY_UNREGISTERED')) {
353
+ // we are logged out, stop updates loop
354
+ lock.release();
355
+ this.stopLoop();
356
+ return;
357
+ }
338
358
  if (this.client.isConnected) {
339
359
  log.error('failed to fetch updates state: %s', e);
340
360
  }
@@ -666,7 +686,7 @@ export class UpdatesManager {
666
686
  const channel = toInputChannel(channelPeer);
667
687
  // to make TS happy
668
688
  let pts = _pts;
669
- let limit = this.auth?.isBot ? 100000 : 100;
689
+ let limit = this._channelPtsLimit(channelId);
670
690
  if (pts <= 0) {
671
691
  pts = 1;
672
692
  limit = 1;
@@ -681,8 +701,11 @@ export class UpdatesManager {
681
701
  limit,
682
702
  filter: { _: 'channelMessagesFilterEmpty' },
683
703
  });
684
- if (diff.timeout)
685
- lastTimeout = diff.timeout;
704
+ if (diff.timeout) {
705
+ lastTimeout = this.params.overrideOpenChatTimeout ?
706
+ this.params.overrideOpenChatTimeout(diff) :
707
+ diff.timeout;
708
+ }
686
709
  if (diff._ === 'updates.channelDifferenceEmpty') {
687
710
  log.debug('getChannelDifference (cid = %d) returned channelDifferenceEmpty', channelId);
688
711
  break;
@@ -692,13 +715,18 @@ export class UpdatesManager {
692
715
  if (diff.dialog._ === 'dialog') {
693
716
  pts = diff.dialog.pts;
694
717
  }
695
- log.warn('getChannelDifference (cid = %d) returned channelDifferenceTooLong. new pts: %d, recent msgs: %d', channelId, pts, diff.messages.length);
696
- diff.messages.forEach((message) => {
697
- log.debug('processing message %d (%s) from TooLong diff for channel %d', message.id, message._, channelId);
698
- if (message._ === 'messageEmpty')
699
- return;
700
- pendingUnorderedUpdates.pushBack(toPendingUpdate(messageToUpdate(message), peers, true));
701
- });
718
+ if (this.params.onChannelTooLong) {
719
+ this.params.onChannelTooLong(channelId, diff);
720
+ }
721
+ else {
722
+ log.warn('getChannelDifference (cid = %d) returned channelDifferenceTooLong. new pts: %d, recent msgs: %d', channelId, pts, diff.messages.length);
723
+ diff.messages.forEach((message) => {
724
+ log.debug('processing message %d (%s) from TooLong diff for channel %d', message.id, message._, channelId);
725
+ if (message._ === 'messageEmpty')
726
+ return;
727
+ pendingUnorderedUpdates.pushBack(toPendingUpdate(messageToUpdate(message), peers, true));
728
+ });
729
+ }
702
730
  break;
703
731
  }
704
732
  log.debug('getChannelDifference (cid = %d) returned %d messages, %d updates. new pts: %d, final: %b', channelId, diff.newMessages.length, diff.otherUpdates.length, diff.pts, diff.final);