diff --git a/src/Client.js b/src/Client.js index d3c9bb4..efe37cf 100644 --- a/src/Client.js +++ b/src/Client.js @@ -6,6 +6,7 @@ const moduleRaid = require('@pedroslopez/moduleraid/moduleraid'); const Util = require('./util/Util'); const InterfaceController = require('./util/InterfaceController'); +const { getIndexForVersion } = require('./util/VersionResolver'); const { WhatsWebURL, DefaultOptions, Events, WAState } = require('./util/Constants'); const { ExposeStore, LoadUtils } = require('./util/Injected'); const ChatFactory = require('./factories/ChatFactory'); @@ -108,6 +109,7 @@ class Client extends EventEmitter { this.pupPage = page; await this.authStrategy.afterBrowserInitialized(); + await this.initVersionOverride(); await page.goto(WhatsWebURL, { waitUntil: 'load', @@ -562,6 +564,22 @@ class Client extends EventEmitter { }); } + async initVersionOverride() { + const version = this.options.webVersion; + await this.pupPage.setRequestInterception(true); + this.pupPage.on('request', async (req) => { + if(req.url() === WhatsWebURL) { + req.respond({ + status: 200, + contentType: 'text/html', + body: await getIndexForVersion(version) + }); + } else { + req.continue(); + } + }); + } + /** * Closes the client */ diff --git a/src/util/Constants.js b/src/util/Constants.js index d062c7a..0d10430 100644 --- a/src/util/Constants.js +++ b/src/util/Constants.js @@ -7,6 +7,7 @@ exports.DefaultOptions = { headless: true, defaultViewport: null }, + webVersion: '2.2244.6', authTimeoutMs: 0, qrMaxRetries: 0, takeoverOnConflict: false, diff --git a/src/util/VersionResolver.js b/src/util/VersionResolver.js new file mode 100644 index 0000000..997861b --- /dev/null +++ b/src/util/VersionResolver.js @@ -0,0 +1,16 @@ +const fetch = require('node-fetch'); + +const VERSION_ARCHIVE_URL = 'https://archive.wwebjs.dev/web-index'; + +class VersionResolveError extends Error { } + +const getIndexForVersion = async (version) => { + const cachedRes = await fetch(`${VERSION_ARCHIVE_URL}/${version}`); + if(!cachedRes.ok) throw new VersionResolveError(`Couldn't load app for version ${version} from the archive`); + return cachedRes.text(); +}; + +module.exports = { + VersionResolveError, + getIndexForVersion +}; \ No newline at end of file