GramJs: Properly handle AUTH_KEY_UNREGISTERED (#1600)
This commit is contained in:
parent
46bdaea297
commit
166e9e7aab
@ -1,3 +1,5 @@
|
|||||||
|
const { RPCError } = require('../errors');
|
||||||
|
|
||||||
const MtProtoPlainSender = require('./MTProtoPlainSender');
|
const MtProtoPlainSender = require('./MTProtoPlainSender');
|
||||||
const MTProtoState = require('./MTProtoState');
|
const MTProtoState = require('./MTProtoState');
|
||||||
const Helpers = require('../Helpers');
|
const Helpers = require('../Helpers');
|
||||||
@ -420,13 +422,7 @@ class MTProtoSender {
|
|||||||
} else if (e instanceof InvalidBufferError) {
|
} else if (e instanceof InvalidBufferError) {
|
||||||
// 404 means that the server has "forgotten" our auth key and we need to create a new one.
|
// 404 means that the server has "forgotten" our auth key and we need to create a new one.
|
||||||
if (e.code === 404) {
|
if (e.code === 404) {
|
||||||
this._log.warn(`Broken authorization key for dc ${this._dcId}; resetting`);
|
this._handleBadAuthKey();
|
||||||
if (this._updateCallback && this._isMainSender) {
|
|
||||||
this._updateCallback(new UpdateConnectionState(UpdateConnectionState.broken));
|
|
||||||
} else if (this._onConnectionBreak && !this._isMainSender) {
|
|
||||||
// Deletes the current sender from the object
|
|
||||||
this._onConnectionBreak(this._dcId);
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
// this happens sometimes when telegram is having some internal issues.
|
// this happens sometimes when telegram is having some internal issues.
|
||||||
// reconnecting should be enough usually
|
// reconnecting should be enough usually
|
||||||
@ -445,12 +441,29 @@ class MTProtoSender {
|
|||||||
try {
|
try {
|
||||||
await this._processMessage(message);
|
await this._processMessage(message);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
this._log.error('Unhandled error while receiving data');
|
// `RPCError` errors except for 'AUTH_KEY_UNREGISTERED' should be handled by the client
|
||||||
this._log.error(e);
|
if (e instanceof RPCError) {
|
||||||
|
if (e.message === 'AUTH_KEY_UNREGISTERED') {
|
||||||
|
this._handleBadAuthKey();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
this._log.error('Unhandled error while receiving data');
|
||||||
|
this._log.error(e);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_handleBadAuthKey() {
|
||||||
|
this._log.warn(`Broken authorization key for dc ${this._dcId}; resetting`);
|
||||||
|
if (this._updateCallback && this._isMainSender) {
|
||||||
|
this._updateCallback(new UpdateConnectionState(UpdateConnectionState.broken));
|
||||||
|
} else if (this._onConnectionBreak && !this._isMainSender) {
|
||||||
|
// Deletes the current sender from the object
|
||||||
|
this._onConnectionBreak(this._dcId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Response Handlers
|
// Response Handlers
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -557,6 +570,7 @@ class MTProtoSender {
|
|||||||
const error = RPCMessageToError(result.error, state.request);
|
const error = RPCMessageToError(result.error, state.request);
|
||||||
this._send_queue.append(new RequestState(new MsgsAck({ msgIds: [state.msgId] })));
|
this._send_queue.append(new RequestState(new MsgsAck({ msgIds: [state.msgId] })));
|
||||||
state.reject(error);
|
state.reject(error);
|
||||||
|
throw error;
|
||||||
} else {
|
} else {
|
||||||
try {
|
try {
|
||||||
const reader = new BinaryReader(result.body);
|
const reader = new BinaryReader(result.body);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user