homebridge 2.0.0-beta.44 → 2.0.0-beta.46
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/dist/api.d.ts +3 -365
- package/dist/api.d.ts.map +1 -1
- package/dist/api.js +13 -85
- package/dist/api.js.map +1 -1
- package/dist/bridgeService.d.ts +0 -25
- package/dist/bridgeService.d.ts.map +1 -1
- package/dist/bridgeService.js +32 -85
- package/dist/bridgeService.js.map +1 -1
- package/dist/childBridgeFork.d.ts +12 -15
- package/dist/childBridgeFork.d.ts.map +1 -1
- package/dist/childBridgeFork.js +152 -83
- package/dist/childBridgeFork.js.map +1 -1
- package/dist/childBridgeService.d.ts +21 -105
- package/dist/childBridgeService.d.ts.map +1 -1
- package/dist/childBridgeService.js +57 -134
- package/dist/childBridgeService.js.map +1 -1
- package/dist/cli.js +0 -2
- package/dist/cli.js.map +1 -1
- package/dist/externalPortService.d.ts +0 -21
- package/dist/externalPortService.d.ts.map +1 -1
- package/dist/externalPortService.js +0 -28
- package/dist/externalPortService.js.map +1 -1
- package/dist/index.d.ts +0 -112
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -44
- package/dist/index.js.map +1 -1
- package/dist/ipcService.d.ts +23 -15
- package/dist/ipcService.d.ts.map +1 -1
- package/dist/ipcService.js +6 -12
- package/dist/ipcService.js.map +1 -1
- package/dist/logger.d.ts +0 -46
- package/dist/logger.d.ts.map +1 -1
- package/dist/logger.js +13 -57
- package/dist/logger.js.map +1 -1
- package/dist/matter/BaseMatterManager.d.ts +19 -0
- package/dist/matter/BaseMatterManager.d.ts.map +1 -0
- package/dist/matter/BaseMatterManager.js +170 -0
- package/dist/matter/BaseMatterManager.js.map +1 -0
- package/dist/matter/ChildBridgeMatterManager.d.ts +7 -69
- package/dist/matter/ChildBridgeMatterManager.d.ts.map +1 -1
- package/dist/matter/ChildBridgeMatterManager.js +51 -234
- package/dist/matter/ChildBridgeMatterManager.js.map +1 -1
- package/dist/matter/ClusterCommandMapper.d.ts +5 -0
- package/dist/matter/ClusterCommandMapper.d.ts.map +1 -0
- package/dist/matter/ClusterCommandMapper.js +203 -0
- package/dist/matter/ClusterCommandMapper.js.map +1 -0
- package/dist/matter/ExternalMatterAccessoryPublisher.d.ts +0 -27
- package/dist/matter/ExternalMatterAccessoryPublisher.d.ts.map +1 -1
- package/dist/matter/ExternalMatterAccessoryPublisher.js +3 -28
- package/dist/matter/ExternalMatterAccessoryPublisher.js.map +1 -1
- package/dist/matter/MatterAPIImpl.d.ts +0 -68
- package/dist/matter/MatterAPIImpl.d.ts.map +1 -1
- package/dist/matter/MatterAPIImpl.js +7 -107
- package/dist/matter/MatterAPIImpl.js.map +1 -1
- package/dist/matter/MatterBridgeManager.d.ts +9 -60
- package/dist/matter/MatterBridgeManager.d.ts.map +1 -1
- package/dist/matter/MatterBridgeManager.js +140 -216
- package/dist/matter/MatterBridgeManager.js.map +1 -1
- package/dist/matter/MatterConfigCollector.d.ts +1 -20
- package/dist/matter/MatterConfigCollector.d.ts.map +1 -1
- package/dist/matter/MatterConfigCollector.js +15 -28
- package/dist/matter/MatterConfigCollector.js.map +1 -1
- package/dist/matter/accessoryCache.d.ts +0 -48
- package/dist/matter/accessoryCache.d.ts.map +1 -1
- package/dist/matter/accessoryCache.js +1 -60
- package/dist/matter/accessoryCache.js.map +1 -1
- package/dist/matter/behaviors/AirQualityBehavior.d.ts +0 -42
- package/dist/matter/behaviors/AirQualityBehavior.d.ts.map +1 -1
- package/dist/matter/behaviors/AirQualityBehavior.js +0 -44
- package/dist/matter/behaviors/AirQualityBehavior.js.map +1 -1
- package/dist/matter/behaviors/BehaviorRegistry.d.ts +4 -42
- package/dist/matter/behaviors/BehaviorRegistry.d.ts.map +1 -1
- package/dist/matter/behaviors/BehaviorRegistry.js +12 -42
- package/dist/matter/behaviors/BehaviorRegistry.js.map +1 -1
- package/dist/matter/behaviors/ColorControlBehavior.d.ts +0 -49
- package/dist/matter/behaviors/ColorControlBehavior.d.ts.map +1 -1
- package/dist/matter/behaviors/ColorControlBehavior.js +0 -90
- package/dist/matter/behaviors/ColorControlBehavior.js.map +1 -1
- package/dist/matter/behaviors/ConcentrationMeasurementBehavior.d.ts +0 -91
- package/dist/matter/behaviors/ConcentrationMeasurementBehavior.d.ts.map +1 -1
- package/dist/matter/behaviors/ConcentrationMeasurementBehavior.js +0 -96
- package/dist/matter/behaviors/ConcentrationMeasurementBehavior.js.map +1 -1
- package/dist/matter/behaviors/DoorLockBehavior.d.ts +0 -11
- package/dist/matter/behaviors/DoorLockBehavior.d.ts.map +1 -1
- package/dist/matter/behaviors/DoorLockBehavior.js +0 -25
- package/dist/matter/behaviors/DoorLockBehavior.js.map +1 -1
- package/dist/matter/behaviors/FanControlBehavior.d.ts +0 -11
- package/dist/matter/behaviors/FanControlBehavior.d.ts.map +1 -1
- package/dist/matter/behaviors/FanControlBehavior.js +0 -25
- package/dist/matter/behaviors/FanControlBehavior.js.map +1 -1
- package/dist/matter/behaviors/IdentifyBehavior.d.ts +0 -11
- package/dist/matter/behaviors/IdentifyBehavior.d.ts.map +1 -1
- package/dist/matter/behaviors/IdentifyBehavior.js +0 -17
- package/dist/matter/behaviors/IdentifyBehavior.js.map +1 -1
- package/dist/matter/behaviors/LevelControlBehavior.d.ts +0 -20
- package/dist/matter/behaviors/LevelControlBehavior.d.ts.map +1 -1
- package/dist/matter/behaviors/LevelControlBehavior.js +0 -52
- package/dist/matter/behaviors/LevelControlBehavior.js.map +1 -1
- package/dist/matter/behaviors/OnOffBehavior.d.ts +0 -17
- package/dist/matter/behaviors/OnOffBehavior.d.ts.map +1 -1
- package/dist/matter/behaviors/OnOffBehavior.js +0 -38
- package/dist/matter/behaviors/OnOffBehavior.js.map +1 -1
- package/dist/matter/behaviors/RvcCleanModeBehavior.d.ts +0 -11
- package/dist/matter/behaviors/RvcCleanModeBehavior.d.ts.map +1 -1
- package/dist/matter/behaviors/RvcCleanModeBehavior.js +0 -17
- package/dist/matter/behaviors/RvcCleanModeBehavior.js.map +1 -1
- package/dist/matter/behaviors/RvcOperationalStateBehavior.d.ts +0 -11
- package/dist/matter/behaviors/RvcOperationalStateBehavior.d.ts.map +1 -1
- package/dist/matter/behaviors/RvcOperationalStateBehavior.js +0 -29
- package/dist/matter/behaviors/RvcOperationalStateBehavior.js.map +1 -1
- package/dist/matter/behaviors/RvcRunModeBehavior.d.ts +0 -11
- package/dist/matter/behaviors/RvcRunModeBehavior.d.ts.map +1 -1
- package/dist/matter/behaviors/RvcRunModeBehavior.js +0 -17
- package/dist/matter/behaviors/RvcRunModeBehavior.js.map +1 -1
- package/dist/matter/behaviors/ServiceAreaBehavior.d.ts +0 -11
- package/dist/matter/behaviors/ServiceAreaBehavior.d.ts.map +1 -1
- package/dist/matter/behaviors/ServiceAreaBehavior.js +0 -23
- package/dist/matter/behaviors/ServiceAreaBehavior.js.map +1 -1
- package/dist/matter/behaviors/ThermostatBehavior.d.ts +0 -11
- package/dist/matter/behaviors/ThermostatBehavior.d.ts.map +1 -1
- package/dist/matter/behaviors/ThermostatBehavior.js +0 -39
- package/dist/matter/behaviors/ThermostatBehavior.js.map +1 -1
- package/dist/matter/behaviors/WindowCoveringBehavior.d.ts +0 -17
- package/dist/matter/behaviors/WindowCoveringBehavior.d.ts.map +1 -1
- package/dist/matter/behaviors/WindowCoveringBehavior.js +0 -56
- package/dist/matter/behaviors/WindowCoveringBehavior.js.map +1 -1
- package/dist/matter/behaviors/index.d.ts +0 -5
- package/dist/matter/behaviors/index.d.ts.map +1 -1
- package/dist/matter/behaviors/index.js +0 -5
- package/dist/matter/behaviors/index.js.map +1 -1
- package/dist/matter/configValidator.d.ts +0 -55
- package/dist/matter/configValidator.d.ts.map +1 -1
- package/dist/matter/configValidator.js +1 -68
- package/dist/matter/configValidator.js.map +1 -1
- package/dist/matter/errorHandler.d.ts +0 -22
- package/dist/matter/errorHandler.d.ts.map +1 -1
- package/dist/matter/errorHandler.js +0 -32
- package/dist/matter/errorHandler.js.map +1 -1
- package/dist/matter/errors.d.ts +0 -132
- package/dist/matter/errors.d.ts.map +1 -1
- package/dist/matter/errors.js +0 -132
- package/dist/matter/errors.js.map +1 -1
- package/dist/matter/index.d.ts +0 -30
- package/dist/matter/index.d.ts.map +1 -1
- package/dist/matter/index.js +0 -13
- package/dist/matter/index.js.map +1 -1
- package/dist/matter/logFormatter.d.ts +0 -17
- package/dist/matter/logFormatter.d.ts.map +1 -1
- package/dist/matter/logFormatter.js +5 -63
- package/dist/matter/logFormatter.js.map +1 -1
- package/dist/matter/server.d.ts +12 -236
- package/dist/matter/server.d.ts.map +1 -1
- package/dist/matter/server.js +177 -488
- package/dist/matter/server.js.map +1 -1
- package/dist/matter/serverHelpers.d.ts +0 -56
- package/dist/matter/serverHelpers.d.ts.map +1 -1
- package/dist/matter/serverHelpers.js +1 -66
- package/dist/matter/serverHelpers.js.map +1 -1
- package/dist/matter/sharedTypes.d.ts +0 -83
- package/dist/matter/sharedTypes.d.ts.map +1 -1
- package/dist/matter/sharedTypes.js +0 -26
- package/dist/matter/sharedTypes.js.map +1 -1
- package/dist/matter/storage.d.ts +0 -90
- package/dist/matter/storage.d.ts.map +1 -1
- package/dist/matter/storage.js +2 -130
- package/dist/matter/storage.js.map +1 -1
- package/dist/matter/typeHelpers.d.ts +0 -30
- package/dist/matter/typeHelpers.d.ts.map +1 -1
- package/dist/matter/typeHelpers.js +0 -24
- package/dist/matter/typeHelpers.js.map +1 -1
- package/dist/matter/types.d.ts +0 -273
- package/dist/matter/types.d.ts.map +1 -1
- package/dist/matter/types.js +0 -83
- package/dist/matter/types.js.map +1 -1
- package/dist/platformAccessory.d.ts +0 -15
- package/dist/platformAccessory.d.ts.map +1 -1
- package/dist/platformAccessory.js +6 -32
- package/dist/platformAccessory.js.map +1 -1
- package/dist/plugin.d.ts +0 -3
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +6 -29
- package/dist/plugin.js.map +1 -1
- package/dist/pluginManager.d.ts +0 -22
- package/dist/pluginManager.d.ts.map +1 -1
- package/dist/pluginManager.js +18 -41
- package/dist/pluginManager.js.map +1 -1
- package/dist/server.d.ts +9 -29
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +308 -157
- package/dist/server.js.map +1 -1
- package/dist/user.d.ts +0 -3
- package/dist/user.d.ts.map +1 -1
- package/dist/user.js +2 -5
- package/dist/user.js.map +1 -1
- package/dist/util/mac.js +0 -1
- package/dist/util/mac.js.map +1 -1
- package/package.json +4 -4
- package/dist/api.spec.d.ts +0 -2
- package/dist/api.spec.d.ts.map +0 -1
- package/dist/api.spec.js +0 -413
- package/dist/api.spec.js.map +0 -1
- package/dist/logger.spec.d.ts +0 -2
- package/dist/logger.spec.d.ts.map +0 -1
- package/dist/logger.spec.js +0 -95
- package/dist/logger.spec.js.map +0 -1
- package/dist/matter/ExternalMatterAccessoryPublisher.spec.d.ts +0 -2
- package/dist/matter/ExternalMatterAccessoryPublisher.spec.d.ts.map +0 -1
- package/dist/matter/ExternalMatterAccessoryPublisher.spec.js +0 -293
- package/dist/matter/ExternalMatterAccessoryPublisher.spec.js.map +0 -1
- package/dist/matter/accessoryCache.spec.d.ts +0 -2
- package/dist/matter/accessoryCache.spec.d.ts.map +0 -1
- package/dist/matter/accessoryCache.spec.js +0 -452
- package/dist/matter/accessoryCache.spec.js.map +0 -1
- package/dist/matter/behaviors/AirQualityBehavior.spec.d.ts +0 -5
- package/dist/matter/behaviors/AirQualityBehavior.spec.d.ts.map +0 -1
- package/dist/matter/behaviors/AirQualityBehavior.spec.js +0 -46
- package/dist/matter/behaviors/AirQualityBehavior.spec.js.map +0 -1
- package/dist/matter/behaviors/BehaviorRegistry.spec.d.ts +0 -2
- package/dist/matter/behaviors/BehaviorRegistry.spec.d.ts.map +0 -1
- package/dist/matter/behaviors/BehaviorRegistry.spec.js +0 -307
- package/dist/matter/behaviors/BehaviorRegistry.spec.js.map +0 -1
- package/dist/matter/behaviors/ColorControlBehavior.spec.d.ts +0 -2
- package/dist/matter/behaviors/ColorControlBehavior.spec.d.ts.map +0 -1
- package/dist/matter/behaviors/ColorControlBehavior.spec.js +0 -29
- package/dist/matter/behaviors/ColorControlBehavior.spec.js.map +0 -1
- package/dist/matter/behaviors/ConcentrationMeasurementBehavior.spec.d.ts +0 -5
- package/dist/matter/behaviors/ConcentrationMeasurementBehavior.spec.d.ts.map +0 -1
- package/dist/matter/behaviors/ConcentrationMeasurementBehavior.spec.js +0 -95
- package/dist/matter/behaviors/ConcentrationMeasurementBehavior.spec.js.map +0 -1
- package/dist/matter/behaviors/DoorLockBehavior.spec.d.ts +0 -2
- package/dist/matter/behaviors/DoorLockBehavior.spec.d.ts.map +0 -1
- package/dist/matter/behaviors/DoorLockBehavior.spec.js +0 -120
- package/dist/matter/behaviors/DoorLockBehavior.spec.js.map +0 -1
- package/dist/matter/behaviors/FanControlBehavior.spec.d.ts +0 -2
- package/dist/matter/behaviors/FanControlBehavior.spec.d.ts.map +0 -1
- package/dist/matter/behaviors/FanControlBehavior.spec.js +0 -23
- package/dist/matter/behaviors/FanControlBehavior.spec.js.map +0 -1
- package/dist/matter/behaviors/IdentifyBehavior.spec.d.ts +0 -2
- package/dist/matter/behaviors/IdentifyBehavior.spec.d.ts.map +0 -1
- package/dist/matter/behaviors/IdentifyBehavior.spec.js +0 -64
- package/dist/matter/behaviors/IdentifyBehavior.spec.js.map +0 -1
- package/dist/matter/behaviors/LevelControlBehavior.spec.d.ts +0 -2
- package/dist/matter/behaviors/LevelControlBehavior.spec.d.ts.map +0 -1
- package/dist/matter/behaviors/LevelControlBehavior.spec.js +0 -145
- package/dist/matter/behaviors/LevelControlBehavior.spec.js.map +0 -1
- package/dist/matter/behaviors/OnOffBehavior.spec.d.ts +0 -2
- package/dist/matter/behaviors/OnOffBehavior.spec.d.ts.map +0 -1
- package/dist/matter/behaviors/OnOffBehavior.spec.js +0 -128
- package/dist/matter/behaviors/OnOffBehavior.spec.js.map +0 -1
- package/dist/matter/behaviors/RvcCleanModeBehavior.spec.d.ts +0 -2
- package/dist/matter/behaviors/RvcCleanModeBehavior.spec.d.ts.map +0 -1
- package/dist/matter/behaviors/RvcCleanModeBehavior.spec.js +0 -57
- package/dist/matter/behaviors/RvcCleanModeBehavior.spec.js.map +0 -1
- package/dist/matter/behaviors/RvcOperationalStateBehavior.spec.d.ts +0 -2
- package/dist/matter/behaviors/RvcOperationalStateBehavior.spec.d.ts.map +0 -1
- package/dist/matter/behaviors/RvcOperationalStateBehavior.spec.js +0 -55
- package/dist/matter/behaviors/RvcOperationalStateBehavior.spec.js.map +0 -1
- package/dist/matter/behaviors/RvcRunModeBehavior.spec.d.ts +0 -2
- package/dist/matter/behaviors/RvcRunModeBehavior.spec.d.ts.map +0 -1
- package/dist/matter/behaviors/RvcRunModeBehavior.spec.js +0 -57
- package/dist/matter/behaviors/RvcRunModeBehavior.spec.js.map +0 -1
- package/dist/matter/behaviors/ServiceAreaBehavior.spec.d.ts +0 -2
- package/dist/matter/behaviors/ServiceAreaBehavior.spec.d.ts.map +0 -1
- package/dist/matter/behaviors/ServiceAreaBehavior.spec.js +0 -53
- package/dist/matter/behaviors/ServiceAreaBehavior.spec.js.map +0 -1
- package/dist/matter/behaviors/ThermostatBehavior.spec.d.ts +0 -2
- package/dist/matter/behaviors/ThermostatBehavior.spec.d.ts.map +0 -1
- package/dist/matter/behaviors/ThermostatBehavior.spec.js +0 -23
- package/dist/matter/behaviors/ThermostatBehavior.spec.js.map +0 -1
- package/dist/matter/behaviors/WindowCoveringBehavior.spec.d.ts +0 -2
- package/dist/matter/behaviors/WindowCoveringBehavior.spec.d.ts.map +0 -1
- package/dist/matter/behaviors/WindowCoveringBehavior.spec.js +0 -27
- package/dist/matter/behaviors/WindowCoveringBehavior.spec.js.map +0 -1
- package/dist/matter/configValidator.spec.d.ts +0 -2
- package/dist/matter/configValidator.spec.d.ts.map +0 -1
- package/dist/matter/configValidator.spec.js +0 -390
- package/dist/matter/configValidator.spec.js.map +0 -1
- package/dist/matter/errorHandler.spec.d.ts +0 -2
- package/dist/matter/errorHandler.spec.d.ts.map +0 -1
- package/dist/matter/errorHandler.spec.js +0 -159
- package/dist/matter/errorHandler.spec.js.map +0 -1
- package/dist/matter/logFormatter.spec.d.ts +0 -2
- package/dist/matter/logFormatter.spec.d.ts.map +0 -1
- package/dist/matter/logFormatter.spec.js +0 -252
- package/dist/matter/logFormatter.spec.js.map +0 -1
- package/dist/matter/serverHelpers.spec.d.ts +0 -2
- package/dist/matter/serverHelpers.spec.d.ts.map +0 -1
- package/dist/matter/serverHelpers.spec.js +0 -527
- package/dist/matter/serverHelpers.spec.js.map +0 -1
- package/dist/matter/storage.spec.d.ts +0 -2
- package/dist/matter/storage.spec.d.ts.map +0 -1
- package/dist/matter/storage.spec.js +0 -570
- package/dist/matter/storage.spec.js.map +0 -1
- package/dist/matter/typeHelpers.spec.d.ts +0 -2
- package/dist/matter/typeHelpers.spec.d.ts.map +0 -1
- package/dist/matter/typeHelpers.spec.js +0 -127
- package/dist/matter/typeHelpers.spec.js.map +0 -1
- package/dist/platformAccessory.spec.d.ts +0 -2
- package/dist/platformAccessory.spec.d.ts.map +0 -1
- package/dist/platformAccessory.spec.js +0 -126
- package/dist/platformAccessory.spec.js.map +0 -1
- package/dist/pluginManager.spec.d.ts +0 -2
- package/dist/pluginManager.spec.d.ts.map +0 -1
- package/dist/pluginManager.spec.js +0 -43
- package/dist/pluginManager.spec.js.map +0 -1
- package/dist/server.spec.d.ts +0 -2
- package/dist/server.spec.d.ts.map +0 -1
- package/dist/server.spec.js +0 -57
- package/dist/server.spec.js.map +0 -1
- package/dist/user.spec.d.ts +0 -2
- package/dist/user.spec.d.ts.map +0 -1
- package/dist/user.spec.js +0 -31
- package/dist/user.spec.js.map +0 -1
- package/dist/util/mac.spec.d.ts +0 -2
- package/dist/util/mac.spec.d.ts.map +0 -1
- package/dist/util/mac.spec.js +0 -36
- package/dist/util/mac.spec.js.map +0 -1
- package/dist/version.spec.d.ts +0 -2
- package/dist/version.spec.d.ts.map +0 -1
- package/dist/version.spec.js +0 -20
- package/dist/version.spec.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MatterConfigCollector.js","sourceRoot":"","sources":["../../src/matter/MatterConfigCollector.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"MatterConfigCollector.js","sourceRoot":"","sources":["../../src/matter/MatterConfigCollector.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,13 +1,4 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Matter Accessory Cache
|
|
3
|
-
*
|
|
4
|
-
* Handles persistence of Matter accessories across Homebridge restarts.
|
|
5
|
-
* Similar to HAP's cached accessories, but designed for Matter's simpler API.
|
|
6
|
-
*/
|
|
7
1
|
import type { InternalMatterAccessory } from './types.js';
|
|
8
|
-
/**
|
|
9
|
-
* Serializable Matter accessory part (excludes functions and runtime state)
|
|
10
|
-
*/
|
|
11
2
|
export interface SerializedMatterAccessoryPart {
|
|
12
3
|
id: string;
|
|
13
4
|
displayName?: string;
|
|
@@ -21,9 +12,6 @@ export interface SerializedMatterAccessoryPart {
|
|
|
21
12
|
};
|
|
22
13
|
};
|
|
23
14
|
}
|
|
24
|
-
/**
|
|
25
|
-
* Serializable Matter accessory (excludes functions and runtime state)
|
|
26
|
-
*/
|
|
27
15
|
export interface SerializedMatterAccessory {
|
|
28
16
|
plugin: string;
|
|
29
17
|
platform: string;
|
|
@@ -47,9 +35,6 @@ export interface SerializedMatterAccessory {
|
|
|
47
35
|
};
|
|
48
36
|
parts?: SerializedMatterAccessoryPart[];
|
|
49
37
|
}
|
|
50
|
-
/**
|
|
51
|
-
* Matter Accessory Cache Manager
|
|
52
|
-
*/
|
|
53
38
|
export declare class MatterAccessoryCache {
|
|
54
39
|
private readonly cacheFilePath;
|
|
55
40
|
private cachedAccessories;
|
|
@@ -59,47 +44,14 @@ export declare class MatterAccessoryCache {
|
|
|
59
44
|
private saveDebounceTimer;
|
|
60
45
|
private readonly SAVE_DEBOUNCE_MS;
|
|
61
46
|
constructor(storagePath: string, bridgeId: string);
|
|
62
|
-
/**
|
|
63
|
-
* Load cached accessories from disk
|
|
64
|
-
* Returns a map of cached accessories keyed by UUID
|
|
65
|
-
*/
|
|
66
47
|
load(): Promise<Map<string, SerializedMatterAccessory>>;
|
|
67
|
-
/**
|
|
68
|
-
* Request a debounced save to cache
|
|
69
|
-
* Multiple rapid calls within the debounce window will only result in one disk write
|
|
70
|
-
* Use this for normal operations to reduce disk I/O
|
|
71
|
-
*/
|
|
72
48
|
requestSave(accessories: Map<string, InternalMatterAccessory>): void;
|
|
73
|
-
/**
|
|
74
|
-
* Save accessories to cache immediately (serialized to prevent concurrent write conflicts)
|
|
75
|
-
* Uses a queue pattern to ensure saves are truly serialized even when called concurrently
|
|
76
|
-
* Use this for shutdown/critical operations that need immediate persistence
|
|
77
|
-
*/
|
|
78
49
|
save(accessories: Map<string, InternalMatterAccessory>): Promise<void>;
|
|
79
|
-
/**
|
|
80
|
-
* Internal save implementation
|
|
81
|
-
* Performs atomic write to prevent cache corruption on system crashes
|
|
82
|
-
*/
|
|
83
50
|
private performSave;
|
|
84
|
-
/**
|
|
85
|
-
* Get cached accessory by UUID
|
|
86
|
-
*/
|
|
87
51
|
getCached(uuid: string): SerializedMatterAccessory | undefined;
|
|
88
|
-
/**
|
|
89
|
-
* Check if an accessory is cached
|
|
90
|
-
*/
|
|
91
52
|
hasCached(uuid: string): boolean;
|
|
92
|
-
/**
|
|
93
|
-
* Remove an accessory from cache
|
|
94
|
-
*/
|
|
95
53
|
removeCached(uuid: string): void;
|
|
96
|
-
/**
|
|
97
|
-
* Get all cached accessories
|
|
98
|
-
*/
|
|
99
54
|
getAllCached(): Map<string, SerializedMatterAccessory>;
|
|
100
|
-
/**
|
|
101
|
-
* Serialize a Matter accessory for storage
|
|
102
|
-
*/
|
|
103
55
|
private serializeAccessory;
|
|
104
56
|
}
|
|
105
57
|
//# sourceMappingURL=accessoryCache.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"accessoryCache.d.ts","sourceRoot":"","sources":["../../src/matter/accessoryCache.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"accessoryCache.d.ts","sourceRoot":"","sources":["../../src/matter/accessoryCache.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAA;AAazD,MAAM,WAAW,6BAA6B;IAC5C,EAAE,EAAE,MAAM,CAAA;IACV,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,UAAU,EAAE;QACV,IAAI,CAAC,EAAE,MAAM,CAAA;QACb,IAAI,CAAC,EAAE,MAAM,CAAA;KACd,CAAA;IACD,QAAQ,EAAE;QACR,CAAC,WAAW,EAAE,MAAM,GAAG;YACrB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAA;SACjC,CAAA;KACF,CAAA;CACF;AAKD,MAAM,WAAW,yBAAyB;IACxC,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,CAAA;IAChB,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,UAAU,EAAE;QACV,IAAI,CAAC,EAAE,MAAM,CAAA;QACb,IAAI,CAAC,EAAE,MAAM,CAAA;KACd,CAAA;IACD,YAAY,EAAE,MAAM,CAAA;IACpB,YAAY,EAAE,MAAM,CAAA;IACpB,KAAK,EAAE,MAAM,CAAA;IACb,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACjC,QAAQ,CAAC,EAAE;QACT,CAAC,WAAW,EAAE,MAAM,GAAG;YACrB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAA;SACjC,CAAA;KACF,CAAA;IACD,KAAK,CAAC,EAAE,6BAA6B,EAAE,CAAA;CACxC;AAKD,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAQ;IACtC,OAAO,CAAC,iBAAiB,CAAoD;IAC7E,OAAO,CAAC,WAAW,CAAQ;IAC3B,OAAO,CAAC,SAAS,CAAmC;IACpD,OAAO,CAAC,gBAAgB,CAAQ;IAChC,OAAO,CAAC,iBAAiB,CAA8B;IACvD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAO;gBAE5B,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;IAQ3C,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,yBAAyB,CAAC,CAAC;IAyD7D,WAAW,CAAC,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,uBAAuB,CAAC,GAAG,IAAI;IAmB9D,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,uBAAuB,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;YAmB9D,WAAW;IAkDzB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,yBAAyB,GAAG,SAAS;IAO9D,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAOhC,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAOhC,YAAY,IAAI,GAAG,CAAC,MAAM,EAAE,yBAAyB,CAAC;IAOtD,OAAO,CAAC,kBAAkB;CA0C3B"}
|
|
@@ -1,11 +1,7 @@
|
|
|
1
|
-
/* global NodeJS */
|
|
2
1
|
import { dirname, join } from 'node:path';
|
|
3
2
|
import fs from 'fs-extra';
|
|
4
3
|
import { Logger } from '../logger.js';
|
|
5
4
|
const log = Logger.withPrefix('Matter/Accessories');
|
|
6
|
-
/**
|
|
7
|
-
* Matter Accessory Cache Manager
|
|
8
|
-
*/
|
|
9
5
|
export class MatterAccessoryCache {
|
|
10
6
|
cacheFilePath;
|
|
11
7
|
cachedAccessories = new Map();
|
|
@@ -13,44 +9,35 @@ export class MatterAccessoryCache {
|
|
|
13
9
|
saveQueue = Promise.resolve();
|
|
14
10
|
directoryEnsured = false;
|
|
15
11
|
saveDebounceTimer = null;
|
|
16
|
-
SAVE_DEBOUNCE_MS = 2000;
|
|
12
|
+
SAVE_DEBOUNCE_MS = 2000;
|
|
17
13
|
constructor(storagePath, bridgeId) {
|
|
18
14
|
this.cacheFilePath = join(storagePath, bridgeId, 'accessories.json');
|
|
19
15
|
}
|
|
20
|
-
/**
|
|
21
|
-
* Load cached accessories from disk
|
|
22
|
-
* Returns a map of cached accessories keyed by UUID
|
|
23
|
-
*/
|
|
24
16
|
async load() {
|
|
25
17
|
if (this.cacheLoaded) {
|
|
26
18
|
return this.cachedAccessories;
|
|
27
19
|
}
|
|
28
20
|
try {
|
|
29
|
-
// Check if cache file exists
|
|
30
21
|
if (!await fs.pathExists(this.cacheFilePath)) {
|
|
31
22
|
log.info('No cached Matter accessories found (first run)');
|
|
32
23
|
this.cacheLoaded = true;
|
|
33
24
|
return this.cachedAccessories;
|
|
34
25
|
}
|
|
35
|
-
// Read and parse cache file
|
|
36
26
|
const cacheData = await fs.readJson(this.cacheFilePath);
|
|
37
27
|
if (!Array.isArray(cacheData)) {
|
|
38
28
|
throw new TypeError('Cache file does not contain an array');
|
|
39
29
|
}
|
|
40
|
-
// Load accessories into map (only those with valid UUIDs)
|
|
41
30
|
for (const serialized of cacheData) {
|
|
42
31
|
if (serialized.uuid) {
|
|
43
32
|
this.cachedAccessories.set(serialized.uuid, serialized);
|
|
44
33
|
}
|
|
45
34
|
}
|
|
46
35
|
log.info(`Loaded ${this.cachedAccessories.size} cached Matter accessories`);
|
|
47
|
-
// Directory must exist if we successfully loaded the cache file
|
|
48
36
|
this.directoryEnsured = true;
|
|
49
37
|
this.cacheLoaded = true;
|
|
50
38
|
return this.cachedAccessories;
|
|
51
39
|
}
|
|
52
40
|
catch (error) {
|
|
53
|
-
// If JSON parsing failed (corrupted file), delete it and start fresh
|
|
54
41
|
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
55
42
|
log.error(`Failed to load Matter accessory cache from ${this.cacheFilePath}: ${errorMessage}`);
|
|
56
43
|
log.warn('Deleting corrupted cache file and starting fresh');
|
|
@@ -58,62 +45,38 @@ export class MatterAccessoryCache {
|
|
|
58
45
|
await fs.remove(this.cacheFilePath);
|
|
59
46
|
}
|
|
60
47
|
catch (removeError) {
|
|
61
|
-
// non-fatal: couldn't delete corrupted file
|
|
62
48
|
log.debug('Could not delete corrupted cache file:', removeError);
|
|
63
49
|
}
|
|
64
50
|
this.cacheLoaded = true;
|
|
65
51
|
return this.cachedAccessories;
|
|
66
52
|
}
|
|
67
53
|
}
|
|
68
|
-
/**
|
|
69
|
-
* Request a debounced save to cache
|
|
70
|
-
* Multiple rapid calls within the debounce window will only result in one disk write
|
|
71
|
-
* Use this for normal operations to reduce disk I/O
|
|
72
|
-
*/
|
|
73
54
|
requestSave(accessories) {
|
|
74
|
-
// Clear any existing debounce timer
|
|
75
55
|
if (this.saveDebounceTimer) {
|
|
76
56
|
clearTimeout(this.saveDebounceTimer);
|
|
77
57
|
}
|
|
78
|
-
// Schedule a new save after the debounce period
|
|
79
58
|
this.saveDebounceTimer = setTimeout(() => {
|
|
80
59
|
this.save(accessories).catch((error) => {
|
|
81
60
|
log.error('Debounced cache save failed:', error);
|
|
82
61
|
});
|
|
83
62
|
}, this.SAVE_DEBOUNCE_MS);
|
|
84
63
|
}
|
|
85
|
-
/**
|
|
86
|
-
* Save accessories to cache immediately (serialized to prevent concurrent write conflicts)
|
|
87
|
-
* Uses a queue pattern to ensure saves are truly serialized even when called concurrently
|
|
88
|
-
* Use this for shutdown/critical operations that need immediate persistence
|
|
89
|
-
*/
|
|
90
64
|
async save(accessories) {
|
|
91
|
-
// Clear any pending debounced save since we're saving now
|
|
92
65
|
if (this.saveDebounceTimer) {
|
|
93
66
|
clearTimeout(this.saveDebounceTimer);
|
|
94
67
|
this.saveDebounceTimer = null;
|
|
95
68
|
}
|
|
96
|
-
// Chain this save to the end of the queue
|
|
97
|
-
// This ensures all saves run sequentially without race conditions
|
|
98
69
|
this.saveQueue = this.saveQueue.then(() => this.performSave(accessories));
|
|
99
|
-
// Wait for this save to complete
|
|
100
70
|
await this.saveQueue;
|
|
101
71
|
}
|
|
102
|
-
/**
|
|
103
|
-
* Internal save implementation
|
|
104
|
-
* Performs atomic write to prevent cache corruption on system crashes
|
|
105
|
-
*/
|
|
106
72
|
async performSave(accessories) {
|
|
107
73
|
const tempFilePath = `${this.cacheFilePath}.tmp`;
|
|
108
74
|
try {
|
|
109
|
-
// Serialize accessories (strip out functions and non-serializable objects)
|
|
110
75
|
const serialized = Array.from(accessories.values())
|
|
111
76
|
.map(accessory => this.serializeAccessory(accessory));
|
|
112
|
-
// Ensure directory exists (only check once, not on every save)
|
|
113
77
|
if (!this.directoryEnsured) {
|
|
114
78
|
const directory = dirname(this.cacheFilePath);
|
|
115
79
|
await fs.ensureDir(directory);
|
|
116
|
-
// Verify directory was created successfully
|
|
117
80
|
const dirExists = await fs.pathExists(directory);
|
|
118
81
|
if (!dirExists) {
|
|
119
82
|
throw new Error(`Failed to create cache directory: ${directory}`);
|
|
@@ -121,63 +84,41 @@ export class MatterAccessoryCache {
|
|
|
121
84
|
this.directoryEnsured = true;
|
|
122
85
|
log.debug(`Cache directory ensured: ${directory}`);
|
|
123
86
|
}
|
|
124
|
-
// Write to temporary file first (atomic write pattern to prevent corruption)
|
|
125
87
|
await fs.writeJson(tempFilePath, serialized, { spaces: 2 });
|
|
126
|
-
// Atomically move temp file to final location
|
|
127
|
-
// Use move instead of rename for better cross-device compatibility
|
|
128
88
|
await fs.move(tempFilePath, this.cacheFilePath, { overwrite: true });
|
|
129
89
|
log.debug(`Saved ${serialized.length} Matter accessor${serialized.length === 1 ? 'y' : 'ies'} to cache`);
|
|
130
90
|
}
|
|
131
91
|
catch (error) {
|
|
132
92
|
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
133
93
|
log.error(`Failed to save Matter accessory cache: ${errorMessage}`);
|
|
134
|
-
// Clean up temp file if it exists
|
|
135
94
|
try {
|
|
136
95
|
if (await fs.pathExists(tempFilePath)) {
|
|
137
96
|
await fs.remove(tempFilePath);
|
|
138
97
|
}
|
|
139
98
|
}
|
|
140
99
|
catch (cleanupError) {
|
|
141
|
-
// non-fatal: couldn't clean up temp file
|
|
142
100
|
log.debug('Could not clean up temporary cache file:', cleanupError);
|
|
143
101
|
}
|
|
144
102
|
}
|
|
145
103
|
}
|
|
146
|
-
/**
|
|
147
|
-
* Get cached accessory by UUID
|
|
148
|
-
*/
|
|
149
104
|
getCached(uuid) {
|
|
150
105
|
return this.cachedAccessories.get(uuid);
|
|
151
106
|
}
|
|
152
|
-
/**
|
|
153
|
-
* Check if an accessory is cached
|
|
154
|
-
*/
|
|
155
107
|
hasCached(uuid) {
|
|
156
108
|
return this.cachedAccessories.has(uuid);
|
|
157
109
|
}
|
|
158
|
-
/**
|
|
159
|
-
* Remove an accessory from cache
|
|
160
|
-
*/
|
|
161
110
|
removeCached(uuid) {
|
|
162
111
|
this.cachedAccessories.delete(uuid);
|
|
163
112
|
}
|
|
164
|
-
/**
|
|
165
|
-
* Get all cached accessories
|
|
166
|
-
*/
|
|
167
113
|
getAllCached() {
|
|
168
114
|
return new Map(this.cachedAccessories);
|
|
169
115
|
}
|
|
170
|
-
/**
|
|
171
|
-
* Serialize a Matter accessory for storage
|
|
172
|
-
*/
|
|
173
116
|
serializeAccessory(accessory) {
|
|
174
|
-
// Extract device type information (EndpointType has name and code properties)
|
|
175
117
|
const deviceType = accessory.deviceType;
|
|
176
118
|
const deviceTypeInfo = {
|
|
177
119
|
name: deviceType?.name,
|
|
178
120
|
code: deviceType?.code,
|
|
179
121
|
};
|
|
180
|
-
// Serialize parts if present (excluding handlers which are functions)
|
|
181
122
|
let serializedParts;
|
|
182
123
|
if (accessory.parts && accessory.parts.length > 0) {
|
|
183
124
|
serializedParts = accessory.parts.map((part) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"accessoryCache.js","sourceRoot":"","sources":["../../src/matter/accessoryCache.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"accessoryCache.js","sourceRoot":"","sources":["../../src/matter/accessoryCache.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,50 +1,8 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Air Quality Cluster Behavior
|
|
3
|
-
*
|
|
4
|
-
* Handles air quality sensor readings
|
|
5
|
-
* This cluster is primarily read-only, exposing air quality measurements to Matter controllers
|
|
6
|
-
*
|
|
7
|
-
* Example usage:
|
|
8
|
-
* ```typescript
|
|
9
|
-
* const accessory: MatterAccessory = {
|
|
10
|
-
* uuid: 'air-quality-sensor-1',
|
|
11
|
-
* displayName: 'Living Room Air Quality',
|
|
12
|
-
* deviceType: api.matter.deviceTypes.AirQualitySensor,
|
|
13
|
-
* serialNumber: 'AQ-12345',
|
|
14
|
-
* manufacturer: 'Acme',
|
|
15
|
-
* model: 'AQ-100',
|
|
16
|
-
* clusters: {
|
|
17
|
-
* airQuality: {
|
|
18
|
-
* airQuality: 1, // 0=Unknown, 1=Good, 2=Fair, 3=Moderate, 4=Poor, 5=VeryPoor, 6=ExtremelyPoor
|
|
19
|
-
* }
|
|
20
|
-
* }
|
|
21
|
-
* }
|
|
22
|
-
*
|
|
23
|
-
* // Update air quality reading
|
|
24
|
-
* await api.matter.updateClusterState(accessory.uuid, 'airQuality', { airQuality: 2 })
|
|
25
|
-
* ```
|
|
26
|
-
*/
|
|
27
1
|
import type { BehaviorRegistry } from './BehaviorRegistry.js';
|
|
28
2
|
import { AirQualityServer } from '@matter/main/behaviors/air-quality';
|
|
29
|
-
/**
|
|
30
|
-
* Custom Air Quality Server
|
|
31
|
-
*
|
|
32
|
-
* The Air Quality cluster provides an interface for monitoring air quality levels.
|
|
33
|
-
* It includes measurements for overall air quality and various pollutants.
|
|
34
|
-
*
|
|
35
|
-
* This is a read-only cluster - plugins update state via the Matter API,
|
|
36
|
-
* and Matter controllers read these values. No commands are defined.
|
|
37
|
-
*/
|
|
38
3
|
export declare class HomebridgeAirQualityServer extends AirQualityServer {
|
|
39
4
|
private static registry;
|
|
40
|
-
/**
|
|
41
|
-
* Set the behavior registry (called once during server initialization)
|
|
42
|
-
*/
|
|
43
5
|
static setRegistry(registry: BehaviorRegistry): void;
|
|
44
|
-
/**
|
|
45
|
-
* Initialize the air quality server
|
|
46
|
-
* Sets up any required state or listeners
|
|
47
|
-
*/
|
|
48
6
|
initialize(): void;
|
|
49
7
|
}
|
|
50
8
|
//# sourceMappingURL=AirQualityBehavior.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AirQualityBehavior.d.ts","sourceRoot":"","sources":["../../../src/matter/behaviors/AirQualityBehavior.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"AirQualityBehavior.d.ts","sourceRoot":"","sources":["../../../src/matter/behaviors/AirQualityBehavior.ts"],"names":[],"mappings":"AA2BA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAE7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAA;AAWrE,qBAAa,0BAA2B,SAAQ,gBAAgB;IAC9D,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAkB;IAKzC,MAAM,CAAC,WAAW,CAAC,QAAQ,EAAE,gBAAgB,GAAG,IAAI;IAQ3C,UAAU,IAAI,IAAI;CAM5B"}
|
|
@@ -1,55 +1,11 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Air Quality Cluster Behavior
|
|
3
|
-
*
|
|
4
|
-
* Handles air quality sensor readings
|
|
5
|
-
* This cluster is primarily read-only, exposing air quality measurements to Matter controllers
|
|
6
|
-
*
|
|
7
|
-
* Example usage:
|
|
8
|
-
* ```typescript
|
|
9
|
-
* const accessory: MatterAccessory = {
|
|
10
|
-
* uuid: 'air-quality-sensor-1',
|
|
11
|
-
* displayName: 'Living Room Air Quality',
|
|
12
|
-
* deviceType: api.matter.deviceTypes.AirQualitySensor,
|
|
13
|
-
* serialNumber: 'AQ-12345',
|
|
14
|
-
* manufacturer: 'Acme',
|
|
15
|
-
* model: 'AQ-100',
|
|
16
|
-
* clusters: {
|
|
17
|
-
* airQuality: {
|
|
18
|
-
* airQuality: 1, // 0=Unknown, 1=Good, 2=Fair, 3=Moderate, 4=Poor, 5=VeryPoor, 6=ExtremelyPoor
|
|
19
|
-
* }
|
|
20
|
-
* }
|
|
21
|
-
* }
|
|
22
|
-
*
|
|
23
|
-
* // Update air quality reading
|
|
24
|
-
* await api.matter.updateClusterState(accessory.uuid, 'airQuality', { airQuality: 2 })
|
|
25
|
-
* ```
|
|
26
|
-
*/
|
|
27
1
|
import { AirQualityServer } from '@matter/main/behaviors/air-quality';
|
|
28
|
-
/**
|
|
29
|
-
* Custom Air Quality Server
|
|
30
|
-
*
|
|
31
|
-
* The Air Quality cluster provides an interface for monitoring air quality levels.
|
|
32
|
-
* It includes measurements for overall air quality and various pollutants.
|
|
33
|
-
*
|
|
34
|
-
* This is a read-only cluster - plugins update state via the Matter API,
|
|
35
|
-
* and Matter controllers read these values. No commands are defined.
|
|
36
|
-
*/
|
|
37
2
|
export class HomebridgeAirQualityServer extends AirQualityServer {
|
|
38
3
|
static registry;
|
|
39
|
-
/**
|
|
40
|
-
* Set the behavior registry (called once during server initialization)
|
|
41
|
-
*/
|
|
42
4
|
static setRegistry(registry) {
|
|
43
5
|
this.registry = registry;
|
|
44
6
|
}
|
|
45
|
-
/**
|
|
46
|
-
* Initialize the air quality server
|
|
47
|
-
* Sets up any required state or listeners
|
|
48
|
-
*/
|
|
49
7
|
initialize() {
|
|
50
8
|
super.initialize();
|
|
51
|
-
// Air Quality cluster is read-only, no command handlers needed
|
|
52
|
-
// State updates come from plugin via Matter API's updateClusterState()
|
|
53
9
|
}
|
|
54
10
|
}
|
|
55
11
|
//# sourceMappingURL=AirQualityBehavior.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AirQualityBehavior.js","sourceRoot":"","sources":["../../../src/matter/behaviors/AirQualityBehavior.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"AirQualityBehavior.js","sourceRoot":"","sources":["../../../src/matter/behaviors/AirQualityBehavior.ts"],"names":[],"mappings":"AA6BA,OAAO,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAA;AAWrE,MAAM,OAAO,0BAA2B,SAAQ,gBAAgB;IACtD,MAAM,CAAC,QAAQ,CAAkB;IAKzC,MAAM,CAAC,WAAW,CAAC,QAA0B;QAC3C,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;IAC1B,CAAC;IAMQ,UAAU;QACjB,KAAK,CAAC,UAAU,EAAE,CAAA;IAIpB,CAAC;CACF"}
|
|
@@ -1,62 +1,24 @@
|
|
|
1
|
-
|
|
2
|
-
* Behavior Registry
|
|
3
|
-
*
|
|
4
|
-
* Manages handler registration and accessory state without global mutable state.
|
|
5
|
-
* This replaces the global Maps in matterBehaviors.ts.
|
|
6
|
-
*/
|
|
1
|
+
import type { MatterServer } from '../server.js';
|
|
7
2
|
import type { InternalMatterAccessory } from '../types.js';
|
|
8
|
-
/**
|
|
9
|
-
* Handler function signature
|
|
10
|
-
*/
|
|
11
3
|
export type MatterCommandHandler = (...args: any[]) => void | Promise<void>;
|
|
12
|
-
/**
|
|
13
|
-
* Accessory map type
|
|
14
|
-
*/
|
|
15
4
|
export type MatterAccessoryMap = Map<string, InternalMatterAccessory>;
|
|
16
|
-
/**
|
|
17
|
-
* Registry for behavior handlers and accessory state
|
|
18
|
-
* Replaces global state with a proper class instance
|
|
19
|
-
*/
|
|
20
5
|
export declare class BehaviorRegistry {
|
|
21
6
|
private handlers;
|
|
22
7
|
private partEndpoints;
|
|
23
8
|
private accessoriesMap;
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
*/
|
|
9
|
+
private server?;
|
|
10
|
+
constructor(accessoriesMap: MatterAccessoryMap, server?: MatterServer);
|
|
11
|
+
setServer(server: MatterServer): void;
|
|
28
12
|
registerHandler(endpointId: string, clusterName: string, commandName: string, handler: MatterCommandHandler): void;
|
|
29
|
-
/**
|
|
30
|
-
* Get a registered handler
|
|
31
|
-
*/
|
|
32
13
|
getHandler(endpointId: string, clusterName: string, commandName: string): MatterCommandHandler | undefined;
|
|
33
|
-
/**
|
|
34
|
-
* Execute a handler if it exists
|
|
35
|
-
*/
|
|
36
14
|
executeHandler(endpointId: string, clusterName: string, commandName: string, ...args: any[]): Promise<boolean>;
|
|
37
|
-
/**
|
|
38
|
-
* Register a part endpoint mapping
|
|
39
|
-
*/
|
|
40
15
|
registerPartEndpoint(endpointId: string, parentUuid: string, partId: string): void;
|
|
41
|
-
/**
|
|
42
|
-
* Get part endpoint info
|
|
43
|
-
*/
|
|
44
16
|
getPartEndpointInfo(endpointId: string): {
|
|
45
17
|
parentUuid: string;
|
|
46
18
|
partId: string;
|
|
47
19
|
} | undefined;
|
|
48
|
-
/**
|
|
49
|
-
* Sync cluster state to cache
|
|
50
|
-
* Updates the accessory's cached cluster state when values change
|
|
51
|
-
*/
|
|
52
20
|
syncStateToCache(endpointId: string, clusterName: string, attributes: Record<string, unknown>): void;
|
|
53
|
-
/**
|
|
54
|
-
* Clear all handlers (for cleanup)
|
|
55
|
-
*/
|
|
56
21
|
clear(): void;
|
|
57
|
-
/**
|
|
58
|
-
* Get statistics
|
|
59
|
-
*/
|
|
60
22
|
getStats(): {
|
|
61
23
|
handlerCount: number;
|
|
62
24
|
partCount: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BehaviorRegistry.d.ts","sourceRoot":"","sources":["../../../src/matter/behaviors/BehaviorRegistry.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"BehaviorRegistry.d.ts","sourceRoot":"","sources":["../../../src/matter/behaviors/BehaviorRegistry.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAChD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAA;AAS1D,MAAM,MAAM,oBAAoB,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;AAK3E,MAAM,MAAM,kBAAkB,GAAG,GAAG,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAAA;AAMrE,qBAAa,gBAAgB;IAE3B,OAAO,CAAC,QAAQ,CAAoE;IAGpF,OAAO,CAAC,aAAa,CAA4D;IAGjF,OAAO,CAAC,cAAc,CAAoB;IAG1C,OAAO,CAAC,MAAM,CAAC,CAAc;gBAEjB,cAAc,EAAE,kBAAkB,EAAE,MAAM,CAAC,EAAE,YAAY;IAQrE,SAAS,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI;IAOrC,eAAe,CACb,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,oBAAoB,GAC5B,IAAI;IAmBP,UAAU,CACR,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,GAClB,oBAAoB,GAAG,SAAS;IAO7B,cAAc,CAClB,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,EACnB,GAAG,IAAI,EAAE,GAAG,EAAE,GACb,OAAO,CAAC,OAAO,CAAC;IAkBnB,oBAAoB,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAQlF,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS;IAQ3F,gBAAgB,CACd,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAClC,IAAI;IA2DP,KAAK,IAAI,IAAI;IAQb,QAAQ,IAAI;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE;CAaxD"}
|
|
@@ -1,28 +1,17 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Behavior Registry
|
|
3
|
-
*
|
|
4
|
-
* Manages handler registration and accessory state without global mutable state.
|
|
5
|
-
* This replaces the global Maps in matterBehaviors.ts.
|
|
6
|
-
*/
|
|
7
1
|
import { Logger } from '../../logger.js';
|
|
8
2
|
const log = Logger.withPrefix('Matter/Behaviors');
|
|
9
|
-
/**
|
|
10
|
-
* Registry for behavior handlers and accessory state
|
|
11
|
-
* Replaces global state with a proper class instance
|
|
12
|
-
*/
|
|
13
3
|
export class BehaviorRegistry {
|
|
14
|
-
// Handler storage: endpointId -> clusterName -> commandName -> handler
|
|
15
4
|
handlers = new Map();
|
|
16
|
-
// Part endpoint mapping: endpointId -> { parentUuid, partId }
|
|
17
5
|
partEndpoints = new Map();
|
|
18
|
-
// Reference to accessories map (not owned by registry)
|
|
19
6
|
accessoriesMap;
|
|
20
|
-
|
|
7
|
+
server;
|
|
8
|
+
constructor(accessoriesMap, server) {
|
|
21
9
|
this.accessoriesMap = accessoriesMap;
|
|
10
|
+
this.server = server;
|
|
11
|
+
}
|
|
12
|
+
setServer(server) {
|
|
13
|
+
this.server = server;
|
|
22
14
|
}
|
|
23
|
-
/**
|
|
24
|
-
* Register a command handler for an endpoint
|
|
25
|
-
*/
|
|
26
15
|
registerHandler(endpointId, clusterName, commandName, handler) {
|
|
27
16
|
if (!this.handlers.has(endpointId)) {
|
|
28
17
|
this.handlers.set(endpointId, new Map());
|
|
@@ -35,15 +24,9 @@ export class BehaviorRegistry {
|
|
|
35
24
|
clusterHandlers.set(commandName, handler);
|
|
36
25
|
log.debug(`Registered handler: ${endpointId}.${clusterName}.${commandName}`);
|
|
37
26
|
}
|
|
38
|
-
/**
|
|
39
|
-
* Get a registered handler
|
|
40
|
-
*/
|
|
41
27
|
getHandler(endpointId, clusterName, commandName) {
|
|
42
28
|
return this.handlers.get(endpointId)?.get(clusterName)?.get(commandName);
|
|
43
29
|
}
|
|
44
|
-
/**
|
|
45
|
-
* Execute a handler if it exists
|
|
46
|
-
*/
|
|
47
30
|
async executeHandler(endpointId, clusterName, commandName, ...args) {
|
|
48
31
|
const handler = this.getHandler(endpointId, clusterName, commandName);
|
|
49
32
|
if (!handler) {
|
|
@@ -58,28 +41,16 @@ export class BehaviorRegistry {
|
|
|
58
41
|
throw error;
|
|
59
42
|
}
|
|
60
43
|
}
|
|
61
|
-
/**
|
|
62
|
-
* Register a part endpoint mapping
|
|
63
|
-
*/
|
|
64
44
|
registerPartEndpoint(endpointId, parentUuid, partId) {
|
|
65
45
|
this.partEndpoints.set(endpointId, { parentUuid, partId });
|
|
66
46
|
log.debug(`Registered part endpoint: ${endpointId} -> ${parentUuid}.${partId}`);
|
|
67
47
|
}
|
|
68
|
-
/**
|
|
69
|
-
* Get part endpoint info
|
|
70
|
-
*/
|
|
71
48
|
getPartEndpointInfo(endpointId) {
|
|
72
49
|
return this.partEndpoints.get(endpointId);
|
|
73
50
|
}
|
|
74
|
-
/**
|
|
75
|
-
* Sync cluster state to cache
|
|
76
|
-
* Updates the accessory's cached cluster state when values change
|
|
77
|
-
*/
|
|
78
51
|
syncStateToCache(endpointId, clusterName, attributes) {
|
|
79
|
-
// Check if this is a part endpoint
|
|
80
52
|
const partInfo = this.partEndpoints.get(endpointId);
|
|
81
53
|
if (partInfo) {
|
|
82
|
-
// Update part cluster state
|
|
83
54
|
const accessory = this.accessoriesMap.get(partInfo.parentUuid);
|
|
84
55
|
if (!accessory?._parts) {
|
|
85
56
|
return;
|
|
@@ -96,9 +67,11 @@ export class BehaviorRegistry {
|
|
|
96
67
|
...attributes,
|
|
97
68
|
};
|
|
98
69
|
log.debug(`Synced ${clusterName} state to cache for part ${partInfo.partId}:`, attributes);
|
|
70
|
+
if (this.server) {
|
|
71
|
+
this.server.notifyStateChange(partInfo.parentUuid, clusterName, attributes, partInfo.partId);
|
|
72
|
+
}
|
|
99
73
|
}
|
|
100
74
|
else {
|
|
101
|
-
// Update main accessory cluster state
|
|
102
75
|
const accessory = this.accessoriesMap.get(endpointId);
|
|
103
76
|
if (!accessory?.clusters) {
|
|
104
77
|
return;
|
|
@@ -111,18 +84,15 @@ export class BehaviorRegistry {
|
|
|
111
84
|
...attributes,
|
|
112
85
|
};
|
|
113
86
|
log.debug(`Synced ${clusterName} state to cache for ${endpointId}:`, attributes);
|
|
87
|
+
if (this.server) {
|
|
88
|
+
this.server.notifyStateChange(endpointId, clusterName, attributes);
|
|
89
|
+
}
|
|
114
90
|
}
|
|
115
91
|
}
|
|
116
|
-
/**
|
|
117
|
-
* Clear all handlers (for cleanup)
|
|
118
|
-
*/
|
|
119
92
|
clear() {
|
|
120
93
|
this.handlers.clear();
|
|
121
94
|
this.partEndpoints.clear();
|
|
122
95
|
}
|
|
123
|
-
/**
|
|
124
|
-
* Get statistics
|
|
125
|
-
*/
|
|
126
96
|
getStats() {
|
|
127
97
|
let handlerCount = 0;
|
|
128
98
|
for (const endpointHandlers of this.handlers.values()) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BehaviorRegistry.js","sourceRoot":"","sources":["../../../src/matter/behaviors/BehaviorRegistry.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"BehaviorRegistry.js","sourceRoot":"","sources":["../../../src/matter/behaviors/BehaviorRegistry.ts"],"names":[],"mappings":"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"}
|