Задать вопрос
@fobya

Как сделать провреку наличия сесссии whatsapp-web.js?

Есть класс клиента ватсап, реализованный на 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 кода, то при сохраненной сессии он попросту не вызовется.
Т.е. нужна проверка, есть ли сохраненная сессия у пользователя. Главная проблема - их сохранение в виде целой папки,а не какого либо токена.
Хотя в документации описан способ реализации сохранения сессий в базу данных, что работает корректно, в этом коде они не считываются.
Как сделать так, чтобы при вызове метода, который получает список чатов выполнялась проверка на наличие токена?
  • Вопрос задан
  • 189 просмотров
Подписаться 1 Средний Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы