@matter-server/ws-controller 0.6.2 → 0.6.3-alpha.0-20260429-7b8104b
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/esm/controller/ControllerCommandHandler.d.ts +0 -1
- package/dist/esm/controller/ControllerCommandHandler.d.ts.map +1 -1
- package/dist/esm/controller/ControllerCommandHandler.js +30 -35
- package/dist/esm/controller/ControllerCommandHandler.js.map +1 -1
- package/dist/esm/controller/CustomClusterPoller.d.ts +5 -10
- package/dist/esm/controller/CustomClusterPoller.d.ts.map +1 -1
- package/dist/esm/controller/CustomClusterPoller.js +19 -17
- package/dist/esm/controller/CustomClusterPoller.js.map +1 -1
- package/dist/esm/util/formatNodeId.d.ts +3 -3
- package/dist/esm/util/formatNodeId.d.ts.map +1 -1
- package/dist/esm/util/formatNodeId.js +3 -2
- package/dist/esm/util/formatNodeId.js.map +1 -1
- package/package.json +5 -5
- package/src/controller/ControllerCommandHandler.ts +32 -37
- package/src/controller/CustomClusterPoller.ts +26 -20
- package/src/util/formatNodeId.ts +7 -5
|
@@ -66,7 +66,6 @@ export declare class ControllerCommandHandler {
|
|
|
66
66
|
* Note: matter.js requires non-empty labels (1-32 chars), so null/empty resets to default.
|
|
67
67
|
*/
|
|
68
68
|
setFabricLabel(label: string): Promise<void>;
|
|
69
|
-
disconnectNode(nodeId: NodeId): Promise<void>;
|
|
70
69
|
handleWriteAttribute(data: WriteAttributeRequest): Promise<AttributeResponseStatus>;
|
|
71
70
|
handleInvoke(data: InvokeRequest): Promise<unknown>;
|
|
72
71
|
commissionNode(data: CommissioningRequest): Promise<CommissioningResponse>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ControllerCommandHandler.d.ts","sourceRoot":"","sources":["../../../src/controller/ControllerCommandHandler.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAEH,eAAe,EAIf,QAAQ,EACR,WAAW,EAKX,MAAM,EACN,UAAU,EASb,MAAM,cAAc,CAAC;AAUtB,OAAO,EACH,2BAA2B,EAC3B,uBAAuB,EAO1B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAKH,cAAc,EAQjB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,uBAAuB,EAA4B,MAAM,yBAAyB,CAAC;AAC5F,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAW5D,OAAO,EACH,uBAAuB,EACvB,cAAc,EACd,oBAAoB,EACpB,qBAAqB,EACrB,gBAAgB,EAChB,iBAAiB,EACjB,aAAa,EACb,cAAc,EACd,8BAA8B,EAC9B,+BAA+B,EAC/B,qBAAqB,EACxB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACH,kBAAkB,EAElB,oBAAoB,EACpB,aAAa,EACb,qBAAqB,EACrB,cAAc,EAGjB,MAAM,mCAAmC,CAAC;
|
|
1
|
+
{"version":3,"file":"ControllerCommandHandler.d.ts","sourceRoot":"","sources":["../../../src/controller/ControllerCommandHandler.ts"],"names":[],"mappings":"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"}
|
|
@@ -71,10 +71,7 @@ import { CustomClusterPoller } from "./CustomClusterPoller.js";
|
|
|
71
71
|
import { Nodes } from "./Nodes.js";
|
|
72
72
|
const logger = Logger.get("ControllerCommandHandler");
|
|
73
73
|
const RECONNECT_TIMEOUT = Minutes(3);
|
|
74
|
-
const FULL_UPDATE_CLUSTER_IDS = /* @__PURE__ */ new Set([
|
|
75
|
-
BasicInformation.Cluster.id,
|
|
76
|
-
BridgedDeviceBasicInformation.Cluster.id
|
|
77
|
-
]);
|
|
74
|
+
const FULL_UPDATE_CLUSTER_IDS = /* @__PURE__ */ new Set([BasicInformation.id, BridgedDeviceBasicInformation.id]);
|
|
78
75
|
function determineMatterVersion(attributes) {
|
|
79
76
|
const specificationVersion = attributes["0/40/21"];
|
|
80
77
|
const dataModelRevision = attributes["0/40/0"];
|
|
@@ -95,8 +92,8 @@ class ControllerCommandHandler {
|
|
|
95
92
|
#controller;
|
|
96
93
|
#started = false;
|
|
97
94
|
#connected = false;
|
|
98
|
-
#bleEnabled
|
|
99
|
-
#otaEnabled
|
|
95
|
+
#bleEnabled;
|
|
96
|
+
#otaEnabled;
|
|
100
97
|
/** Node management and attribute cache */
|
|
101
98
|
#nodes = new Nodes();
|
|
102
99
|
/** Cache of available updates keyed by nodeId */
|
|
@@ -127,10 +124,24 @@ class ControllerCommandHandler {
|
|
|
127
124
|
logger.info(`BLE is ${bleEnabled ? "enabled" : "disabled"}`);
|
|
128
125
|
this.#otaEnabled = otaEnabled;
|
|
129
126
|
this.#customClusterPoller = new CustomClusterPoller({
|
|
130
|
-
nodeConnected: (
|
|
131
|
-
handleReadAttributes: (
|
|
127
|
+
nodeConnected: (peer) => !!(this.#nodes.has(peer.nodeId) && this.#nodes.get(peer.nodeId).isConnected),
|
|
128
|
+
handleReadAttributes: (peer, paths, fabricFiltered) => this.handleReadAttributes(peer.nodeId, paths, fabricFiltered)
|
|
132
129
|
});
|
|
133
130
|
}
|
|
131
|
+
/**
|
|
132
|
+
* Build the canonical PeerAddress for the given node on this controller's fabric.
|
|
133
|
+
*
|
|
134
|
+
* Throws if the controller's fabric is not yet resolved. Callers must run after
|
|
135
|
+
* controller start; a silent fallback would intern PeerAddressMap entries under the
|
|
136
|
+
* wrong fabric index and leak poller registrations.
|
|
137
|
+
*/
|
|
138
|
+
#peerOf(nodeId) {
|
|
139
|
+
const fabric = this.#controller.fabric;
|
|
140
|
+
if (fabric === void 0) {
|
|
141
|
+
throw new Error(`Cannot resolve PeerAddress for node ${nodeId}: controller fabric is not initialized`);
|
|
142
|
+
}
|
|
143
|
+
return PeerAddress({ fabricIndex: fabric.fabricIndex, nodeId });
|
|
144
|
+
}
|
|
134
145
|
/**
|
|
135
146
|
* Format a NodeId as a PeerAddress string for logging.
|
|
136
147
|
* Uses the controller's fabric index when available, otherwise "?" is used.
|
|
@@ -178,12 +189,12 @@ class ControllerCommandHandler {
|
|
|
178
189
|
}
|
|
179
190
|
softwareUpdateManagerEvents.updateAvailable.on(
|
|
180
191
|
(peerAddress, updateDetails) => {
|
|
181
|
-
logger.info(`Update available for node ${peerAddress.nodeId}:`, updateDetails);
|
|
192
|
+
logger.info(`Update available for node ${this.formatNode(peerAddress.nodeId)}:`, updateDetails);
|
|
182
193
|
this.#availableUpdates.set(peerAddress.nodeId, updateDetails);
|
|
183
194
|
}
|
|
184
195
|
);
|
|
185
196
|
softwareUpdateManagerEvents.updateDone.on((peerAddress) => {
|
|
186
|
-
logger.info(`Update done for node ${peerAddress.nodeId}`);
|
|
197
|
+
logger.info(`Update done for node ${this.formatNode(peerAddress.nodeId)}`);
|
|
187
198
|
this.#availableUpdates.delete(peerAddress.nodeId);
|
|
188
199
|
});
|
|
189
200
|
logger.info("OTA event handlers registered");
|
|
@@ -226,7 +237,7 @@ class ControllerCommandHandler {
|
|
|
226
237
|
attributeCache.update(node);
|
|
227
238
|
const attributes = attributeCache.get(nodeId);
|
|
228
239
|
if (attributes) {
|
|
229
|
-
this.#customClusterPoller.registerNode(nodeId, attributes);
|
|
240
|
+
this.#customClusterPoller.registerNode(this.#peerOf(nodeId), attributes);
|
|
230
241
|
}
|
|
231
242
|
}
|
|
232
243
|
if (state === NodeStates.Reconnecting) {
|
|
@@ -276,7 +287,7 @@ class ControllerCommandHandler {
|
|
|
276
287
|
attributeCache.add(node);
|
|
277
288
|
const attributes = attributeCache.get(nodeId);
|
|
278
289
|
if (attributes) {
|
|
279
|
-
this.#customClusterPoller.registerNode(nodeId, attributes);
|
|
290
|
+
this.#customClusterPoller.registerNode(this.#peerOf(nodeId), attributes);
|
|
280
291
|
}
|
|
281
292
|
}
|
|
282
293
|
return node;
|
|
@@ -460,9 +471,6 @@ class ControllerCommandHandler {
|
|
|
460
471
|
async setFabricLabel(label) {
|
|
461
472
|
await this.#controller.updateFabricLabel(label);
|
|
462
473
|
}
|
|
463
|
-
disconnectNode(nodeId) {
|
|
464
|
-
return this.#controller.disconnectNode(nodeId, true);
|
|
465
|
-
}
|
|
466
474
|
async handleWriteAttribute(data) {
|
|
467
475
|
const { nodeId, endpointId, clusterId, attributeId } = data;
|
|
468
476
|
let { value } = data;
|
|
@@ -601,7 +609,7 @@ class ControllerCommandHandler {
|
|
|
601
609
|
throw ServerError.invalidArguments("No passcode provided");
|
|
602
610
|
}
|
|
603
611
|
const { onNetworkOnly, wifiCredentials: wifiNetwork, threadCredentials: threadNetwork } = data;
|
|
604
|
-
|
|
612
|
+
return {
|
|
605
613
|
commissioning: {
|
|
606
614
|
nodeId: data.nodeId,
|
|
607
615
|
regulatoryLocation: GeneralCommissioning.RegulatoryLocationType.IndoorOutdoor,
|
|
@@ -619,7 +627,6 @@ class ControllerCommandHandler {
|
|
|
619
627
|
},
|
|
620
628
|
passcode
|
|
621
629
|
};
|
|
622
|
-
return options;
|
|
623
630
|
}
|
|
624
631
|
async commissionNode(data) {
|
|
625
632
|
let nodeId;
|
|
@@ -802,7 +809,7 @@ class ControllerCommandHandler {
|
|
|
802
809
|
this.#reconnectTimers.get(nodeId)?.stop();
|
|
803
810
|
this.#reconnectTimers.delete(nodeId);
|
|
804
811
|
this.#nodes.delete(nodeId);
|
|
805
|
-
this.#customClusterPoller.unregisterNode(nodeId);
|
|
812
|
+
this.#customClusterPoller.unregisterNode(this.#peerOf(nodeId));
|
|
806
813
|
this.#availableUpdates.delete(nodeId);
|
|
807
814
|
}
|
|
808
815
|
async openCommissioningWindow(data) {
|
|
@@ -820,7 +827,7 @@ class ControllerCommandHandler {
|
|
|
820
827
|
},
|
|
821
828
|
Read.Attribute({
|
|
822
829
|
endpoint: EndpointNumber(0),
|
|
823
|
-
cluster: OperationalCredentials
|
|
830
|
+
cluster: OperationalCredentials,
|
|
824
831
|
attributes: "fabrics"
|
|
825
832
|
})
|
|
826
833
|
),
|
|
@@ -862,16 +869,10 @@ class ControllerCommandHandler {
|
|
|
862
869
|
fabricIndex: FabricIndex.OMIT_FABRIC
|
|
863
870
|
}));
|
|
864
871
|
logger.info("Setting ACL entries", aclEntries);
|
|
865
|
-
const { status } = await this.#writeAttribute(
|
|
866
|
-
nodeId,
|
|
867
|
-
EndpointNumber(0),
|
|
868
|
-
AccessControl.Cluster.id,
|
|
869
|
-
"acl",
|
|
870
|
-
aclEntries
|
|
871
|
-
);
|
|
872
|
+
const { status } = await this.#writeAttribute(nodeId, EndpointNumber(0), AccessControl.id, "acl", aclEntries);
|
|
872
873
|
return [
|
|
873
874
|
{
|
|
874
|
-
path: { endpoint_id: 0, cluster_id: AccessControl.
|
|
875
|
+
path: { endpoint_id: 0, cluster_id: AccessControl.id, attribute_id: 0 },
|
|
875
876
|
status
|
|
876
877
|
}
|
|
877
878
|
];
|
|
@@ -889,16 +890,10 @@ class ControllerCommandHandler {
|
|
|
889
890
|
fabricIndex: FabricIndex.OMIT_FABRIC
|
|
890
891
|
}));
|
|
891
892
|
logger.info("Setting bindings on endpoint", endpointId, bindingEntries);
|
|
892
|
-
const { status } = await this.#writeAttribute(
|
|
893
|
-
nodeId,
|
|
894
|
-
endpointId,
|
|
895
|
-
Binding.Cluster.id,
|
|
896
|
-
"binding",
|
|
897
|
-
bindingEntries
|
|
898
|
-
);
|
|
893
|
+
const { status } = await this.#writeAttribute(nodeId, endpointId, Binding.id, "binding", bindingEntries);
|
|
899
894
|
return [
|
|
900
895
|
{
|
|
901
|
-
path: { endpoint_id: endpointId, cluster_id: Binding.
|
|
896
|
+
path: { endpoint_id: endpointId, cluster_id: Binding.id, attribute_id: 0 },
|
|
902
897
|
status
|
|
903
898
|
}
|
|
904
899
|
];
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/controller/ControllerCommandHandler.ts"],
|
|
4
|
-
"mappings": "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",
|
|
4
|
+
"mappings": "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",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
|
@@ -3,17 +3,12 @@
|
|
|
3
3
|
* Copyright 2025-2026 Open Home Foundation
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
|
-
|
|
7
|
-
* Handles polling of custom cluster attributes that don't support subscriptions.
|
|
8
|
-
* This is primarily for Eve Energy devices that expose power measurements via
|
|
9
|
-
* a custom cluster without standard Matter subscription support.
|
|
10
|
-
*/
|
|
11
|
-
import { NodeId } from "@matter/main";
|
|
6
|
+
import { PeerAddress } from "@matter/main/protocol";
|
|
12
7
|
import { AttributesData } from "../types/CommandHandler.js";
|
|
13
8
|
type AttributePath = string;
|
|
14
9
|
export interface NodeAttributeReader {
|
|
15
|
-
handleReadAttributes(
|
|
16
|
-
nodeConnected(
|
|
10
|
+
handleReadAttributes(peer: PeerAddress, attributePaths: string[], fabricFiltered?: boolean): Promise<AttributesData>;
|
|
11
|
+
nodeConnected(peer: PeerAddress): boolean;
|
|
17
12
|
}
|
|
18
13
|
/**
|
|
19
14
|
* Check if a node needs custom attribute polling based on its attributes.
|
|
@@ -34,11 +29,11 @@ export declare class CustomClusterPoller {
|
|
|
34
29
|
* Register a node for polling if it has custom attributes that need polling.
|
|
35
30
|
* Call this after a node is connected and its attributes are available.
|
|
36
31
|
*/
|
|
37
|
-
registerNode(
|
|
32
|
+
registerNode(peer: PeerAddress, attributes: AttributesData): void;
|
|
38
33
|
/**
|
|
39
34
|
* Unregister a node from polling (e.g., when decommissioned or disconnected).
|
|
40
35
|
*/
|
|
41
|
-
unregisterNode(
|
|
36
|
+
unregisterNode(peer: PeerAddress): void;
|
|
42
37
|
/**
|
|
43
38
|
* Stop all polling and cleanup. Awaits any in-flight read operation.
|
|
44
39
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CustomClusterPoller.d.ts","sourceRoot":"","sources":["../../../src/controller/CustomClusterPoller.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"CustomClusterPoller.d.ts","sourceRoot":"","sources":["../../../src/controller/CustomClusterPoller.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AASH,OAAO,EAAE,WAAW,EAAkB,MAAM,uBAAuB,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AA6B5D,KAAK,aAAa,GAAG,MAAM,CAAC;AAE5B,MAAM,WAAW,mBAAmB;IAChC,oBAAoB,CAChB,IAAI,EAAE,WAAW,EACjB,cAAc,EAAE,MAAM,EAAE,EACxB,cAAc,CAAC,EAAE,OAAO,GACzB,OAAO,CAAC,cAAc,CAAC,CAAC;IAC3B,aAAa,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC;CAC7C;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,cAAc,GAAG,GAAG,CAAC,aAAa,CAAC,CAoDpF;AAED;;GAEG;AACH,qBAAa,mBAAmB;;IAS5B,YAAY,eAAe,EAAE,mBAAmB,EAI/C;IAED;;;OAGG;IACH,YAAY,CAAC,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,cAAc,GAAG,IAAI,CAgBhE;IAED;;OAEG;IACH,cAAc,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,CAOtC;IAED;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAS1B;CAoGJ"}
|
|
@@ -4,6 +4,8 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
import { Duration, Logger, Millis, Time } from "@matter/main";
|
|
7
|
+
import { PeerAddressMap } from "@matter/main/protocol";
|
|
8
|
+
import { formatNodeId } from "../util/formatNodeId.js";
|
|
7
9
|
const logger = Logger.get("CustomClusterPoller");
|
|
8
10
|
const VENDOR_ID_EVE = 4874;
|
|
9
11
|
const EVE_CLUSTER_ID = 319486977;
|
|
@@ -55,7 +57,7 @@ function checkPolledAttributes(attributes) {
|
|
|
55
57
|
return polledAttributes;
|
|
56
58
|
}
|
|
57
59
|
class CustomClusterPoller {
|
|
58
|
-
#polledAttributes =
|
|
60
|
+
#polledAttributes = new PeerAddressMap();
|
|
59
61
|
#pollerTimer;
|
|
60
62
|
#attributeReader;
|
|
61
63
|
#isPolling = false;
|
|
@@ -71,24 +73,24 @@ class CustomClusterPoller {
|
|
|
71
73
|
* Register a node for polling if it has custom attributes that need polling.
|
|
72
74
|
* Call this after a node is connected and its attributes are available.
|
|
73
75
|
*/
|
|
74
|
-
registerNode(
|
|
76
|
+
registerNode(peer, attributes) {
|
|
75
77
|
const attributesToPoll = checkPolledAttributes(attributes);
|
|
76
78
|
if (attributesToPoll.size === 0) {
|
|
77
|
-
this.unregisterNode(
|
|
79
|
+
this.unregisterNode(peer);
|
|
78
80
|
return;
|
|
79
81
|
}
|
|
80
|
-
this.#polledAttributes.set(
|
|
82
|
+
this.#polledAttributes.set(peer, attributesToPoll);
|
|
81
83
|
logger.info(
|
|
82
|
-
`Registered node ${
|
|
84
|
+
`Registered node ${formatNodeId(peer)} for custom attribute polling: ${Array.from(attributesToPoll).join(", ")}`
|
|
83
85
|
);
|
|
84
86
|
this.#schedulePoller();
|
|
85
87
|
}
|
|
86
88
|
/**
|
|
87
89
|
* Unregister a node from polling (e.g., when decommissioned or disconnected).
|
|
88
90
|
*/
|
|
89
|
-
unregisterNode(
|
|
90
|
-
if (this.#polledAttributes.delete(
|
|
91
|
-
logger.info(`Unregistered node ${
|
|
91
|
+
unregisterNode(peer) {
|
|
92
|
+
if (this.#polledAttributes.delete(peer)) {
|
|
93
|
+
logger.info(`Unregistered node ${formatNodeId(peer)} from custom attribute polling`);
|
|
92
94
|
}
|
|
93
95
|
if (this.#polledAttributes.size === 0) {
|
|
94
96
|
this.#pollerTimer.stop();
|
|
@@ -140,12 +142,12 @@ class CustomClusterPoller {
|
|
|
140
142
|
if (this.#closed) {
|
|
141
143
|
break;
|
|
142
144
|
}
|
|
143
|
-
const [
|
|
144
|
-
if (!this.#polledAttributes.has(
|
|
145
|
+
const [peer, attributePaths] = entries[i];
|
|
146
|
+
if (!this.#polledAttributes.has(peer)) {
|
|
145
147
|
continue;
|
|
146
148
|
}
|
|
147
149
|
polledNodes++;
|
|
148
|
-
await this.#pollNode(
|
|
150
|
+
await this.#pollNode(peer, attributePaths);
|
|
149
151
|
if (i < entries.length - 1) {
|
|
150
152
|
this.#currentDelayPromise = Time.sleep("sleep", Millis(2e3)).finally(() => {
|
|
151
153
|
this.#currentDelayPromise = void 0;
|
|
@@ -167,15 +169,15 @@ class CustomClusterPoller {
|
|
|
167
169
|
* Poll a single node for its custom attributes.
|
|
168
170
|
* The read will automatically trigger change events through the normal attribute flow.
|
|
169
171
|
*/
|
|
170
|
-
async #pollNode(
|
|
171
|
-
if (!this.#attributeReader.nodeConnected(
|
|
172
|
-
logger.debug(`Node ${
|
|
172
|
+
async #pollNode(peer, attributePaths) {
|
|
173
|
+
if (!this.#attributeReader.nodeConnected(peer)) {
|
|
174
|
+
logger.debug(`Node ${formatNodeId(peer)} not connected, skipping custom attribute polling`);
|
|
173
175
|
return;
|
|
174
176
|
}
|
|
175
177
|
const paths = Array.from(attributePaths);
|
|
176
|
-
logger.debug(`Polling ${paths.length} custom attributes for node ${
|
|
178
|
+
logger.debug(`Polling ${paths.length} custom attributes for node ${formatNodeId(peer)}`);
|
|
177
179
|
try {
|
|
178
|
-
const readPromise = this.#attributeReader.handleReadAttributes(
|
|
180
|
+
const readPromise = this.#attributeReader.handleReadAttributes(peer, paths, true);
|
|
179
181
|
this.#currentReadPromise = readPromise.then(
|
|
180
182
|
() => {
|
|
181
183
|
},
|
|
@@ -184,7 +186,7 @@ class CustomClusterPoller {
|
|
|
184
186
|
);
|
|
185
187
|
await readPromise;
|
|
186
188
|
} catch (error) {
|
|
187
|
-
logger.warn(`Failed to poll custom attributes for node ${
|
|
189
|
+
logger.warn(`Failed to poll custom attributes for node ${formatNodeId(peer)}: `, error);
|
|
188
190
|
} finally {
|
|
189
191
|
this.#currentReadPromise = void 0;
|
|
190
192
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/controller/CustomClusterPoller.ts"],
|
|
4
|
-
"mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAYA,SAA4B,UAAU,QAAQ,
|
|
4
|
+
"mappings": "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",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
|
@@ -4,13 +4,13 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
import { FabricIndex, NodeId } from "@matter/main";
|
|
7
|
+
import { PeerAddress } from "@matter/main/protocol";
|
|
7
8
|
/**
|
|
8
|
-
* Format a NodeId as a
|
|
9
|
+
* Format a NodeId or PeerAddress as a string for logging.
|
|
9
10
|
* Uses the Matter address format: @fabricIndexDecimal:nodeIdHex (e.g., "@1:a", "@10:1f").
|
|
10
11
|
*
|
|
11
|
-
* @param nodeId The node ID to format (rendered in hexadecimal)
|
|
12
|
-
* @param fabricIndex The fabric index (rendered in decimal). If omitted or unknown, "?" is used.
|
|
13
12
|
* @returns Formatted PeerAddress string like "@1:a", "@10:1f", or "@?:1f" when fabric index is unknown.
|
|
14
13
|
*/
|
|
14
|
+
export declare function formatNodeId(peer: PeerAddress): string;
|
|
15
15
|
export declare function formatNodeId(nodeId: NodeId, fabricIndex?: FabricIndex): string;
|
|
16
16
|
//# sourceMappingURL=formatNodeId.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"formatNodeId.d.ts","sourceRoot":"","sources":["../../../src/util/formatNodeId.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"formatNodeId.d.ts","sourceRoot":"","sources":["../../../src/util/formatNodeId.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEpD;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,CAAC;AACxD,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,WAAW,GAAG,MAAM,CAAC"}
|
|
@@ -3,8 +3,9 @@
|
|
|
3
3
|
* Copyright 2025-2026 Open Home Foundation
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
|
-
function formatNodeId(
|
|
7
|
-
const
|
|
6
|
+
function formatNodeId(arg, fabricIndex) {
|
|
7
|
+
const [nodeId, resolvedFabricIndex] = typeof arg === "object" ? [arg.nodeId, arg.fabricIndex] : [arg, fabricIndex];
|
|
8
|
+
const fabricIndexPart = resolvedFabricIndex === void 0 ? "?" : resolvedFabricIndex.toString(10);
|
|
8
9
|
return `@${fabricIndexPart}:${nodeId.toString(16)}`;
|
|
9
10
|
}
|
|
10
11
|
export {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/util/formatNodeId.ts"],
|
|
4
|
-
"mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;
|
|
4
|
+
"mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAiBO,SAAS,aAAa,KAA2B,aAAmC;AACvF,QAAM,CAAC,QAAQ,mBAAmB,IAAI,OAAO,QAAQ,WAAW,CAAC,IAAI,QAAQ,IAAI,WAAW,IAAI,CAAC,KAAK,WAAW;AACjH,QAAM,kBAAkB,wBAAwB,SAAY,MAAM,oBAAoB,SAAS,EAAE;AACjG,SAAO,IAAI,eAAe,IAAI,OAAO,SAAS,EAAE,CAAC;AACrD;",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@matter-server/ws-controller",
|
|
3
|
-
"version": "0.6.
|
|
3
|
+
"version": "0.6.3-alpha.0-20260429-7b8104b",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "matter.js based Matter controller library",
|
|
6
6
|
"bugs": {
|
|
@@ -34,12 +34,12 @@
|
|
|
34
34
|
"node": ">=20.19.0 <22.0.0 || >=22.13.0"
|
|
35
35
|
},
|
|
36
36
|
"optionalDependencies": {
|
|
37
|
-
"@matter/nodejs-ble": "0.17.0-alpha.0-
|
|
37
|
+
"@matter/nodejs-ble": "0.17.0-alpha.0-20260428-4d2f68517"
|
|
38
38
|
},
|
|
39
39
|
"dependencies": {
|
|
40
|
-
"@matter/main": "0.17.0-alpha.0-
|
|
41
|
-
"@matter-server/ws-client": "0.6.
|
|
42
|
-
"@project-chip/matter.js": "0.17.0-alpha.0-
|
|
40
|
+
"@matter/main": "0.17.0-alpha.0-20260428-4d2f68517",
|
|
41
|
+
"@matter-server/ws-client": "0.6.3-alpha.0-20260429-7b8104b",
|
|
42
|
+
"@project-chip/matter.js": "0.17.0-alpha.0-20260428-4d2f68517",
|
|
43
43
|
"ws": "^8.20.0"
|
|
44
44
|
},
|
|
45
45
|
"devDependencies": {
|
|
@@ -110,10 +110,7 @@ const RECONNECT_TIMEOUT = Minutes(3);
|
|
|
110
110
|
* BasicInformation (0x28) covers firmware version, product name, etc.
|
|
111
111
|
* BridgedDeviceBasicInformation (0x39) covers the same for bridged child nodes.
|
|
112
112
|
*/
|
|
113
|
-
const FULL_UPDATE_CLUSTER_IDS = new Set<ClusterId>([
|
|
114
|
-
BasicInformation.Cluster.id,
|
|
115
|
-
BridgedDeviceBasicInformation.Cluster.id,
|
|
116
|
-
]);
|
|
113
|
+
const FULL_UPDATE_CLUSTER_IDS = new Set<ClusterId>([BasicInformation.id, BridgedDeviceBasicInformation.id]);
|
|
117
114
|
|
|
118
115
|
/**
|
|
119
116
|
* Determine the Matter specification version from cached attributes.
|
|
@@ -151,8 +148,8 @@ export class ControllerCommandHandler {
|
|
|
151
148
|
#controller: CommissioningController;
|
|
152
149
|
#started = false;
|
|
153
150
|
#connected = false;
|
|
154
|
-
#bleEnabled
|
|
155
|
-
#otaEnabled
|
|
151
|
+
readonly #bleEnabled: boolean;
|
|
152
|
+
readonly #otaEnabled: boolean;
|
|
156
153
|
/** Node management and attribute cache */
|
|
157
154
|
#nodes = new Nodes();
|
|
158
155
|
/** Cache of available updates keyed by nodeId */
|
|
@@ -188,12 +185,27 @@ export class ControllerCommandHandler {
|
|
|
188
185
|
// Initialize custom cluster poller for Eve energy attributes etc.
|
|
189
186
|
// Reads automatically trigger change events through the normal attribute flow
|
|
190
187
|
this.#customClusterPoller = new CustomClusterPoller({
|
|
191
|
-
nodeConnected:
|
|
192
|
-
handleReadAttributes: (
|
|
193
|
-
this.handleReadAttributes(nodeId, paths, fabricFiltered),
|
|
188
|
+
nodeConnected: peer => !!(this.#nodes.has(peer.nodeId) && this.#nodes.get(peer.nodeId).isConnected),
|
|
189
|
+
handleReadAttributes: (peer, paths, fabricFiltered) =>
|
|
190
|
+
this.handleReadAttributes(peer.nodeId, paths, fabricFiltered),
|
|
194
191
|
});
|
|
195
192
|
}
|
|
196
193
|
|
|
194
|
+
/**
|
|
195
|
+
* Build the canonical PeerAddress for the given node on this controller's fabric.
|
|
196
|
+
*
|
|
197
|
+
* Throws if the controller's fabric is not yet resolved. Callers must run after
|
|
198
|
+
* controller start; a silent fallback would intern PeerAddressMap entries under the
|
|
199
|
+
* wrong fabric index and leak poller registrations.
|
|
200
|
+
*/
|
|
201
|
+
#peerOf(nodeId: NodeId): PeerAddress {
|
|
202
|
+
const fabric = this.#controller.fabric;
|
|
203
|
+
if (fabric === undefined) {
|
|
204
|
+
throw new Error(`Cannot resolve PeerAddress for node ${nodeId}: controller fabric is not initialized`);
|
|
205
|
+
}
|
|
206
|
+
return PeerAddress({ fabricIndex: fabric.fabricIndex, nodeId });
|
|
207
|
+
}
|
|
208
|
+
|
|
197
209
|
/**
|
|
198
210
|
* Format a NodeId as a PeerAddress string for logging.
|
|
199
211
|
* Uses the controller's fabric index when available, otherwise "?" is used.
|
|
@@ -254,14 +266,14 @@ export class ControllerCommandHandler {
|
|
|
254
266
|
// Handle updateAvailable events - cache the update info
|
|
255
267
|
softwareUpdateManagerEvents.updateAvailable.on(
|
|
256
268
|
(peerAddress: PeerAddress, updateDetails: SoftwareUpdateInfo) => {
|
|
257
|
-
logger.info(`Update available for node ${peerAddress.nodeId}:`, updateDetails);
|
|
269
|
+
logger.info(`Update available for node ${this.formatNode(peerAddress.nodeId)}:`, updateDetails);
|
|
258
270
|
this.#availableUpdates.set(peerAddress.nodeId, updateDetails);
|
|
259
271
|
},
|
|
260
272
|
);
|
|
261
273
|
|
|
262
274
|
// Handle updateDone events - clear the cached update info
|
|
263
275
|
softwareUpdateManagerEvents.updateDone.on((peerAddress: PeerAddress) => {
|
|
264
|
-
logger.info(`Update done for node ${peerAddress.nodeId}`);
|
|
276
|
+
logger.info(`Update done for node ${this.formatNode(peerAddress.nodeId)}`);
|
|
265
277
|
this.#availableUpdates.delete(peerAddress.nodeId);
|
|
266
278
|
});
|
|
267
279
|
|
|
@@ -315,7 +327,7 @@ export class ControllerCommandHandler {
|
|
|
315
327
|
attributeCache.update(node);
|
|
316
328
|
const attributes = attributeCache.get(nodeId);
|
|
317
329
|
if (attributes) {
|
|
318
|
-
this.#customClusterPoller.registerNode(nodeId, attributes);
|
|
330
|
+
this.#customClusterPoller.registerNode(this.#peerOf(nodeId), attributes);
|
|
319
331
|
}
|
|
320
332
|
}
|
|
321
333
|
|
|
@@ -381,7 +393,7 @@ export class ControllerCommandHandler {
|
|
|
381
393
|
// Register for custom cluster polling (e.g., Eve energy)
|
|
382
394
|
const attributes = attributeCache.get(nodeId);
|
|
383
395
|
if (attributes) {
|
|
384
|
-
this.#customClusterPoller.registerNode(nodeId, attributes);
|
|
396
|
+
this.#customClusterPoller.registerNode(this.#peerOf(nodeId), attributes);
|
|
385
397
|
}
|
|
386
398
|
}
|
|
387
399
|
|
|
@@ -615,10 +627,6 @@ export class ControllerCommandHandler {
|
|
|
615
627
|
await this.#controller.updateFabricLabel(label);
|
|
616
628
|
}
|
|
617
629
|
|
|
618
|
-
disconnectNode(nodeId: NodeId) {
|
|
619
|
-
return this.#controller.disconnectNode(nodeId, true);
|
|
620
|
-
}
|
|
621
|
-
|
|
622
630
|
async handleWriteAttribute(data: WriteAttributeRequest): Promise<AttributeResponseStatus> {
|
|
623
631
|
const { nodeId, endpointId, clusterId, attributeId } = data;
|
|
624
632
|
let { value } = data;
|
|
@@ -792,7 +800,7 @@ export class ControllerCommandHandler {
|
|
|
792
800
|
}
|
|
793
801
|
|
|
794
802
|
const { onNetworkOnly, wifiCredentials: wifiNetwork, threadCredentials: threadNetwork } = data;
|
|
795
|
-
|
|
803
|
+
return {
|
|
796
804
|
commissioning: {
|
|
797
805
|
nodeId: data.nodeId,
|
|
798
806
|
regulatoryLocation: GeneralCommissioning.RegulatoryLocationType.IndoorOutdoor,
|
|
@@ -817,7 +825,6 @@ export class ControllerCommandHandler {
|
|
|
817
825
|
},
|
|
818
826
|
passcode,
|
|
819
827
|
};
|
|
820
|
-
return options;
|
|
821
828
|
}
|
|
822
829
|
|
|
823
830
|
async commissionNode(data: CommissioningRequest): Promise<CommissioningResponse> {
|
|
@@ -1040,7 +1047,7 @@ export class ControllerCommandHandler {
|
|
|
1040
1047
|
this.#reconnectTimers.get(nodeId)?.stop();
|
|
1041
1048
|
this.#reconnectTimers.delete(nodeId);
|
|
1042
1049
|
this.#nodes.delete(nodeId);
|
|
1043
|
-
this.#customClusterPoller.unregisterNode(nodeId);
|
|
1050
|
+
this.#customClusterPoller.unregisterNode(this.#peerOf(nodeId));
|
|
1044
1051
|
this.#availableUpdates.delete(nodeId);
|
|
1045
1052
|
}
|
|
1046
1053
|
|
|
@@ -1061,7 +1068,7 @@ export class ControllerCommandHandler {
|
|
|
1061
1068
|
},
|
|
1062
1069
|
Read.Attribute({
|
|
1063
1070
|
endpoint: EndpointNumber(0),
|
|
1064
|
-
cluster: OperationalCredentials
|
|
1071
|
+
cluster: OperationalCredentials,
|
|
1065
1072
|
attributes: "fabrics",
|
|
1066
1073
|
}),
|
|
1067
1074
|
),
|
|
@@ -1110,16 +1117,10 @@ export class ControllerCommandHandler {
|
|
|
1110
1117
|
|
|
1111
1118
|
logger.info("Setting ACL entries", aclEntries);
|
|
1112
1119
|
|
|
1113
|
-
const { status } = await this.#writeAttribute(
|
|
1114
|
-
nodeId,
|
|
1115
|
-
EndpointNumber(0),
|
|
1116
|
-
AccessControl.Cluster.id,
|
|
1117
|
-
"acl",
|
|
1118
|
-
aclEntries,
|
|
1119
|
-
);
|
|
1120
|
+
const { status } = await this.#writeAttribute(nodeId, EndpointNumber(0), AccessControl.id, "acl", aclEntries);
|
|
1120
1121
|
return [
|
|
1121
1122
|
{
|
|
1122
|
-
path: { endpoint_id: 0, cluster_id: AccessControl.
|
|
1123
|
+
path: { endpoint_id: 0, cluster_id: AccessControl.id, attribute_id: 0 },
|
|
1123
1124
|
status,
|
|
1124
1125
|
},
|
|
1125
1126
|
];
|
|
@@ -1144,16 +1145,10 @@ export class ControllerCommandHandler {
|
|
|
1144
1145
|
|
|
1145
1146
|
logger.info("Setting bindings on endpoint", endpointId, bindingEntries);
|
|
1146
1147
|
|
|
1147
|
-
const { status } = await this.#writeAttribute(
|
|
1148
|
-
nodeId,
|
|
1149
|
-
endpointId,
|
|
1150
|
-
Binding.Cluster.id,
|
|
1151
|
-
"binding",
|
|
1152
|
-
bindingEntries,
|
|
1153
|
-
);
|
|
1148
|
+
const { status } = await this.#writeAttribute(nodeId, endpointId, Binding.id, "binding", bindingEntries);
|
|
1154
1149
|
return [
|
|
1155
1150
|
{
|
|
1156
|
-
path: { endpoint_id: endpointId, cluster_id: Binding.
|
|
1151
|
+
path: { endpoint_id: endpointId, cluster_id: Binding.id, attribute_id: 0 },
|
|
1157
1152
|
status,
|
|
1158
1153
|
},
|
|
1159
1154
|
];
|
|
@@ -10,8 +10,10 @@
|
|
|
10
10
|
* a custom cluster without standard Matter subscription support.
|
|
11
11
|
*/
|
|
12
12
|
|
|
13
|
-
import { CancelablePromise, Duration, Logger, Millis,
|
|
13
|
+
import { CancelablePromise, Duration, Logger, Millis, Time, Timer } from "@matter/main";
|
|
14
|
+
import { PeerAddress, PeerAddressMap } from "@matter/main/protocol";
|
|
14
15
|
import { AttributesData } from "../types/CommandHandler.js";
|
|
16
|
+
import { formatNodeId } from "../util/formatNodeId.js";
|
|
15
17
|
|
|
16
18
|
const logger = Logger.get("CustomClusterPoller");
|
|
17
19
|
|
|
@@ -42,8 +44,12 @@ const MAX_INITIAL_DELAY_MS = 30_000;
|
|
|
42
44
|
type AttributePath = string;
|
|
43
45
|
|
|
44
46
|
export interface NodeAttributeReader {
|
|
45
|
-
handleReadAttributes(
|
|
46
|
-
|
|
47
|
+
handleReadAttributes(
|
|
48
|
+
peer: PeerAddress,
|
|
49
|
+
attributePaths: string[],
|
|
50
|
+
fabricFiltered?: boolean,
|
|
51
|
+
): Promise<AttributesData>;
|
|
52
|
+
nodeConnected(peer: PeerAddress): boolean;
|
|
47
53
|
}
|
|
48
54
|
|
|
49
55
|
/**
|
|
@@ -112,7 +118,7 @@ export function checkPolledAttributes(attributes: AttributesData): Set<Attribute
|
|
|
112
118
|
* Manages polling of custom cluster attributes for multiple nodes.
|
|
113
119
|
*/
|
|
114
120
|
export class CustomClusterPoller {
|
|
115
|
-
#polledAttributes = new
|
|
121
|
+
#polledAttributes = new PeerAddressMap<Set<AttributePath>>();
|
|
116
122
|
#pollerTimer: Timer;
|
|
117
123
|
#attributeReader: NodeAttributeReader;
|
|
118
124
|
#isPolling = false;
|
|
@@ -130,18 +136,18 @@ export class CustomClusterPoller {
|
|
|
130
136
|
* Register a node for polling if it has custom attributes that need polling.
|
|
131
137
|
* Call this after a node is connected and its attributes are available.
|
|
132
138
|
*/
|
|
133
|
-
registerNode(
|
|
139
|
+
registerNode(peer: PeerAddress, attributes: AttributesData): void {
|
|
134
140
|
const attributesToPoll = checkPolledAttributes(attributes);
|
|
135
141
|
|
|
136
142
|
if (attributesToPoll.size === 0) {
|
|
137
143
|
// Remove from polling if it was previously registered
|
|
138
|
-
this.unregisterNode(
|
|
144
|
+
this.unregisterNode(peer);
|
|
139
145
|
return;
|
|
140
146
|
}
|
|
141
147
|
|
|
142
|
-
this.#polledAttributes.set(
|
|
148
|
+
this.#polledAttributes.set(peer, attributesToPoll);
|
|
143
149
|
logger.info(
|
|
144
|
-
`Registered node ${
|
|
150
|
+
`Registered node ${formatNodeId(peer)} for custom attribute polling: ${Array.from(attributesToPoll).join(", ")}`,
|
|
145
151
|
);
|
|
146
152
|
|
|
147
153
|
// Start the poller if not already running
|
|
@@ -151,9 +157,9 @@ export class CustomClusterPoller {
|
|
|
151
157
|
/**
|
|
152
158
|
* Unregister a node from polling (e.g., when decommissioned or disconnected).
|
|
153
159
|
*/
|
|
154
|
-
unregisterNode(
|
|
155
|
-
if (this.#polledAttributes.delete(
|
|
156
|
-
logger.info(`Unregistered node ${
|
|
160
|
+
unregisterNode(peer: PeerAddress): void {
|
|
161
|
+
if (this.#polledAttributes.delete(peer)) {
|
|
162
|
+
logger.info(`Unregistered node ${formatNodeId(peer)} from custom attribute polling`);
|
|
157
163
|
}
|
|
158
164
|
if (this.#polledAttributes.size === 0) {
|
|
159
165
|
this.#pollerTimer.stop();
|
|
@@ -217,13 +223,13 @@ export class CustomClusterPoller {
|
|
|
217
223
|
if (this.#closed) {
|
|
218
224
|
break;
|
|
219
225
|
}
|
|
220
|
-
const [
|
|
221
|
-
if (!this.#polledAttributes.has(
|
|
226
|
+
const [peer, attributePaths] = entries[i];
|
|
227
|
+
if (!this.#polledAttributes.has(peer)) {
|
|
222
228
|
// Node was removed, so skip it
|
|
223
229
|
continue;
|
|
224
230
|
}
|
|
225
231
|
polledNodes++;
|
|
226
|
-
await this.#pollNode(
|
|
232
|
+
await this.#pollNode(peer, attributePaths);
|
|
227
233
|
// Small delay between nodes to avoid overwhelming the network
|
|
228
234
|
// Only add this delay if there are more nodes remaining to be polled
|
|
229
235
|
if (i < entries.length - 1) {
|
|
@@ -249,25 +255,25 @@ export class CustomClusterPoller {
|
|
|
249
255
|
* Poll a single node for its custom attributes.
|
|
250
256
|
* The read will automatically trigger change events through the normal attribute flow.
|
|
251
257
|
*/
|
|
252
|
-
async #pollNode(
|
|
253
|
-
if (!this.#attributeReader.nodeConnected(
|
|
254
|
-
logger.debug(`Node ${
|
|
258
|
+
async #pollNode(peer: PeerAddress, attributePaths: Set<AttributePath>): Promise<void> {
|
|
259
|
+
if (!this.#attributeReader.nodeConnected(peer)) {
|
|
260
|
+
logger.debug(`Node ${formatNodeId(peer)} not connected, skipping custom attribute polling`);
|
|
255
261
|
return;
|
|
256
262
|
}
|
|
257
263
|
const paths = Array.from(attributePaths);
|
|
258
|
-
logger.debug(`Polling ${paths.length} custom attributes for node ${
|
|
264
|
+
logger.debug(`Polling ${paths.length} custom attributes for node ${formatNodeId(peer)}`);
|
|
259
265
|
|
|
260
266
|
try {
|
|
261
267
|
// Read with fabricFiltered=true as per Eve's requirements
|
|
262
268
|
// This automatically updates the attribute cache and triggers change events
|
|
263
|
-
const readPromise = this.#attributeReader.handleReadAttributes(
|
|
269
|
+
const readPromise = this.#attributeReader.handleReadAttributes(peer, paths, true);
|
|
264
270
|
this.#currentReadPromise = readPromise.then(
|
|
265
271
|
() => {},
|
|
266
272
|
() => {},
|
|
267
273
|
);
|
|
268
274
|
await readPromise;
|
|
269
275
|
} catch (error) {
|
|
270
|
-
logger.warn(`Failed to poll custom attributes for node ${
|
|
276
|
+
logger.warn(`Failed to poll custom attributes for node ${formatNodeId(peer)}: `, error);
|
|
271
277
|
} finally {
|
|
272
278
|
this.#currentReadPromise = undefined;
|
|
273
279
|
}
|
package/src/util/formatNodeId.ts
CHANGED
|
@@ -5,16 +5,18 @@
|
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
7
|
import { FabricIndex, NodeId } from "@matter/main";
|
|
8
|
+
import { PeerAddress } from "@matter/main/protocol";
|
|
8
9
|
|
|
9
10
|
/**
|
|
10
|
-
* Format a NodeId as a
|
|
11
|
+
* Format a NodeId or PeerAddress as a string for logging.
|
|
11
12
|
* Uses the Matter address format: @fabricIndexDecimal:nodeIdHex (e.g., "@1:a", "@10:1f").
|
|
12
13
|
*
|
|
13
|
-
* @param nodeId The node ID to format (rendered in hexadecimal)
|
|
14
|
-
* @param fabricIndex The fabric index (rendered in decimal). If omitted or unknown, "?" is used.
|
|
15
14
|
* @returns Formatted PeerAddress string like "@1:a", "@10:1f", or "@?:1f" when fabric index is unknown.
|
|
16
15
|
*/
|
|
17
|
-
export function formatNodeId(
|
|
18
|
-
|
|
16
|
+
export function formatNodeId(peer: PeerAddress): string;
|
|
17
|
+
export function formatNodeId(nodeId: NodeId, fabricIndex?: FabricIndex): string;
|
|
18
|
+
export function formatNodeId(arg: NodeId | PeerAddress, fabricIndex?: FabricIndex): string {
|
|
19
|
+
const [nodeId, resolvedFabricIndex] = typeof arg === "object" ? [arg.nodeId, arg.fabricIndex] : [arg, fabricIndex];
|
|
20
|
+
const fabricIndexPart = resolvedFabricIndex === undefined ? "?" : resolvedFabricIndex.toString(10);
|
|
19
21
|
return `@${fabricIndexPart}:${nodeId.toString(16)}`;
|
|
20
22
|
}
|