Есть класс клиента ватсап, реализованный на whatsapp-web.js.
export default class WhatsAppClient {
client: any;
readyPromise: Promise<string>;
qr:any
qrPromise: Promise<string>;
constructor() {
mongoose.connect('mongodb://localhost:27017/whatsappSubscriptions').then(() => {
store = new MongoStore({ mongoose: mongoose });
this.client = new Client({
authStrategy: new RemoteAuth({
clientId: 'Test',
dataPath: './test',
store: store,
backupSyncIntervalMs: 300000
})
});
this.client.on('authenticated', () => {
console.log('Сессия успешно восстановлена');
});
this.client.on('auth_failure', (msg) => {
console.log('Не удалось восстановить сессию ' + msg);
});
this.readyPromise = new Promise((resolve) => {
this.client.on('ready', () => {
console.log('Client is ready!')
resolve('Client is ready!');
});
});
this.qrPromise = new Promise((resolve) => {
this.client.on('qr', (qr: any) => {
qrcode.generate(qr, {small: true});
this.qr = qr
resolve('User is not authorized');
});
});
this.client.initialize();
});
}
async getAllChats() {
await this.readyPromise;
let chats = await this.client.getChats()
let chatsData = await chats.map((m:any)=> {
type chatData ={
name: string;
isGroup: boolean;
user: number;
id: string;
}
let chatData = {
name: m.name,
isGroup: m.isGroup,
user: m.id.user,
id: m.id._serialized
}
return chatData;
});
return chatsData;
}
}
При импорте класса и создании нового экземпляра клиент авторизуется. Если сохраненной сессии нет - вызывается qrCode и пользователь авторизуется. Если есть сохраненная сессия ( т.е. был хоть раз сделан вход через qr ) - вызывается событие
ready.
Если пользователь захочет получить все чаты из своего аккаунта whatsapp, но при этом будет не авторизован - промис readyPromise будет ждать бесконечно. Если ждать вызов qr кода, то при сохраненной сессии он попросту не вызовется.
Т.е. нужна проверка, есть ли сохраненная сессия у пользователя. Главная проблема - их сохранение в виде целой папки,а не какого либо токена.
Хотя в документации описан способ реализации сохранения сессий в базу данных, что работает корректно, в этом коде они не считываются.
Как сделать так, чтобы при вызове метода, который получает список чатов выполнялась проверка на наличие токена?