@matter-server/ws-client 1.1.8-alpha.0-20260707-c552b9d → 1.2.1
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/client.d.ts +47 -6
- package/dist/esm/client.d.ts.map +1 -1
- package/dist/esm/client.js +88 -14
- package/dist/esm/client.js.map +1 -1
- package/dist/esm/exceptions.d.ts +5 -0
- package/dist/esm/exceptions.d.ts.map +1 -1
- package/dist/esm/exceptions.js +10 -1
- package/dist/esm/exceptions.js.map +1 -1
- package/dist/esm/index.d.ts +2 -0
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +2 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/models/model.d.ts +266 -51
- package/dist/esm/models/model.d.ts.map +1 -1
- package/dist/esm/models/model.js +2 -0
- package/dist/esm/models/model.js.map +1 -1
- package/dist/esm/topology/topology-types.d.ts +235 -0
- package/dist/esm/topology/topology-types.d.ts.map +1 -0
- package/dist/esm/topology/topology-types.js +19 -0
- package/dist/esm/topology/topology-types.js.map +6 -0
- package/dist/esm/topology/topology-utils.d.ts +185 -0
- package/dist/esm/topology/topology-utils.d.ts.map +1 -0
- package/dist/esm/topology/topology-utils.js +599 -0
- package/dist/esm/topology/topology-utils.js.map +6 -0
- package/package.json +6 -4
- package/src/client.ts +149 -21
- package/src/exceptions.ts +11 -0
- package/src/index.ts +4 -0
- package/src/models/model.ts +266 -53
- package/src/topology/topology-types.ts +249 -0
- package/src/topology/topology-utils.ts +932 -0
|
@@ -0,0 +1,599 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025-2026 Open Home Foundation
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
const WIFI_FEATURE = 1 << 0;
|
|
7
|
+
const THREAD_FEATURE = 1 << 1;
|
|
8
|
+
const ETHERNET_FEATURE = 1 << 2;
|
|
9
|
+
const LQI_STRONG_THRESHOLD = 2;
|
|
10
|
+
const LQI_MEDIUM_THRESHOLD = 1;
|
|
11
|
+
function base64ToBigInt(base64) {
|
|
12
|
+
try {
|
|
13
|
+
const binary = atob(base64);
|
|
14
|
+
let result = 0n;
|
|
15
|
+
const start = binary.length > 8 ? binary.length - 8 : 0;
|
|
16
|
+
for (let i = start; i < binary.length; i++) {
|
|
17
|
+
result = result << 8n | BigInt(binary.charCodeAt(i));
|
|
18
|
+
}
|
|
19
|
+
return result;
|
|
20
|
+
} catch {
|
|
21
|
+
return 0n;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
function normalizeExtAddress(value) {
|
|
25
|
+
if (typeof value === "bigint") {
|
|
26
|
+
return value;
|
|
27
|
+
}
|
|
28
|
+
if (typeof value === "string") {
|
|
29
|
+
return base64ToBigInt(value);
|
|
30
|
+
}
|
|
31
|
+
if (typeof value === "number") {
|
|
32
|
+
return BigInt(value);
|
|
33
|
+
}
|
|
34
|
+
return 0n;
|
|
35
|
+
}
|
|
36
|
+
function getNetworkType(node) {
|
|
37
|
+
const featureMap = node.attributes["0/49/65532"];
|
|
38
|
+
if (featureMap === void 0) {
|
|
39
|
+
return "unknown";
|
|
40
|
+
}
|
|
41
|
+
if (featureMap & THREAD_FEATURE) {
|
|
42
|
+
return "thread";
|
|
43
|
+
}
|
|
44
|
+
if (featureMap & WIFI_FEATURE) {
|
|
45
|
+
return "wifi";
|
|
46
|
+
}
|
|
47
|
+
if (featureMap & ETHERNET_FEATURE) {
|
|
48
|
+
return "ethernet";
|
|
49
|
+
}
|
|
50
|
+
return "unknown";
|
|
51
|
+
}
|
|
52
|
+
function getThreadVersion(node) {
|
|
53
|
+
const v = node.attributes["0/49/10"];
|
|
54
|
+
return typeof v === "number" ? v : void 0;
|
|
55
|
+
}
|
|
56
|
+
function categorizeDevices(nodes) {
|
|
57
|
+
const result = {
|
|
58
|
+
thread: [],
|
|
59
|
+
wifi: [],
|
|
60
|
+
ethernet: [],
|
|
61
|
+
unknown: []
|
|
62
|
+
};
|
|
63
|
+
for (const node of Object.values(nodes)) {
|
|
64
|
+
const nodeId = String(node.node_id);
|
|
65
|
+
const networkType = getNetworkType(node);
|
|
66
|
+
result[networkType].push(nodeId);
|
|
67
|
+
}
|
|
68
|
+
return result;
|
|
69
|
+
}
|
|
70
|
+
function getThreadRole(node) {
|
|
71
|
+
const v = node.attributes["0/53/1"];
|
|
72
|
+
return typeof v === "number" ? v : void 0;
|
|
73
|
+
}
|
|
74
|
+
function getThreadChannel(node) {
|
|
75
|
+
const v = node.attributes["0/53/0"];
|
|
76
|
+
return typeof v === "number" ? v : void 0;
|
|
77
|
+
}
|
|
78
|
+
function getThreadExtendedPanId(node) {
|
|
79
|
+
const v = node.attributes["0/53/4"];
|
|
80
|
+
if (typeof v === "bigint") return v;
|
|
81
|
+
if (typeof v === "number" && Number.isInteger(v)) return BigInt(v);
|
|
82
|
+
return void 0;
|
|
83
|
+
}
|
|
84
|
+
function getThreadExtendedAddress(node) {
|
|
85
|
+
const networkInterfaces = node.attributes["0/51/0"];
|
|
86
|
+
if (!Array.isArray(networkInterfaces) || networkInterfaces.length === 0) {
|
|
87
|
+
return void 0;
|
|
88
|
+
}
|
|
89
|
+
const threadIface = networkInterfaces.find((i) => i["7"] === 4) || networkInterfaces[0];
|
|
90
|
+
if (!threadIface) {
|
|
91
|
+
return void 0;
|
|
92
|
+
}
|
|
93
|
+
const hwAddrB64 = threadIface["4"];
|
|
94
|
+
if (typeof hwAddrB64 !== "string" || !hwAddrB64) {
|
|
95
|
+
return void 0;
|
|
96
|
+
}
|
|
97
|
+
const extAddr = base64ToBigInt(hwAddrB64);
|
|
98
|
+
return extAddr !== 0n ? extAddr : void 0;
|
|
99
|
+
}
|
|
100
|
+
function getThreadExtendedAddressHex(node) {
|
|
101
|
+
const extAddr = getThreadExtendedAddress(node);
|
|
102
|
+
if (extAddr !== void 0) {
|
|
103
|
+
return extAddr.toString(16).padStart(16, "0").toUpperCase();
|
|
104
|
+
}
|
|
105
|
+
return void 0;
|
|
106
|
+
}
|
|
107
|
+
function getNeighborTableLength(node) {
|
|
108
|
+
const neighborTable = node.attributes["0/53/7"];
|
|
109
|
+
return Array.isArray(neighborTable) ? neighborTable.length : 0;
|
|
110
|
+
}
|
|
111
|
+
function parseNeighborTable(node) {
|
|
112
|
+
const neighborTable = node.attributes["0/53/7"];
|
|
113
|
+
if (!Array.isArray(neighborTable)) {
|
|
114
|
+
return [];
|
|
115
|
+
}
|
|
116
|
+
return neighborTable.map((entry) => {
|
|
117
|
+
const rawExtAddr = entry["0"] ?? entry.extAddress;
|
|
118
|
+
const extAddress = normalizeExtAddress(rawExtAddr);
|
|
119
|
+
return {
|
|
120
|
+
extAddress,
|
|
121
|
+
// Field 1: age
|
|
122
|
+
age: entry["1"] ?? entry.age ?? 0,
|
|
123
|
+
// Field 2: rloc16
|
|
124
|
+
rloc16: entry["2"] ?? entry.rloc16 ?? 0,
|
|
125
|
+
// Field 3: linkFrameCounter
|
|
126
|
+
linkFrameCounter: entry["3"] ?? entry.linkFrameCounter ?? 0,
|
|
127
|
+
// Field 4: mleFrameCounter
|
|
128
|
+
mleFrameCounter: entry["4"] ?? entry.mleFrameCounter ?? 0,
|
|
129
|
+
// Field 5: lqi
|
|
130
|
+
lqi: entry["5"] ?? entry.lqi ?? 0,
|
|
131
|
+
// Field 6: averageRssi (nullable)
|
|
132
|
+
avgRssi: entry["6"] ?? entry.averageRssi ?? null,
|
|
133
|
+
// Field 7: lastRssi (nullable)
|
|
134
|
+
lastRssi: entry["7"] ?? entry.lastRssi ?? null,
|
|
135
|
+
// Field 8: frameErrorRate
|
|
136
|
+
frameErrorRate: entry["8"] ?? entry.frameErrorRate ?? 0,
|
|
137
|
+
// Field 9: messageErrorRate
|
|
138
|
+
messageErrorRate: entry["9"] ?? entry.messageErrorRate ?? 0,
|
|
139
|
+
// Field 10: rxOnWhenIdle
|
|
140
|
+
rxOnWhenIdle: entry["10"] ?? entry.rxOnWhenIdle ?? false,
|
|
141
|
+
// Field 11: fullThreadDevice
|
|
142
|
+
fullThreadDevice: entry["11"] ?? entry.fullThreadDevice ?? false,
|
|
143
|
+
// Field 12: fullNetworkData
|
|
144
|
+
fullNetworkData: entry["12"] ?? entry.fullNetworkData ?? false,
|
|
145
|
+
// Field 13: isChild
|
|
146
|
+
isChild: entry["13"] ?? entry.isChild ?? false
|
|
147
|
+
};
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
function parseRouteTable(node) {
|
|
151
|
+
const routeTable = node.attributes["0/53/8"];
|
|
152
|
+
if (!Array.isArray(routeTable)) {
|
|
153
|
+
return [];
|
|
154
|
+
}
|
|
155
|
+
return routeTable.map((entry) => {
|
|
156
|
+
const rawExtAddr = entry["0"] ?? entry.extAddress;
|
|
157
|
+
const extAddress = normalizeExtAddress(rawExtAddr);
|
|
158
|
+
return {
|
|
159
|
+
extAddress,
|
|
160
|
+
// Field 1: rloc16
|
|
161
|
+
rloc16: entry["1"] ?? entry.rloc16 ?? 0,
|
|
162
|
+
// Field 2: routerId
|
|
163
|
+
routerId: entry["2"] ?? entry.routerId ?? 0,
|
|
164
|
+
// Field 3: nextHop
|
|
165
|
+
nextHop: entry["3"] ?? entry.nextHop ?? 0,
|
|
166
|
+
// Field 4: pathCost
|
|
167
|
+
pathCost: entry["4"] ?? entry.pathCost ?? 0,
|
|
168
|
+
// Field 5: lqiIn
|
|
169
|
+
lqiIn: entry["5"] ?? entry.lqiIn ?? 0,
|
|
170
|
+
// Field 6: lqiOut
|
|
171
|
+
lqiOut: entry["6"] ?? entry.lqiOut ?? 0,
|
|
172
|
+
// Field 7: age
|
|
173
|
+
age: entry["7"] ?? entry.age ?? 0,
|
|
174
|
+
// Field 8: allocated
|
|
175
|
+
allocated: entry["8"] ?? entry.allocated ?? false,
|
|
176
|
+
// Field 9: linkEstablished
|
|
177
|
+
linkEstablished: entry["9"] ?? entry.linkEstablished ?? false
|
|
178
|
+
};
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
function findRouteByExtAddress(node, targetExtAddr) {
|
|
182
|
+
const routes = parseRouteTable(node);
|
|
183
|
+
return routes.find((route) => route.extAddress === targetExtAddr && route.linkEstablished);
|
|
184
|
+
}
|
|
185
|
+
function getRoutableDestinationsCount(node) {
|
|
186
|
+
const routes = parseRouteTable(node);
|
|
187
|
+
return routes.filter((route) => route.allocated && route.linkEstablished).length;
|
|
188
|
+
}
|
|
189
|
+
function getRouteBidirectionalLqi(route) {
|
|
190
|
+
if (route.lqiIn > 0 && route.lqiOut > 0) {
|
|
191
|
+
return Math.round((route.lqiIn + route.lqiOut) / 2);
|
|
192
|
+
}
|
|
193
|
+
if (route.lqiIn > 0) return route.lqiIn;
|
|
194
|
+
if (route.lqiOut > 0) return route.lqiOut;
|
|
195
|
+
return void 0;
|
|
196
|
+
}
|
|
197
|
+
function getThreadRloc16(node) {
|
|
198
|
+
const value = node.attributes["0/53/64"];
|
|
199
|
+
if (typeof value === "number") {
|
|
200
|
+
return value;
|
|
201
|
+
}
|
|
202
|
+
return void 0;
|
|
203
|
+
}
|
|
204
|
+
function buildExtAddrMap(nodes) {
|
|
205
|
+
const extAddrMap = /* @__PURE__ */ new Map();
|
|
206
|
+
for (const node of Object.values(nodes)) {
|
|
207
|
+
const nodeId = String(node.node_id);
|
|
208
|
+
const extAddr = getThreadExtendedAddress(node);
|
|
209
|
+
if (extAddr !== void 0) {
|
|
210
|
+
extAddrMap.set(extAddr, nodeId);
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
return extAddrMap;
|
|
214
|
+
}
|
|
215
|
+
function buildRloc16Map(nodes) {
|
|
216
|
+
const rloc16Map = /* @__PURE__ */ new Map();
|
|
217
|
+
for (const node of Object.values(nodes)) {
|
|
218
|
+
const nodeId = String(node.node_id);
|
|
219
|
+
const rloc16 = getThreadRloc16(node);
|
|
220
|
+
if (rloc16 !== void 0) {
|
|
221
|
+
rloc16Map.set(rloc16, nodeId);
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
return rloc16Map;
|
|
225
|
+
}
|
|
226
|
+
function diagnosticNodeId(node, extPanIdHex) {
|
|
227
|
+
if (node.extMacAddress !== void 0) return `thread_${node.extMacAddress.toUpperCase()}`;
|
|
228
|
+
return `meshrloc_${extPanIdHex.toUpperCase()}_${node.rloc16 ?? "x"}`;
|
|
229
|
+
}
|
|
230
|
+
function diagRlocKey(extPanIdHex, rloc16) {
|
|
231
|
+
return `${extPanIdHex.toUpperCase()}:${rloc16}`;
|
|
232
|
+
}
|
|
233
|
+
function buildMatterRloc16ByXp(nodes) {
|
|
234
|
+
const map = /* @__PURE__ */ new Map();
|
|
235
|
+
for (const node of Object.values(nodes)) {
|
|
236
|
+
const rloc16 = getThreadRloc16(node);
|
|
237
|
+
const xp = getThreadExtendedPanId(node);
|
|
238
|
+
if (rloc16 === void 0 || xp === void 0) continue;
|
|
239
|
+
map.set(diagRlocKey(xp.toString(16).padStart(16, "0"), rloc16), String(node.node_id));
|
|
240
|
+
}
|
|
241
|
+
return map;
|
|
242
|
+
}
|
|
243
|
+
function diagnosticGraphNodeId(node, extPanIdHex, matterExtAddrMap, borderRouters, unknownIdByExt) {
|
|
244
|
+
const up = node.extMacAddress?.toUpperCase();
|
|
245
|
+
if (up !== void 0) {
|
|
246
|
+
const matterId = matterExtAddrMap.get(BigInt(`0x${up}`));
|
|
247
|
+
if (matterId !== void 0) return matterId;
|
|
248
|
+
if (borderRouters.has(up)) return `br_${up}`;
|
|
249
|
+
const unknownId = unknownIdByExt.get(up);
|
|
250
|
+
if (unknownId !== void 0) return unknownId;
|
|
251
|
+
}
|
|
252
|
+
return diagnosticNodeId(node, extPanIdHex);
|
|
253
|
+
}
|
|
254
|
+
function buildDiagnosticRloc16Map(batches, matterRloc16ByXp, matterExtAddrMap, borderRouters, unknownDevices) {
|
|
255
|
+
const unknownIdByExt = /* @__PURE__ */ new Map();
|
|
256
|
+
for (const d of unknownDevices) unknownIdByExt.set(d.extAddressHex.toUpperCase(), d.id);
|
|
257
|
+
const map = /* @__PURE__ */ new Map();
|
|
258
|
+
for (const batch of batches.values()) {
|
|
259
|
+
for (const node of batch.nodes) {
|
|
260
|
+
if (node.rloc16 === void 0) continue;
|
|
261
|
+
if (matterRloc16ByXp.has(diagRlocKey(batch.extPanIdHex, node.rloc16))) continue;
|
|
262
|
+
map.set(
|
|
263
|
+
diagRlocKey(batch.extPanIdHex, node.rloc16),
|
|
264
|
+
diagnosticGraphNodeId(node, batch.extPanIdHex, matterExtAddrMap, borderRouters, unknownIdByExt)
|
|
265
|
+
);
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
return map;
|
|
269
|
+
}
|
|
270
|
+
function makeDiagnosticRloc16Resolver(matterRloc16ByXp, diagRloc16Map) {
|
|
271
|
+
return (rloc16, extPanIdHex) => matterRloc16ByXp.get(diagRlocKey(extPanIdHex, rloc16)) ?? diagRloc16Map.get(diagRlocKey(extPanIdHex, rloc16));
|
|
272
|
+
}
|
|
273
|
+
function findUnknownDevices(nodes, extAddrMap, rloc16Map, borderRouters) {
|
|
274
|
+
const aggregates = /* @__PURE__ */ new Map();
|
|
275
|
+
for (const node of Object.values(nodes)) {
|
|
276
|
+
const nodeId = String(node.node_id);
|
|
277
|
+
const neighbors = parseNeighborTable(node);
|
|
278
|
+
const observerXp = getThreadExtendedPanId(node);
|
|
279
|
+
const observerXpHex = observerXp !== void 0 ? observerXp.toString(16).padStart(16, "0").toUpperCase() : void 0;
|
|
280
|
+
for (const neighbor of neighbors) {
|
|
281
|
+
if (extAddrMap.has(neighbor.extAddress)) {
|
|
282
|
+
continue;
|
|
283
|
+
}
|
|
284
|
+
if (neighbor.rloc16 !== 0 && rloc16Map.has(neighbor.rloc16)) {
|
|
285
|
+
continue;
|
|
286
|
+
}
|
|
287
|
+
const extAddressHex = neighbor.extAddress.toString(16).padStart(16, "0").toUpperCase();
|
|
288
|
+
let agg = aggregates.get(extAddressHex);
|
|
289
|
+
if (agg === void 0) {
|
|
290
|
+
agg = {
|
|
291
|
+
extAddressHex,
|
|
292
|
+
extAddress: neighbor.extAddress,
|
|
293
|
+
seenBy: [],
|
|
294
|
+
isRouter: false,
|
|
295
|
+
bestRssi: null,
|
|
296
|
+
extendedPanIdHex: observerXpHex
|
|
297
|
+
};
|
|
298
|
+
aggregates.set(extAddressHex, agg);
|
|
299
|
+
} else if (agg.extendedPanIdHex === void 0 && observerXpHex !== void 0) {
|
|
300
|
+
agg.extendedPanIdHex = observerXpHex;
|
|
301
|
+
}
|
|
302
|
+
if (!agg.seenBy.includes(nodeId)) {
|
|
303
|
+
agg.seenBy.push(nodeId);
|
|
304
|
+
}
|
|
305
|
+
if (neighbor.rxOnWhenIdle) {
|
|
306
|
+
agg.isRouter = true;
|
|
307
|
+
}
|
|
308
|
+
const rssi = neighbor.avgRssi ?? neighbor.lastRssi;
|
|
309
|
+
if (rssi !== null && (agg.bestRssi === null || rssi > agg.bestRssi)) {
|
|
310
|
+
agg.bestRssi = rssi;
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
const networkNameByXp = /* @__PURE__ */ new Map();
|
|
315
|
+
if (borderRouters !== void 0) {
|
|
316
|
+
for (const br of borderRouters.values()) {
|
|
317
|
+
if (br.extendedPanIdHex !== void 0 && br.networkName !== void 0) {
|
|
318
|
+
networkNameByXp.set(br.extendedPanIdHex, br.networkName);
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
const out = new Array();
|
|
323
|
+
for (const agg of aggregates.values()) {
|
|
324
|
+
const br = borderRouters?.get(agg.extAddressHex);
|
|
325
|
+
if (br !== void 0) {
|
|
326
|
+
out.push({
|
|
327
|
+
kind: "br",
|
|
328
|
+
...br,
|
|
329
|
+
id: `br_${agg.extAddressHex}`,
|
|
330
|
+
extAddressHex: agg.extAddressHex,
|
|
331
|
+
extAddress: agg.extAddress,
|
|
332
|
+
seenBy: agg.seenBy,
|
|
333
|
+
isRouter: agg.isRouter,
|
|
334
|
+
bestRssi: agg.bestRssi
|
|
335
|
+
});
|
|
336
|
+
} else {
|
|
337
|
+
const networkName = agg.extendedPanIdHex !== void 0 ? networkNameByXp.get(agg.extendedPanIdHex) : void 0;
|
|
338
|
+
out.push({
|
|
339
|
+
kind: "unknown",
|
|
340
|
+
id: `unknown_${agg.extAddressHex}`,
|
|
341
|
+
extAddressHex: agg.extAddressHex,
|
|
342
|
+
extAddress: agg.extAddress,
|
|
343
|
+
seenBy: agg.seenBy,
|
|
344
|
+
isRouter: agg.isRouter,
|
|
345
|
+
bestRssi: agg.bestRssi,
|
|
346
|
+
extendedPanIdHex: agg.extendedPanIdHex,
|
|
347
|
+
networkName
|
|
348
|
+
});
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
return out;
|
|
352
|
+
}
|
|
353
|
+
function getSignalLevel(neighbor) {
|
|
354
|
+
return getSignalLevelFromLqi(neighbor.lqi);
|
|
355
|
+
}
|
|
356
|
+
function getSignalLevelFromLqi(lqi) {
|
|
357
|
+
if (lqi <= 0) return "none";
|
|
358
|
+
if (lqi > LQI_STRONG_THRESHOLD) return "strong";
|
|
359
|
+
if (lqi > LQI_MEDIUM_THRESHOLD) return "medium";
|
|
360
|
+
return "weak";
|
|
361
|
+
}
|
|
362
|
+
function findDiagnosticMeshNodes(batches, matterRloc16ByXp, matterExtAddrMap, borderRouters, unknownDevices) {
|
|
363
|
+
const unknownExt = new Set(unknownDevices.map((d) => d.extAddressHex.toUpperCase()));
|
|
364
|
+
const out = /* @__PURE__ */ new Map();
|
|
365
|
+
const matchesExisting = (extPanIdHex, rloc16, extHex) => {
|
|
366
|
+
if (rloc16 !== void 0 && matterRloc16ByXp.has(diagRlocKey(extPanIdHex, rloc16))) return true;
|
|
367
|
+
if (extHex !== void 0) {
|
|
368
|
+
const up = extHex.toUpperCase();
|
|
369
|
+
if (matterExtAddrMap.has(BigInt(`0x${up}`))) return true;
|
|
370
|
+
if (borderRouters.has(up)) return true;
|
|
371
|
+
if (unknownExt.has(up)) return true;
|
|
372
|
+
}
|
|
373
|
+
return false;
|
|
374
|
+
};
|
|
375
|
+
for (const batch of batches.values()) {
|
|
376
|
+
for (const node of batch.nodes) {
|
|
377
|
+
if (node.rloc16 === void 0) continue;
|
|
378
|
+
if (matchesExisting(batch.extPanIdHex, node.rloc16, node.extMacAddress)) continue;
|
|
379
|
+
const id = diagnosticNodeId(node, batch.extPanIdHex);
|
|
380
|
+
out.set(id, {
|
|
381
|
+
kind: "diagnostic",
|
|
382
|
+
id,
|
|
383
|
+
rloc16: node.rloc16,
|
|
384
|
+
extAddressHex: node.extMacAddress?.toUpperCase(),
|
|
385
|
+
isRouter: (node.rloc16 & 1023) === 0,
|
|
386
|
+
vendorName: node.vendorName,
|
|
387
|
+
childCount: node.childTable?.length ?? 0,
|
|
388
|
+
networkName: batch.networkName
|
|
389
|
+
});
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
return [...out.values()];
|
|
393
|
+
}
|
|
394
|
+
function makePairKey(a, b) {
|
|
395
|
+
return a < b ? `${a}|${b}` : `${b}|${a}`;
|
|
396
|
+
}
|
|
397
|
+
function getEdgeSignalScore(conn) {
|
|
398
|
+
const levelScore = conn.signalLevel === "strong" ? 3e3 : conn.signalLevel === "medium" ? 2e3 : conn.signalLevel === "weak" ? 1e3 : 0;
|
|
399
|
+
const detail = conn.rssi !== null ? conn.rssi + 200 : conn.lqi;
|
|
400
|
+
return levelScore + detail;
|
|
401
|
+
}
|
|
402
|
+
function buildThreadEdgePairs(nodes, extAddrMap, rloc16Map, unknownDevices) {
|
|
403
|
+
const pairs = /* @__PURE__ */ new Map();
|
|
404
|
+
const unknownExtAddrMap = /* @__PURE__ */ new Map();
|
|
405
|
+
for (const unknown of unknownDevices) {
|
|
406
|
+
unknownExtAddrMap.set(unknown.extAddress, unknown.id);
|
|
407
|
+
}
|
|
408
|
+
for (const node of Object.values(nodes)) {
|
|
409
|
+
const fromNodeId = String(node.node_id);
|
|
410
|
+
const neighbors = parseNeighborTable(node);
|
|
411
|
+
const routes = parseRouteTable(node);
|
|
412
|
+
const routeByExtAddress = /* @__PURE__ */ new Map();
|
|
413
|
+
for (const route of routes) {
|
|
414
|
+
if (route.linkEstablished && !routeByExtAddress.has(route.extAddress)) {
|
|
415
|
+
routeByExtAddress.set(route.extAddress, route);
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
for (const neighbor of neighbors) {
|
|
419
|
+
let toNodeId = extAddrMap.get(neighbor.extAddress);
|
|
420
|
+
if (toNodeId === void 0 && neighbor.rloc16 !== 0) {
|
|
421
|
+
toNodeId = rloc16Map.get(neighbor.rloc16);
|
|
422
|
+
}
|
|
423
|
+
if (toNodeId === void 0) {
|
|
424
|
+
toNodeId = unknownExtAddrMap.get(neighbor.extAddress);
|
|
425
|
+
}
|
|
426
|
+
if (toNodeId === void 0 || fromNodeId === toNodeId) continue;
|
|
427
|
+
const pairKey = makePairKey(fromNodeId, toNodeId);
|
|
428
|
+
if (!pairs.has(pairKey)) {
|
|
429
|
+
const [nodeA, nodeB] = fromNodeId < toNodeId ? [fromNodeId, toNodeId] : [toNodeId, fromNodeId];
|
|
430
|
+
pairs.set(pairKey, { pairKey, nodeA, nodeB });
|
|
431
|
+
}
|
|
432
|
+
const pair = pairs.get(pairKey);
|
|
433
|
+
const isFromA = fromNodeId === pair.nodeA;
|
|
434
|
+
if (isFromA && pair.edgeAB) continue;
|
|
435
|
+
if (!isFromA && pair.edgeBA) continue;
|
|
436
|
+
const routeEntry = routeByExtAddress.get(neighbor.extAddress);
|
|
437
|
+
const bidirectionalLqi = routeEntry ? getRouteBidirectionalLqi(routeEntry) : void 0;
|
|
438
|
+
const edge = {
|
|
439
|
+
fromNodeId,
|
|
440
|
+
toNodeId,
|
|
441
|
+
signalLevel: getSignalLevel(neighbor),
|
|
442
|
+
lqi: neighbor.lqi,
|
|
443
|
+
rssi: neighbor.avgRssi ?? neighbor.lastRssi,
|
|
444
|
+
pathCost: routeEntry?.pathCost,
|
|
445
|
+
bidirectionalLqi
|
|
446
|
+
};
|
|
447
|
+
if (isFromA) {
|
|
448
|
+
pair.edgeAB = edge;
|
|
449
|
+
} else {
|
|
450
|
+
pair.edgeBA = edge;
|
|
451
|
+
}
|
|
452
|
+
}
|
|
453
|
+
for (const route of routes) {
|
|
454
|
+
if (!route.linkEstablished || !route.allocated) continue;
|
|
455
|
+
let toNodeId = extAddrMap.get(route.extAddress);
|
|
456
|
+
if (toNodeId === void 0 && route.rloc16 !== 0) {
|
|
457
|
+
toNodeId = rloc16Map.get(route.rloc16);
|
|
458
|
+
}
|
|
459
|
+
if (toNodeId === void 0) {
|
|
460
|
+
toNodeId = unknownExtAddrMap.get(route.extAddress);
|
|
461
|
+
}
|
|
462
|
+
if (toNodeId === void 0 || toNodeId === fromNodeId) continue;
|
|
463
|
+
const pairKey = makePairKey(fromNodeId, toNodeId);
|
|
464
|
+
if (!pairs.has(pairKey)) {
|
|
465
|
+
const [nodeA, nodeB] = fromNodeId < toNodeId ? [fromNodeId, toNodeId] : [toNodeId, fromNodeId];
|
|
466
|
+
pairs.set(pairKey, { pairKey, nodeA, nodeB });
|
|
467
|
+
}
|
|
468
|
+
const pair = pairs.get(pairKey);
|
|
469
|
+
const isFromA = fromNodeId === pair.nodeA;
|
|
470
|
+
if (isFromA && pair.edgeAB) continue;
|
|
471
|
+
if (!isFromA && pair.edgeBA) continue;
|
|
472
|
+
const bidirectionalLqi = getRouteBidirectionalLqi(route);
|
|
473
|
+
const signalLevel = bidirectionalLqi !== void 0 ? getSignalLevelFromLqi(bidirectionalLqi) : "none";
|
|
474
|
+
const edge = {
|
|
475
|
+
fromNodeId,
|
|
476
|
+
toNodeId,
|
|
477
|
+
signalLevel,
|
|
478
|
+
lqi: bidirectionalLqi ?? 0,
|
|
479
|
+
rssi: null,
|
|
480
|
+
pathCost: route.pathCost,
|
|
481
|
+
bidirectionalLqi,
|
|
482
|
+
fromRouteTable: true
|
|
483
|
+
};
|
|
484
|
+
if (isFromA) {
|
|
485
|
+
pair.edgeAB = edge;
|
|
486
|
+
} else {
|
|
487
|
+
pair.edgeBA = edge;
|
|
488
|
+
}
|
|
489
|
+
}
|
|
490
|
+
}
|
|
491
|
+
return pairs;
|
|
492
|
+
}
|
|
493
|
+
function mergeDiagnosticEdges(pairs, batches, resolveRloc16) {
|
|
494
|
+
const addEdge = (fromNodeId, toNodeId, lqi, pathCost) => {
|
|
495
|
+
if (fromNodeId === toNodeId) return;
|
|
496
|
+
const pairKey = makePairKey(fromNodeId, toNodeId);
|
|
497
|
+
let pair = pairs.get(pairKey);
|
|
498
|
+
if (pair === void 0) {
|
|
499
|
+
const [nodeA, nodeB] = fromNodeId < toNodeId ? [fromNodeId, toNodeId] : [toNodeId, fromNodeId];
|
|
500
|
+
pair = { pairKey, nodeA, nodeB };
|
|
501
|
+
pairs.set(pairKey, pair);
|
|
502
|
+
}
|
|
503
|
+
const isFromA = fromNodeId === pair.nodeA;
|
|
504
|
+
if (isFromA && pair.edgeAB) return;
|
|
505
|
+
if (!isFromA && pair.edgeBA) return;
|
|
506
|
+
const signalLevel = getSignalLevelFromLqi(lqi);
|
|
507
|
+
const edge = {
|
|
508
|
+
fromNodeId,
|
|
509
|
+
toNodeId,
|
|
510
|
+
signalLevel,
|
|
511
|
+
lqi,
|
|
512
|
+
rssi: null,
|
|
513
|
+
pathCost,
|
|
514
|
+
fromRouteTable: true
|
|
515
|
+
};
|
|
516
|
+
if (isFromA) pair.edgeAB = edge;
|
|
517
|
+
else pair.edgeBA = edge;
|
|
518
|
+
};
|
|
519
|
+
for (const batch of batches.values()) {
|
|
520
|
+
for (const node of batch.nodes) {
|
|
521
|
+
if (node.rloc16 === void 0) continue;
|
|
522
|
+
const xp = batch.extPanIdHex;
|
|
523
|
+
const fromId = resolveRloc16(node.rloc16, xp) ?? diagnosticNodeId(node, xp);
|
|
524
|
+
const routerId = node.rloc16 >> 10 & 63;
|
|
525
|
+
if (node.route64 !== void 0) {
|
|
526
|
+
for (const e of node.route64.entries) {
|
|
527
|
+
if (e.routerId === routerId) continue;
|
|
528
|
+
const toId = resolveRloc16(e.routerId << 10 & 65535, xp);
|
|
529
|
+
if (toId === void 0) continue;
|
|
530
|
+
addEdge(fromId, toId, e.linkQualityIn, e.routeCost);
|
|
531
|
+
}
|
|
532
|
+
}
|
|
533
|
+
if (node.childTable !== void 0) {
|
|
534
|
+
for (const child of node.childTable) {
|
|
535
|
+
const childRloc16 = (routerId << 10 | child.childId) & 65535;
|
|
536
|
+
const toId = resolveRloc16(childRloc16, xp);
|
|
537
|
+
if (toId === void 0) continue;
|
|
538
|
+
addEdge(fromId, toId, child.incomingLinkQuality);
|
|
539
|
+
}
|
|
540
|
+
}
|
|
541
|
+
}
|
|
542
|
+
}
|
|
543
|
+
}
|
|
544
|
+
function getWiFiDiagnostics(node) {
|
|
545
|
+
const bssidRaw = node.attributes["0/54/0"];
|
|
546
|
+
let bssid = null;
|
|
547
|
+
if (bssidRaw) {
|
|
548
|
+
try {
|
|
549
|
+
const binary = atob(bssidRaw);
|
|
550
|
+
bssid = Array.from(binary).map((c) => c.charCodeAt(0).toString(16).padStart(2, "0").toUpperCase()).join(":");
|
|
551
|
+
} catch {
|
|
552
|
+
bssid = null;
|
|
553
|
+
}
|
|
554
|
+
}
|
|
555
|
+
const rssi = node.attributes["0/54/4"];
|
|
556
|
+
const channel = node.attributes["0/54/3"];
|
|
557
|
+
const securityType = node.attributes["0/54/1"];
|
|
558
|
+
const wifiVersion = node.attributes["0/54/2"];
|
|
559
|
+
return {
|
|
560
|
+
bssid,
|
|
561
|
+
rssi: rssi ?? null,
|
|
562
|
+
channel: channel ?? null,
|
|
563
|
+
securityType: securityType ?? null,
|
|
564
|
+
wifiVersion: wifiVersion ?? null
|
|
565
|
+
};
|
|
566
|
+
}
|
|
567
|
+
export {
|
|
568
|
+
buildDiagnosticRloc16Map,
|
|
569
|
+
buildExtAddrMap,
|
|
570
|
+
buildMatterRloc16ByXp,
|
|
571
|
+
buildRloc16Map,
|
|
572
|
+
buildThreadEdgePairs,
|
|
573
|
+
categorizeDevices,
|
|
574
|
+
diagnosticNodeId,
|
|
575
|
+
findDiagnosticMeshNodes,
|
|
576
|
+
findRouteByExtAddress,
|
|
577
|
+
findUnknownDevices,
|
|
578
|
+
getEdgeSignalScore,
|
|
579
|
+
getNeighborTableLength,
|
|
580
|
+
getNetworkType,
|
|
581
|
+
getRoutableDestinationsCount,
|
|
582
|
+
getRouteBidirectionalLqi,
|
|
583
|
+
getSignalLevel,
|
|
584
|
+
getSignalLevelFromLqi,
|
|
585
|
+
getThreadChannel,
|
|
586
|
+
getThreadExtendedAddress,
|
|
587
|
+
getThreadExtendedAddressHex,
|
|
588
|
+
getThreadExtendedPanId,
|
|
589
|
+
getThreadRloc16,
|
|
590
|
+
getThreadRole,
|
|
591
|
+
getThreadVersion,
|
|
592
|
+
getWiFiDiagnostics,
|
|
593
|
+
makeDiagnosticRloc16Resolver,
|
|
594
|
+
makePairKey,
|
|
595
|
+
mergeDiagnosticEdges,
|
|
596
|
+
parseNeighborTable,
|
|
597
|
+
parseRouteTable
|
|
598
|
+
};
|
|
599
|
+
//# sourceMappingURL=topology-utils.js.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/topology/topology-utils.ts"],
|
|
4
|
+
"mappings": "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",
|
|
5
|
+
"names": []
|
|
6
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@matter-server/ws-client",
|
|
3
|
-
"version": "1.1
|
|
3
|
+
"version": "1.2.1",
|
|
4
4
|
"description": "WebSocket client library for Matter server",
|
|
5
5
|
"homepage": "https://github.com/matter-js/matterjs-server",
|
|
6
6
|
"bugs": {
|
|
@@ -36,10 +36,12 @@
|
|
|
36
36
|
"build": "nacho-build",
|
|
37
37
|
"build-clean": "nacho-build --clean"
|
|
38
38
|
},
|
|
39
|
-
"dependencies": {
|
|
39
|
+
"dependencies": {
|
|
40
|
+
"@matter/thread-br-client": "0.17.5-alpha.0-20260709-e6f78aaf7"
|
|
41
|
+
},
|
|
40
42
|
"devDependencies": {
|
|
41
|
-
"@matter/testing": "0.17.5-alpha.0-
|
|
42
|
-
"@types/node": "^26.
|
|
43
|
+
"@matter/testing": "0.17.5-alpha.0-20260709-e6f78aaf7",
|
|
44
|
+
"@types/node": "^26.1.1",
|
|
43
45
|
"@types/ws": "^8.18.1",
|
|
44
46
|
"ws": "^8.21.0"
|
|
45
47
|
},
|