GramJs: Re-connect on CONNECTION_NOT_INITED error
This commit is contained in:
parent
e4c30ea969
commit
07b8e2ba6a
@ -22,7 +22,10 @@ const {
|
|||||||
} = require('./auth');
|
} = require('./auth');
|
||||||
const { downloadFile } = require('./downloadFile');
|
const { downloadFile } = require('./downloadFile');
|
||||||
const { uploadFile } = require('./uploadFile');
|
const { uploadFile } = require('./uploadFile');
|
||||||
const { updateTwoFaSettings, getTmpPassword } = require('./2fa');
|
const {
|
||||||
|
updateTwoFaSettings,
|
||||||
|
getTmpPassword,
|
||||||
|
} = require('./2fa');
|
||||||
|
|
||||||
const DEFAULT_DC_ID = 2;
|
const DEFAULT_DC_ID = 2;
|
||||||
const WEBDOCUMENT_DC_ID = 4;
|
const WEBDOCUMENT_DC_ID = 4;
|
||||||
@ -372,6 +375,24 @@ class TelegramClient {
|
|||||||
await sender.disconnect();
|
await sender.disconnect();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async _cleanupExportedSenders(dcId) {
|
||||||
|
const promises = Object.values(this._exportedSenderPromises[dcId]);
|
||||||
|
if (!promises.length) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.session.dcId !== dcId) {
|
||||||
|
this.session.setAuthKey(undefined, dcId);
|
||||||
|
}
|
||||||
|
|
||||||
|
this._exportedSenderPromises[dcId] = {};
|
||||||
|
|
||||||
|
await Promise.all(promises.map(async (promise) => {
|
||||||
|
const sender = await promise;
|
||||||
|
await sender.disconnect();
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
|
||||||
async _connectSender(sender, dcId, isPremium = false) {
|
async _connectSender(sender, dcId, isPremium = false) {
|
||||||
// if we don't already have an auth key we want to use normal DCs not -1
|
// if we don't already have an auth key we want to use normal DCs not -1
|
||||||
let hasAuthKey = Boolean(sender.authKey.getKey());
|
let hasAuthKey = Boolean(sender.authKey.getKey());
|
||||||
|
|||||||
@ -101,10 +101,14 @@ export async function downloadFile(
|
|||||||
try {
|
try {
|
||||||
return await downloadFile2(client, inputLocation, fileParams);
|
return await downloadFile2(client, inputLocation, fileParams);
|
||||||
} catch (err: any) {
|
} catch (err: any) {
|
||||||
if (i === SENDER_RETRIES - 1 || !err.message.startsWith('SESSION_REVOKED')) {
|
if (
|
||||||
|
(err.message.startsWith('SESSION_REVOKED') || err.message.startsWith('CONNECTION_NOT_INITED'))
|
||||||
|
&& i < SENDER_RETRIES - 1
|
||||||
|
) {
|
||||||
|
await client._cleanupExportedSenders(dcId);
|
||||||
|
} else {
|
||||||
throw err;
|
throw err;
|
||||||
}
|
}
|
||||||
await client._cleanupExportedSender(dcId);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -215,7 +219,7 @@ async function downloadFile2(
|
|||||||
precise: isPrecise || undefined,
|
precise: isPrecise || undefined,
|
||||||
})),
|
})),
|
||||||
sleep(SENDER_TIMEOUT).then(() => {
|
sleep(SENDER_TIMEOUT).then(() => {
|
||||||
// if we're on the main DC we just cancel the download and let the user retry later.
|
// If we're on the main DC we just cancel the download and let the user retry later
|
||||||
if (dcId === client.session.dcId) {
|
if (dcId === client.session.dcId) {
|
||||||
return Promise.reject(new Error('USER_CANCELED'));
|
return Promise.reject(new Error('USER_CANCELED'));
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user