homebridge 2.0.0-beta.4 → 2.0.0-beta.40
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.
- package/README.md +16 -17
- package/bin/homebridge.js +22 -0
- package/config-sample.json +3 -3
- package/dist/api.d.ts +499 -0
- package/dist/api.d.ts.map +1 -0
- package/dist/api.js +223 -0
- package/dist/api.js.map +1 -0
- package/dist/api.spec.d.ts +2 -0
- package/dist/api.spec.d.ts.map +1 -0
- package/dist/api.spec.js +413 -0
- package/dist/api.spec.js.map +1 -0
- package/{lib → dist}/bridgeService.d.ts +19 -10
- package/dist/bridgeService.d.ts.map +1 -0
- package/{lib → dist}/bridgeService.js +85 -117
- package/dist/bridgeService.js.map +1 -0
- package/{lib → dist}/childBridgeFork.d.ts +11 -5
- package/dist/childBridgeFork.d.ts.map +1 -0
- package/{lib → dist}/childBridgeFork.js +93 -44
- package/dist/childBridgeFork.js.map +1 -0
- package/{lib → dist}/childBridgeService.d.ts +37 -7
- package/dist/childBridgeService.d.ts.map +1 -0
- package/{lib → dist}/childBridgeService.js +127 -69
- package/dist/childBridgeService.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +90 -0
- package/dist/cli.js.map +1 -0
- package/dist/externalPortService.d.ts +47 -0
- package/dist/externalPortService.d.ts.map +1 -0
- package/dist/externalPortService.js +105 -0
- package/dist/externalPortService.js.map +1 -0
- package/dist/index.d.ts +141 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +53 -0
- package/dist/index.js.map +1 -0
- package/dist/ipcService.d.ts +48 -0
- package/dist/ipcService.d.ts.map +1 -0
- package/{lib → dist}/ipcService.js +12 -14
- package/dist/ipcService.js.map +1 -0
- package/{lib → dist}/logger.d.ts +12 -6
- package/dist/logger.d.ts.map +1 -0
- package/{lib → dist}/logger.js +27 -28
- package/dist/logger.js.map +1 -0
- package/dist/logger.spec.d.ts +2 -0
- package/dist/logger.spec.d.ts.map +1 -0
- package/dist/logger.spec.js +95 -0
- package/dist/logger.spec.js.map +1 -0
- package/dist/matter/ChildBridgeMatterManager.d.ts +96 -0
- package/dist/matter/ChildBridgeMatterManager.d.ts.map +1 -0
- package/dist/matter/ChildBridgeMatterManager.js +399 -0
- package/dist/matter/ChildBridgeMatterManager.js.map +1 -0
- package/dist/matter/ExternalMatterAccessoryPublisher.d.ts +48 -0
- package/dist/matter/ExternalMatterAccessoryPublisher.d.ts.map +1 -0
- package/dist/matter/ExternalMatterAccessoryPublisher.js +73 -0
- package/dist/matter/ExternalMatterAccessoryPublisher.js.map +1 -0
- package/dist/matter/ExternalMatterAccessoryPublisher.spec.d.ts +2 -0
- package/dist/matter/ExternalMatterAccessoryPublisher.spec.d.ts.map +1 -0
- package/dist/matter/ExternalMatterAccessoryPublisher.spec.js +293 -0
- package/dist/matter/ExternalMatterAccessoryPublisher.spec.js.map +1 -0
- package/dist/matter/MatterAPIImpl.d.ts +504 -0
- package/dist/matter/MatterAPIImpl.d.ts.map +1 -0
- package/dist/matter/MatterAPIImpl.js +305 -0
- package/dist/matter/MatterAPIImpl.js.map +1 -0
- package/dist/matter/MatterBridgeManager.d.ts +87 -0
- package/dist/matter/MatterBridgeManager.d.ts.map +1 -0
- package/dist/matter/MatterBridgeManager.js +413 -0
- package/dist/matter/MatterBridgeManager.js.map +1 -0
- package/dist/matter/MatterConfigCollector.d.ts +26 -0
- package/dist/matter/MatterConfigCollector.d.ts.map +1 -0
- package/dist/matter/MatterConfigCollector.js +78 -0
- package/dist/matter/MatterConfigCollector.js.map +1 -0
- package/dist/matter/accessoryCache.d.ts +105 -0
- package/dist/matter/accessoryCache.d.ts.map +1 -0
- package/dist/matter/accessoryCache.js +214 -0
- package/dist/matter/accessoryCache.js.map +1 -0
- package/dist/matter/accessoryCache.spec.d.ts +2 -0
- package/dist/matter/accessoryCache.spec.d.ts.map +1 -0
- package/dist/matter/accessoryCache.spec.js +452 -0
- package/dist/matter/accessoryCache.spec.js.map +1 -0
- package/dist/matter/behaviors/BehaviorRegistry.d.ts +65 -0
- package/dist/matter/behaviors/BehaviorRegistry.d.ts.map +1 -0
- package/dist/matter/behaviors/BehaviorRegistry.js +139 -0
- package/dist/matter/behaviors/BehaviorRegistry.js.map +1 -0
- package/dist/matter/behaviors/BehaviorRegistry.spec.d.ts +2 -0
- package/dist/matter/behaviors/BehaviorRegistry.spec.d.ts.map +1 -0
- package/dist/matter/behaviors/BehaviorRegistry.spec.js +307 -0
- package/dist/matter/behaviors/BehaviorRegistry.spec.js.map +1 -0
- package/dist/matter/behaviors/ColorControlBehavior.d.ts +63 -0
- package/dist/matter/behaviors/ColorControlBehavior.d.ts.map +1 -0
- package/dist/matter/behaviors/ColorControlBehavior.js +223 -0
- package/dist/matter/behaviors/ColorControlBehavior.js.map +1 -0
- package/dist/matter/behaviors/ColorControlBehavior.spec.d.ts +2 -0
- package/dist/matter/behaviors/ColorControlBehavior.spec.d.ts.map +1 -0
- package/dist/matter/behaviors/ColorControlBehavior.spec.js +29 -0
- package/dist/matter/behaviors/ColorControlBehavior.spec.js.map +1 -0
- package/dist/matter/behaviors/DoorLockBehavior.d.ts +20 -0
- package/dist/matter/behaviors/DoorLockBehavior.d.ts.map +1 -0
- package/dist/matter/behaviors/DoorLockBehavior.js +71 -0
- package/dist/matter/behaviors/DoorLockBehavior.js.map +1 -0
- package/dist/matter/behaviors/DoorLockBehavior.spec.d.ts +2 -0
- package/dist/matter/behaviors/DoorLockBehavior.spec.d.ts.map +1 -0
- package/dist/matter/behaviors/DoorLockBehavior.spec.js +120 -0
- package/dist/matter/behaviors/DoorLockBehavior.spec.js.map +1 -0
- package/dist/matter/behaviors/FanControlBehavior.d.ts +20 -0
- package/dist/matter/behaviors/FanControlBehavior.d.ts.map +1 -0
- package/dist/matter/behaviors/FanControlBehavior.js +71 -0
- package/dist/matter/behaviors/FanControlBehavior.js.map +1 -0
- package/dist/matter/behaviors/FanControlBehavior.spec.d.ts +2 -0
- package/dist/matter/behaviors/FanControlBehavior.spec.d.ts.map +1 -0
- package/dist/matter/behaviors/FanControlBehavior.spec.js +23 -0
- package/dist/matter/behaviors/FanControlBehavior.spec.js.map +1 -0
- package/dist/matter/behaviors/IdentifyBehavior.d.ts +20 -0
- package/dist/matter/behaviors/IdentifyBehavior.d.ts.map +1 -0
- package/dist/matter/behaviors/IdentifyBehavior.js +41 -0
- package/dist/matter/behaviors/IdentifyBehavior.js.map +1 -0
- package/dist/matter/behaviors/IdentifyBehavior.spec.d.ts +2 -0
- package/dist/matter/behaviors/IdentifyBehavior.spec.d.ts.map +1 -0
- package/dist/matter/behaviors/IdentifyBehavior.spec.js +64 -0
- package/dist/matter/behaviors/IdentifyBehavior.spec.js.map +1 -0
- package/dist/matter/behaviors/LevelControlBehavior.d.ts +33 -0
- package/dist/matter/behaviors/LevelControlBehavior.d.ts.map +1 -0
- package/dist/matter/behaviors/LevelControlBehavior.js +138 -0
- package/dist/matter/behaviors/LevelControlBehavior.js.map +1 -0
- package/dist/matter/behaviors/LevelControlBehavior.spec.d.ts +2 -0
- package/dist/matter/behaviors/LevelControlBehavior.spec.d.ts.map +1 -0
- package/dist/matter/behaviors/LevelControlBehavior.spec.js +145 -0
- package/dist/matter/behaviors/LevelControlBehavior.spec.js.map +1 -0
- package/dist/matter/behaviors/OnOffBehavior.d.ts +27 -0
- package/dist/matter/behaviors/OnOffBehavior.d.ts.map +1 -0
- package/dist/matter/behaviors/OnOffBehavior.js +95 -0
- package/dist/matter/behaviors/OnOffBehavior.js.map +1 -0
- package/dist/matter/behaviors/OnOffBehavior.spec.d.ts +2 -0
- package/dist/matter/behaviors/OnOffBehavior.spec.d.ts.map +1 -0
- package/dist/matter/behaviors/OnOffBehavior.spec.js +128 -0
- package/dist/matter/behaviors/OnOffBehavior.spec.js.map +1 -0
- package/dist/matter/behaviors/RvcCleanModeBehavior.d.ts +19 -0
- package/dist/matter/behaviors/RvcCleanModeBehavior.d.ts.map +1 -0
- package/dist/matter/behaviors/RvcCleanModeBehavior.js +41 -0
- package/dist/matter/behaviors/RvcCleanModeBehavior.js.map +1 -0
- package/dist/matter/behaviors/RvcCleanModeBehavior.spec.d.ts +2 -0
- package/dist/matter/behaviors/RvcCleanModeBehavior.spec.d.ts.map +1 -0
- package/dist/matter/behaviors/RvcCleanModeBehavior.spec.js +57 -0
- package/dist/matter/behaviors/RvcCleanModeBehavior.spec.js.map +1 -0
- package/dist/matter/behaviors/RvcOperationalStateBehavior.d.ts +22 -0
- package/dist/matter/behaviors/RvcOperationalStateBehavior.d.ts.map +1 -0
- package/dist/matter/behaviors/RvcOperationalStateBehavior.js +86 -0
- package/dist/matter/behaviors/RvcOperationalStateBehavior.js.map +1 -0
- package/dist/matter/behaviors/RvcOperationalStateBehavior.spec.d.ts +2 -0
- package/dist/matter/behaviors/RvcOperationalStateBehavior.spec.d.ts.map +1 -0
- package/dist/matter/behaviors/RvcOperationalStateBehavior.spec.js +55 -0
- package/dist/matter/behaviors/RvcOperationalStateBehavior.spec.js.map +1 -0
- package/dist/matter/behaviors/RvcRunModeBehavior.d.ts +19 -0
- package/dist/matter/behaviors/RvcRunModeBehavior.d.ts.map +1 -0
- package/dist/matter/behaviors/RvcRunModeBehavior.js +41 -0
- package/dist/matter/behaviors/RvcRunModeBehavior.js.map +1 -0
- package/dist/matter/behaviors/RvcRunModeBehavior.spec.d.ts +2 -0
- package/dist/matter/behaviors/RvcRunModeBehavior.spec.d.ts.map +1 -0
- package/dist/matter/behaviors/RvcRunModeBehavior.spec.js +57 -0
- package/dist/matter/behaviors/RvcRunModeBehavior.spec.js.map +1 -0
- package/dist/matter/behaviors/ServiceAreaBehavior.d.ts +21 -0
- package/dist/matter/behaviors/ServiceAreaBehavior.d.ts.map +1 -0
- package/dist/matter/behaviors/ServiceAreaBehavior.js +61 -0
- package/dist/matter/behaviors/ServiceAreaBehavior.js.map +1 -0
- package/dist/matter/behaviors/ServiceAreaBehavior.spec.d.ts +2 -0
- package/dist/matter/behaviors/ServiceAreaBehavior.spec.d.ts.map +1 -0
- package/dist/matter/behaviors/ServiceAreaBehavior.spec.js +53 -0
- package/dist/matter/behaviors/ServiceAreaBehavior.spec.js.map +1 -0
- package/dist/matter/behaviors/ThermostatBehavior.d.ts +22 -0
- package/dist/matter/behaviors/ThermostatBehavior.d.ts.map +1 -0
- package/dist/matter/behaviors/ThermostatBehavior.js +127 -0
- package/dist/matter/behaviors/ThermostatBehavior.js.map +1 -0
- package/dist/matter/behaviors/ThermostatBehavior.spec.d.ts +2 -0
- package/dist/matter/behaviors/ThermostatBehavior.spec.d.ts.map +1 -0
- package/dist/matter/behaviors/ThermostatBehavior.spec.js +23 -0
- package/dist/matter/behaviors/ThermostatBehavior.spec.js.map +1 -0
- package/dist/matter/behaviors/WindowCoveringBehavior.d.ts +31 -0
- package/dist/matter/behaviors/WindowCoveringBehavior.d.ts.map +1 -0
- package/dist/matter/behaviors/WindowCoveringBehavior.js +158 -0
- package/dist/matter/behaviors/WindowCoveringBehavior.js.map +1 -0
- package/dist/matter/behaviors/WindowCoveringBehavior.spec.d.ts +2 -0
- package/dist/matter/behaviors/WindowCoveringBehavior.spec.d.ts.map +1 -0
- package/dist/matter/behaviors/WindowCoveringBehavior.spec.js +27 -0
- package/dist/matter/behaviors/WindowCoveringBehavior.spec.js.map +1 -0
- package/dist/matter/behaviors/index.d.ts +20 -0
- package/dist/matter/behaviors/index.d.ts.map +1 -0
- package/dist/matter/behaviors/index.js +21 -0
- package/dist/matter/behaviors/index.js.map +1 -0
- package/dist/matter/configValidator.d.ts +81 -0
- package/dist/matter/configValidator.d.ts.map +1 -0
- package/dist/matter/configValidator.js +240 -0
- package/dist/matter/configValidator.js.map +1 -0
- package/dist/matter/configValidator.spec.d.ts +2 -0
- package/dist/matter/configValidator.spec.d.ts.map +1 -0
- package/dist/matter/configValidator.spec.js +390 -0
- package/dist/matter/configValidator.spec.js.map +1 -0
- package/dist/matter/errorHandler.d.ts +33 -0
- package/dist/matter/errorHandler.d.ts.map +1 -0
- package/dist/matter/errorHandler.js +113 -0
- package/dist/matter/errorHandler.js.map +1 -0
- package/dist/matter/errorHandler.spec.d.ts +2 -0
- package/dist/matter/errorHandler.spec.d.ts.map +1 -0
- package/dist/matter/errorHandler.spec.js +159 -0
- package/dist/matter/errorHandler.spec.js.map +1 -0
- package/dist/matter/errors.d.ts +178 -0
- package/dist/matter/errors.d.ts.map +1 -0
- package/dist/matter/errors.js +200 -0
- package/dist/matter/errors.js.map +1 -0
- package/dist/matter/index.d.ts +127 -0
- package/dist/matter/index.d.ts.map +1 -0
- package/dist/matter/index.js +23 -0
- package/dist/matter/index.js.map +1 -0
- package/dist/matter/logFormatter.d.ts +19 -0
- package/dist/matter/logFormatter.d.ts.map +1 -0
- package/dist/matter/logFormatter.js +158 -0
- package/dist/matter/logFormatter.js.map +1 -0
- package/dist/matter/logFormatter.spec.d.ts +2 -0
- package/dist/matter/logFormatter.spec.d.ts.map +1 -0
- package/dist/matter/logFormatter.spec.js +252 -0
- package/dist/matter/logFormatter.spec.js.map +1 -0
- package/dist/matter/server.d.ts +336 -0
- package/dist/matter/server.d.ts.map +1 -0
- package/dist/matter/server.js +1810 -0
- package/dist/matter/server.js.map +1 -0
- package/dist/matter/serverHelpers.d.ts +81 -0
- package/dist/matter/serverHelpers.d.ts.map +1 -0
- package/dist/matter/serverHelpers.js +326 -0
- package/dist/matter/serverHelpers.js.map +1 -0
- package/dist/matter/serverHelpers.spec.d.ts +2 -0
- package/dist/matter/serverHelpers.spec.d.ts.map +1 -0
- package/dist/matter/serverHelpers.spec.js +521 -0
- package/dist/matter/serverHelpers.spec.js.map +1 -0
- package/dist/matter/sharedTypes.d.ts +164 -0
- package/dist/matter/sharedTypes.d.ts.map +1 -0
- package/dist/matter/sharedTypes.js +46 -0
- package/dist/matter/sharedTypes.js.map +1 -0
- package/dist/matter/storage.d.ts +135 -0
- package/dist/matter/storage.d.ts.map +1 -0
- package/dist/matter/storage.js +424 -0
- package/dist/matter/storage.js.map +1 -0
- package/dist/matter/storage.spec.d.ts +2 -0
- package/dist/matter/storage.spec.d.ts.map +1 -0
- package/dist/matter/storage.spec.js +570 -0
- package/dist/matter/storage.spec.js.map +1 -0
- package/dist/matter/typeHelpers.d.ts +45 -0
- package/dist/matter/typeHelpers.d.ts.map +1 -0
- package/dist/matter/typeHelpers.js +57 -0
- package/dist/matter/typeHelpers.js.map +1 -0
- package/dist/matter/typeHelpers.spec.d.ts +2 -0
- package/dist/matter/typeHelpers.spec.d.ts.map +1 -0
- package/dist/matter/typeHelpers.spec.js +127 -0
- package/dist/matter/typeHelpers.spec.js.map +1 -0
- package/dist/matter/types.d.ts +826 -0
- package/dist/matter/types.d.ts.map +1 -0
- package/dist/matter/types.js +204 -0
- package/dist/matter/types.js.map +1 -0
- package/{lib → dist}/platformAccessory.d.ts +8 -6
- package/dist/platformAccessory.d.ts.map +1 -0
- package/{lib → dist}/platformAccessory.js +19 -16
- package/dist/platformAccessory.js.map +1 -0
- package/dist/platformAccessory.spec.d.ts +2 -0
- package/dist/platformAccessory.spec.d.ts.map +1 -0
- package/dist/platformAccessory.spec.js +126 -0
- package/dist/platformAccessory.spec.js.map +1 -0
- package/{lib → dist}/plugin.d.ts +2 -3
- package/dist/plugin.d.ts.map +1 -0
- package/{lib → dist}/plugin.js +39 -51
- package/dist/plugin.js.map +1 -0
- package/{lib → dist}/pluginManager.d.ts +3 -3
- package/dist/pluginManager.d.ts.map +1 -0
- package/{lib → dist}/pluginManager.js +76 -81
- package/dist/pluginManager.js.map +1 -0
- package/dist/pluginManager.spec.d.ts +2 -0
- package/dist/pluginManager.spec.d.ts.map +1 -0
- package/dist/pluginManager.spec.js +43 -0
- package/dist/pluginManager.spec.js.map +1 -0
- package/{lib → dist}/server.d.ts +14 -1
- package/dist/server.d.ts.map +1 -0
- package/{lib → dist}/server.js +193 -123
- package/dist/server.js.map +1 -0
- package/dist/server.spec.d.ts +2 -0
- package/dist/server.spec.d.ts.map +1 -0
- package/dist/server.spec.js +57 -0
- package/dist/server.spec.js.map +1 -0
- package/{lib → dist}/storageService.d.ts.map +1 -1
- package/dist/storageService.js +41 -0
- package/dist/storageService.js.map +1 -0
- package/{lib → dist}/user.d.ts +1 -0
- package/dist/user.d.ts.map +1 -0
- package/dist/user.js +32 -0
- package/dist/user.js.map +1 -0
- package/dist/user.spec.d.ts +2 -0
- package/dist/user.spec.d.ts.map +1 -0
- package/dist/user.spec.js +31 -0
- package/dist/user.spec.js.map +1 -0
- package/{lib → dist}/util/mac.d.ts +1 -0
- package/dist/util/mac.d.ts.map +1 -0
- package/dist/util/mac.js +14 -0
- package/dist/util/mac.js.map +1 -0
- package/dist/util/mac.spec.d.ts +2 -0
- package/dist/util/mac.spec.d.ts.map +1 -0
- package/dist/util/mac.spec.js +36 -0
- package/dist/util/mac.spec.js.map +1 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +16 -0
- package/dist/version.js.map +1 -0
- package/dist/version.spec.d.ts +2 -0
- package/dist/version.spec.d.ts.map +1 -0
- package/dist/version.spec.js +20 -0
- package/dist/version.spec.js.map +1 -0
- package/package.json +49 -50
- package/bin/homebridge +0 -17
- package/lib/api.d.ts +0 -210
- package/lib/api.d.ts.map +0 -1
- package/lib/api.js +0 -155
- package/lib/api.js.map +0 -1
- package/lib/bridgeService.d.ts.map +0 -1
- package/lib/bridgeService.js.map +0 -1
- package/lib/childBridgeFork.d.ts.map +0 -1
- package/lib/childBridgeFork.js.map +0 -1
- package/lib/childBridgeService.d.ts.map +0 -1
- package/lib/childBridgeService.js.map +0 -1
- package/lib/cli.d.ts +0 -4
- package/lib/cli.d.ts.map +0 -1
- package/lib/cli.js +0 -111
- package/lib/cli.js.map +0 -1
- package/lib/externalPortService.d.ts +0 -33
- package/lib/externalPortService.d.ts.map +0 -1
- package/lib/externalPortService.js +0 -64
- package/lib/externalPortService.js.map +0 -1
- package/lib/index.d.ts +0 -76
- package/lib/index.d.ts.map +0 -1
- package/lib/index.js +0 -72
- package/lib/index.js.map +0 -1
- package/lib/ipcService.d.ts +0 -33
- package/lib/ipcService.d.ts.map +0 -1
- package/lib/ipcService.js.map +0 -1
- package/lib/logger.d.ts.map +0 -1
- package/lib/logger.js.map +0 -1
- package/lib/platformAccessory.d.ts.map +0 -1
- package/lib/platformAccessory.js.map +0 -1
- package/lib/plugin.d.ts.map +0 -1
- package/lib/plugin.js.map +0 -1
- package/lib/pluginManager.d.ts.map +0 -1
- package/lib/pluginManager.js.map +0 -1
- package/lib/server.d.ts.map +0 -1
- package/lib/server.js.map +0 -1
- package/lib/storageService.js +0 -70
- package/lib/storageService.js.map +0 -1
- package/lib/user.d.ts.map +0 -1
- package/lib/user.js +0 -36
- package/lib/user.js.map +0 -1
- package/lib/util/mac.d.ts.map +0 -1
- package/lib/util/mac.js +0 -20
- package/lib/util/mac.js.map +0 -1
- package/lib/version.d.ts.map +0 -1
- package/lib/version.js +0 -21
- package/lib/version.js.map +0 -1
- /package/{lib → dist}/storageService.d.ts +0 -0
- /package/{lib → dist}/version.d.ts +0 -0
|
@@ -1,15 +1,14 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
};
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
const
|
|
9
|
-
const
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
var ChildProcessMessageEventType;
|
|
1
|
+
import { fork } from 'node:child_process';
|
|
2
|
+
import { dirname, resolve } from 'node:path';
|
|
3
|
+
import process from 'node:process';
|
|
4
|
+
import { fileURLToPath } from 'node:url';
|
|
5
|
+
import fs from 'fs-extra';
|
|
6
|
+
import { Logger } from './logger.js';
|
|
7
|
+
import { User } from './user.js';
|
|
8
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
9
|
+
const __dirname = dirname(__filename);
|
|
10
|
+
// eslint-disable-next-line no-restricted-syntax
|
|
11
|
+
export var ChildProcessMessageEventType;
|
|
13
12
|
(function (ChildProcessMessageEventType) {
|
|
14
13
|
/**
|
|
15
14
|
* Sent from the child process when it is ready to accept config
|
|
@@ -43,8 +42,9 @@ var ChildProcessMessageEventType;
|
|
|
43
42
|
* Sent from the child to update its current status
|
|
44
43
|
*/
|
|
45
44
|
ChildProcessMessageEventType["STATUS_UPDATE"] = "status";
|
|
46
|
-
})(ChildProcessMessageEventType || (
|
|
47
|
-
|
|
45
|
+
})(ChildProcessMessageEventType || (ChildProcessMessageEventType = {}));
|
|
46
|
+
// eslint-disable-next-line no-restricted-syntax
|
|
47
|
+
export var ChildBridgeStatus;
|
|
48
48
|
(function (ChildBridgeStatus) {
|
|
49
49
|
/**
|
|
50
50
|
* When the child bridge is loading, or restarting
|
|
@@ -58,12 +58,12 @@ var ChildBridgeStatus;
|
|
|
58
58
|
* The bridge is shutting down, or the process ended unexpectedly
|
|
59
59
|
*/
|
|
60
60
|
ChildBridgeStatus["DOWN"] = "down";
|
|
61
|
-
})(ChildBridgeStatus || (
|
|
61
|
+
})(ChildBridgeStatus || (ChildBridgeStatus = {}));
|
|
62
62
|
/**
|
|
63
63
|
* Manages the child processes of platforms/accessories being exposed as separate forked bridges.
|
|
64
64
|
* A child bridge runs a single platform or accessory.
|
|
65
65
|
*/
|
|
66
|
-
class ChildBridgeService {
|
|
66
|
+
export class ChildBridgeService {
|
|
67
67
|
type;
|
|
68
68
|
identifier;
|
|
69
69
|
plugin;
|
|
@@ -81,9 +81,12 @@ class ChildBridgeService {
|
|
|
81
81
|
pairedStatus = null;
|
|
82
82
|
manuallyStopped = false;
|
|
83
83
|
setupUri = null;
|
|
84
|
+
matterCommissioningInfo;
|
|
84
85
|
pluginConfig = [];
|
|
85
86
|
log;
|
|
86
87
|
displayName;
|
|
88
|
+
restartCount = 0;
|
|
89
|
+
maxRestarts = 4;
|
|
87
90
|
constructor(type, identifier, plugin, bridgeConfig, homebridgeConfig, homebridgeOptions, api, ipcService, externalPortService) {
|
|
88
91
|
this.type = type;
|
|
89
92
|
this.identifier = identifier;
|
|
@@ -94,8 +97,8 @@ class ChildBridgeService {
|
|
|
94
97
|
this.api = api;
|
|
95
98
|
this.ipcService = ipcService;
|
|
96
99
|
this.externalPortService = externalPortService;
|
|
97
|
-
this.log =
|
|
98
|
-
this.api.on(
|
|
100
|
+
this.log = Logger.withPrefix(this.plugin.getPluginIdentifier());
|
|
101
|
+
this.api.on('shutdown', () => {
|
|
99
102
|
this.shuttingDown = true;
|
|
100
103
|
this.teardown();
|
|
101
104
|
});
|
|
@@ -117,7 +120,7 @@ class ChildBridgeService {
|
|
|
117
120
|
this.displayName = this.pluginConfig[0]?.name || this.plugin.getPluginIdentifier();
|
|
118
121
|
}
|
|
119
122
|
// re-configured log with display name
|
|
120
|
-
this.log =
|
|
123
|
+
this.log = Logger.withPrefix(this.displayName);
|
|
121
124
|
}
|
|
122
125
|
/**
|
|
123
126
|
* Add a config block to a child bridge.
|
|
@@ -139,42 +142,38 @@ class ChildBridgeService {
|
|
|
139
142
|
*/
|
|
140
143
|
startChildProcess() {
|
|
141
144
|
this.bridgeStatus = "pending" /* ChildBridgeStatus.PENDING */;
|
|
142
|
-
this.child =
|
|
143
|
-
this.child.stdout?.on(
|
|
145
|
+
this.child = fork(resolve(__dirname, 'childBridgeFork.js'), this.args, this.processEnv);
|
|
146
|
+
this.child.stdout?.on('data', (data) => {
|
|
144
147
|
process.stdout.write(data);
|
|
145
148
|
});
|
|
146
|
-
this.child.stderr?.on(
|
|
149
|
+
this.child.stderr?.on('data', (data) => {
|
|
147
150
|
process.stderr.write(data);
|
|
148
151
|
});
|
|
149
|
-
this.child.on(
|
|
150
|
-
this.log.warn("Child bridge process ended");
|
|
151
|
-
});
|
|
152
|
-
this.child.on("error", (e) => {
|
|
152
|
+
this.child.on('error', (e) => {
|
|
153
153
|
this.bridgeStatus = "down" /* ChildBridgeStatus.DOWN */;
|
|
154
|
-
this.log.error(
|
|
154
|
+
this.log.error('Child bridge process error', e);
|
|
155
155
|
});
|
|
156
|
-
this.child.once(
|
|
157
|
-
this.bridgeStatus = "down" /* ChildBridgeStatus.DOWN */;
|
|
156
|
+
this.child.once('close', (code, signal) => {
|
|
158
157
|
this.handleProcessClose(code, signal);
|
|
159
158
|
});
|
|
160
159
|
// handle incoming ipc messages from the child process
|
|
161
|
-
this.child.on(
|
|
162
|
-
if (typeof message !==
|
|
160
|
+
this.child.on('message', (message) => {
|
|
161
|
+
if (typeof message !== 'object' || !message.id) {
|
|
163
162
|
return;
|
|
164
163
|
}
|
|
165
164
|
switch (message.id) {
|
|
166
165
|
case "ready" /* ChildProcessMessageEventType.READY */: {
|
|
167
|
-
this.log(`
|
|
166
|
+
this.log(`Child bridge starting${this.child?.pid ? ` (pid ${this.child.pid})` : ''}...`);
|
|
168
167
|
this.loadPlugin();
|
|
169
168
|
break;
|
|
170
169
|
}
|
|
171
170
|
case "loaded" /* ChildProcessMessageEventType.LOADED */: {
|
|
172
171
|
const version = message.data.version;
|
|
173
172
|
if (this.pluginConfig.length > 1) {
|
|
174
|
-
this.log(`
|
|
173
|
+
this.log.success(`Child bridge started successfully with ${this.pluginConfig.length} accessories (plugin v${version}).`);
|
|
175
174
|
}
|
|
176
175
|
else {
|
|
177
|
-
this.log(`
|
|
176
|
+
this.log.success(`Child bridge started successfully (plugin v${version}).`);
|
|
178
177
|
}
|
|
179
178
|
this.startBridge();
|
|
180
179
|
break;
|
|
@@ -188,8 +187,22 @@ class ChildBridgeService {
|
|
|
188
187
|
break;
|
|
189
188
|
}
|
|
190
189
|
case "status" /* ChildProcessMessageEventType.STATUS_UPDATE */: {
|
|
191
|
-
|
|
192
|
-
|
|
190
|
+
// Handle unified status update with HAP and Matter info
|
|
191
|
+
const statusData = message.data;
|
|
192
|
+
// Update HAP status
|
|
193
|
+
this.pairedStatus = statusData.paired;
|
|
194
|
+
this.setupUri = statusData.setupUri;
|
|
195
|
+
// Update Matter commissioning info if included
|
|
196
|
+
if (statusData.matter) {
|
|
197
|
+
this.matterCommissioningInfo = {
|
|
198
|
+
qrCode: statusData.matter.qrCode,
|
|
199
|
+
manualPairingCode: statusData.matter.manualPairingCode,
|
|
200
|
+
serialNumber: statusData.matter.serialNumber,
|
|
201
|
+
commissioned: statusData.matter.commissioned || false,
|
|
202
|
+
deviceCount: statusData.matter.deviceCount,
|
|
203
|
+
};
|
|
204
|
+
}
|
|
205
|
+
// Send unified status update
|
|
193
206
|
this.sendStatusUpdate();
|
|
194
207
|
break;
|
|
195
208
|
}
|
|
@@ -202,13 +215,35 @@ class ChildBridgeService {
|
|
|
202
215
|
* @param signal
|
|
203
216
|
*/
|
|
204
217
|
handleProcessClose(code, signal) {
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
218
|
+
const isLikelyPluginCrash = code === 1 && signal === null;
|
|
219
|
+
this.log.warn(`Child bridge ended (code ${code}, signal ${signal}).${isLikelyPluginCrash
|
|
220
|
+
? ' The child bridge ended unexpectedly, which is normally due to the plugin not catching its errors properly. Please report this to the plugin developer by clicking on the'
|
|
221
|
+
+ ' \'Report An Issue\' option in the plugin menu dropdown from the Homebridge UI. If there are related logs shown above, please include them in your report.'
|
|
222
|
+
: ''}`);
|
|
223
|
+
if (isLikelyPluginCrash) {
|
|
224
|
+
if (this.restartCount < this.maxRestarts) {
|
|
225
|
+
this.bridgeStatus = "pending" /* ChildBridgeStatus.PENDING */;
|
|
226
|
+
this.restartCount += 1;
|
|
227
|
+
const delay = this.restartCount * 10; // first attempt after 10 seconds, second after 20 seconds, etc.
|
|
228
|
+
this.log(`Child bridge will automatically restart in ${delay} seconds (restart attempt ${this.restartCount} of ${this.maxRestarts}).`);
|
|
229
|
+
setTimeout(() => {
|
|
230
|
+
if (!this.shuttingDown) {
|
|
231
|
+
this.startChildProcess();
|
|
232
|
+
}
|
|
233
|
+
}, delay * 1000);
|
|
210
234
|
}
|
|
211
|
-
|
|
235
|
+
else {
|
|
236
|
+
this.bridgeStatus = "down" /* ChildBridgeStatus.DOWN */;
|
|
237
|
+
this.manuallyStopped = true;
|
|
238
|
+
this.log.error(`Child bridge will no longer restart after failing ${this.maxRestarts + 1} times, you will need to manually start this child bridge from the Homebridge UI.`);
|
|
239
|
+
}
|
|
240
|
+
return;
|
|
241
|
+
}
|
|
242
|
+
if (!this.shuttingDown) {
|
|
243
|
+
this.bridgeStatus = "down" /* ChildBridgeStatus.DOWN */;
|
|
244
|
+
this.restartCount = 0;
|
|
245
|
+
this.startChildProcess();
|
|
246
|
+
}
|
|
212
247
|
}
|
|
213
248
|
/**
|
|
214
249
|
* Helper function to send a message to the child process
|
|
@@ -228,26 +263,26 @@ class ChildBridgeService {
|
|
|
228
263
|
* These will be passed through to the forked process
|
|
229
264
|
*/
|
|
230
265
|
setProcessFlags() {
|
|
231
|
-
if (this.
|
|
232
|
-
this.args.push(
|
|
266
|
+
if (this.bridgeConfig.debugModeEnabled) {
|
|
267
|
+
this.args.push('-D');
|
|
233
268
|
}
|
|
234
269
|
if (this.homebridgeOptions.forceColourLogging) {
|
|
235
|
-
this.args.push(
|
|
270
|
+
this.args.push('-C');
|
|
236
271
|
}
|
|
237
272
|
if (this.homebridgeOptions.insecureAccess) {
|
|
238
|
-
this.args.push(
|
|
273
|
+
this.args.push('-I');
|
|
239
274
|
}
|
|
240
275
|
if (this.homebridgeOptions.noLogTimestamps) {
|
|
241
|
-
this.args.push(
|
|
276
|
+
this.args.push('-T');
|
|
242
277
|
}
|
|
243
278
|
if (this.homebridgeOptions.keepOrphanedCachedAccessories) {
|
|
244
|
-
this.args.push(
|
|
279
|
+
this.args.push('-K');
|
|
245
280
|
}
|
|
246
281
|
if (this.homebridgeOptions.customStoragePath) {
|
|
247
|
-
this.args.push(
|
|
282
|
+
this.args.push('-U', this.homebridgeOptions.customStoragePath);
|
|
248
283
|
}
|
|
249
284
|
if (this.homebridgeOptions.customPluginPath) {
|
|
250
|
-
this.args.push(
|
|
285
|
+
this.args.push('-P', this.homebridgeOptions.customPluginPath);
|
|
251
286
|
}
|
|
252
287
|
}
|
|
253
288
|
/**
|
|
@@ -257,8 +292,8 @@ class ChildBridgeService {
|
|
|
257
292
|
this.processEnv = {
|
|
258
293
|
env: {
|
|
259
294
|
...process.env,
|
|
260
|
-
DEBUG: `${process.env.DEBUG ||
|
|
261
|
-
NODE_OPTIONS: `${process.env.NODE_OPTIONS ||
|
|
295
|
+
DEBUG: `${process.env.DEBUG || ''} ${this.bridgeConfig.env?.DEBUG || ''}`.trim(),
|
|
296
|
+
NODE_OPTIONS: `${process.env.NODE_OPTIONS || ''} ${this.bridgeConfig.env?.NODE_OPTIONS || ''}`.trim(),
|
|
262
297
|
},
|
|
263
298
|
silent: true,
|
|
264
299
|
};
|
|
@@ -278,13 +313,19 @@ class ChildBridgeService {
|
|
|
278
313
|
manufacturer: this.bridgeConfig.manufacturer || this.homebridgeConfig.bridge.manufacturer,
|
|
279
314
|
model: this.bridgeConfig.model || this.homebridgeConfig.bridge.model,
|
|
280
315
|
firmwareRevision: this.bridgeConfig.firmwareRevision || this.homebridgeConfig.bridge.firmwareRevision,
|
|
316
|
+
serialNumber: this.bridgeConfig.serialNumber || this.bridgeConfig.username,
|
|
317
|
+
matter: this.bridgeConfig.matter,
|
|
281
318
|
};
|
|
282
319
|
const bridgeOptions = {
|
|
283
|
-
cachedAccessoriesDir:
|
|
284
|
-
cachedAccessoriesItemName:
|
|
320
|
+
cachedAccessoriesDir: User.cachedAccessoryPath(),
|
|
321
|
+
cachedAccessoriesItemName: `cachedAccessories.${this.bridgeConfig.username.replace(/:/g, '').toUpperCase()}`,
|
|
285
322
|
};
|
|
286
323
|
// shallow copy the homebridge options to the bridge options object
|
|
287
324
|
Object.assign(bridgeOptions, this.homebridgeOptions);
|
|
325
|
+
// Override with child bridge specific settings
|
|
326
|
+
if (this.bridgeConfig.debugModeEnabled !== undefined) {
|
|
327
|
+
bridgeOptions.debugModeEnabled = this.bridgeConfig.debugModeEnabled;
|
|
328
|
+
}
|
|
288
329
|
this.sendMessage("load" /* ChildProcessMessageEventType.LOAD */, {
|
|
289
330
|
type: this.type,
|
|
290
331
|
identifier: this.identifier,
|
|
@@ -311,10 +352,18 @@ class ChildBridgeService {
|
|
|
311
352
|
* Handle external port requests from child
|
|
312
353
|
*/
|
|
313
354
|
async handlePortRequest(request) {
|
|
314
|
-
|
|
355
|
+
let port;
|
|
356
|
+
if (request.portType === 'matter') {
|
|
357
|
+
// Request from Matter port pool
|
|
358
|
+
port = await this.externalPortService.requestMatterPort(request.username);
|
|
359
|
+
}
|
|
360
|
+
else {
|
|
361
|
+
// Request from HAP port pool (default)
|
|
362
|
+
port = await this.externalPortService.requestPort(request.username);
|
|
363
|
+
}
|
|
315
364
|
this.sendMessage("portAllocated" /* ChildProcessMessageEventType.PORT_ALLOCATED */, {
|
|
316
365
|
username: request.username,
|
|
317
|
-
port
|
|
366
|
+
port,
|
|
318
367
|
});
|
|
319
368
|
}
|
|
320
369
|
/**
|
|
@@ -323,7 +372,7 @@ class ChildBridgeService {
|
|
|
323
372
|
teardown() {
|
|
324
373
|
if (this.child && this.child.connected) {
|
|
325
374
|
this.bridgeStatus = "down" /* ChildBridgeStatus.DOWN */;
|
|
326
|
-
this.child.kill(
|
|
375
|
+
this.child.kill('SIGTERM');
|
|
327
376
|
}
|
|
328
377
|
}
|
|
329
378
|
/**
|
|
@@ -337,10 +386,11 @@ class ChildBridgeService {
|
|
|
337
386
|
*/
|
|
338
387
|
restartChildBridge() {
|
|
339
388
|
if (this.manuallyStopped) {
|
|
389
|
+
this.restartCount = 0;
|
|
340
390
|
this.startChildBridge();
|
|
341
391
|
}
|
|
342
392
|
else {
|
|
343
|
-
this.log.warn(
|
|
393
|
+
this.log.warn('Child bridge restarting...');
|
|
344
394
|
this.refreshConfig();
|
|
345
395
|
this.teardown();
|
|
346
396
|
}
|
|
@@ -350,14 +400,16 @@ class ChildBridgeService {
|
|
|
350
400
|
*/
|
|
351
401
|
stopChildBridge() {
|
|
352
402
|
if (!this.shuttingDown) {
|
|
353
|
-
this.log.warn(
|
|
403
|
+
this.log.warn('Child bridge stopping, will not restart.');
|
|
354
404
|
this.shuttingDown = true;
|
|
355
405
|
this.manuallyStopped = true;
|
|
356
|
-
this.
|
|
406
|
+
this.restartCount = 0;
|
|
407
|
+
this.bridgeStatus = "down" /* ChildBridgeStatus.DOWN */;
|
|
408
|
+
this.child?.removeAllListeners('close');
|
|
357
409
|
this.teardown();
|
|
358
410
|
}
|
|
359
411
|
else {
|
|
360
|
-
this.log.warn(
|
|
412
|
+
this.log.warn('Child bridge already shutting down or stopped.');
|
|
361
413
|
}
|
|
362
414
|
}
|
|
363
415
|
/**
|
|
@@ -365,14 +417,13 @@ class ChildBridgeService {
|
|
|
365
417
|
*/
|
|
366
418
|
startChildBridge() {
|
|
367
419
|
if (this.manuallyStopped && this.bridgeStatus === "down" /* ChildBridgeStatus.DOWN */ && (!this.child || !this.child.connected)) {
|
|
368
|
-
this.log.warn("Starting child bridge...");
|
|
369
420
|
this.refreshConfig();
|
|
370
421
|
this.startChildProcess();
|
|
371
422
|
this.shuttingDown = false;
|
|
372
423
|
this.manuallyStopped = false;
|
|
373
424
|
}
|
|
374
425
|
else {
|
|
375
|
-
this.log.warn(
|
|
426
|
+
this.log.warn('Child bridge cannot be started, it is still running or was not manually stopped.');
|
|
376
427
|
}
|
|
377
428
|
}
|
|
378
429
|
/**
|
|
@@ -380,7 +431,7 @@ class ChildBridgeService {
|
|
|
380
431
|
*/
|
|
381
432
|
async refreshConfig() {
|
|
382
433
|
try {
|
|
383
|
-
const homebridgeConfig = await
|
|
434
|
+
const homebridgeConfig = await fs.readJson(User.configPath());
|
|
384
435
|
if (this.type === "platform" /* PluginType.PLATFORM */) {
|
|
385
436
|
const config = homebridgeConfig.platforms?.filter(x => x.platform === this.identifier && x._bridge?.username === this.bridgeConfig.username);
|
|
386
437
|
if (config.length) {
|
|
@@ -388,7 +439,7 @@ class ChildBridgeService {
|
|
|
388
439
|
this.bridgeConfig = this.pluginConfig[0]._bridge || this.bridgeConfig;
|
|
389
440
|
}
|
|
390
441
|
else {
|
|
391
|
-
this.log.warn(
|
|
442
|
+
this.log.warn('Platform config could not be found, using existing config.');
|
|
392
443
|
}
|
|
393
444
|
}
|
|
394
445
|
else if (this.type === "accessory" /* PluginType.ACCESSORY */) {
|
|
@@ -398,12 +449,12 @@ class ChildBridgeService {
|
|
|
398
449
|
this.bridgeConfig = this.pluginConfig[0]._bridge || this.bridgeConfig;
|
|
399
450
|
}
|
|
400
451
|
else {
|
|
401
|
-
this.log.warn(
|
|
452
|
+
this.log.warn('Accessory config could not be found, using existing config.');
|
|
402
453
|
}
|
|
403
454
|
}
|
|
404
455
|
}
|
|
405
|
-
catch (
|
|
406
|
-
this.log.error(
|
|
456
|
+
catch (error) {
|
|
457
|
+
this.log.error('Failed to refresh plugin config:', error.message);
|
|
407
458
|
}
|
|
408
459
|
}
|
|
409
460
|
/**
|
|
@@ -415,14 +466,21 @@ class ChildBridgeService {
|
|
|
415
466
|
paired: this.pairedStatus,
|
|
416
467
|
setupUri: this.setupUri,
|
|
417
468
|
username: this.bridgeConfig.username,
|
|
469
|
+
port: this.bridgeConfig.port,
|
|
418
470
|
pin: this.bridgeConfig.pin || this.homebridgeConfig.bridge.pin,
|
|
419
471
|
name: this.bridgeConfig.name || this.displayName || this.plugin.getPluginIdentifier(),
|
|
420
472
|
plugin: this.plugin.getPluginIdentifier(),
|
|
421
473
|
identifier: this.identifier,
|
|
422
474
|
pid: this.child?.pid,
|
|
423
475
|
manuallyStopped: this.manuallyStopped,
|
|
476
|
+
matterConfig: this.bridgeConfig.matter,
|
|
477
|
+
matterIdentifier: this.bridgeConfig.matter ? this.bridgeConfig.username : undefined,
|
|
478
|
+
matterSetupUri: this.matterCommissioningInfo?.qrCode,
|
|
479
|
+
matterPin: this.matterCommissioningInfo?.manualPairingCode,
|
|
480
|
+
matterSerialNumber: this.matterCommissioningInfo?.serialNumber,
|
|
481
|
+
matterCommissioned: this.matterCommissioningInfo?.commissioned,
|
|
482
|
+
matterDeviceCount: this.matterCommissioningInfo?.deviceCount,
|
|
424
483
|
};
|
|
425
484
|
}
|
|
426
485
|
}
|
|
427
|
-
exports.ChildBridgeService = ChildBridgeService;
|
|
428
486
|
//# sourceMappingURL=childBridgeService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"childBridgeService.js","sourceRoot":"","sources":["../src/childBridgeService.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAeA,OAAO,gCAAgC,CAAA;AAYvC,MAAM,CAAC,OAAO,UAAU,GAAG,IAAI,IAAI,CAsFlC"}
|
package/dist/cli.js
ADDED
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/* global NodeJS */
|
|
2
|
+
import process from 'node:process';
|
|
3
|
+
import { Command } from 'commander';
|
|
4
|
+
import { HAPStorage } from 'hap-nodejs';
|
|
5
|
+
import { satisfies } from 'semver';
|
|
6
|
+
import { Logger } from './logger.js';
|
|
7
|
+
import { Server } from './server.js';
|
|
8
|
+
import { User } from './user.js';
|
|
9
|
+
import getVersion, { getRequiredNodeVersion } from './version.js';
|
|
10
|
+
import 'source-map-support/register.js';
|
|
11
|
+
const log = Logger.internal;
|
|
12
|
+
const requiredNodeVersion = getRequiredNodeVersion();
|
|
13
|
+
if (requiredNodeVersion && !satisfies(process.version, requiredNodeVersion)) {
|
|
14
|
+
log.warn(`Homebridge requires a Node.js version of ${requiredNodeVersion} which does \
|
|
15
|
+
not satisfy the current Node.js version of ${process.version}. You may need to upgrade your installation of Node.js - see https://homebridge.io/w/JTKEF`);
|
|
16
|
+
}
|
|
17
|
+
export default function cli() {
|
|
18
|
+
let insecureAccess = false;
|
|
19
|
+
let hideQRCode = false;
|
|
20
|
+
let keepOrphans = false;
|
|
21
|
+
let customPluginPath;
|
|
22
|
+
let strictPluginResolution = false;
|
|
23
|
+
let noLogTimestamps = false;
|
|
24
|
+
let debugModeEnabled = false;
|
|
25
|
+
let forceColourLogging = false;
|
|
26
|
+
let customStoragePath;
|
|
27
|
+
let shuttingDown = false;
|
|
28
|
+
const program = new Command();
|
|
29
|
+
program
|
|
30
|
+
.version(getVersion())
|
|
31
|
+
.allowExcessArguments()
|
|
32
|
+
.option('-C, --color', 'force color in logging', () => forceColourLogging = true)
|
|
33
|
+
.option('-D, --debug', 'turn on debug level logging', () => debugModeEnabled = true)
|
|
34
|
+
.option('-I, --insecure', 'allow unauthenticated requests (for easier hacking)', () => insecureAccess = true)
|
|
35
|
+
.option('-P, --plugin-path [path]', 'look for plugins installed at [path] as well as the default locations ([path] can also point to a single plugin)', path => customPluginPath = path)
|
|
36
|
+
.option('-Q, --no-qrcode', 'do not issue QRcode in logging', () => hideQRCode = true)
|
|
37
|
+
.option('-K, --keep-orphans', 'keep cached accessories for which the associated plugin is not loaded', () => keepOrphans = true)
|
|
38
|
+
.option('-T, --no-timestamp', 'do not issue timestamps in logging', () => noLogTimestamps = true)
|
|
39
|
+
.option('-U, --user-storage-path [path]', 'look for homebridge user files at [path] instead of the default location (~/.homebridge)', path => customStoragePath = path)
|
|
40
|
+
.option('--strict-plugin-resolution', 'only load plugins from the --plugin-path if set, otherwise from the primary global node_modules', () => strictPluginResolution = true)
|
|
41
|
+
.parse(process.argv);
|
|
42
|
+
if (noLogTimestamps) {
|
|
43
|
+
Logger.setTimestampEnabled(false);
|
|
44
|
+
}
|
|
45
|
+
if (debugModeEnabled) {
|
|
46
|
+
Logger.setDebugEnabled(true);
|
|
47
|
+
}
|
|
48
|
+
if (forceColourLogging) {
|
|
49
|
+
Logger.forceColor();
|
|
50
|
+
}
|
|
51
|
+
if (customStoragePath) {
|
|
52
|
+
User.setStoragePath(customStoragePath);
|
|
53
|
+
}
|
|
54
|
+
// Initialize HAP-NodeJS with a custom persist directory
|
|
55
|
+
HAPStorage.setCustomStoragePath(User.persistPath());
|
|
56
|
+
const options = {
|
|
57
|
+
keepOrphanedCachedAccessories: keepOrphans,
|
|
58
|
+
insecureAccess,
|
|
59
|
+
hideQRCode,
|
|
60
|
+
customPluginPath,
|
|
61
|
+
noLogTimestamps,
|
|
62
|
+
debugModeEnabled,
|
|
63
|
+
forceColourLogging,
|
|
64
|
+
customStoragePath,
|
|
65
|
+
strictPluginResolution,
|
|
66
|
+
};
|
|
67
|
+
const server = new Server(options);
|
|
68
|
+
const signalHandler = (signal, signalNum) => {
|
|
69
|
+
if (shuttingDown) {
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
shuttingDown = true;
|
|
73
|
+
log.info('Got %s, shutting down Homebridge...', signal);
|
|
74
|
+
setTimeout(() => process.exit(128 + signalNum), 5000);
|
|
75
|
+
server.teardown();
|
|
76
|
+
};
|
|
77
|
+
process.on('SIGINT', signalHandler.bind(undefined, 'SIGINT', 2));
|
|
78
|
+
process.on('SIGTERM', signalHandler.bind(undefined, 'SIGTERM', 15));
|
|
79
|
+
const errorHandler = (error) => {
|
|
80
|
+
if (error.stack) {
|
|
81
|
+
log.error(error.stack);
|
|
82
|
+
}
|
|
83
|
+
if (!shuttingDown) {
|
|
84
|
+
process.kill(process.pid, 'SIGTERM');
|
|
85
|
+
}
|
|
86
|
+
};
|
|
87
|
+
process.on('uncaughtException', errorHandler);
|
|
88
|
+
server.start().catch(errorHandler);
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,mBAAmB;AAInB,OAAO,OAAO,MAAM,cAAc,CAAA;AAElC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAA;AAElC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,UAAU,EAAE,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAA;AAEjE,OAAO,gCAAgC,CAAA;AAIvC,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAA;AAE3B,MAAM,mBAAmB,GAAG,sBAAsB,EAAE,CAAA;AACpD,IAAI,mBAAmB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,mBAAmB,CAAC,EAAE,CAAC;IAC5E,GAAG,CAAC,IAAI,CAAC,4CAA4C,mBAAmB;6CAC7B,OAAO,CAAC,OAAO,4FAA4F,CAAC,CAAA;AACzJ,CAAC;AAED,MAAM,CAAC,OAAO,UAAU,GAAG;IACzB,IAAI,cAAc,GAAG,KAAK,CAAA;IAC1B,IAAI,UAAU,GAAG,KAAK,CAAA;IACtB,IAAI,WAAW,GAAG,KAAK,CAAA;IACvB,IAAI,gBAAoC,CAAA;IACxC,IAAI,sBAAsB,GAAG,KAAK,CAAA;IAClC,IAAI,eAAe,GAAG,KAAK,CAAA;IAC3B,IAAI,gBAAgB,GAAG,KAAK,CAAA;IAC5B,IAAI,kBAAkB,GAAG,KAAK,CAAA;IAC9B,IAAI,iBAAqC,CAAA;IAEzC,IAAI,YAAY,GAAG,KAAK,CAAA;IAExB,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAA;IAC7B,OAAO;SACJ,OAAO,CAAC,UAAU,EAAE,CAAC;SACrB,oBAAoB,EAAE;SACtB,MAAM,CAAC,aAAa,EAAE,wBAAwB,EAAE,GAAG,EAAE,CAAC,kBAAkB,GAAG,IAAI,CAAC;SAChF,MAAM,CAAC,aAAa,EAAE,6BAA6B,EAAE,GAAG,EAAE,CAAC,gBAAgB,GAAG,IAAI,CAAC;SACnF,MAAM,CAAC,gBAAgB,EAAE,qDAAqD,EAAE,GAAG,EAAE,CAAC,cAAc,GAAG,IAAI,CAAC;SAC5G,MAAM,CAAC,0BAA0B,EAAE,kHAAkH,EAAE,IAAI,CAAC,EAAE,CAAC,gBAAgB,GAAG,IAAI,CAAC;SACvL,MAAM,CAAC,iBAAiB,EAAE,gCAAgC,EAAE,GAAG,EAAE,CAAC,UAAU,GAAG,IAAI,CAAC;SACpF,MAAM,CAAC,oBAAoB,EAAE,uEAAuE,EAAE,GAAG,EAAE,CAAC,WAAW,GAAG,IAAI,CAAC;SAC/H,MAAM,CAAC,oBAAoB,EAAE,oCAAoC,EAAE,GAAG,EAAE,CAAC,eAAe,GAAG,IAAI,CAAC;SAChG,MAAM,CAAC,gCAAgC,EAAE,0FAA0F,EAAE,IAAI,CAAC,EAAE,CAAC,iBAAiB,GAAG,IAAI,CAAC;SACtK,MAAM,CAAC,4BAA4B,EAAE,iGAAiG,EAAE,GAAG,EAAE,CAAC,sBAAsB,GAAG,IAAI,CAAC;SAC5K,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IAEtB,IAAI,eAAe,EAAE,CAAC;QACpB,MAAM,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAA;IACnC,CAAC;IAED,IAAI,gBAAgB,EAAE,CAAC;QACrB,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,CAAA;IAC9B,CAAC;IAED,IAAI,kBAAkB,EAAE,CAAC;QACvB,MAAM,CAAC,UAAU,EAAE,CAAA;IACrB,CAAC;IAED,IAAI,iBAAiB,EAAE,CAAC;QACtB,IAAI,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAA;IACxC,CAAC;IAED,wDAAwD;IACxD,UAAU,CAAC,oBAAoB,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAA;IAEnD,MAAM,OAAO,GAAsB;QACjC,6BAA6B,EAAE,WAAW;QAC1C,cAAc;QACd,UAAU;QACV,gBAAgB;QAChB,eAAe;QACf,gBAAgB;QAChB,kBAAkB;QAClB,iBAAiB;QACjB,sBAAsB;KACvB,CAAA;IAED,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,OAAO,CAAC,CAAA;IAElC,MAAM,aAAa,GAAG,CAAC,MAAe,EAAE,SAAiB,EAAQ,EAAE;QACjE,IAAI,YAAY,EAAE,CAAC;YACjB,OAAM;QACR,CAAC;QACD,YAAY,GAAG,IAAI,CAAA;QAEnB,GAAG,CAAC,IAAI,CAAC,qCAAqC,EAAE,MAAM,CAAC,CAAA;QACvD,UAAU,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,GAAG,SAAS,CAAC,EAAE,IAAI,CAAC,CAAA;QAErD,MAAM,CAAC,QAAQ,EAAE,CAAA;IACnB,CAAC,CAAA;IACD,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,aAAa,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAA;IAChE,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,aAAa,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC,CAAA;IAEnE,MAAM,YAAY,GAAG,CAAC,KAAY,EAAQ,EAAE;QAC1C,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;YAChB,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;QACxB,CAAC;QAED,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,SAAS,CAAC,CAAA;QACtC,CAAC;IACH,CAAC,CAAA;IACD,OAAO,CAAC,EAAE,CAAC,mBAAmB,EAAE,YAAY,CAAC,CAAA;IAC7C,MAAM,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,CAAA;AACpC,CAAC"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import type { MacAddress } from 'hap-nodejs';
|
|
2
|
+
import type { ChildBridgeFork } from './childBridgeFork.js';
|
|
3
|
+
export interface ExternalPortsConfiguration {
|
|
4
|
+
start: number;
|
|
5
|
+
end: number;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Allocates ports from the user defined `config.ports` and `config.matterPorts` options
|
|
9
|
+
* This service is used to allocate ports for external accessories on the main bridge, and child bridges.
|
|
10
|
+
* HAP ports and Matter ports are managed separately with their own ranges.
|
|
11
|
+
*/
|
|
12
|
+
export declare class ExternalPortService {
|
|
13
|
+
private externalPorts?;
|
|
14
|
+
private matterPorts?;
|
|
15
|
+
private nextExternalPort?;
|
|
16
|
+
private allocatedPorts;
|
|
17
|
+
private allocatedMatterPorts;
|
|
18
|
+
private readonly configuredMatterPorts;
|
|
19
|
+
constructor(externalPorts?: ExternalPortsConfiguration | undefined, matterPorts?: ExternalPortsConfiguration | undefined, configuredMatterPorts?: number[]);
|
|
20
|
+
/**
|
|
21
|
+
* Returns the next available HAP port in the external port config.
|
|
22
|
+
* If the external port is not configured by the user it will return undefined.
|
|
23
|
+
* If the port range has been exhausted it will return undefined.
|
|
24
|
+
*/
|
|
25
|
+
requestPort(username: MacAddress): Promise<number | undefined>;
|
|
26
|
+
/**
|
|
27
|
+
* Returns the next available Matter port in the Matter port config.
|
|
28
|
+
* If Matter ports are not configured, falls back to range 5530-5541.
|
|
29
|
+
* If the port range has been exhausted it will return undefined.
|
|
30
|
+
*
|
|
31
|
+
* @param uuid - Unique identifier for the Matter accessory (can be accessory UUID or other unique string)
|
|
32
|
+
*/
|
|
33
|
+
requestMatterPort(uuid: string): Promise<number | undefined>;
|
|
34
|
+
private getNextFreePort;
|
|
35
|
+
private getNextFreeMatterPort;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* This is the child bridge version of the port allocation service.
|
|
39
|
+
* It requests free ports from the main bridge's port service via IPC.
|
|
40
|
+
*/
|
|
41
|
+
export declare class ChildBridgeExternalPortService extends ExternalPortService {
|
|
42
|
+
private childBridge;
|
|
43
|
+
constructor(childBridge: ChildBridgeFork);
|
|
44
|
+
requestPort(username: MacAddress): Promise<number | undefined>;
|
|
45
|
+
requestMatterPort(uniqueId: string): Promise<number | undefined>;
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=externalPortService.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"externalPortService.d.ts","sourceRoot":"","sources":["../src/externalPortService.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAE5C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAI3D,MAAM,WAAW,0BAA0B;IACzC,KAAK,EAAE,MAAM,CAAA;IACb,GAAG,EAAE,MAAM,CAAA;CACZ;AAED;;;;GAIG;AACH,qBAAa,mBAAmB;IAO5B,OAAO,CAAC,aAAa,CAAC;IACtB,OAAO,CAAC,WAAW,CAAC;IAPtB,OAAO,CAAC,gBAAgB,CAAC,CAAQ;IACjC,OAAO,CAAC,cAAc,CAAiD;IACvE,OAAO,CAAC,oBAAoB,CAA6C;IACzE,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAyB;gBAGrD,aAAa,CAAC,EAAE,0BAA0B,YAAA,EAC1C,WAAW,CAAC,EAAE,0BAA0B,YAAA,EAChD,qBAAqB,CAAC,EAAE,MAAM,EAAE;IAOlC;;;;OAIG;IACU,WAAW,CAAC,QAAQ,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAa3E;;;;;;OAMG;IACU,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAazE,OAAO,CAAC,eAAe;IAqBvB,OAAO,CAAC,qBAAqB;CAkB9B;AAED;;;GAGG;AACH,qBAAa,8BAA+B,SAAQ,mBAAmB;IAEnE,OAAO,CAAC,WAAW;gBAAX,WAAW,EAAE,eAAe;IAKzB,WAAW,CAAC,QAAQ,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAI9D,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;CAI9E"}
|