@matter-server/ws-client 1.1.8-alpha.0-20260707-c552b9d → 1.2.0

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.
@@ -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.8-alpha.0-20260707-c552b9d",
3
+ "version": "1.2.0",
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-20260704-9ea70abfa",
42
- "@types/node": "^26.0.1",
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
  },