@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.
Files changed (120) hide show
  1. package/dist/cjs/behavior/Behavior.d.ts +1 -0
  2. package/dist/cjs/behavior/Behavior.d.ts.map +1 -1
  3. package/dist/cjs/behavior/Behavior.js +5 -0
  4. package/dist/cjs/behavior/Behavior.js.map +1 -1
  5. package/dist/cjs/behavior/internal/BehaviorBacking.js +1 -1
  6. package/dist/cjs/behavior/internal/BehaviorBacking.js.map +1 -1
  7. package/dist/cjs/behavior/state/managed/Datasource.d.ts +4 -5
  8. package/dist/cjs/behavior/state/managed/Datasource.d.ts.map +1 -1
  9. package/dist/cjs/behavior/state/managed/Datasource.js +6 -2
  10. package/dist/cjs/behavior/state/managed/Datasource.js.map +1 -1
  11. package/dist/cjs/behavior/state/managed/ManagedReference.d.ts +3 -2
  12. package/dist/cjs/behavior/state/managed/ManagedReference.d.ts.map +1 -1
  13. package/dist/cjs/behavior/state/managed/ManagedReference.js +65 -20
  14. package/dist/cjs/behavior/state/managed/ManagedReference.js.map +1 -1
  15. package/dist/cjs/behavior/state/managed/values/ListManager.js +2 -1
  16. package/dist/cjs/behavior/state/managed/values/ListManager.js.map +1 -1
  17. package/dist/cjs/behavior/state/managed/values/StructManager.js +9 -1
  18. package/dist/cjs/behavior/state/managed/values/StructManager.js.map +1 -1
  19. package/dist/cjs/behaviors/access-control/AccessControlServer.d.ts.map +1 -1
  20. package/dist/cjs/behaviors/access-control/AccessControlServer.js +3 -3
  21. package/dist/cjs/behaviors/access-control/AccessControlServer.js.map +1 -1
  22. package/dist/cjs/behaviors/general-diagnostics/GeneralDiagnosticsServer.d.ts.map +1 -1
  23. package/dist/cjs/behaviors/general-diagnostics/GeneralDiagnosticsServer.js +3 -9
  24. package/dist/cjs/behaviors/general-diagnostics/GeneralDiagnosticsServer.js.map +1 -1
  25. package/dist/cjs/behaviors/service-area/ServiceAreaServer.js +2 -2
  26. package/dist/cjs/behaviors/service-area/ServiceAreaServer.js.map +1 -1
  27. package/dist/cjs/behaviors/thermostat/AtomicWriteHandler.d.ts +58 -0
  28. package/dist/cjs/behaviors/thermostat/AtomicWriteHandler.d.ts.map +1 -0
  29. package/dist/cjs/behaviors/thermostat/AtomicWriteHandler.js +306 -0
  30. package/dist/cjs/behaviors/thermostat/AtomicWriteHandler.js.map +6 -0
  31. package/dist/cjs/behaviors/thermostat/AtomicWriteState.d.ts +33 -0
  32. package/dist/cjs/behaviors/thermostat/AtomicWriteState.d.ts.map +1 -0
  33. package/dist/cjs/behaviors/thermostat/AtomicWriteState.js +86 -0
  34. package/dist/cjs/behaviors/thermostat/AtomicWriteState.js.map +6 -0
  35. package/dist/cjs/behaviors/thermostat/ThermostatBehavior.d.ts +12 -0
  36. package/dist/cjs/behaviors/thermostat/ThermostatBehavior.d.ts.map +1 -1
  37. package/dist/cjs/behaviors/thermostat/ThermostatInterface.d.ts +1 -0
  38. package/dist/cjs/behaviors/thermostat/ThermostatInterface.d.ts.map +1 -1
  39. package/dist/cjs/behaviors/thermostat/ThermostatServer.d.ts +894 -3
  40. package/dist/cjs/behaviors/thermostat/ThermostatServer.d.ts.map +1 -1
  41. package/dist/cjs/behaviors/thermostat/ThermostatServer.js +1216 -1
  42. package/dist/cjs/behaviors/thermostat/ThermostatServer.js.map +2 -2
  43. package/dist/cjs/devices/water-heater.d.ts +24 -0
  44. package/dist/cjs/devices/water-heater.d.ts.map +1 -1
  45. package/dist/cjs/endpoint/Endpoint.d.ts +36 -2
  46. package/dist/cjs/endpoint/Endpoint.d.ts.map +1 -1
  47. package/dist/cjs/endpoint/Endpoint.js +17 -14
  48. package/dist/cjs/endpoint/Endpoint.js.map +1 -1
  49. package/dist/cjs/endpoint/properties/EndpointContainer.d.ts +1 -0
  50. package/dist/cjs/endpoint/properties/EndpointContainer.d.ts.map +1 -1
  51. package/dist/cjs/endpoint/properties/EndpointContainer.js +3 -0
  52. package/dist/cjs/endpoint/properties/EndpointContainer.js.map +1 -1
  53. package/dist/esm/behavior/Behavior.d.ts +1 -0
  54. package/dist/esm/behavior/Behavior.d.ts.map +1 -1
  55. package/dist/esm/behavior/Behavior.js +5 -0
  56. package/dist/esm/behavior/Behavior.js.map +1 -1
  57. package/dist/esm/behavior/internal/BehaviorBacking.js +2 -2
  58. package/dist/esm/behavior/internal/BehaviorBacking.js.map +1 -1
  59. package/dist/esm/behavior/state/managed/Datasource.d.ts +4 -5
  60. package/dist/esm/behavior/state/managed/Datasource.d.ts.map +1 -1
  61. package/dist/esm/behavior/state/managed/Datasource.js +7 -3
  62. package/dist/esm/behavior/state/managed/Datasource.js.map +1 -1
  63. package/dist/esm/behavior/state/managed/ManagedReference.d.ts +3 -2
  64. package/dist/esm/behavior/state/managed/ManagedReference.d.ts.map +1 -1
  65. package/dist/esm/behavior/state/managed/ManagedReference.js +66 -21
  66. package/dist/esm/behavior/state/managed/ManagedReference.js.map +1 -1
  67. package/dist/esm/behavior/state/managed/values/ListManager.js +2 -1
  68. package/dist/esm/behavior/state/managed/values/ListManager.js.map +1 -1
  69. package/dist/esm/behavior/state/managed/values/StructManager.js +9 -1
  70. package/dist/esm/behavior/state/managed/values/StructManager.js.map +1 -1
  71. package/dist/esm/behaviors/access-control/AccessControlServer.d.ts.map +1 -1
  72. package/dist/esm/behaviors/access-control/AccessControlServer.js +3 -3
  73. package/dist/esm/behaviors/access-control/AccessControlServer.js.map +1 -1
  74. package/dist/esm/behaviors/general-diagnostics/GeneralDiagnosticsServer.d.ts.map +1 -1
  75. package/dist/esm/behaviors/general-diagnostics/GeneralDiagnosticsServer.js +3 -9
  76. package/dist/esm/behaviors/general-diagnostics/GeneralDiagnosticsServer.js.map +1 -1
  77. package/dist/esm/behaviors/service-area/ServiceAreaServer.js +2 -2
  78. package/dist/esm/behaviors/service-area/ServiceAreaServer.js.map +1 -1
  79. package/dist/esm/behaviors/thermostat/AtomicWriteHandler.d.ts +58 -0
  80. package/dist/esm/behaviors/thermostat/AtomicWriteHandler.d.ts.map +1 -0
  81. package/dist/esm/behaviors/thermostat/AtomicWriteHandler.js +293 -0
  82. package/dist/esm/behaviors/thermostat/AtomicWriteHandler.js.map +6 -0
  83. package/dist/esm/behaviors/thermostat/AtomicWriteState.d.ts +33 -0
  84. package/dist/esm/behaviors/thermostat/AtomicWriteState.d.ts.map +1 -0
  85. package/dist/esm/behaviors/thermostat/AtomicWriteState.js +66 -0
  86. package/dist/esm/behaviors/thermostat/AtomicWriteState.js.map +6 -0
  87. package/dist/esm/behaviors/thermostat/ThermostatBehavior.d.ts +12 -0
  88. package/dist/esm/behaviors/thermostat/ThermostatBehavior.d.ts.map +1 -1
  89. package/dist/esm/behaviors/thermostat/ThermostatInterface.d.ts +1 -0
  90. package/dist/esm/behaviors/thermostat/ThermostatInterface.d.ts.map +1 -1
  91. package/dist/esm/behaviors/thermostat/ThermostatServer.d.ts +894 -3
  92. package/dist/esm/behaviors/thermostat/ThermostatServer.d.ts.map +1 -1
  93. package/dist/esm/behaviors/thermostat/ThermostatServer.js +1225 -1
  94. package/dist/esm/behaviors/thermostat/ThermostatServer.js.map +2 -2
  95. package/dist/esm/devices/water-heater.d.ts +24 -0
  96. package/dist/esm/devices/water-heater.d.ts.map +1 -1
  97. package/dist/esm/endpoint/Endpoint.d.ts +36 -2
  98. package/dist/esm/endpoint/Endpoint.d.ts.map +1 -1
  99. package/dist/esm/endpoint/Endpoint.js +17 -14
  100. package/dist/esm/endpoint/Endpoint.js.map +1 -1
  101. package/dist/esm/endpoint/properties/EndpointContainer.d.ts +1 -0
  102. package/dist/esm/endpoint/properties/EndpointContainer.d.ts.map +1 -1
  103. package/dist/esm/endpoint/properties/EndpointContainer.js +3 -0
  104. package/dist/esm/endpoint/properties/EndpointContainer.js.map +1 -1
  105. package/package.json +7 -7
  106. package/src/behavior/Behavior.ts +10 -0
  107. package/src/behavior/internal/BehaviorBacking.ts +2 -2
  108. package/src/behavior/state/managed/Datasource.ts +14 -7
  109. package/src/behavior/state/managed/ManagedReference.ts +67 -19
  110. package/src/behavior/state/managed/values/ListManager.ts +1 -0
  111. package/src/behavior/state/managed/values/StructManager.ts +13 -3
  112. package/src/behaviors/access-control/AccessControlServer.ts +3 -7
  113. package/src/behaviors/general-diagnostics/GeneralDiagnosticsServer.ts +5 -9
  114. package/src/behaviors/service-area/ServiceAreaServer.ts +2 -2
  115. package/src/behaviors/thermostat/AtomicWriteHandler.ts +412 -0
  116. package/src/behaviors/thermostat/AtomicWriteState.ts +91 -0
  117. package/src/behaviors/thermostat/ThermostatInterface.ts +2 -0
  118. package/src/behaviors/thermostat/ThermostatServer.ts +1487 -3
  119. package/src/endpoint/Endpoint.ts +61 -5
  120. package/src/endpoint/properties/EndpointContainer.ts +4 -0
@@ -0,0 +1,293 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022-2025 Matter.js Authors
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { ClusterBehavior } from "#behavior/index.js";
7
+ import { Thermostat } from "#clusters/thermostat";
8
+ import { BasicSet, Environmental, InternalError, Logger, ObserverGroup, serialize } from "#general";
9
+ import { DataModelPath } from "#model";
10
+ import {
11
+ AccessControl,
12
+ assertRemoteActor,
13
+ FabricManager,
14
+ hasRemoteActor,
15
+ PeerAddress,
16
+ Subject
17
+ } from "#protocol";
18
+ import { AttributeId, NodeId, Status, StatusResponse, StatusResponseError } from "#types";
19
+ import { AtomicWriteState } from "./AtomicWriteState.js";
20
+ const logger = Logger.get("AtomicWriteHandler");
21
+ class AtomicWriteHandler {
22
+ #observers = new ObserverGroup();
23
+ #pendingWrites = new BasicSet();
24
+ constructor(fabricManager) {
25
+ this.#observers.on(fabricManager.events.deleted, (fabric) => this.#handleFabricRemoval(fabric));
26
+ }
27
+ static [Environmental.create](env) {
28
+ const instance = new AtomicWriteHandler(env.get(FabricManager));
29
+ env.set(AtomicWriteHandler, instance);
30
+ return instance;
31
+ }
32
+ close() {
33
+ this.#observers.close();
34
+ for (const writeState of Array.from(this.#pendingWrites)) {
35
+ writeState.close();
36
+ }
37
+ }
38
+ /**
39
+ * Initializes an AtomicWrite state for the given request, context, endpoint and cluster.
40
+ * It also implements all relevant validation according to the Matter spec.
41
+ */
42
+ #initializeState({ requestType, attributeRequests, timeout }, context, endpoint, cluster) {
43
+ if (!ClusterBehavior.is(cluster) || !cluster.schema) {
44
+ throw new InternalError("Cluster behavior expected for atomic write handler");
45
+ }
46
+ const peerAddress = this.#assertValidPeer(context);
47
+ if (attributeRequests.length === 0) {
48
+ throw new StatusResponse.InvalidCommandError("No attribute requests provided");
49
+ }
50
+ const attributes = /* @__PURE__ */ new Map();
51
+ for (const attr of attributeRequests) {
52
+ const [attributeName, _] = Object.entries(cluster.cluster.attributes).find(
53
+ ([_2, { id }]) => id === attr
54
+ ) ?? [];
55
+ if (attributeName === void 0 || endpoint.stateOf(cluster.id)[attr] === void 0) {
56
+ throw new StatusResponse.InvalidCommandError(`Attribute ${attr} not supported by cluster`);
57
+ }
58
+ if (attributes.has(attr)) {
59
+ throw new StatusResponse.InvalidCommandError("Duplicate attribute in attribute requests");
60
+ }
61
+ attributes.set(attr, attributeName);
62
+ }
63
+ const existingState = this.#pendingWrites.find(
64
+ (s) => PeerAddress.is(s.peerAddress, peerAddress) && s.endpoint.number == endpoint.number && s.clusterId === cluster.cluster.id
65
+ );
66
+ if (requestType === Thermostat.RequestType.BeginWrite) {
67
+ if (timeout === void 0) {
68
+ throw new StatusResponse.InvalidCommandError("Timeout missing for BeginWrite request");
69
+ }
70
+ if (existingState !== void 0 && existingState.attributeRequests.some((attr) => attributeRequests.includes(attr))) {
71
+ throw new StatusResponse.InvalidCommandError(
72
+ "An atomic write for at least one of the attributes is already in progress for this peer"
73
+ );
74
+ }
75
+ const initialValues = {};
76
+ for (const attr of attributeRequests) {
77
+ initialValues[attr] = endpoint.stateOf(cluster.id)[attr];
78
+ }
79
+ const state = new AtomicWriteState(
80
+ peerAddress,
81
+ endpoint,
82
+ cluster.cluster.id,
83
+ attributeRequests,
84
+ timeout,
85
+ attributes,
86
+ initialValues
87
+ );
88
+ this.#pendingWrites.add(state);
89
+ state.closed.on(() => void this.#pendingWrites.delete(state));
90
+ logger.debug("Added atomic write state:", state);
91
+ return state;
92
+ }
93
+ if (existingState === void 0) {
94
+ throw new StatusResponse.InvalidInStateError("No atomic write in progress for this peer");
95
+ }
96
+ if (existingState.attributeRequests.length !== attributeRequests.length || !existingState.attributeRequests.every((attr) => attributeRequests.includes(attr))) {
97
+ throw new StatusResponse.InvalidInStateError("Attribute requests do not match existing atomic write");
98
+ }
99
+ return existingState;
100
+ }
101
+ /**
102
+ * Implements the begin write logic for an atomic write.
103
+ */
104
+ beginWrite(request, context, endpoint, cluster) {
105
+ if (!hasRemoteActor(context)) {
106
+ throw new StatusResponse.InvalidCommandError("AtomicRequest requires a remote actor");
107
+ }
108
+ if (!ClusterBehavior.is(cluster) || !cluster.schema) {
109
+ throw new InternalError("Cluster behavior expected for atomic write handler");
110
+ }
111
+ let commandStatusCode = Status.Success;
112
+ const attributeStatus = request.attributeRequests.map((attr) => {
113
+ let statusCode = Status.Success;
114
+ const attributeModel = cluster.schema.conformant.attributes.for(attr);
115
+ if (!attributeModel?.quality.atomic) {
116
+ statusCode = Status.InvalidAction;
117
+ } else if (this.#pendingWriteStateForAttribute(endpoint, cluster, attr) !== void 0) {
118
+ statusCode = Status.Busy;
119
+ } else {
120
+ const { writeLevel } = cluster.supervisor.get(attributeModel).access.limits;
121
+ const location = {
122
+ path: DataModelPath.none,
123
+ endpoint: endpoint.number,
124
+ cluster: cluster.cluster.id,
125
+ owningFabric: context.fabric
126
+ };
127
+ if (context.authorityAt(writeLevel, location) !== AccessControl.Authority.Granted) {
128
+ statusCode = Status.UnsupportedAccess;
129
+ }
130
+ }
131
+ if (statusCode !== Status.Success) {
132
+ commandStatusCode = Status.Failure;
133
+ }
134
+ return {
135
+ attributeId: attr,
136
+ statusCode
137
+ };
138
+ });
139
+ let timeout;
140
+ if (commandStatusCode === Status.Success) {
141
+ const state = this.#initializeState(request, context, endpoint, cluster);
142
+ timeout = state.timeout;
143
+ }
144
+ return {
145
+ statusCode: commandStatusCode,
146
+ attributeStatus,
147
+ timeout
148
+ };
149
+ }
150
+ /**
151
+ * Handles writing a value for an attribute as part of an ongoing atomic write.
152
+ * It uses the *$AtomicChanging* event to trigger validation of the partial write.
153
+ */
154
+ writeAttribute(context, endpoint, cluster, attribute, value) {
155
+ const state = this.#assertPendingWriteForAttributeAndPeer(context, endpoint, cluster, attribute);
156
+ const attributeName = state.attributeNames.get(attribute);
157
+ logger.debug(`Writing pending value for attribute ${attributeName}, ${attribute} in atomic write`, value);
158
+ endpoint.eventsOf(cluster.id)[`${attributeName}$AtomicChanging`]?.emit(value, state.pendingAttributeValues[attribute] !== void 0 ? state.pendingAttributeValues[attribute] : state.initialValues[attribute], context);
159
+ state.pendingAttributeValues[attribute] = value;
160
+ logger.debug("Atomic write state after current write:", state);
161
+ }
162
+ /**
163
+ * Implements the commit logic for an atomic write.
164
+ */
165
+ async commitWrite(request, context, endpoint, cluster, clusterState) {
166
+ const state = this.#initializeState(request, context, endpoint, cluster);
167
+ let commandStatusCode = Status.Success;
168
+ const attributeStatus = [];
169
+ for (const [attr, value] of Object.entries(state.pendingAttributeValues)) {
170
+ let statusCode = Status.Success;
171
+ try {
172
+ const attributeName = state.attributeNames.get(AttributeId(Number(attr)));
173
+ endpoint.eventsOf(cluster.id)[`${attributeName}$AtomicChanging`]?.emit(value, endpoint.stateOf(cluster.id)[attr], context);
174
+ endpoint.eventsOf(cluster.id)[`${attributeName}$AtomicChanged`]?.emit(value, endpoint.stateOf(cluster.id)[attr], context);
175
+ clusterState[attr] = value;
176
+ await context.transaction?.commit();
177
+ } catch (error) {
178
+ await context.transaction?.rollback();
179
+ logger.info(`Failed to write attribute ${attr} during atomic write commit: ${error}`);
180
+ statusCode = error instanceof StatusResponseError ? error.code : Status.Failure;
181
+ commandStatusCode = commandStatusCode === Status.Failure ? Status.Failure : commandStatusCode === Status.ConstraintError ? Status.ConstraintError : Status.Failure;
182
+ }
183
+ attributeStatus.push({
184
+ attributeId: AttributeId(Number(attr)),
185
+ statusCode
186
+ });
187
+ }
188
+ state.close();
189
+ return {
190
+ statusCode: commandStatusCode,
191
+ attributeStatus
192
+ };
193
+ }
194
+ /**
195
+ * Implements the rollback logic for an atomic write.
196
+ */
197
+ rollbackWrite(request, context, endpoint, cluster) {
198
+ const state = this.#initializeState(request, context, endpoint, cluster);
199
+ state.close();
200
+ return {
201
+ statusCode: Status.Success,
202
+ attributeStatus: state.attributeRequests.map((attr) => ({
203
+ attributeId: attr,
204
+ statusCode: Status.Success
205
+ }))
206
+ };
207
+ }
208
+ /**
209
+ * Handles fabric removal by closing all pending atomic write states for peers on the removed fabric.
210
+ */
211
+ #handleFabricRemoval(fabric) {
212
+ const fabricIndex = fabric.fabricIndex;
213
+ for (const writeState of Array.from(this.#pendingWrites)) {
214
+ if (writeState.peerAddress.fabricIndex === fabricIndex) {
215
+ logger.debug(
216
+ `Closing atomic write state for peer ${writeState.peerAddress.toString()} on endpoint ${writeState.endpoint.id} due to fabric removal`
217
+ );
218
+ writeState.close();
219
+ }
220
+ }
221
+ }
222
+ /**
223
+ * Returns the pending write state for the given attribute, if any.
224
+ */
225
+ #pendingWriteStateForAttribute(endpoint, cluster, attribute) {
226
+ const writeStates = this.#pendingWrites.filter(
227
+ (s) => s.endpoint.number == endpoint.number && s.clusterId === cluster.cluster.id
228
+ );
229
+ if (writeStates.length === 0) {
230
+ return void 0;
231
+ }
232
+ const attrWriteStates = writeStates.filter(({ attributeRequests }) => attributeRequests.includes(attribute));
233
+ if (attrWriteStates.length === 0) {
234
+ return void 0;
235
+ }
236
+ if (attrWriteStates.length > 1) {
237
+ throw new InternalError("Multiple atomic write states found for the same attribute. Should never happen");
238
+ }
239
+ return attrWriteStates[0];
240
+ }
241
+ /**
242
+ * Returns the pending value for the given attribute and peer, if any.
243
+ */
244
+ pendingValueForAttributeAndPeer(context, endpoint, cluster, attribute) {
245
+ const peerAddress = this.#derivePeerAddress(context);
246
+ if (peerAddress === void 0) {
247
+ return void 0;
248
+ }
249
+ const attrWriteState = this.#pendingWriteStateForAttribute(endpoint, cluster, attribute);
250
+ if (attrWriteState === void 0) {
251
+ return void 0;
252
+ }
253
+ if (!PeerAddress.is(attrWriteState.peerAddress, peerAddress)) {
254
+ return void 0;
255
+ }
256
+ logger.debug(
257
+ `Found pending value for attribute ${attribute} for peer ${peerAddress.nodeId}`,
258
+ serialize(attrWriteState.pendingAttributeValues[attribute])
259
+ );
260
+ return attrWriteState.pendingAttributeValues[attribute];
261
+ }
262
+ #assertPendingWriteForAttributeAndPeer(session, endpoint, cluster, attribute) {
263
+ const attrWriteState = this.#pendingWriteStateForAttribute(endpoint, cluster, attribute);
264
+ if (attrWriteState === void 0) {
265
+ throw new StatusResponse.InvalidInStateError("There is no atomic write in progress for this attribute");
266
+ }
267
+ const peerAddress = this.#derivePeerAddress(session);
268
+ if (peerAddress === void 0) {
269
+ throw new StatusResponse.InvalidInStateError("There is no atomic write in progress for this peer");
270
+ }
271
+ if (!PeerAddress.is(attrWriteState.peerAddress, peerAddress)) {
272
+ throw new StatusResponse.BusyError("Attribute is part of an atomic write in progress for a different peer");
273
+ }
274
+ return attrWriteState;
275
+ }
276
+ #derivePeerAddress(session) {
277
+ if (hasRemoteActor(session) && Subject.isNode(session.subject) && NodeId.isOperationalNodeId(session.subject.id)) {
278
+ return PeerAddress({ fabricIndex: session.fabric, nodeId: NodeId(session.subject.id) });
279
+ }
280
+ }
281
+ #assertValidPeer(context) {
282
+ assertRemoteActor(context);
283
+ const peerAddress = this.#derivePeerAddress(context);
284
+ if (!context.session.associatedFabric || peerAddress === void 0) {
285
+ throw new StatusResponse.InvalidCommandError("AtomicRequest requires an operational session");
286
+ }
287
+ return peerAddress;
288
+ }
289
+ }
290
+ export {
291
+ AtomicWriteHandler
292
+ };
293
+ //# 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,66 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022-2025 Matter.js Authors
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { Diagnostic, Logger, Millis, Observable, Seconds, Time, toHex } from "#general";
7
+ const logger = Logger.get("AtomicWriteState");
8
+ const MAXIMUM_ALLOWED_TIMEOUT = Seconds(9);
9
+ class AtomicWriteState {
10
+ peerAddress;
11
+ endpoint;
12
+ clusterId;
13
+ attributeRequests;
14
+ attributeNames = /* @__PURE__ */ new Map();
15
+ pendingAttributeValues = {};
16
+ timeout;
17
+ initialValues;
18
+ closed = Observable();
19
+ #timer;
20
+ constructor(peerAddress, endpoint, cluster, attributeRequests, timeout, attributeNames, initialValues) {
21
+ this.peerAddress = peerAddress;
22
+ this.endpoint = endpoint;
23
+ this.clusterId = cluster;
24
+ this.attributeRequests = attributeRequests;
25
+ this.timeout = Math.min(timeout, MAXIMUM_ALLOWED_TIMEOUT);
26
+ this.attributeNames = attributeNames;
27
+ this.initialValues = initialValues;
28
+ this.#timer = Time.getTimer("AtomicWriteState Timeout", Millis(this.timeout), () => this.#timeoutTriggered());
29
+ }
30
+ get [Diagnostic.value]() {
31
+ return Diagnostic.dict({
32
+ peerAddress: this.peerAddress.toString(),
33
+ endpointId: this.endpoint.id,
34
+ clusterId: toHex(this.clusterId),
35
+ attributeRequests: this.attributeRequests,
36
+ timeout: this.timeout,
37
+ initialValues: this.initialValues,
38
+ pendingAttributeValues: this.pendingAttributeValues
39
+ });
40
+ }
41
+ start() {
42
+ logger.debug(
43
+ `Starting atomic write state for peer ${this.peerAddress.toString()} on endpoint ${this.endpoint.id}`
44
+ );
45
+ this.#timer.start();
46
+ }
47
+ #timeoutTriggered() {
48
+ logger.debug(
49
+ `Atomic write state for peer ${this.peerAddress.toString()} on endpoint ${this.endpoint.id} timed out`
50
+ );
51
+ this.close();
52
+ }
53
+ close() {
54
+ logger.debug(
55
+ `Closing atomic write state for peer ${this.peerAddress.toString()} on endpoint ${this.endpoint.id}`
56
+ );
57
+ if (this.#timer.isRunning) {
58
+ this.#timer.stop();
59
+ }
60
+ this.closed.emit();
61
+ }
62
+ }
63
+ export {
64
+ AtomicWriteState
65
+ };
66
+ //# 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,SAAS,YAAY,QAAQ,QAAQ,YAAY,SAAS,MAAa,aAAa;AAIpF,MAAM,SAAS,OAAO,IAAI,kBAAkB;AAG5C,MAAM,0BAA0B,QAAQ,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,SAAS,WAAmB;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,KAAK,SAAS,4BAA4B,OAAO,KAAK,OAAO,GAAG,MAAM,KAAK,kBAAkB,CAAC;AAAA,EAChH;AAAA,EAEA,KAAK,WAAW,KAAK,IAAI;AACrB,WAAO,WAAW,KAAK;AAAA,MACnB,aAAa,KAAK,YAAY,SAAS;AAAA,MACvC,YAAY,KAAK,SAAS;AAAA,MAC1B,WAAW,MAAM,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: {
@@ -1 +1 @@
1
- {"version":3,"file":"ThermostatBehavior.d.ts","sourceRoot":"","sources":["../../../../src/behaviors/thermostat/ThermostatBehavior.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,6CAA6C;AAE7C,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,2CAA2C,CAAC;AAC5E,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAEpC;;;;;GAKG;AACH,eAAO,MAAM,6BAA6B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sEAEJ,CAAC;AAEvC,MAAM,WAAW,6BAA8B,SAAQ,QAAQ,CAAC,OAAO,6BAA6B,CAAC;CAAG;AACxG,eAAO,MAAM,kBAAkB,EAAE,6BAA6D,CAAC;AAC/F,MAAM,WAAW,kBAAmB,SAAQ,YAAY,CAAC,6BAA6B,CAAC;CAAG;AAC1F,yBAAiB,kBAAkB,CAAC;IAAE,UAAiB,KAAM,SAAQ,YAAY,CAAC,OAAO,kBAAkB,CAAC,KAAK,CAAC;KAAG;CAAE"}
1
+ {"version":3,"file":"ThermostatBehavior.d.ts","sourceRoot":"","sources":["../../../../src/behaviors/thermostat/ThermostatBehavior.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,6CAA6C;AAE7C,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,2CAA2C,CAAC;AAC5E,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAEpC;;;;;GAKG;AACH,eAAO,MAAM,6BAA6B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sEAEJ,CAAC;AAEvC,MAAM,WAAW,6BAA8B,SAAQ,QAAQ,CAAC,OAAO,6BAA6B,CAAC;CAAG;AACxG,eAAO,MAAM,kBAAkB,EAAE,6BAA6D,CAAC;AAC/F,MAAM,WAAW,kBAAmB,SAAQ,YAAY,CAAC,6BAA6B,CAAC;CAAG;AAC1F,yBAAiB,kBAAkB,CAAC;IAAE,UAAiB,KAAM,SAAQ,YAAY,CAAC,OAAO,kBAAkB,CAAC,KAAK,CAAC;KAAG;CAAE"}
@@ -12,6 +12,7 @@ export declare namespace ThermostatInterface {
12
12
  * @see {@link MatterSpecification.v141.Cluster} § 4.3.10.1
13
13
  */
14
14
  setpointRaiseLower(request: Thermostat.SetpointRaiseLowerRequest): MaybePromise;
15
+ atomicRequest(request: Thermostat.AtomicRequest): MaybePromise<Thermostat.AtomicResponse>;
15
16
  }
16
17
  interface ScheduleConfiguration {
17
18
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"ThermostatInterface.d.ts","sourceRoot":"","sources":["../../../../src/behaviors/thermostat/ThermostatInterface.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,6CAA6C;AAE7C,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAElD,yBAAiB,mBAAmB,CAAC;IACjC,UAAiB,IAAI;QACjB;;WAEG;QACH,kBAAkB,CAAC,OAAO,EAAE,UAAU,CAAC,yBAAyB,GAAG,YAAY,CAAC;KACnF;IAED,UAAiB,qBAAqB;QAClC;;;;;;;;;;WAUG;QACH,iBAAiB,CAAC,OAAO,EAAE,UAAU,CAAC,wBAAwB,GAAG,YAAY,CAAC;QAE9E;;WAEG;QACH,iBAAiB,CAAC,OAAO,EAAE,UAAU,CAAC,wBAAwB,GAAG,YAAY,CAAC,UAAU,CAAC,yBAAyB,CAAC,CAAC;QAEpH;;;;;;;WAOG;QACH,mBAAmB,IAAI,YAAY,CAAC;KACvC;IAED,UAAiB,OAAO;QACpB;;WAEG;QACH,sBAAsB,CAAC,OAAO,EAAE,UAAU,CAAC,sBAAsB,GAAG,YAAY,CAAC;KACpF;IAED,UAAiB,2BAA2B;QACxC;;WAEG;QACH,wBAAwB,CAAC,OAAO,EAAE,UAAU,CAAC,wBAAwB,GAAG,YAAY,CAAC;KACxF;CACJ;AAED,MAAM,MAAM,mBAAmB,GAAG;IAC9B,UAAU,EAAE;QACR;YAAE,KAAK,EAAE,EAAE,CAAC;YAAC,OAAO,EAAE,mBAAmB,CAAC,IAAI,CAAA;SAAE;QAChD;YAAE,KAAK,EAAE;gBAAE,qBAAqB,EAAE,IAAI,CAAA;aAAE,CAAC;YAAC,OAAO,EAAE,mBAAmB,CAAC,qBAAqB,CAAA;SAAE;QAC9F;YAAE,KAAK,EAAE;gBAAE,OAAO,EAAE,IAAI,CAAA;aAAE,CAAC;YAAC,OAAO,EAAE,mBAAmB,CAAC,OAAO,CAAA;SAAE;QAClE;YAAE,KAAK,EAAE;gBAAE,2BAA2B,EAAE,IAAI,CAAA;aAAE,CAAC;YAAC,OAAO,EAAE,mBAAmB,CAAC,2BAA2B,CAAA;SAAE;KAC7G,CAAA;CACJ,CAAC"}
1
+ {"version":3,"file":"ThermostatInterface.d.ts","sourceRoot":"","sources":["../../../../src/behaviors/thermostat/ThermostatInterface.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,6CAA6C;AAE7C,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAElD,yBAAiB,mBAAmB,CAAC;IACjC,UAAiB,IAAI;QACjB;;WAEG;QACH,kBAAkB,CAAC,OAAO,EAAE,UAAU,CAAC,yBAAyB,GAAG,YAAY,CAAC;QAEhF,aAAa,CAAC,OAAO,EAAE,UAAU,CAAC,aAAa,GAAG,YAAY,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;KAC7F;IAED,UAAiB,qBAAqB;QAClC;;;;;;;;;;WAUG;QACH,iBAAiB,CAAC,OAAO,EAAE,UAAU,CAAC,wBAAwB,GAAG,YAAY,CAAC;QAE9E;;WAEG;QACH,iBAAiB,CAAC,OAAO,EAAE,UAAU,CAAC,wBAAwB,GAAG,YAAY,CAAC,UAAU,CAAC,yBAAyB,CAAC,CAAC;QAEpH;;;;;;;WAOG;QACH,mBAAmB,IAAI,YAAY,CAAC;KACvC;IAED,UAAiB,OAAO;QACpB;;WAEG;QACH,sBAAsB,CAAC,OAAO,EAAE,UAAU,CAAC,sBAAsB,GAAG,YAAY,CAAC;KACpF;IAED,UAAiB,2BAA2B;QACxC;;WAEG;QACH,wBAAwB,CAAC,OAAO,EAAE,UAAU,CAAC,wBAAwB,GAAG,YAAY,CAAC;KACxF;CACJ;AAED,MAAM,MAAM,mBAAmB,GAAG;IAC9B,UAAU,EAAE;QACR;YAAE,KAAK,EAAE,EAAE,CAAC;YAAC,OAAO,EAAE,mBAAmB,CAAC,IAAI,CAAA;SAAE;QAChD;YAAE,KAAK,EAAE;gBAAE,qBAAqB,EAAE,IAAI,CAAA;aAAE,CAAC;YAAC,OAAO,EAAE,mBAAmB,CAAC,qBAAqB,CAAA;SAAE;QAC9F;YAAE,KAAK,EAAE;gBAAE,OAAO,EAAE,IAAI,CAAA;aAAE,CAAC;YAAC,OAAO,EAAE,mBAAmB,CAAC,OAAO,CAAA;SAAE;QAClE;YAAE,KAAK,EAAE;gBAAE,2BAA2B,EAAE,IAAI,CAAA;aAAE,CAAC;YAAC,OAAO,EAAE,mBAAmB,CAAC,2BAA2B,CAAA;SAAE;KAC7G,CAAA;CACJ,CAAC"}