homebridge-melcloud-control 4.0.0-beta.453 → 4.0.0-beta.455

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -20,7 +20,7 @@ class PluginUiServer extends HomebridgePluginUiServer {
20
20
  const melCloud = new MelCloud(account, accountFile, buildingsFile, devicesFile);
21
21
 
22
22
  try {
23
- await melCloud.connect();
23
+ const accountInfo = await melCloud.connect();
24
24
  const devices = await melCloud.checkDevicesList();
25
25
  return devices;
26
26
  } catch (error) {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "displayName": "MELCloud Control",
3
3
  "name": "homebridge-melcloud-control",
4
- "version": "4.0.0-beta.453",
4
+ "version": "4.0.0-beta.455",
5
5
  "description": "Homebridge plugin to control Mitsubishi Air Conditioner, Heat Pump and Energy Recovery Ventilation.",
6
6
  "license": "MIT",
7
7
  "author": "grzegorz914",
package/src/melcloud.js CHANGED
@@ -304,6 +304,7 @@ class MelCloud extends EventEmitter {
304
304
 
305
305
  try {
306
306
  const chromiumPath = await this.functions.ensureChromiumInstalled();
307
+
307
308
  browser = await puppeteer.launch({
308
309
  headless: true,
309
310
  executablePath: chromiumPath || puppeteer.executablePath(),
@@ -316,17 +317,33 @@ class MelCloud extends EventEmitter {
316
317
  ]
317
318
  });
318
319
 
319
- const page = await browser.newPage();
320
- page.on('error', error => { if (this.logError) this.emit('error', `Page crashed: ${error.message}`); });
321
- page.on('pageerror', error => { if (this.logError) this.emit('error', `Browser error: ${error.message}`); });
320
+ // Wait for Puppeteer target to be ready (browser internal page)
321
+ await new Promise(r => setTimeout(r, 500));
322
+
323
+ // Defensive check for main frame availability
324
+ const pages = await browser.pages();
325
+ let page = pages[0];
326
+ if (!page) {
327
+ if (this.logDebug) this.emit('debug', 'No initial page found, creating a new one.');
328
+ page = await browser.newPage();
329
+ }
330
+
331
+ // Ensure page is ready
332
+ await new Promise(r => setTimeout(r, 200));
333
+
334
+ page.on('error', err => { if (this.logError) this.emit('error', `Page crashed: ${err.message}`); });
335
+ page.on('pageerror', err => { if (this.logError) this.emit('error', `Browser error: ${err.message}`); });
322
336
  page.on('close', () => { if (this.logDebug) this.emit('debug', 'Page was closed unexpectedly'); });
323
337
  browser.on('disconnected', () => { if (this.logDebug) this.emit('debug', 'Browser disconnected unexpectedly'); });
324
338
 
325
339
  page.setDefaultTimeout(30000);
326
340
  page.setDefaultNavigationTimeout(30000);
327
341
 
342
+ // ✅ Now safe to navigate
328
343
  await page.goto(ApiUrlsHome.BaseURL, { waitUntil: ['domcontentloaded', 'networkidle2'] });
329
344
 
345
+
346
+
330
347
  const buttons = await page.$$('button.btn--blue');
331
348
  let loginBtn = null;
332
349
  for (const btn of buttons) {