@matter/node 0.16.0-alpha.0-20251027-17770fb28 → 0.16.0-alpha.0-20251030-e9ca79f93
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/cjs/behavior/Behavior.d.ts +1 -0
- package/dist/cjs/behavior/Behavior.d.ts.map +1 -1
- package/dist/cjs/behavior/Behavior.js +5 -0
- package/dist/cjs/behavior/Behavior.js.map +1 -1
- package/dist/cjs/behavior/internal/BehaviorBacking.js +1 -1
- package/dist/cjs/behavior/internal/BehaviorBacking.js.map +1 -1
- package/dist/cjs/behavior/state/managed/Datasource.d.ts +4 -5
- package/dist/cjs/behavior/state/managed/Datasource.d.ts.map +1 -1
- package/dist/cjs/behavior/state/managed/Datasource.js +6 -2
- package/dist/cjs/behavior/state/managed/Datasource.js.map +1 -1
- package/dist/cjs/behavior/state/managed/ManagedReference.d.ts +3 -2
- package/dist/cjs/behavior/state/managed/ManagedReference.d.ts.map +1 -1
- package/dist/cjs/behavior/state/managed/ManagedReference.js +65 -20
- package/dist/cjs/behavior/state/managed/ManagedReference.js.map +1 -1
- package/dist/cjs/behavior/state/managed/values/ListManager.js +2 -1
- package/dist/cjs/behavior/state/managed/values/ListManager.js.map +1 -1
- package/dist/cjs/behavior/state/managed/values/StructManager.js +9 -1
- package/dist/cjs/behavior/state/managed/values/StructManager.js.map +1 -1
- package/dist/cjs/behaviors/access-control/AccessControlServer.d.ts.map +1 -1
- package/dist/cjs/behaviors/access-control/AccessControlServer.js +3 -3
- package/dist/cjs/behaviors/access-control/AccessControlServer.js.map +1 -1
- package/dist/cjs/behaviors/general-diagnostics/GeneralDiagnosticsServer.d.ts.map +1 -1
- package/dist/cjs/behaviors/general-diagnostics/GeneralDiagnosticsServer.js +3 -9
- package/dist/cjs/behaviors/general-diagnostics/GeneralDiagnosticsServer.js.map +1 -1
- package/dist/cjs/behaviors/service-area/ServiceAreaServer.js +2 -2
- package/dist/cjs/behaviors/service-area/ServiceAreaServer.js.map +1 -1
- package/dist/cjs/behaviors/thermostat/AtomicWriteHandler.d.ts +58 -0
- package/dist/cjs/behaviors/thermostat/AtomicWriteHandler.d.ts.map +1 -0
- package/dist/cjs/behaviors/thermostat/AtomicWriteHandler.js +306 -0
- package/dist/cjs/behaviors/thermostat/AtomicWriteHandler.js.map +6 -0
- package/dist/cjs/behaviors/thermostat/AtomicWriteState.d.ts +33 -0
- package/dist/cjs/behaviors/thermostat/AtomicWriteState.d.ts.map +1 -0
- package/dist/cjs/behaviors/thermostat/AtomicWriteState.js +86 -0
- package/dist/cjs/behaviors/thermostat/AtomicWriteState.js.map +6 -0
- package/dist/cjs/behaviors/thermostat/ThermostatBehavior.d.ts +12 -0
- package/dist/cjs/behaviors/thermostat/ThermostatBehavior.d.ts.map +1 -1
- package/dist/cjs/behaviors/thermostat/ThermostatInterface.d.ts +1 -0
- package/dist/cjs/behaviors/thermostat/ThermostatInterface.d.ts.map +1 -1
- package/dist/cjs/behaviors/thermostat/ThermostatServer.d.ts +894 -3
- package/dist/cjs/behaviors/thermostat/ThermostatServer.d.ts.map +1 -1
- package/dist/cjs/behaviors/thermostat/ThermostatServer.js +1216 -1
- package/dist/cjs/behaviors/thermostat/ThermostatServer.js.map +2 -2
- package/dist/cjs/devices/water-heater.d.ts +24 -0
- package/dist/cjs/devices/water-heater.d.ts.map +1 -1
- package/dist/cjs/endpoint/Endpoint.d.ts +36 -2
- package/dist/cjs/endpoint/Endpoint.d.ts.map +1 -1
- package/dist/cjs/endpoint/Endpoint.js +17 -14
- package/dist/cjs/endpoint/Endpoint.js.map +1 -1
- package/dist/cjs/endpoint/properties/EndpointContainer.d.ts +1 -0
- package/dist/cjs/endpoint/properties/EndpointContainer.d.ts.map +1 -1
- package/dist/cjs/endpoint/properties/EndpointContainer.js +3 -0
- package/dist/cjs/endpoint/properties/EndpointContainer.js.map +1 -1
- package/dist/esm/behavior/Behavior.d.ts +1 -0
- package/dist/esm/behavior/Behavior.d.ts.map +1 -1
- package/dist/esm/behavior/Behavior.js +5 -0
- package/dist/esm/behavior/Behavior.js.map +1 -1
- package/dist/esm/behavior/internal/BehaviorBacking.js +2 -2
- package/dist/esm/behavior/internal/BehaviorBacking.js.map +1 -1
- package/dist/esm/behavior/state/managed/Datasource.d.ts +4 -5
- package/dist/esm/behavior/state/managed/Datasource.d.ts.map +1 -1
- package/dist/esm/behavior/state/managed/Datasource.js +7 -3
- package/dist/esm/behavior/state/managed/Datasource.js.map +1 -1
- package/dist/esm/behavior/state/managed/ManagedReference.d.ts +3 -2
- package/dist/esm/behavior/state/managed/ManagedReference.d.ts.map +1 -1
- package/dist/esm/behavior/state/managed/ManagedReference.js +66 -21
- package/dist/esm/behavior/state/managed/ManagedReference.js.map +1 -1
- package/dist/esm/behavior/state/managed/values/ListManager.js +2 -1
- package/dist/esm/behavior/state/managed/values/ListManager.js.map +1 -1
- package/dist/esm/behavior/state/managed/values/StructManager.js +9 -1
- package/dist/esm/behavior/state/managed/values/StructManager.js.map +1 -1
- package/dist/esm/behaviors/access-control/AccessControlServer.d.ts.map +1 -1
- package/dist/esm/behaviors/access-control/AccessControlServer.js +3 -3
- package/dist/esm/behaviors/access-control/AccessControlServer.js.map +1 -1
- package/dist/esm/behaviors/general-diagnostics/GeneralDiagnosticsServer.d.ts.map +1 -1
- package/dist/esm/behaviors/general-diagnostics/GeneralDiagnosticsServer.js +3 -9
- package/dist/esm/behaviors/general-diagnostics/GeneralDiagnosticsServer.js.map +1 -1
- package/dist/esm/behaviors/service-area/ServiceAreaServer.js +2 -2
- package/dist/esm/behaviors/service-area/ServiceAreaServer.js.map +1 -1
- package/dist/esm/behaviors/thermostat/AtomicWriteHandler.d.ts +58 -0
- package/dist/esm/behaviors/thermostat/AtomicWriteHandler.d.ts.map +1 -0
- package/dist/esm/behaviors/thermostat/AtomicWriteHandler.js +293 -0
- package/dist/esm/behaviors/thermostat/AtomicWriteHandler.js.map +6 -0
- package/dist/esm/behaviors/thermostat/AtomicWriteState.d.ts +33 -0
- package/dist/esm/behaviors/thermostat/AtomicWriteState.d.ts.map +1 -0
- package/dist/esm/behaviors/thermostat/AtomicWriteState.js +66 -0
- package/dist/esm/behaviors/thermostat/AtomicWriteState.js.map +6 -0
- package/dist/esm/behaviors/thermostat/ThermostatBehavior.d.ts +12 -0
- package/dist/esm/behaviors/thermostat/ThermostatBehavior.d.ts.map +1 -1
- package/dist/esm/behaviors/thermostat/ThermostatInterface.d.ts +1 -0
- package/dist/esm/behaviors/thermostat/ThermostatInterface.d.ts.map +1 -1
- package/dist/esm/behaviors/thermostat/ThermostatServer.d.ts +894 -3
- package/dist/esm/behaviors/thermostat/ThermostatServer.d.ts.map +1 -1
- package/dist/esm/behaviors/thermostat/ThermostatServer.js +1225 -1
- package/dist/esm/behaviors/thermostat/ThermostatServer.js.map +2 -2
- package/dist/esm/devices/water-heater.d.ts +24 -0
- package/dist/esm/devices/water-heater.d.ts.map +1 -1
- package/dist/esm/endpoint/Endpoint.d.ts +36 -2
- package/dist/esm/endpoint/Endpoint.d.ts.map +1 -1
- package/dist/esm/endpoint/Endpoint.js +17 -14
- package/dist/esm/endpoint/Endpoint.js.map +1 -1
- package/dist/esm/endpoint/properties/EndpointContainer.d.ts +1 -0
- package/dist/esm/endpoint/properties/EndpointContainer.d.ts.map +1 -1
- package/dist/esm/endpoint/properties/EndpointContainer.js +3 -0
- package/dist/esm/endpoint/properties/EndpointContainer.js.map +1 -1
- package/package.json +7 -7
- package/src/behavior/Behavior.ts +10 -0
- package/src/behavior/internal/BehaviorBacking.ts +2 -2
- package/src/behavior/state/managed/Datasource.ts +14 -7
- package/src/behavior/state/managed/ManagedReference.ts +67 -19
- package/src/behavior/state/managed/values/ListManager.ts +1 -0
- package/src/behavior/state/managed/values/StructManager.ts +13 -3
- package/src/behaviors/access-control/AccessControlServer.ts +3 -7
- package/src/behaviors/general-diagnostics/GeneralDiagnosticsServer.ts +5 -9
- package/src/behaviors/service-area/ServiceAreaServer.ts +2 -2
- package/src/behaviors/thermostat/AtomicWriteHandler.ts +412 -0
- package/src/behaviors/thermostat/AtomicWriteState.ts +91 -0
- package/src/behaviors/thermostat/ThermostatInterface.ts +2 -0
- package/src/behaviors/thermostat/ThermostatServer.ts +1487 -3
- package/src/endpoint/Endpoint.ts +61 -5
- package/src/endpoint/properties/EndpointContainer.ts +4 -0
|
@@ -61,15 +61,9 @@ class GeneralDiagnosticsServer extends Base {
|
|
|
61
61
|
const lifecycle = this.endpoint.lifecycle;
|
|
62
62
|
this.reactTo(lifecycle.online, this.#online, { lock: true });
|
|
63
63
|
this.reactTo(lifecycle.goingOffline, this.#goingOffline, { lock: true });
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
if (this.events.activeRadioFaults$Changed !== void 0) {
|
|
68
|
-
this.reactTo(this.events.activeRadioFaults$Changed, this.#triggerActiveRadioFaultsChangedEvent);
|
|
69
|
-
}
|
|
70
|
-
if (this.events.activeNetworkFaults$Changed !== void 0) {
|
|
71
|
-
this.reactTo(this.events.activeNetworkFaults$Changed, this.#triggerActiveNetworkFaultsChangedEvent);
|
|
72
|
-
}
|
|
64
|
+
this.maybeReactTo(this.events.activeHardwareFaults$Changed, this.#triggerActiveHardwareFaultsChangedEvent);
|
|
65
|
+
this.maybeReactTo(this.events.activeRadioFaults$Changed, this.#triggerActiveRadioFaultsChangedEvent);
|
|
66
|
+
this.maybeReactTo(this.events.activeNetworkFaults$Changed, this.#triggerActiveNetworkFaultsChangedEvent);
|
|
73
67
|
}
|
|
74
68
|
#validateTestEnabledKey(enableKey) {
|
|
75
69
|
const keyData = import_general.Bytes.of(enableKey);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/behaviors/general-diagnostics/GeneralDiagnosticsServer.ts"],
|
|
4
|
-
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA,4BAA+B;AAE/B,mCAA2C;AAC3C,kCAA4C;AAC5C,iCAAmC;AAEnC,qBAcO;AACP,mBAA4C;AAE5C,sBAAoD;AACpD,mBAA8E;AAC9E,wCAA2C;AAhC3C;AAAA;AAAA;AAAA;AAAA;AAkCA,MAAM,SAAS,sBAAO,IAAI,0BAA0B;AAGpD,MAAM,OAAO,6DAA2B,KAAK,8CAAmB,QAAQ,aAAa;AAGrF,MAAM,SAAS,KAAK,OAAQ;AAAA,EACxB,CAAC;AAAA,MACD,2BAAa,EAAE,MAAM,gCAAgC,MAAM,UAAU,SAAS,KAAK,aAAa,IAAI,CAAC;AACzG;AAkBO,MAAM,iCAAiC,KAAK;AAAA,EAG/C,OAAyB,SAAS;AAAA,EAEzB,aAA2B;AAChC,QAAI,KAAK,MAAM,6BAA6B,QAAW;AACnD,WAAK,MAAM,2BAA2B;AAAA,IAC1C,WAAW,KAAK,MAAM,0BAA0B;AAC5C,YAAM,YAAY,qBAAM,GAAG,KAAK,MAAM,mBAAmB;AACzD,UAAI,UAAU,MAAM,UAAQ,SAAS,CAAC,GAAG;AACrC,cAAM,IAAI,mCAAoB,oEAAoE;AAAA,MACtG;AACA,aAAO,KAAK,2EAA2E;AAAA,IAC3F;AAEA,QAAI,KAAK,MAAM,gBAAgB,QAAW;AACtC,WAAK,MAAM,cAAc;AAAA,IAC7B,OAAO;AACH,WAAK,MAAM;AAAA,IACf;AAEA,UAAM,YAAY,KAAK,SAAS;AAChC,SAAK,QAAQ,UAAU,QAAQ,KAAK,SAAS,EAAE,MAAM,KAAK,CAAC;AAC3D,SAAK,QAAQ,UAAU,cAAc,KAAK,eAAe,EAAE,MAAM,KAAK,CAAC;AAEvE,
|
|
4
|
+
"mappings": "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",
|
|
5
5
|
"names": ["GeneralDiagnosticsServer"]
|
|
6
6
|
}
|
|
@@ -40,9 +40,9 @@ class ServiceAreaBaseServer extends ServiceAreaBase {
|
|
|
40
40
|
this.reactTo(this.events.supportedMaps$Changing, this.#assertSupportedMaps);
|
|
41
41
|
this.#assertSelectedAreas(this.state.selectedAreas);
|
|
42
42
|
this.reactTo(this.events.selectedAreas$Changing, this.#assertSelectedAreas);
|
|
43
|
-
if (this.state.currentArea !== void 0
|
|
43
|
+
if (this.state.currentArea !== void 0) {
|
|
44
44
|
this.#assertCurrentArea(this.state.currentArea);
|
|
45
|
-
this.
|
|
45
|
+
this.maybeReactTo(this.events.currentArea$Changing, this.#assertCurrentArea);
|
|
46
46
|
}
|
|
47
47
|
if (this.state.progress !== void 0) {
|
|
48
48
|
this.#assertProgress(this.state.progress);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/behaviors/service-area/ServiceAreaServer.ts"],
|
|
4
|
-
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,0BAA4B;AAC5B,qBAAoD;AACpD,mBAAgC;AAChC,iCAAoC;AATpC;AAAA;AAAA;AAAA;AAAA;AAWA,MAAM,kBAAkB,+CAAoB,KAAK,gCAAY,QAAQ,MAAM,gCAAY,QAAQ,iBAAiB;AAuBzG,MAAM,8BAA8B,gBAAgB;AAAA,EAC9C,aAA2B;AAChC,SAAK,sBAAsB,KAAK,MAAM,cAAc;AACpD,SAAK,QAAQ,KAAK,OAAO,yBAAyB,KAAK,qBAAqB;AAC5E,SAAK,qBAAqB,KAAK,MAAM,aAAa;AAClD,SAAK,QAAQ,KAAK,OAAO,wBAAwB,KAAK,oBAAoB;AAC1E,SAAK,qBAAqB,KAAK,MAAM,aAAa;AAClD,SAAK,QAAQ,KAAK,OAAO,wBAAwB,KAAK,oBAAoB;AAC1E,QAAI,KAAK,MAAM,gBAAgB,
|
|
4
|
+
"mappings": "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",
|
|
5
5
|
"names": ["ServiceAreaBaseServer"]
|
|
6
6
|
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022-2025 Matter.js Authors
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { ActionContext, Behavior, type ClusterState, ValueSupervisor } from "#behavior/index.js";
|
|
7
|
+
import { Thermostat } from "#clusters/thermostat";
|
|
8
|
+
import { Endpoint } from "#endpoint/Endpoint.js";
|
|
9
|
+
import { Environment, Environmental } from "#general";
|
|
10
|
+
import { FabricManager } from "#protocol";
|
|
11
|
+
import { AttributeId } from "#types";
|
|
12
|
+
/**
|
|
13
|
+
* Handles atomic write handling according to Matter definitions.
|
|
14
|
+
* The implementation tries to be generic, but is currently only used by the Thermostat cluster, so the atomic write
|
|
15
|
+
* types are imported from there.
|
|
16
|
+
*
|
|
17
|
+
* The logic requires that the cluster behavior implements the following additional events as "pure Observable()" events,
|
|
18
|
+
* because the current implementation logic requires error thrown by the event handlers to signal validation failures to
|
|
19
|
+
* be thrown back to te emitter. This is not the case for official state events.
|
|
20
|
+
* * `${attributeName}$AtomicChanging` - emitted when an attribute is changed as part of an atomic write, before the value
|
|
21
|
+
* is actually changed. Receives the new value, the old value and the action context as parameters.
|
|
22
|
+
* * `${attributeName}$AtomicChanged` - emitted when an attribute is changed as part of an atomic write, after the value
|
|
23
|
+
* is actually changed. Receives the new value, the old value and the action context as parameters.
|
|
24
|
+
*
|
|
25
|
+
* TODO: Move out of thermostat behavior into a more generic behavior handler once used by other clusters too. Then we
|
|
26
|
+
* also need to adjust how it is handled.
|
|
27
|
+
* Proper solution might be to add the handling of the atomic Request command on interaction level and leave the
|
|
28
|
+
* transaction open until it is rolled back or committed. This might have side effects on other parts of the system though.
|
|
29
|
+
* So lets do that later when we have more clusters using it.
|
|
30
|
+
*/
|
|
31
|
+
export declare class AtomicWriteHandler {
|
|
32
|
+
#private;
|
|
33
|
+
constructor(fabricManager: FabricManager);
|
|
34
|
+
static [Environmental.create](env: Environment): AtomicWriteHandler;
|
|
35
|
+
close(): void;
|
|
36
|
+
/**
|
|
37
|
+
* Implements the begin write logic for an atomic write.
|
|
38
|
+
*/
|
|
39
|
+
beginWrite(request: Thermostat.AtomicRequest, context: ActionContext, endpoint: Endpoint, cluster: Behavior.Type): Thermostat.AtomicResponse;
|
|
40
|
+
/**
|
|
41
|
+
* Handles writing a value for an attribute as part of an ongoing atomic write.
|
|
42
|
+
* It uses the *$AtomicChanging* event to trigger validation of the partial write.
|
|
43
|
+
*/
|
|
44
|
+
writeAttribute(context: ValueSupervisor.Session, endpoint: Endpoint, cluster: Behavior.Type, attribute: AttributeId, value: unknown): void;
|
|
45
|
+
/**
|
|
46
|
+
* Implements the commit logic for an atomic write.
|
|
47
|
+
*/
|
|
48
|
+
commitWrite<B extends Behavior.Type>(request: Thermostat.AtomicRequest, context: ActionContext, endpoint: Endpoint, cluster: B, clusterState: ClusterState.Type<any, B>): Promise<Thermostat.AtomicResponse>;
|
|
49
|
+
/**
|
|
50
|
+
* Implements the rollback logic for an atomic write.
|
|
51
|
+
*/
|
|
52
|
+
rollbackWrite(request: Thermostat.AtomicRequest, context: ActionContext, endpoint: Endpoint, cluster: Behavior.Type): Thermostat.AtomicResponse;
|
|
53
|
+
/**
|
|
54
|
+
* Returns the pending value for the given attribute and peer, if any.
|
|
55
|
+
*/
|
|
56
|
+
pendingValueForAttributeAndPeer(context: ValueSupervisor.Session, endpoint: Endpoint, cluster: Behavior.Type, attribute: AttributeId): unknown;
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=AtomicWriteHandler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AtomicWriteHandler.d.ts","sourceRoot":"","sources":["../../../../src/behaviors/thermostat/AtomicWriteHandler.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAmB,KAAK,YAAY,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAClH,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAY,WAAW,EAAE,aAAa,EAAmD,MAAM,UAAU,CAAC;AAEjH,OAAO,EAIH,aAAa,EAKhB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,WAAW,EAAuD,MAAM,QAAQ,CAAC;AAK1F;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBAAa,kBAAkB;;gBAIf,aAAa,EAAE,aAAa;IAIxC,MAAM,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,WAAW;IAM9C,KAAK;IA+FL;;OAEG;IACH,UAAU,CACN,OAAO,EAAE,UAAU,CAAC,aAAa,EACjC,OAAO,EAAE,aAAa,EACtB,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,QAAQ,CAAC,IAAI,GACvB,UAAU,CAAC,cAAc;IAkD5B;;;OAGG;IACH,cAAc,CACV,OAAO,EAAE,eAAe,CAAC,OAAO,EAChC,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,QAAQ,CAAC,IAAI,EACtB,SAAS,EAAE,WAAW,EACtB,KAAK,EAAE,OAAO;IAgBlB;;OAEG;IACG,WAAW,CAAC,CAAC,SAAS,QAAQ,CAAC,IAAI,EACrC,OAAO,EAAE,UAAU,CAAC,aAAa,EACjC,OAAO,EAAE,aAAa,EACtB,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,CAAC,EACV,YAAY,EAAE,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,GACxC,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC;IAyCrC;;OAEG;IACH,aAAa,CACT,OAAO,EAAE,UAAU,CAAC,aAAa,EACjC,OAAO,EAAE,aAAa,EACtB,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,QAAQ,CAAC,IAAI,GACvB,UAAU,CAAC,cAAc;IA+C5B;;OAEG;IACH,+BAA+B,CAC3B,OAAO,EAAE,eAAe,CAAC,OAAO,EAChC,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,QAAQ,CAAC,IAAI,EACtB,SAAS,EAAE,WAAW;CA8D7B"}
|
|
@@ -0,0 +1,306 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var AtomicWriteHandler_exports = {};
|
|
20
|
+
__export(AtomicWriteHandler_exports, {
|
|
21
|
+
AtomicWriteHandler: () => AtomicWriteHandler
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(AtomicWriteHandler_exports);
|
|
24
|
+
var import_behavior = require("#behavior/index.js");
|
|
25
|
+
var import_thermostat = require("#clusters/thermostat");
|
|
26
|
+
var import_general = require("#general");
|
|
27
|
+
var import_model = require("#model");
|
|
28
|
+
var import_protocol = require("#protocol");
|
|
29
|
+
var import_types = require("#types");
|
|
30
|
+
var import_AtomicWriteState = require("./AtomicWriteState.js");
|
|
31
|
+
/**
|
|
32
|
+
* @license
|
|
33
|
+
* Copyright 2022-2025 Matter.js Authors
|
|
34
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
35
|
+
*/
|
|
36
|
+
const logger = import_general.Logger.get("AtomicWriteHandler");
|
|
37
|
+
class AtomicWriteHandler {
|
|
38
|
+
#observers = new import_general.ObserverGroup();
|
|
39
|
+
#pendingWrites = new import_general.BasicSet();
|
|
40
|
+
constructor(fabricManager) {
|
|
41
|
+
this.#observers.on(fabricManager.events.deleted, (fabric) => this.#handleFabricRemoval(fabric));
|
|
42
|
+
}
|
|
43
|
+
static [import_general.Environmental.create](env) {
|
|
44
|
+
const instance = new AtomicWriteHandler(env.get(import_protocol.FabricManager));
|
|
45
|
+
env.set(AtomicWriteHandler, instance);
|
|
46
|
+
return instance;
|
|
47
|
+
}
|
|
48
|
+
close() {
|
|
49
|
+
this.#observers.close();
|
|
50
|
+
for (const writeState of Array.from(this.#pendingWrites)) {
|
|
51
|
+
writeState.close();
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Initializes an AtomicWrite state for the given request, context, endpoint and cluster.
|
|
56
|
+
* It also implements all relevant validation according to the Matter spec.
|
|
57
|
+
*/
|
|
58
|
+
#initializeState({ requestType, attributeRequests, timeout }, context, endpoint, cluster) {
|
|
59
|
+
if (!import_behavior.ClusterBehavior.is(cluster) || !cluster.schema) {
|
|
60
|
+
throw new import_general.InternalError("Cluster behavior expected for atomic write handler");
|
|
61
|
+
}
|
|
62
|
+
const peerAddress = this.#assertValidPeer(context);
|
|
63
|
+
if (attributeRequests.length === 0) {
|
|
64
|
+
throw new import_types.StatusResponse.InvalidCommandError("No attribute requests provided");
|
|
65
|
+
}
|
|
66
|
+
const attributes = /* @__PURE__ */ new Map();
|
|
67
|
+
for (const attr of attributeRequests) {
|
|
68
|
+
const [attributeName, _] = Object.entries(cluster.cluster.attributes).find(
|
|
69
|
+
([_2, { id }]) => id === attr
|
|
70
|
+
) ?? [];
|
|
71
|
+
if (attributeName === void 0 || endpoint.stateOf(cluster.id)[attr] === void 0) {
|
|
72
|
+
throw new import_types.StatusResponse.InvalidCommandError(`Attribute ${attr} not supported by cluster`);
|
|
73
|
+
}
|
|
74
|
+
if (attributes.has(attr)) {
|
|
75
|
+
throw new import_types.StatusResponse.InvalidCommandError("Duplicate attribute in attribute requests");
|
|
76
|
+
}
|
|
77
|
+
attributes.set(attr, attributeName);
|
|
78
|
+
}
|
|
79
|
+
const existingState = this.#pendingWrites.find(
|
|
80
|
+
(s) => import_protocol.PeerAddress.is(s.peerAddress, peerAddress) && s.endpoint.number == endpoint.number && s.clusterId === cluster.cluster.id
|
|
81
|
+
);
|
|
82
|
+
if (requestType === import_thermostat.Thermostat.RequestType.BeginWrite) {
|
|
83
|
+
if (timeout === void 0) {
|
|
84
|
+
throw new import_types.StatusResponse.InvalidCommandError("Timeout missing for BeginWrite request");
|
|
85
|
+
}
|
|
86
|
+
if (existingState !== void 0 && existingState.attributeRequests.some((attr) => attributeRequests.includes(attr))) {
|
|
87
|
+
throw new import_types.StatusResponse.InvalidCommandError(
|
|
88
|
+
"An atomic write for at least one of the attributes is already in progress for this peer"
|
|
89
|
+
);
|
|
90
|
+
}
|
|
91
|
+
const initialValues = {};
|
|
92
|
+
for (const attr of attributeRequests) {
|
|
93
|
+
initialValues[attr] = endpoint.stateOf(cluster.id)[attr];
|
|
94
|
+
}
|
|
95
|
+
const state = new import_AtomicWriteState.AtomicWriteState(
|
|
96
|
+
peerAddress,
|
|
97
|
+
endpoint,
|
|
98
|
+
cluster.cluster.id,
|
|
99
|
+
attributeRequests,
|
|
100
|
+
timeout,
|
|
101
|
+
attributes,
|
|
102
|
+
initialValues
|
|
103
|
+
);
|
|
104
|
+
this.#pendingWrites.add(state);
|
|
105
|
+
state.closed.on(() => void this.#pendingWrites.delete(state));
|
|
106
|
+
logger.debug("Added atomic write state:", state);
|
|
107
|
+
return state;
|
|
108
|
+
}
|
|
109
|
+
if (existingState === void 0) {
|
|
110
|
+
throw new import_types.StatusResponse.InvalidInStateError("No atomic write in progress for this peer");
|
|
111
|
+
}
|
|
112
|
+
if (existingState.attributeRequests.length !== attributeRequests.length || !existingState.attributeRequests.every((attr) => attributeRequests.includes(attr))) {
|
|
113
|
+
throw new import_types.StatusResponse.InvalidInStateError("Attribute requests do not match existing atomic write");
|
|
114
|
+
}
|
|
115
|
+
return existingState;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Implements the begin write logic for an atomic write.
|
|
119
|
+
*/
|
|
120
|
+
beginWrite(request, context, endpoint, cluster) {
|
|
121
|
+
if (!(0, import_protocol.hasRemoteActor)(context)) {
|
|
122
|
+
throw new import_types.StatusResponse.InvalidCommandError("AtomicRequest requires a remote actor");
|
|
123
|
+
}
|
|
124
|
+
if (!import_behavior.ClusterBehavior.is(cluster) || !cluster.schema) {
|
|
125
|
+
throw new import_general.InternalError("Cluster behavior expected for atomic write handler");
|
|
126
|
+
}
|
|
127
|
+
let commandStatusCode = import_types.Status.Success;
|
|
128
|
+
const attributeStatus = request.attributeRequests.map((attr) => {
|
|
129
|
+
let statusCode = import_types.Status.Success;
|
|
130
|
+
const attributeModel = cluster.schema.conformant.attributes.for(attr);
|
|
131
|
+
if (!attributeModel?.quality.atomic) {
|
|
132
|
+
statusCode = import_types.Status.InvalidAction;
|
|
133
|
+
} else if (this.#pendingWriteStateForAttribute(endpoint, cluster, attr) !== void 0) {
|
|
134
|
+
statusCode = import_types.Status.Busy;
|
|
135
|
+
} else {
|
|
136
|
+
const { writeLevel } = cluster.supervisor.get(attributeModel).access.limits;
|
|
137
|
+
const location = {
|
|
138
|
+
path: import_model.DataModelPath.none,
|
|
139
|
+
endpoint: endpoint.number,
|
|
140
|
+
cluster: cluster.cluster.id,
|
|
141
|
+
owningFabric: context.fabric
|
|
142
|
+
};
|
|
143
|
+
if (context.authorityAt(writeLevel, location) !== import_protocol.AccessControl.Authority.Granted) {
|
|
144
|
+
statusCode = import_types.Status.UnsupportedAccess;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
if (statusCode !== import_types.Status.Success) {
|
|
148
|
+
commandStatusCode = import_types.Status.Failure;
|
|
149
|
+
}
|
|
150
|
+
return {
|
|
151
|
+
attributeId: attr,
|
|
152
|
+
statusCode
|
|
153
|
+
};
|
|
154
|
+
});
|
|
155
|
+
let timeout;
|
|
156
|
+
if (commandStatusCode === import_types.Status.Success) {
|
|
157
|
+
const state = this.#initializeState(request, context, endpoint, cluster);
|
|
158
|
+
timeout = state.timeout;
|
|
159
|
+
}
|
|
160
|
+
return {
|
|
161
|
+
statusCode: commandStatusCode,
|
|
162
|
+
attributeStatus,
|
|
163
|
+
timeout
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Handles writing a value for an attribute as part of an ongoing atomic write.
|
|
168
|
+
* It uses the *$AtomicChanging* event to trigger validation of the partial write.
|
|
169
|
+
*/
|
|
170
|
+
writeAttribute(context, endpoint, cluster, attribute, value) {
|
|
171
|
+
const state = this.#assertPendingWriteForAttributeAndPeer(context, endpoint, cluster, attribute);
|
|
172
|
+
const attributeName = state.attributeNames.get(attribute);
|
|
173
|
+
logger.debug(`Writing pending value for attribute ${attributeName}, ${attribute} in atomic write`, value);
|
|
174
|
+
endpoint.eventsOf(cluster.id)[`${attributeName}$AtomicChanging`]?.emit(value, state.pendingAttributeValues[attribute] !== void 0 ? state.pendingAttributeValues[attribute] : state.initialValues[attribute], context);
|
|
175
|
+
state.pendingAttributeValues[attribute] = value;
|
|
176
|
+
logger.debug("Atomic write state after current write:", state);
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Implements the commit logic for an atomic write.
|
|
180
|
+
*/
|
|
181
|
+
async commitWrite(request, context, endpoint, cluster, clusterState) {
|
|
182
|
+
const state = this.#initializeState(request, context, endpoint, cluster);
|
|
183
|
+
let commandStatusCode = import_types.Status.Success;
|
|
184
|
+
const attributeStatus = [];
|
|
185
|
+
for (const [attr, value] of Object.entries(state.pendingAttributeValues)) {
|
|
186
|
+
let statusCode = import_types.Status.Success;
|
|
187
|
+
try {
|
|
188
|
+
const attributeName = state.attributeNames.get((0, import_types.AttributeId)(Number(attr)));
|
|
189
|
+
endpoint.eventsOf(cluster.id)[`${attributeName}$AtomicChanging`]?.emit(value, endpoint.stateOf(cluster.id)[attr], context);
|
|
190
|
+
endpoint.eventsOf(cluster.id)[`${attributeName}$AtomicChanged`]?.emit(value, endpoint.stateOf(cluster.id)[attr], context);
|
|
191
|
+
clusterState[attr] = value;
|
|
192
|
+
await context.transaction?.commit();
|
|
193
|
+
} catch (error) {
|
|
194
|
+
await context.transaction?.rollback();
|
|
195
|
+
logger.info(`Failed to write attribute ${attr} during atomic write commit: ${error}`);
|
|
196
|
+
statusCode = error instanceof import_types.StatusResponseError ? error.code : import_types.Status.Failure;
|
|
197
|
+
commandStatusCode = commandStatusCode === import_types.Status.Failure ? import_types.Status.Failure : commandStatusCode === import_types.Status.ConstraintError ? import_types.Status.ConstraintError : import_types.Status.Failure;
|
|
198
|
+
}
|
|
199
|
+
attributeStatus.push({
|
|
200
|
+
attributeId: (0, import_types.AttributeId)(Number(attr)),
|
|
201
|
+
statusCode
|
|
202
|
+
});
|
|
203
|
+
}
|
|
204
|
+
state.close();
|
|
205
|
+
return {
|
|
206
|
+
statusCode: commandStatusCode,
|
|
207
|
+
attributeStatus
|
|
208
|
+
};
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* Implements the rollback logic for an atomic write.
|
|
212
|
+
*/
|
|
213
|
+
rollbackWrite(request, context, endpoint, cluster) {
|
|
214
|
+
const state = this.#initializeState(request, context, endpoint, cluster);
|
|
215
|
+
state.close();
|
|
216
|
+
return {
|
|
217
|
+
statusCode: import_types.Status.Success,
|
|
218
|
+
attributeStatus: state.attributeRequests.map((attr) => ({
|
|
219
|
+
attributeId: attr,
|
|
220
|
+
statusCode: import_types.Status.Success
|
|
221
|
+
}))
|
|
222
|
+
};
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* Handles fabric removal by closing all pending atomic write states for peers on the removed fabric.
|
|
226
|
+
*/
|
|
227
|
+
#handleFabricRemoval(fabric) {
|
|
228
|
+
const fabricIndex = fabric.fabricIndex;
|
|
229
|
+
for (const writeState of Array.from(this.#pendingWrites)) {
|
|
230
|
+
if (writeState.peerAddress.fabricIndex === fabricIndex) {
|
|
231
|
+
logger.debug(
|
|
232
|
+
`Closing atomic write state for peer ${writeState.peerAddress.toString()} on endpoint ${writeState.endpoint.id} due to fabric removal`
|
|
233
|
+
);
|
|
234
|
+
writeState.close();
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* Returns the pending write state for the given attribute, if any.
|
|
240
|
+
*/
|
|
241
|
+
#pendingWriteStateForAttribute(endpoint, cluster, attribute) {
|
|
242
|
+
const writeStates = this.#pendingWrites.filter(
|
|
243
|
+
(s) => s.endpoint.number == endpoint.number && s.clusterId === cluster.cluster.id
|
|
244
|
+
);
|
|
245
|
+
if (writeStates.length === 0) {
|
|
246
|
+
return void 0;
|
|
247
|
+
}
|
|
248
|
+
const attrWriteStates = writeStates.filter(({ attributeRequests }) => attributeRequests.includes(attribute));
|
|
249
|
+
if (attrWriteStates.length === 0) {
|
|
250
|
+
return void 0;
|
|
251
|
+
}
|
|
252
|
+
if (attrWriteStates.length > 1) {
|
|
253
|
+
throw new import_general.InternalError("Multiple atomic write states found for the same attribute. Should never happen");
|
|
254
|
+
}
|
|
255
|
+
return attrWriteStates[0];
|
|
256
|
+
}
|
|
257
|
+
/**
|
|
258
|
+
* Returns the pending value for the given attribute and peer, if any.
|
|
259
|
+
*/
|
|
260
|
+
pendingValueForAttributeAndPeer(context, endpoint, cluster, attribute) {
|
|
261
|
+
const peerAddress = this.#derivePeerAddress(context);
|
|
262
|
+
if (peerAddress === void 0) {
|
|
263
|
+
return void 0;
|
|
264
|
+
}
|
|
265
|
+
const attrWriteState = this.#pendingWriteStateForAttribute(endpoint, cluster, attribute);
|
|
266
|
+
if (attrWriteState === void 0) {
|
|
267
|
+
return void 0;
|
|
268
|
+
}
|
|
269
|
+
if (!import_protocol.PeerAddress.is(attrWriteState.peerAddress, peerAddress)) {
|
|
270
|
+
return void 0;
|
|
271
|
+
}
|
|
272
|
+
logger.debug(
|
|
273
|
+
`Found pending value for attribute ${attribute} for peer ${peerAddress.nodeId}`,
|
|
274
|
+
(0, import_general.serialize)(attrWriteState.pendingAttributeValues[attribute])
|
|
275
|
+
);
|
|
276
|
+
return attrWriteState.pendingAttributeValues[attribute];
|
|
277
|
+
}
|
|
278
|
+
#assertPendingWriteForAttributeAndPeer(session, endpoint, cluster, attribute) {
|
|
279
|
+
const attrWriteState = this.#pendingWriteStateForAttribute(endpoint, cluster, attribute);
|
|
280
|
+
if (attrWriteState === void 0) {
|
|
281
|
+
throw new import_types.StatusResponse.InvalidInStateError("There is no atomic write in progress for this attribute");
|
|
282
|
+
}
|
|
283
|
+
const peerAddress = this.#derivePeerAddress(session);
|
|
284
|
+
if (peerAddress === void 0) {
|
|
285
|
+
throw new import_types.StatusResponse.InvalidInStateError("There is no atomic write in progress for this peer");
|
|
286
|
+
}
|
|
287
|
+
if (!import_protocol.PeerAddress.is(attrWriteState.peerAddress, peerAddress)) {
|
|
288
|
+
throw new import_types.StatusResponse.BusyError("Attribute is part of an atomic write in progress for a different peer");
|
|
289
|
+
}
|
|
290
|
+
return attrWriteState;
|
|
291
|
+
}
|
|
292
|
+
#derivePeerAddress(session) {
|
|
293
|
+
if ((0, import_protocol.hasRemoteActor)(session) && import_protocol.Subject.isNode(session.subject) && import_types.NodeId.isOperationalNodeId(session.subject.id)) {
|
|
294
|
+
return (0, import_protocol.PeerAddress)({ fabricIndex: session.fabric, nodeId: (0, import_types.NodeId)(session.subject.id) });
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
#assertValidPeer(context) {
|
|
298
|
+
(0, import_protocol.assertRemoteActor)(context);
|
|
299
|
+
const peerAddress = this.#derivePeerAddress(context);
|
|
300
|
+
if (!context.session.associatedFabric || peerAddress === void 0) {
|
|
301
|
+
throw new import_types.StatusResponse.InvalidCommandError("AtomicRequest requires an operational session");
|
|
302
|
+
}
|
|
303
|
+
return peerAddress;
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
//# sourceMappingURL=AtomicWriteHandler.js.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/behaviors/thermostat/AtomicWriteHandler.ts"],
|
|
4
|
+
"mappings": "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",
|
|
5
|
+
"names": ["_"]
|
|
6
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022-2025 Matter.js Authors
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { Thermostat } from "#clusters/thermostat";
|
|
7
|
+
import { Endpoint } from "#endpoint/Endpoint.js";
|
|
8
|
+
import { Diagnostic, Observable } from "#general";
|
|
9
|
+
import { PeerAddress, Val } from "#protocol";
|
|
10
|
+
import { AttributeId, ClusterId } from "#types";
|
|
11
|
+
/**
|
|
12
|
+
* Represents the state of an ongoing atomic write operation.
|
|
13
|
+
*
|
|
14
|
+
* TODO: Move out of thermostat behavior into a more generic behavior handler once used by other clusters too. Then we
|
|
15
|
+
* also need to adjust how it is handled.
|
|
16
|
+
*/
|
|
17
|
+
export declare class AtomicWriteState {
|
|
18
|
+
#private;
|
|
19
|
+
[Diagnostic.value]: Record<string, unknown>;
|
|
20
|
+
readonly peerAddress: PeerAddress;
|
|
21
|
+
readonly endpoint: Endpoint;
|
|
22
|
+
readonly clusterId: ClusterId;
|
|
23
|
+
readonly attributeRequests: Thermostat.AtomicRequest["attributeRequests"];
|
|
24
|
+
readonly attributeNames: Map<AttributeId, string>;
|
|
25
|
+
readonly pendingAttributeValues: Val.Struct;
|
|
26
|
+
readonly timeout: number;
|
|
27
|
+
readonly initialValues: Val.Struct;
|
|
28
|
+
readonly closed: Observable<[void], void>;
|
|
29
|
+
constructor(peerAddress: PeerAddress, endpoint: Endpoint, cluster: ClusterId, attributeRequests: Thermostat.AtomicRequest["attributeRequests"], timeout: number, attributeNames: Map<AttributeId, string>, initialValues: Val.Struct);
|
|
30
|
+
start(): void;
|
|
31
|
+
close(): void;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=AtomicWriteState.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AtomicWriteState.d.ts","sourceRoot":"","sources":["../../../../src/behaviors/thermostat/AtomicWriteState.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAkB,UAAU,EAA+B,MAAM,UAAU,CAAC;AAC/F,OAAO,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAOhD;;;;;GAKG;AACH,qBAAa,gBAAgB;;IAgCrB,CAAC,UAAU,CAAC,KAAK,CAAC;IA/BtB,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;IAClC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAC9B,QAAQ,CAAC,iBAAiB,EAAE,UAAU,CAAC,aAAa,CAAC,mBAAmB,CAAC,CAAC;IAC1E,QAAQ,CAAC,cAAc,EAAE,GAAG,CAAC,WAAW,EAAE,MAAM,CAAC,CAAa;IAC9D,QAAQ,CAAC,sBAAsB,EAAE,GAAG,CAAC,MAAM,CAAM;IACjD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC;IACnC,QAAQ,CAAC,MAAM,2BAAwB;gBAInC,WAAW,EAAE,WAAW,EACxB,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,SAAS,EAClB,iBAAiB,EAAE,UAAU,CAAC,aAAa,CAAC,mBAAmB,CAAC,EAChE,OAAO,EAAE,MAAM,EACf,cAAc,EAAE,GAAG,CAAC,WAAW,EAAE,MAAM,CAAC,EACxC,aAAa,EAAE,GAAG,CAAC,MAAM;IAyB7B,KAAK;IAcL,KAAK;CASR"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var AtomicWriteState_exports = {};
|
|
20
|
+
__export(AtomicWriteState_exports, {
|
|
21
|
+
AtomicWriteState: () => AtomicWriteState
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(AtomicWriteState_exports);
|
|
24
|
+
var import_general = require("#general");
|
|
25
|
+
/**
|
|
26
|
+
* @license
|
|
27
|
+
* Copyright 2022-2025 Matter.js Authors
|
|
28
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
29
|
+
*/
|
|
30
|
+
const logger = import_general.Logger.get("AtomicWriteState");
|
|
31
|
+
const MAXIMUM_ALLOWED_TIMEOUT = (0, import_general.Seconds)(9);
|
|
32
|
+
class AtomicWriteState {
|
|
33
|
+
peerAddress;
|
|
34
|
+
endpoint;
|
|
35
|
+
clusterId;
|
|
36
|
+
attributeRequests;
|
|
37
|
+
attributeNames = /* @__PURE__ */ new Map();
|
|
38
|
+
pendingAttributeValues = {};
|
|
39
|
+
timeout;
|
|
40
|
+
initialValues;
|
|
41
|
+
closed = (0, import_general.Observable)();
|
|
42
|
+
#timer;
|
|
43
|
+
constructor(peerAddress, endpoint, cluster, attributeRequests, timeout, attributeNames, initialValues) {
|
|
44
|
+
this.peerAddress = peerAddress;
|
|
45
|
+
this.endpoint = endpoint;
|
|
46
|
+
this.clusterId = cluster;
|
|
47
|
+
this.attributeRequests = attributeRequests;
|
|
48
|
+
this.timeout = Math.min(timeout, MAXIMUM_ALLOWED_TIMEOUT);
|
|
49
|
+
this.attributeNames = attributeNames;
|
|
50
|
+
this.initialValues = initialValues;
|
|
51
|
+
this.#timer = import_general.Time.getTimer("AtomicWriteState Timeout", (0, import_general.Millis)(this.timeout), () => this.#timeoutTriggered());
|
|
52
|
+
}
|
|
53
|
+
get [import_general.Diagnostic.value]() {
|
|
54
|
+
return import_general.Diagnostic.dict({
|
|
55
|
+
peerAddress: this.peerAddress.toString(),
|
|
56
|
+
endpointId: this.endpoint.id,
|
|
57
|
+
clusterId: (0, import_general.toHex)(this.clusterId),
|
|
58
|
+
attributeRequests: this.attributeRequests,
|
|
59
|
+
timeout: this.timeout,
|
|
60
|
+
initialValues: this.initialValues,
|
|
61
|
+
pendingAttributeValues: this.pendingAttributeValues
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
start() {
|
|
65
|
+
logger.debug(
|
|
66
|
+
`Starting atomic write state for peer ${this.peerAddress.toString()} on endpoint ${this.endpoint.id}`
|
|
67
|
+
);
|
|
68
|
+
this.#timer.start();
|
|
69
|
+
}
|
|
70
|
+
#timeoutTriggered() {
|
|
71
|
+
logger.debug(
|
|
72
|
+
`Atomic write state for peer ${this.peerAddress.toString()} on endpoint ${this.endpoint.id} timed out`
|
|
73
|
+
);
|
|
74
|
+
this.close();
|
|
75
|
+
}
|
|
76
|
+
close() {
|
|
77
|
+
logger.debug(
|
|
78
|
+
`Closing atomic write state for peer ${this.peerAddress.toString()} on endpoint ${this.endpoint.id}`
|
|
79
|
+
);
|
|
80
|
+
if (this.#timer.isRunning) {
|
|
81
|
+
this.#timer.stop();
|
|
82
|
+
}
|
|
83
|
+
this.closed.emit();
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=AtomicWriteState.js.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/behaviors/thermostat/AtomicWriteState.ts"],
|
|
4
|
+
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAQA,qBAAoF;AARpF;AAAA;AAAA;AAAA;AAAA;AAYA,MAAM,SAAS,sBAAO,IAAI,kBAAkB;AAG5C,MAAM,8BAA0B,wBAAQ,CAAC;AAQlC,MAAM,iBAAiB;AAAA,EACjB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,iBAA2C,oBAAI,IAAI;AAAA,EACnD,yBAAqC,CAAC;AAAA,EACtC;AAAA,EACA;AAAA,EACA,aAAS,2BAAmB;AAAA,EACrC;AAAA,EAEA,YACI,aACA,UACA,SACA,mBACA,SACA,gBACA,eACF;AACE,SAAK,cAAc;AACnB,SAAK,WAAW;AAChB,SAAK,YAAY;AACjB,SAAK,oBAAoB;AACzB,SAAK,UAAU,KAAK,IAAI,SAAS,uBAAuB;AACxD,SAAK,iBAAiB;AACtB,SAAK,gBAAgB;AAErB,SAAK,SAAS,oBAAK,SAAS,gCAA4B,uBAAO,KAAK,OAAO,GAAG,MAAM,KAAK,kBAAkB,CAAC;AAAA,EAChH;AAAA,EAEA,KAAK,0BAAW,KAAK,IAAI;AACrB,WAAO,0BAAW,KAAK;AAAA,MACnB,aAAa,KAAK,YAAY,SAAS;AAAA,MACvC,YAAY,KAAK,SAAS;AAAA,MAC1B,eAAW,sBAAM,KAAK,SAAS;AAAA,MAC/B,mBAAmB,KAAK;AAAA,MACxB,SAAS,KAAK;AAAA,MACd,eAAe,KAAK;AAAA,MACpB,wBAAwB,KAAK;AAAA,IACjC,CAAC;AAAA,EACL;AAAA,EAEA,QAAQ;AACJ,WAAO;AAAA,MACH,wCAAwC,KAAK,YAAY,SAAS,CAAC,gBAAgB,KAAK,SAAS,EAAE;AAAA,IACvG;AACA,SAAK,OAAO,MAAM;AAAA,EACtB;AAAA,EAEA,oBAAoB;AAChB,WAAO;AAAA,MACH,+BAA+B,KAAK,YAAY,SAAS,CAAC,gBAAgB,KAAK,SAAS,EAAE;AAAA,IAC9F;AACA,SAAK,MAAM;AAAA,EACf;AAAA,EAEA,QAAQ;AACJ,WAAO;AAAA,MACH,uCAAuC,KAAK,YAAY,SAAS,CAAC,gBAAgB,KAAK,SAAS,EAAE;AAAA,IACtG;AACA,QAAI,KAAK,OAAO,WAAW;AACvB,WAAK,OAAO,KAAK;AAAA,IACrB;AACA,SAAK,OAAO,KAAK;AAAA,EACrB;AACJ;",
|
|
5
|
+
"names": []
|
|
6
|
+
}
|
|
@@ -87,6 +87,18 @@ export declare const ThermostatBehaviorConstructor: ClusterBehavior.Type<Cluster
|
|
|
87
87
|
mode: import("#types").FieldType<Thermostat.SetpointRaiseLowerMode>;
|
|
88
88
|
amount: import("#types").FieldType<number>;
|
|
89
89
|
}>, void, any>;
|
|
90
|
+
readonly atomicRequest: import("#types").Command<import("#types").TypeFromFields<{
|
|
91
|
+
requestType: import("#types").FieldType<Thermostat.RequestType>;
|
|
92
|
+
attributeRequests: import("#types").FieldType<import("#types").AttributeId[]>;
|
|
93
|
+
timeout: import("#types").OptionalFieldType<number>;
|
|
94
|
+
}>, import("#types").TypeFromFields<{
|
|
95
|
+
statusCode: import("#types").FieldType<import("#types").Status>;
|
|
96
|
+
attributeStatus: import("#types").FieldType<import("#types").TypeFromFields<{
|
|
97
|
+
attributeId: import("#types").FieldType<import("#types").AttributeId>;
|
|
98
|
+
statusCode: import("#types").FieldType<import("#types").Status>;
|
|
99
|
+
}>[]>;
|
|
100
|
+
timeout: import("#types").OptionalFieldType<number>;
|
|
101
|
+
}>, any>;
|
|
90
102
|
};
|
|
91
103
|
readonly extensions: readonly [{
|
|
92
104
|
readonly flags: {
|