mirror of
https://github.com/cheveguerra/whatsapp-web.js.git
synced 2026-04-18 03:29:14 +00:00
73 lines
2.0 KiB
JavaScript
73 lines
2.0 KiB
JavaScript
'use strict';
|
|
|
|
const EventEmitter = require('events');
|
|
const puppeteer = require('puppeteer');
|
|
const Util = require('../util/Util');
|
|
const { WhatsWebURL, UserAgent, DefaultOptions, Events } = require('../util/Constants');
|
|
const { ExposeStore, MarkAllRead } = require('../util/Injected');
|
|
|
|
/**
|
|
* Starting point for interacting with the WhatsApp Web API
|
|
* @extends {EventEmitter}
|
|
*/
|
|
class Client extends EventEmitter {
|
|
constructor(options = {}) {
|
|
super();
|
|
|
|
this.options = Util.mergeDefault(DefaultOptions, options);
|
|
|
|
this.pupBrowser = null;
|
|
this.pupPage = null;
|
|
}
|
|
|
|
async initialize() {
|
|
const browser = await puppeteer.launch(this.options.puppeteer);
|
|
const page = await browser.newPage();
|
|
page.setUserAgent(UserAgent);
|
|
|
|
await page.goto(WhatsWebURL);
|
|
await page.evaluate(ExposeStore);
|
|
|
|
await page.waitForSelector('._1jjYO'); // Wait for QR Code
|
|
const qr = await page.$eval('._2EZ_m', node => node.getAttribute('data-ref'));
|
|
|
|
this.emit(Events.QR_RECEIVED, qr);
|
|
|
|
// Wait for Auth
|
|
await page.waitForSelector('._2Uo0Z', {timeout: 0});
|
|
this.emit(Events.AUTHENTICATED);
|
|
|
|
// Check Store Injection
|
|
await page.waitForFunction('window.Store != undefined');
|
|
|
|
await page.exposeFunction('onAddMessageEvent', (msg) => {
|
|
this.emit('message', msg);
|
|
});
|
|
|
|
await page.evaluate(() => {
|
|
Store.Msg.on('add', onAddMessageEvent);
|
|
})
|
|
|
|
// // Mark all chats as read
|
|
// await page.evaluate(MarkAllRead);
|
|
|
|
this.pupBrowser = browser;
|
|
this.pupPage = page;
|
|
|
|
this.emit(Events.READY);
|
|
}
|
|
|
|
async destroy() {
|
|
await this.pupBrowser.close();
|
|
}
|
|
|
|
async sendMessage(chatId, message) {
|
|
await this.pupPage.evaluate((chatId, message) => {
|
|
Store.Chat.get(chatId).sendMessage(message);
|
|
}, chatId, message)
|
|
}
|
|
|
|
|
|
}
|
|
|
|
module.exports = Client; |