@switchbot/homebridge-switchbot 5.0.0-beta.102 → 5.0.0-beta.104

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.
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/homebridge-ui/server.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wBAAwB,EAAgB,MAAM,6BAA6B,CAAA;AAGpF,QAAA,MAAM,MAAM,0BAAiC,CAAA;AAgmB7C,eAAe,MAAM,CAAA"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/homebridge-ui/server.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wBAAwB,EAAgB,MAAM,6BAA6B,CAAA;AAGpF,QAAA,MAAM,MAAM,0BAAiC,CAAA;AA0nB7C,eAAe,MAAM,CAAA"}
@@ -182,11 +182,22 @@ server.onRequest('/add-device', async (body) => {
182
182
  throw new Error('Device ID is required');
183
183
  }
184
184
  const { config, platform, cfgPath } = await getSwitchBotPlatformConfig();
185
- console.log('[SwitchBot UI] POST /add-device - Adding device:', deviceId, 'to', cfgPath);
186
- console.log('[SwitchBot UI] POST /add-device - Platform name:', platform.platform || platform.name);
187
- console.log('[SwitchBot UI] POST /add-device - Current device count:', (platform.devices || []).length);
185
+ console.log('[SwitchBot UI] ========== /add-device REQUEST ==========');
186
+ console.log('[SwitchBot UI] Request body:', JSON.stringify(body, null, 2));
187
+ console.log('[SwitchBot UI] Config file path:', cfgPath);
188
+ console.log('[SwitchBot UI] Platform type:', typeof platform);
189
+ console.log('[SwitchBot UI] Platform.platform:', platform.platform);
190
+ console.log('[SwitchBot UI] Platform.name:', platform.name);
191
+ console.log('[SwitchBot UI] Platform object keys:', Object.keys(platform).slice(0, 10));
192
+ console.log('[SwitchBot UI] Platform.devices type:', typeof platform.devices);
193
+ console.log('[SwitchBot UI] Platform.devices length:', (platform.devices || []).length);
194
+ if (platform.devices && platform.devices.length > 0) {
195
+ console.log('[SwitchBot UI] Existing devices:', JSON.stringify(platform.devices.slice(0, 3), null, 2));
196
+ }
188
197
  const deviceArrays = getDeviceArrays(platform);
198
+ console.log('[SwitchBot UI] Device arrays:', deviceArrays.length, '- first array length:', deviceArrays[0]?.length);
189
199
  const allDevices = getAllDevices(platform);
200
+ console.log('[SwitchBot UI] All devices (deduplicated):', allDevices.length);
190
201
  // Check if already exists
191
202
  const normalizedDeviceId = String(deviceId).trim().toLowerCase();
192
203
  const exists = allDevices.some((d) => String(d.deviceId ?? d.id ?? '').trim().toLowerCase() === normalizedDeviceId);
@@ -210,8 +221,10 @@ server.onRequest('/add-device', async (body) => {
210
221
  configDeviceName: name,
211
222
  configDeviceType: type,
212
223
  };
224
+ console.log('[SwitchBot UI] Creating device object:', JSON.stringify(newDevice, null, 2));
213
225
  ref.push(newDevice);
214
- console.log('[SwitchBot UI] Added device to config:', JSON.stringify(newDevice));
226
+ console.log('[SwitchBot UI] ✓ Device pushed to array. Array is now length:', ref.length);
227
+ console.log('[SwitchBot UI] Array after push:', JSON.stringify(ref.map((d) => d.deviceId), null, 2));
215
228
  addCount++;
216
229
  }
217
230
  }
@@ -222,23 +235,36 @@ server.onRequest('/add-device', async (body) => {
222
235
  data: { message: 'Failed to add device to config' },
223
236
  };
224
237
  }
225
- // Save config
238
+ console.log('[SwitchBot UI] About to serialize and save config');
239
+ console.log('[SwitchBot UI] Config.platforms length:', config.platforms.length);
240
+ console.log('[SwitchBot UI] Target platform devices before stringify:', JSON.stringify(platform.devices, null, 2));
241
+ // Save config with fsync to ensure write completes before Homebridge caches it
226
242
  const configJson = JSON.stringify(config, null, 2);
227
- console.log(`[SwitchBot UI] Writing config to file (size: ${configJson.length} bytes)`);
228
- await fs.writeFile(cfgPath, configJson, 'utf8');
229
- console.log('[SwitchBot UI] Config write completed');
230
- // Verify file was actually written
231
- const verify = await fs.readFile(cfgPath, 'utf8');
232
- const verifyCfg = JSON.parse(verify);
233
- const verifyPlatforms = verifyCfg.platforms.filter((p) => /switchbot/i.test(String(p.platform || p.name || '')));
234
- const verifyDevices = verifyPlatforms[0]?.devices || [];
235
- console.log('[SwitchBot UI] Verification: File now contains', verifyDevices.length, 'devices');
243
+ console.log('[SwitchBot UI] ✓ Config serialized - size:', configJson.length, 'bytes');
244
+ // Use atomic write with fsync to prevent race conditions
245
+ const fileHandle = await fs.open(cfgPath, 'w');
246
+ try {
247
+ await fileHandle.writeFile(configJson, 'utf8');
248
+ await fileHandle.sync(); // Force flush to disk BEFORE closing
249
+ console.log('[SwitchBot UI] ✓✓ File written and synced to disk');
250
+ }
251
+ finally {
252
+ await fileHandle.close();
253
+ }
254
+ // Verify device is in the platform config
255
+ console.log('[SwitchBot UI] Verifying device was added...');
256
+ const verifyDevices = platform.devices || [];
257
+ console.log('[SwitchBot UI] Platform now has', verifyDevices.length, 'devices');
236
258
  const deviceFound = verifyDevices.some((d) => String(d.deviceId ?? d.id ?? '').trim().toLowerCase() === normalizedDeviceId);
259
+ console.log('[SwitchBot UI] Device found in platform?', deviceFound);
237
260
  if (!deviceFound) {
238
- console.error('[SwitchBot UI] Device not found in verified config!');
239
- throw new Error('Device was not persisted to config file');
261
+ console.error('[SwitchBot UI] ❌ VERIFICATION FAILED!');
262
+ console.error('[SwitchBot UI] Expected to find deviceId:', normalizedDeviceId);
263
+ console.error('[SwitchBot UI] But platform contains:', JSON.stringify(verifyDevices.map((d) => d.deviceId || d.id), null, 2));
264
+ throw new Error('Device was not added to platform config');
240
265
  }
241
- console.log('[SwitchBot UI] Device added successfully:', deviceId, 'saved to', cfgPath);
266
+ console.log('[SwitchBot UI] ✓✓ Device successfully added and verified');
267
+ console.log('[SwitchBot UI] ========== /add-device SUCCESS ==========');
242
268
  return {
243
269
  success: true,
244
270
  data: {
@@ -249,7 +275,10 @@ server.onRequest('/add-device', async (body) => {
249
275
  };
250
276
  }
251
277
  catch (e) {
252
- console.error('[SwitchBot UI] Error in /add-device:', e instanceof Error ? e.message : String(e));
278
+ console.error('[SwitchBot UI] ❌❌ ERROR in /add-device:', e instanceof Error ? e.message : String(e));
279
+ if (e instanceof Error) {
280
+ console.error('[SwitchBot UI] Stack trace:', e.stack);
281
+ }
253
282
  throw new RequestError(`Failed to add device: ${e instanceof Error ? e.message : String(e)}`, e);
254
283
  }
255
284
  });
@@ -310,17 +339,18 @@ server.onRequest('/add-devices', async (body) => {
310
339
  }
311
340
  console.log('[SwitchBot UI] POST /add-devices - Processing complete. Added:', addedCount, 'Skipped:', skippedCount);
312
341
  console.log('[SwitchBot UI] POST /add-devices - Platform.devices after additions:', (platform.devices || []).length);
313
- // Save config once for all devices
342
+ // Save config with fsync
314
343
  const configJson = JSON.stringify(config, null, 2);
315
344
  console.log(`[SwitchBot UI] Writing bulk config to file (size: ${configJson.length} bytes, devices: ${addedCount})`);
316
- await fs.writeFile(cfgPath, configJson, 'utf8');
317
- console.log('[SwitchBot UI] Config file written successfully');
318
- // Verify file was written
319
- const verify = await fs.readFile(cfgPath, 'utf8');
320
- const verifyCfg = JSON.parse(verify);
321
- const verifyPlatforms = verifyCfg.platforms.filter((p) => /switchbot/i.test(String(p.platform || p.name || '')));
322
- const verifyDevices = verifyPlatforms[0]?.devices || [];
323
- console.log('[SwitchBot UI] Verification: File now contains', verifyDevices.length, 'devices in SwitchBot platform');
345
+ const fileHandle = await fs.open(cfgPath, 'w');
346
+ try {
347
+ await fileHandle.writeFile(configJson, 'utf8');
348
+ await fileHandle.sync();
349
+ console.log('[SwitchBot UI] ✓ Config file written and synced');
350
+ }
351
+ finally {
352
+ await fileHandle.close();
353
+ }
324
354
  console.log('[SwitchBot UI] Bulk device add completed: Added', addedCount, 'Skipped', skippedCount);
325
355
  return {
326
356
  success: true,
@@ -390,26 +420,22 @@ server.onRequest('/update-device', async (body) => {
390
420
  console.log('[SwitchBot UI] ✓ Updated room to:', room);
391
421
  }
392
422
  console.log('[SwitchBot UI] Device after updates:', JSON.stringify(device, null, 2));
393
- // Save config
423
+ // Save config with fsync
394
424
  const configJson = JSON.stringify(config, null, 2);
395
425
  console.log(`[SwitchBot UI] Writing config to file (size: ${configJson.length} bytes)`);
396
- await fs.writeFile(cfgPath, configJson, 'utf8');
397
- console.log('[SwitchBot UI] ✓ Config file write completed');
398
- // Verify file was actually written
399
- const verify = await fs.readFile(cfgPath, 'utf8');
400
- const verifyCfg = JSON.parse(verify);
401
- const verifyPlatforms = verifyCfg.platforms.filter((p) => /switchbot/i.test(String(p.platform || p.name || '')));
402
- const verifyDevices = verifyPlatforms[0]?.devices || [];
403
- const verifiedDevice = verifyDevices.find((d) => String(d.deviceId ?? d.id ?? '').trim().toLowerCase() === normalizedDeviceId);
404
- if (!verifiedDevice) {
405
- console.error('[SwitchBot UI] Device not found in verified config!');
406
- throw new Error('Device update was not persisted to config file');
407
- }
408
- console.log('[SwitchBot UI] ✓ Device verified in config after update');
426
+ const fileHandle = await fs.open(cfgPath, 'w');
427
+ try {
428
+ await fileHandle.writeFile(configJson, 'utf8');
429
+ await fileHandle.sync();
430
+ console.log('[SwitchBot UI] ✓ Config file written and synced');
431
+ }
432
+ finally {
433
+ await fileHandle.close();
434
+ }
409
435
  console.log('[SwitchBot UI] Device updated successfully:', deviceId);
410
436
  return {
411
437
  success: true,
412
- data: { message: `Device updated successfully - type: ${configDeviceType || verifiedDevice.configDeviceType}` },
438
+ data: { message: `Device updated successfully - type: ${configDeviceType || device.configDeviceType}` },
413
439
  };
414
440
  }
415
441
  catch (e) {
@@ -446,21 +472,18 @@ server.onRequest('/delete-device', async (body) => {
446
472
  if (!removedCount) {
447
473
  throw new Error('Device not found in config');
448
474
  }
449
- // Save config
475
+ // Save config with fsync
450
476
  const configJson = JSON.stringify(config, null, 2);
451
- await fs.writeFile(cfgPath, configJson, 'utf8');
452
- console.log('[SwitchBot UI] Config write completed');
453
- // Verify device actually deleted
454
- const verify = await fs.readFile(cfgPath, 'utf8');
455
- const verifyCfg = JSON.parse(verify);
456
- const verifyPlatforms = verifyCfg.platforms.filter((p) => p.platform === 'SwitchBot');
457
- const allVerifyDevices = getAllDevices(verifyPlatforms[0] || {});
458
- const deviceStillExists = allVerifyDevices.find((d) => String(d.deviceId ?? d.id ?? '').trim().toLowerCase() === normalizedDeviceId);
459
- if (deviceStillExists) {
460
- throw new Error('Device was not deleted from config file');
461
- }
462
- console.log('[SwitchBot UI] ✓ Device verified deleted from config');
463
- console.log('[SwitchBot UI] Device deleted successfully:', deviceId, 'saved to', cfgPath);
477
+ const fileHandle = await fs.open(cfgPath, 'w');
478
+ try {
479
+ await fileHandle.writeFile(configJson, 'utf8');
480
+ await fileHandle.sync();
481
+ console.log('[SwitchBot UI] ✓ Config file written and synced');
482
+ }
483
+ finally {
484
+ await fileHandle.close();
485
+ }
486
+ console.log('[SwitchBot UI] Device deleted successfully:', deviceId);
464
487
  return {
465
488
  success: true,
466
489
  data: { message: `Device "${deviceName}" removed from config` },
@@ -498,12 +521,20 @@ server.onRequest('/credentials', async (body) => {
498
521
  console.log('[SwitchBot UI] POST /credentials - Saving to platform:', platform.platform || platform.name);
499
522
  console.log('[SwitchBot UI] Config path:', cfgPath);
500
523
  console.log('[SwitchBot UI] Token length:', token.length, 'Secret length:', secret.length);
501
- // Save token and secret on the same config branch used by this platform
524
+ // Save token and secret
502
525
  setCredential(platform, 'openApiToken', token);
503
526
  setCredential(platform, 'openApiSecret', secret);
504
- // Write back to config file
505
- await fs.writeFile(cfgPath, JSON.stringify(config, null, 2), 'utf8');
506
- console.log('[SwitchBot UI] Credentials saved successfully');
527
+ // Write config with fsync
528
+ const configJson = JSON.stringify(config, null, 2);
529
+ const fileHandle = await fs.open(cfgPath, 'w');
530
+ try {
531
+ await fileHandle.writeFile(configJson, 'utf8');
532
+ await fileHandle.sync();
533
+ console.log('[SwitchBot UI] ✓ Credentials saved and synced to disk');
534
+ }
535
+ finally {
536
+ await fileHandle.close();
537
+ }
507
538
  return {
508
539
  success: true,
509
540
  data: { message: 'Credentials saved successfully' },
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/homebridge-ui/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/homebridge-ui/server.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- <!DOCTYPE html><html class="default" lang="en" data-base="../"><head><meta charset="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>default | @switchbot/homebridge-switchbot</title><meta name="description" content="Documentation for @switchbot/homebridge-switchbot"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script async src="../assets/icons.js" id="tsd-icons-script"></script><script async src="../assets/search.js" id="tsd-search-script"></script><script async src="../assets/navigation.js" id="tsd-nav-script"></script></head><body><script>document.documentElement.dataset.theme = localStorage.getItem("tsd-theme") || "os";document.body.style.display="none";setTimeout(() => window.app?app.showPage():document.body.style.removeProperty("display"),500)</script><header class="tsd-page-toolbar"><div class="tsd-toolbar-contents container"><a href="../index.html" class="title">@switchbot/homebridge-switchbot</a><div id="tsd-toolbar-links"></div><button id="tsd-search-trigger" class="tsd-widget" aria-label="Search"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-search"></use></svg></button><dialog id="tsd-search" aria-label="Search"><input role="combobox" id="tsd-search-input" aria-controls="tsd-search-results" aria-autocomplete="list" aria-expanded="true" autocapitalize="off" autocomplete="off" placeholder="Search the docs" maxLength="100"/><ul role="listbox" id="tsd-search-results"></ul><div id="tsd-search-status" aria-live="polite" aria-atomic="true"><div>Preparing search index...</div></div></dialog><a href="#" class="tsd-widget menu" id="tsd-toolbar-menu-trigger" data-toggle="menu" aria-label="Menu"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-menu"></use></svg></a></div></header><div class="container container-main"><div class="col-content"><div class="tsd-page-title"><ul class="tsd-breadcrumb" aria-label="Breadcrumb"><li><a href="" aria-current="page">default</a></li></ul><h1>Variable default</h1></div><div class="tsd-signature"><span class="tsd-kind-variable">default</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-symbol">(</span><span class="tsd-kind-parameter">api</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">API</span><span class="tsd-signature-symbol">)</span> <span class="tsd-signature-symbol">=&gt;</span> <span class="tsd-signature-type">void</span></div><div class="tsd-type-declaration"><h4>Type Declaration</h4><ul class="tsd-parameters"><li class="tsd-parameter-signature"><ul class="tsd-signatures"><li class="tsd-signature" id="__type"><span class="tsd-signature-symbol">(</span><span class="tsd-kind-parameter">api</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">API</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">void</span></li><li class="tsd-description"><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><span><span class="tsd-kind-parameter">api</span>: <span class="tsd-signature-type">API</span></span></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4></li></ul></li></ul></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/OpenWonderLabs/homebridge-switchbot/blob/fe590fc1e9be5a84b0ecae1945894cc6f247338a/src/index.ts#L12">index.ts:12</a></li></ul></aside></div><div class="col-sidebar"><div class="page-menu"><div class="tsd-navigation settings"><details class="tsd-accordion"><summary class="tsd-accordion-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg><h3>Settings</h3></summary><div class="tsd-accordion-details"><div class="tsd-filter-visibility"><span class="settings-label">Member Visibility</span><ul id="tsd-filter-options"><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-inherited" name="inherited" checked/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Inherited</span></label></li></ul></div><div class="tsd-theme-toggle"><label class="settings-label" for="tsd-theme">Theme</label><select id="tsd-theme"><option value="os">OS</option><option value="light">Light</option><option value="dark">Dark</option></select></div></div></details></div></div><div class="site-menu"><nav class="tsd-navigation"><a href="../modules.html">@switchbot/homebridge-switchbot</a><ul class="tsd-small-nested-navigation" id="tsd-nav-container"><li>Loading...</li></ul></nav></div></div></div><footer></footer><div class="overlay"></div></body></html>
1
+ <!DOCTYPE html><html class="default" lang="en" data-base="../"><head><meta charset="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>default | @switchbot/homebridge-switchbot</title><meta name="description" content="Documentation for @switchbot/homebridge-switchbot"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script async src="../assets/icons.js" id="tsd-icons-script"></script><script async src="../assets/search.js" id="tsd-search-script"></script><script async src="../assets/navigation.js" id="tsd-nav-script"></script></head><body><script>document.documentElement.dataset.theme = localStorage.getItem("tsd-theme") || "os";document.body.style.display="none";setTimeout(() => window.app?app.showPage():document.body.style.removeProperty("display"),500)</script><header class="tsd-page-toolbar"><div class="tsd-toolbar-contents container"><a href="../index.html" class="title">@switchbot/homebridge-switchbot</a><div id="tsd-toolbar-links"></div><button id="tsd-search-trigger" class="tsd-widget" aria-label="Search"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-search"></use></svg></button><dialog id="tsd-search" aria-label="Search"><input role="combobox" id="tsd-search-input" aria-controls="tsd-search-results" aria-autocomplete="list" aria-expanded="true" autocapitalize="off" autocomplete="off" placeholder="Search the docs" maxLength="100"/><ul role="listbox" id="tsd-search-results"></ul><div id="tsd-search-status" aria-live="polite" aria-atomic="true"><div>Preparing search index...</div></div></dialog><a href="#" class="tsd-widget menu" id="tsd-toolbar-menu-trigger" data-toggle="menu" aria-label="Menu"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-menu"></use></svg></a></div></header><div class="container container-main"><div class="col-content"><div class="tsd-page-title"><ul class="tsd-breadcrumb" aria-label="Breadcrumb"><li><a href="" aria-current="page">default</a></li></ul><h1>Variable default</h1></div><div class="tsd-signature"><span class="tsd-kind-variable">default</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-symbol">(</span><span class="tsd-kind-parameter">api</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">API</span><span class="tsd-signature-symbol">)</span> <span class="tsd-signature-symbol">=&gt;</span> <span class="tsd-signature-type">void</span></div><div class="tsd-type-declaration"><h4>Type Declaration</h4><ul class="tsd-parameters"><li class="tsd-parameter-signature"><ul class="tsd-signatures"><li class="tsd-signature" id="__type"><span class="tsd-signature-symbol">(</span><span class="tsd-kind-parameter">api</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">API</span><span class="tsd-signature-symbol">)</span><span class="tsd-signature-symbol">:</span> <span class="tsd-signature-type">void</span></li><li class="tsd-description"><div class="tsd-parameters"><h4 class="tsd-parameters-title">Parameters</h4><ul class="tsd-parameter-list"><li><span><span class="tsd-kind-parameter">api</span>: <span class="tsd-signature-type">API</span></span></li></ul></div><h4 class="tsd-returns-title">Returns <span class="tsd-signature-type">void</span></h4></li></ul></li></ul></div><aside class="tsd-sources"><ul><li>Defined in <a href="https://github.com/OpenWonderLabs/homebridge-switchbot/blob/4170d7fb3db91e8eceffcbe2eff4c8cde7bf1f9d/src/index.ts#L12">index.ts:12</a></li></ul></aside></div><div class="col-sidebar"><div class="page-menu"><div class="tsd-navigation settings"><details class="tsd-accordion"><summary class="tsd-accordion-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg><h3>Settings</h3></summary><div class="tsd-accordion-details"><div class="tsd-filter-visibility"><span class="settings-label">Member Visibility</span><ul id="tsd-filter-options"><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-inherited" name="inherited" checked/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Inherited</span></label></li></ul></div><div class="tsd-theme-toggle"><label class="settings-label" for="tsd-theme">Theme</label><select id="tsd-theme"><option value="os">OS</option><option value="light">Light</option><option value="dark">Dark</option></select></div></div></details></div></div><div class="site-menu"><nav class="tsd-navigation"><a href="../modules.html">@switchbot/homebridge-switchbot</a><ul class="tsd-small-nested-navigation" id="tsd-nav-container"><li>Loading...</li></ul></nav></div></div></div><footer></footer><div class="overlay"></div></body></html>
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@switchbot/homebridge-switchbot",
3
3
  "displayName": "SwitchBot",
4
4
  "type": "module",
5
- "version": "5.0.0-beta.102",
5
+ "version": "5.0.0-beta.104",
6
6
  "description": "The SwitchBot plugin allows you to access your SwitchBot device(s) from HomeKit.",
7
7
  "author": "SwitchBot <support@wondertechlabs.com> (https://github.com/SwitchBot)",
8
8
  "contributors": [
@@ -216,12 +216,24 @@ server.onRequest('/add-device', async (body: any) => {
216
216
 
217
217
  const { config, platform, cfgPath } = await getSwitchBotPlatformConfig()
218
218
 
219
- console.log('[SwitchBot UI] POST /add-device - Adding device:', deviceId, 'to', cfgPath)
220
- console.log('[SwitchBot UI] POST /add-device - Platform name:', platform.platform || platform.name)
221
- console.log('[SwitchBot UI] POST /add-device - Current device count:', (platform.devices || []).length)
219
+ console.log('[SwitchBot UI] ========== /add-device REQUEST ==========')
220
+ console.log('[SwitchBot UI] Request body:', JSON.stringify(body, null, 2))
221
+ console.log('[SwitchBot UI] Config file path:', cfgPath)
222
+ console.log('[SwitchBot UI] Platform type:', typeof platform)
223
+ console.log('[SwitchBot UI] Platform.platform:', platform.platform)
224
+ console.log('[SwitchBot UI] Platform.name:', platform.name)
225
+ console.log('[SwitchBot UI] Platform object keys:', Object.keys(platform).slice(0, 10))
226
+ console.log('[SwitchBot UI] Platform.devices type:', typeof platform.devices)
227
+ console.log('[SwitchBot UI] Platform.devices length:', (platform.devices || []).length)
228
+ if (platform.devices && platform.devices.length > 0) {
229
+ console.log('[SwitchBot UI] Existing devices:', JSON.stringify(platform.devices.slice(0, 3), null, 2))
230
+ }
222
231
 
223
232
  const deviceArrays = getDeviceArrays(platform)
233
+ console.log('[SwitchBot UI] Device arrays:', deviceArrays.length, '- first array length:', deviceArrays[0]?.length)
234
+
224
235
  const allDevices = getAllDevices(platform)
236
+ console.log('[SwitchBot UI] All devices (deduplicated):', allDevices.length)
225
237
 
226
238
  // Check if already exists
227
239
  const normalizedDeviceId = String(deviceId).trim().toLowerCase()
@@ -247,8 +259,10 @@ server.onRequest('/add-device', async (body: any) => {
247
259
  configDeviceName: name,
248
260
  configDeviceType: type,
249
261
  }
262
+ console.log('[SwitchBot UI] Creating device object:', JSON.stringify(newDevice, null, 2))
250
263
  ref.push(newDevice)
251
- console.log('[SwitchBot UI] Added device to config:', JSON.stringify(newDevice))
264
+ console.log('[SwitchBot UI] ✓ Device pushed to array. Array is now length:', ref.length)
265
+ console.log('[SwitchBot UI] Array after push:', JSON.stringify(ref.map((d: any) => d.deviceId), null, 2))
252
266
  addCount++
253
267
  }
254
268
  }
@@ -261,26 +275,41 @@ server.onRequest('/add-device', async (body: any) => {
261
275
  }
262
276
  }
263
277
 
264
- // Save config
278
+ console.log('[SwitchBot UI] About to serialize and save config')
279
+ console.log('[SwitchBot UI] Config.platforms length:', config.platforms.length)
280
+ console.log('[SwitchBot UI] Target platform devices before stringify:', JSON.stringify(platform.devices, null, 2))
281
+
282
+ // Save config with fsync to ensure write completes before Homebridge caches it
265
283
  const configJson = JSON.stringify(config, null, 2)
266
- console.log(`[SwitchBot UI] Writing config to file (size: ${configJson.length} bytes)`)
267
- await fs.writeFile(cfgPath, configJson, 'utf8')
268
- console.log('[SwitchBot UI] Config write completed')
284
+ console.log('[SwitchBot UI] ✓ Config serialized - size:', configJson.length, 'bytes')
269
285
 
270
- // Verify file was actually written
271
- const verify = await fs.readFile(cfgPath, 'utf8')
272
- const verifyCfg = JSON.parse(verify)
273
- const verifyPlatforms = verifyCfg.platforms.filter((p: any) => /switchbot/i.test(String(p.platform || p.name || '')))
274
- const verifyDevices = verifyPlatforms[0]?.devices || []
275
- console.log('[SwitchBot UI] Verification: File now contains', verifyDevices.length, 'devices')
286
+ // Use atomic write with fsync to prevent race conditions
287
+ const fileHandle = await fs.open(cfgPath, 'w')
288
+ try {
289
+ await fileHandle.writeFile(configJson, 'utf8')
290
+ await fileHandle.sync() // Force flush to disk BEFORE closing
291
+ console.log('[SwitchBot UI] ✓✓ File written and synced to disk')
292
+ } finally {
293
+ await fileHandle.close()
294
+ }
295
+
296
+ // Verify device is in the platform config
297
+ console.log('[SwitchBot UI] Verifying device was added...')
298
+ const verifyDevices = platform.devices || []
299
+ console.log('[SwitchBot UI] Platform now has', verifyDevices.length, 'devices')
276
300
 
277
301
  const deviceFound = verifyDevices.some((d: any) => String(d.deviceId ?? d.id ?? '').trim().toLowerCase() === normalizedDeviceId)
302
+ console.log('[SwitchBot UI] Device found in platform?', deviceFound)
303
+
278
304
  if (!deviceFound) {
279
- console.error('[SwitchBot UI] Device not found in verified config!')
280
- throw new Error('Device was not persisted to config file')
305
+ console.error('[SwitchBot UI] ❌ VERIFICATION FAILED!')
306
+ console.error('[SwitchBot UI] Expected to find deviceId:', normalizedDeviceId)
307
+ console.error('[SwitchBot UI] But platform contains:', JSON.stringify(verifyDevices.map((d: any) => d.deviceId || d.id), null, 2))
308
+ throw new Error('Device was not added to platform config')
281
309
  }
282
310
 
283
- console.log('[SwitchBot UI] Device added successfully:', deviceId, 'saved to', cfgPath)
311
+ console.log('[SwitchBot UI] ✓✓ Device successfully added and verified')
312
+ console.log('[SwitchBot UI] ========== /add-device SUCCESS ==========')
284
313
 
285
314
  return {
286
315
  success: true,
@@ -291,7 +320,10 @@ server.onRequest('/add-device', async (body: any) => {
291
320
  },
292
321
  }
293
322
  } catch (e) {
294
- console.error('[SwitchBot UI] Error in /add-device:', e instanceof Error ? e.message : String(e))
323
+ console.error('[SwitchBot UI] ❌❌ ERROR in /add-device:', e instanceof Error ? e.message : String(e))
324
+ if (e instanceof Error) {
325
+ console.error('[SwitchBot UI] Stack trace:', e.stack)
326
+ }
295
327
  throw new RequestError(`Failed to add device: ${e instanceof Error ? e.message : String(e)}`, e)
296
328
  }
297
329
  })
@@ -366,18 +398,18 @@ server.onRequest('/add-devices', async (body: any) => {
366
398
  console.log('[SwitchBot UI] POST /add-devices - Processing complete. Added:', addedCount, 'Skipped:', skippedCount)
367
399
  console.log('[SwitchBot UI] POST /add-devices - Platform.devices after additions:', (platform.devices || []).length)
368
400
 
369
- // Save config once for all devices
401
+ // Save config with fsync
370
402
  const configJson = JSON.stringify(config, null, 2)
371
403
  console.log(`[SwitchBot UI] Writing bulk config to file (size: ${configJson.length} bytes, devices: ${addedCount})`)
372
- await fs.writeFile(cfgPath, configJson, 'utf8')
373
- console.log('[SwitchBot UI] Config file written successfully')
374
404
 
375
- // Verify file was written
376
- const verify = await fs.readFile(cfgPath, 'utf8')
377
- const verifyCfg = JSON.parse(verify)
378
- const verifyPlatforms = verifyCfg.platforms.filter((p: any) => /switchbot/i.test(String(p.platform || p.name || '')))
379
- const verifyDevices = verifyPlatforms[0]?.devices || []
380
- console.log('[SwitchBot UI] Verification: File now contains', verifyDevices.length, 'devices in SwitchBot platform')
405
+ const fileHandle = await fs.open(cfgPath, 'w')
406
+ try {
407
+ await fileHandle.writeFile(configJson, 'utf8')
408
+ await fileHandle.sync()
409
+ console.log('[SwitchBot UI] ✓ Config file written and synced')
410
+ } finally {
411
+ await fileHandle.close()
412
+ }
381
413
 
382
414
  console.log('[SwitchBot UI] Bulk device add completed: Added', addedCount, 'Skipped', skippedCount)
383
415
 
@@ -460,30 +492,24 @@ server.onRequest('/update-device', async (body: any) => {
460
492
 
461
493
  console.log('[SwitchBot UI] Device after updates:', JSON.stringify(device, null, 2))
462
494
 
463
- // Save config
495
+ // Save config with fsync
464
496
  const configJson = JSON.stringify(config, null, 2)
465
497
  console.log(`[SwitchBot UI] Writing config to file (size: ${configJson.length} bytes)`)
466
- await fs.writeFile(cfgPath, configJson, 'utf8')
467
- console.log('[SwitchBot UI] ✓ Config file write completed')
468
-
469
- // Verify file was actually written
470
- const verify = await fs.readFile(cfgPath, 'utf8')
471
- const verifyCfg = JSON.parse(verify)
472
- const verifyPlatforms = verifyCfg.platforms.filter((p: any) => /switchbot/i.test(String(p.platform || p.name || '')))
473
- const verifyDevices = verifyPlatforms[0]?.devices || []
474
- const verifiedDevice = verifyDevices.find((d: any) => String(d.deviceId ?? d.id ?? '').trim().toLowerCase() === normalizedDeviceId)
475
498
 
476
- if (!verifiedDevice) {
477
- console.error('[SwitchBot UI] Device not found in verified config!')
478
- throw new Error('Device update was not persisted to config file')
499
+ const fileHandle = await fs.open(cfgPath, 'w')
500
+ try {
501
+ await fileHandle.writeFile(configJson, 'utf8')
502
+ await fileHandle.sync()
503
+ console.log('[SwitchBot UI] ✓ Config file written and synced')
504
+ } finally {
505
+ await fileHandle.close()
479
506
  }
480
507
 
481
- console.log('[SwitchBot UI] ✓ Device verified in config after update')
482
508
  console.log('[SwitchBot UI] Device updated successfully:', deviceId)
483
509
 
484
510
  return {
485
511
  success: true,
486
- data: { message: `Device updated successfully - type: ${configDeviceType || verifiedDevice.configDeviceType}` },
512
+ data: { message: `Device updated successfully - type: ${configDeviceType || device.configDeviceType}` },
487
513
  }
488
514
  } catch (e) {
489
515
  console.error('[SwitchBot UI] Error in /update-device:', e instanceof Error ? e.message : String(e), e)
@@ -527,24 +553,18 @@ server.onRequest('/delete-device', async (body: any) => {
527
553
  throw new Error('Device not found in config')
528
554
  }
529
555
 
530
- // Save config
556
+ // Save config with fsync
531
557
  const configJson = JSON.stringify(config, null, 2)
532
- await fs.writeFile(cfgPath, configJson, 'utf8')
533
- console.log('[SwitchBot UI] Config write completed')
534
-
535
- // Verify device actually deleted
536
- const verify = await fs.readFile(cfgPath, 'utf8')
537
- const verifyCfg = JSON.parse(verify)
538
- const verifyPlatforms = verifyCfg.platforms.filter((p: any) => p.platform === 'SwitchBot')
539
- const allVerifyDevices = getAllDevices(verifyPlatforms[0] || {})
540
-
541
- const deviceStillExists = allVerifyDevices.find((d: any) => String(d.deviceId ?? d.id ?? '').trim().toLowerCase() === normalizedDeviceId)
542
- if (deviceStillExists) {
543
- throw new Error('Device was not deleted from config file')
558
+ const fileHandle = await fs.open(cfgPath, 'w')
559
+ try {
560
+ await fileHandle.writeFile(configJson, 'utf8')
561
+ await fileHandle.sync()
562
+ console.log('[SwitchBot UI] ✓ Config file written and synced')
563
+ } finally {
564
+ await fileHandle.close()
544
565
  }
545
566
 
546
- console.log('[SwitchBot UI] ✓ Device verified deleted from config')
547
- console.log('[SwitchBot UI] Device deleted successfully:', deviceId, 'saved to', cfgPath)
567
+ console.log('[SwitchBot UI] Device deleted successfully:', deviceId)
548
568
 
549
569
  return {
550
570
  success: true,
@@ -588,14 +608,20 @@ server.onRequest('/credentials', async (body: any) => {
588
608
  console.log('[SwitchBot UI] Config path:', cfgPath)
589
609
  console.log('[SwitchBot UI] Token length:', token.length, 'Secret length:', secret.length)
590
610
 
591
- // Save token and secret on the same config branch used by this platform
611
+ // Save token and secret
592
612
  setCredential(platform, 'openApiToken', token)
593
613
  setCredential(platform, 'openApiSecret', secret)
594
614
 
595
- // Write back to config file
596
- await fs.writeFile(cfgPath, JSON.stringify(config, null, 2), 'utf8')
597
-
598
- console.log('[SwitchBot UI] Credentials saved successfully')
615
+ // Write config with fsync
616
+ const configJson = JSON.stringify(config, null, 2)
617
+ const fileHandle = await fs.open(cfgPath, 'w')
618
+ try {
619
+ await fileHandle.writeFile(configJson, 'utf8')
620
+ await fileHandle.sync()
621
+ console.log('[SwitchBot UI] ✓ Credentials saved and synced to disk')
622
+ } finally {
623
+ await fileHandle.close()
624
+ }
599
625
 
600
626
  return {
601
627
  success: true,