@matter-server/dashboard 0.6.2 → 0.6.3

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 (52) hide show
  1. package/dist/esm/pages/matter-network-view.d.ts +15 -0
  2. package/dist/esm/pages/matter-network-view.d.ts.map +1 -1
  3. package/dist/esm/pages/matter-network-view.js +171 -1
  4. package/dist/esm/pages/matter-network-view.js.map +1 -1
  5. package/dist/esm/pages/network/base-network-graph.d.ts +4 -0
  6. package/dist/esm/pages/network/base-network-graph.d.ts.map +1 -1
  7. package/dist/esm/pages/network/base-network-graph.js +9 -0
  8. package/dist/esm/pages/network/base-network-graph.js.map +1 -1
  9. package/dist/esm/pages/network/border-router-store.d.ts +20 -0
  10. package/dist/esm/pages/network/border-router-store.d.ts.map +1 -0
  11. package/dist/esm/pages/network/border-router-store.js +29 -0
  12. package/dist/esm/pages/network/border-router-store.js.map +6 -0
  13. package/dist/esm/pages/network/network-details.d.ts +40 -12
  14. package/dist/esm/pages/network/network-details.d.ts.map +1 -1
  15. package/dist/esm/pages/network/network-details.js +440 -112
  16. package/dist/esm/pages/network/network-details.js.map +1 -1
  17. package/dist/esm/pages/network/network-types.d.ts +76 -0
  18. package/dist/esm/pages/network/network-types.d.ts.map +1 -1
  19. package/dist/esm/pages/network/network-types.js.map +1 -1
  20. package/dist/esm/pages/network/network-utils.d.ts +89 -22
  21. package/dist/esm/pages/network/network-utils.d.ts.map +1 -1
  22. package/dist/esm/pages/network/network-utils.js +233 -95
  23. package/dist/esm/pages/network/network-utils.js.map +1 -1
  24. package/dist/esm/pages/network/thread-graph.d.ts +68 -9
  25. package/dist/esm/pages/network/thread-graph.d.ts.map +1 -1
  26. package/dist/esm/pages/network/thread-graph.js +388 -50
  27. package/dist/esm/pages/network/thread-graph.js.map +2 -2
  28. package/dist/esm/util/device-icons.d.ts +6 -0
  29. package/dist/esm/util/device-icons.d.ts.map +1 -1
  30. package/dist/esm/util/device-icons.js +6 -0
  31. package/dist/esm/util/device-icons.js.map +1 -1
  32. package/dist/web/js/{attribute-write-dialog-g4B6BoRt.js → attribute-write-dialog-DlMTUiLK.js} +1 -1
  33. package/dist/web/js/{command-invoke-dialog-D6G704VK.js → command-invoke-dialog-DO3IyFcm.js} +1 -1
  34. package/dist/web/js/{commission-node-dialog-Bg3oo5ub.js → commission-node-dialog-CMSvCm0i.js} +4 -4
  35. package/dist/web/js/{commission-node-existing-DO3g1aQJ.js → commission-node-existing-D08jghFu.js} +2 -2
  36. package/dist/web/js/{commission-node-thread-DM432aH1.js → commission-node-thread-D5waY758.js} +2 -2
  37. package/dist/web/js/{commission-node-wifi-Bx40FXij.js → commission-node-wifi-ClBlCFTZ.js} +2 -2
  38. package/dist/web/js/{dialog-box-DjyfULWB.js → dialog-box-D9vS2SmP.js} +1 -1
  39. package/dist/web/js/{fire_event-BstgNPuh.js → fire_event-BPhROjTC.js} +1 -1
  40. package/dist/web/js/main.js +1 -1
  41. package/dist/web/js/{matter-dashboard-app-Cj88TtbZ.js → matter-dashboard-app-C9zTE5uH.js} +1359 -302
  42. package/dist/web/js/{node-binding-dialog-9yy2LE3_.js → node-binding-dialog-B5p-gbim.js} +1 -1
  43. package/dist/web/js/{settings-dialog-Cs2xMsXb.js → settings-dialog-BMFhom0W.js} +1 -1
  44. package/package.json +4 -4
  45. package/src/pages/matter-network-view.ts +185 -1
  46. package/src/pages/network/base-network-graph.ts +10 -0
  47. package/src/pages/network/border-router-store.ts +38 -0
  48. package/src/pages/network/network-details.ts +535 -140
  49. package/src/pages/network/network-types.ts +76 -0
  50. package/src/pages/network/network-utils.ts +390 -171
  51. package/src/pages/network/thread-graph.ts +532 -73
  52. package/src/util/device-icons.ts +13 -0
@@ -222,11 +222,13 @@ function buildRloc16Map(nodes) {
222
222
  }
223
223
  return rloc16Map;
224
224
  }
225
- function findUnknownDevices(nodes, extAddrMap, rloc16Map) {
226
- const unknownMap = /* @__PURE__ */ new Map();
225
+ function findUnknownDevices(nodes, extAddrMap, rloc16Map, borderRouters) {
226
+ const aggregates = /* @__PURE__ */ new Map();
227
227
  for (const node of Object.values(nodes)) {
228
228
  const nodeId = String(node.node_id);
229
229
  const neighbors = parseNeighborTable(node);
230
+ const observerXp = getThreadExtendedPanId(node);
231
+ const observerXpHex = observerXp !== void 0 ? observerXp.toString(16).padStart(16, "0").toUpperCase() : void 0;
230
232
  for (const neighbor of neighbors) {
231
233
  if (extAddrMap.has(neighbor.extAddress)) {
232
234
  continue;
@@ -235,31 +237,127 @@ function findUnknownDevices(nodes, extAddrMap, rloc16Map) {
235
237
  continue;
236
238
  }
237
239
  const extAddressHex = neighbor.extAddress.toString(16).padStart(16, "0").toUpperCase();
238
- const id = `unknown_${extAddressHex}`;
239
- if (!unknownMap.has(id)) {
240
- unknownMap.set(id, {
241
- id,
240
+ let agg = aggregates.get(extAddressHex);
241
+ if (agg === void 0) {
242
+ agg = {
242
243
  extAddressHex,
243
244
  extAddress: neighbor.extAddress,
244
245
  seenBy: [],
245
246
  isRouter: false,
246
- bestRssi: null
247
- });
247
+ bestRssi: null,
248
+ extendedPanIdHex: observerXpHex
249
+ };
250
+ aggregates.set(extAddressHex, agg);
251
+ } else if (agg.extendedPanIdHex === void 0 && observerXpHex !== void 0) {
252
+ agg.extendedPanIdHex = observerXpHex;
248
253
  }
249
- const unknown = unknownMap.get(id);
250
- if (!unknown.seenBy.includes(nodeId)) {
251
- unknown.seenBy.push(nodeId);
254
+ if (!agg.seenBy.includes(nodeId)) {
255
+ agg.seenBy.push(nodeId);
252
256
  }
253
257
  if (neighbor.rxOnWhenIdle) {
254
- unknown.isRouter = true;
258
+ agg.isRouter = true;
255
259
  }
256
260
  const rssi = neighbor.avgRssi ?? neighbor.lastRssi;
257
- if (rssi !== null && (unknown.bestRssi === null || rssi > unknown.bestRssi)) {
258
- unknown.bestRssi = rssi;
261
+ if (rssi !== null && (agg.bestRssi === null || rssi > agg.bestRssi)) {
262
+ agg.bestRssi = rssi;
259
263
  }
260
264
  }
261
265
  }
262
- return Array.from(unknownMap.values());
266
+ const networkNameByXp = /* @__PURE__ */ new Map();
267
+ if (borderRouters !== void 0) {
268
+ for (const br of borderRouters.values()) {
269
+ if (br.extendedPanIdHex !== void 0 && br.networkName !== void 0) {
270
+ networkNameByXp.set(br.extendedPanIdHex, br.networkName);
271
+ }
272
+ }
273
+ }
274
+ const out = new Array();
275
+ for (const agg of aggregates.values()) {
276
+ const br = borderRouters?.get(agg.extAddressHex);
277
+ if (br !== void 0) {
278
+ out.push({
279
+ kind: "br",
280
+ ...br,
281
+ id: `br_${agg.extAddressHex}`,
282
+ extAddressHex: agg.extAddressHex,
283
+ extAddress: agg.extAddress,
284
+ seenBy: agg.seenBy,
285
+ isRouter: agg.isRouter,
286
+ bestRssi: agg.bestRssi
287
+ });
288
+ } else {
289
+ const networkName = agg.extendedPanIdHex !== void 0 ? networkNameByXp.get(agg.extendedPanIdHex) : void 0;
290
+ out.push({
291
+ kind: "unknown",
292
+ id: `unknown_${agg.extAddressHex}`,
293
+ extAddressHex: agg.extAddressHex,
294
+ extAddress: agg.extAddress,
295
+ seenBy: agg.seenBy,
296
+ isRouter: agg.isRouter,
297
+ bestRssi: agg.bestRssi,
298
+ extendedPanIdHex: agg.extendedPanIdHex,
299
+ networkName
300
+ });
301
+ }
302
+ }
303
+ return out;
304
+ }
305
+ const CONNECTION_MODE_LABELS = {
306
+ 0: "disabled",
307
+ 1: "PSKc / DTLS",
308
+ 2: "PSKd / DTLS",
309
+ 3: "vendor-defined",
310
+ 4: "X.509"
311
+ };
312
+ const THREAD_INTERFACE_STATUS_LABELS = {
313
+ 0: "not initialized",
314
+ 1: "initialized, inactive",
315
+ 2: "initialized, active"
316
+ };
317
+ const AVAILABILITY_LABELS = {
318
+ 0: "infrequent",
319
+ 1: "high"
320
+ };
321
+ const THREAD_ROLE_LABELS = {
322
+ 0: "detached",
323
+ 1: "child",
324
+ 2: "router",
325
+ 3: "leader"
326
+ };
327
+ const MULTI_AIL_STATE_LABELS = {
328
+ 0: "disabled",
329
+ 1: "not detected",
330
+ 2: "detected"
331
+ };
332
+ function decodeMeshcopStateBitmap(hex) {
333
+ if (hex === void 0 || !/^[0-9a-fA-F]{1,8}$/.test(hex)) return void 0;
334
+ const value = parseInt(hex, 16);
335
+ if (!Number.isFinite(value)) return void 0;
336
+ const connectionModeValue = value & 7;
337
+ const threadInterfaceStatusValue = value >> 3 & 3;
338
+ const availabilityValue = value >> 5 & 3;
339
+ const bbr = (value >> 7 & 1) === 1;
340
+ const bbrIsPrimary = (value >> 8 & 1) === 1;
341
+ const threadRoleValue = value >> 9 & 3;
342
+ const epskcSupported = (value >> 11 & 1) === 1;
343
+ const multiAilStateValue = value >> 12 & 3;
344
+ const reserved = value >>> 14 >>> 0;
345
+ return {
346
+ connectionModeValue,
347
+ connectionMode: CONNECTION_MODE_LABELS[connectionModeValue],
348
+ threadInterfaceStatusValue,
349
+ threadInterfaceStatus: THREAD_INTERFACE_STATUS_LABELS[threadInterfaceStatusValue],
350
+ availabilityValue,
351
+ availability: AVAILABILITY_LABELS[availabilityValue],
352
+ bbr,
353
+ bbrFunction: bbr ? bbrIsPrimary ? "primary" : "secondary" : void 0,
354
+ threadRoleValue,
355
+ threadRole: THREAD_ROLE_LABELS[threadRoleValue],
356
+ epskcSupported,
357
+ multiAilStateValue,
358
+ multiAilState: MULTI_AIL_STATE_LABELS[multiAilStateValue],
359
+ reservedHex: reserved !== 0 ? reserved.toString(16).toUpperCase() : void 0
360
+ };
263
361
  }
264
362
  function getSignalLevel(neighbor) {
265
363
  const rssi = neighbor.avgRssi ?? neighbor.lastRssi;
@@ -268,8 +366,11 @@ function getSignalLevel(neighbor) {
268
366
  if (rssi > SIGNAL_MEDIUM_THRESHOLD) return "medium";
269
367
  return "weak";
270
368
  }
271
- if (neighbor.lqi > LQI_STRONG_THRESHOLD) return "strong";
272
- if (neighbor.lqi > LQI_MEDIUM_THRESHOLD) return "medium";
369
+ return getSignalLevelFromLqi(neighbor.lqi);
370
+ }
371
+ function getSignalLevelFromLqi(lqi) {
372
+ if (lqi > LQI_STRONG_THRESHOLD) return "strong";
373
+ if (lqi > LQI_MEDIUM_THRESHOLD) return "medium";
273
374
  return "weak";
274
375
  }
275
376
  function signalLevelToColor(level) {
@@ -414,9 +515,16 @@ function getWiFiVersionName(version) {
414
515
  return "Unknown";
415
516
  }
416
517
  }
417
- function buildThreadConnections(nodes, extAddrMap, rloc16Map, unknownDevices) {
418
- const connections = [];
419
- const seenConnections = /* @__PURE__ */ new Set();
518
+ function makePairKey(a, b) {
519
+ return a < b ? `${a}|${b}` : `${b}|${a}`;
520
+ }
521
+ function getEdgeSignalScore(conn) {
522
+ const levelScore = conn.signalLevel === "strong" ? 3e3 : conn.signalLevel === "medium" ? 2e3 : conn.signalLevel === "weak" ? 1e3 : 0;
523
+ const detail = conn.rssi !== null ? conn.rssi + 200 : conn.lqi;
524
+ return levelScore + detail;
525
+ }
526
+ function buildThreadEdgePairs(nodes, extAddrMap, rloc16Map, unknownDevices) {
527
+ const pairs = /* @__PURE__ */ new Map();
420
528
  const unknownExtAddrMap = /* @__PURE__ */ new Map();
421
529
  for (const unknown of unknownDevices) {
422
530
  unknownExtAddrMap.set(unknown.extAddress, unknown.id);
@@ -432,29 +540,33 @@ function buildThreadConnections(nodes, extAddrMap, rloc16Map, unknownDevices) {
432
540
  if (toNodeId === void 0) {
433
541
  toNodeId = unknownExtAddrMap.get(neighbor.extAddress);
434
542
  }
435
- if (toNodeId === void 0) {
436
- continue;
437
- }
438
- if (fromNodeId === toNodeId) {
439
- continue;
440
- }
441
- const connectionKey = `${fromNodeId}-${toNodeId}`;
442
- const reverseKey = `${toNodeId}-${fromNodeId}`;
443
- if (seenConnections.has(connectionKey) || seenConnections.has(reverseKey)) {
444
- continue;
543
+ if (toNodeId === void 0 || fromNodeId === toNodeId) continue;
544
+ const pairKey = makePairKey(fromNodeId, toNodeId);
545
+ if (!pairs.has(pairKey)) {
546
+ const [nodeA, nodeB] = fromNodeId < toNodeId ? [fromNodeId, toNodeId] : [toNodeId, fromNodeId];
547
+ pairs.set(pairKey, { pairKey, nodeA, nodeB });
445
548
  }
446
- seenConnections.add(connectionKey);
549
+ const pair = pairs.get(pairKey);
550
+ const isFromA = fromNodeId === pair.nodeA;
551
+ if (isFromA && pair.edgeAB) continue;
552
+ if (!isFromA && pair.edgeBA) continue;
447
553
  const routeEntry = findRouteByExtAddress(node, neighbor.extAddress);
448
554
  const bidirectionalLqi = routeEntry ? getRouteBidirectionalLqi(routeEntry) : void 0;
449
- connections.push({
555
+ const edge = {
450
556
  fromNodeId,
451
557
  toNodeId,
452
558
  signalColor: getSignalColor(neighbor),
559
+ signalLevel: getSignalLevel(neighbor),
453
560
  lqi: neighbor.lqi,
454
561
  rssi: neighbor.avgRssi ?? neighbor.lastRssi,
455
562
  pathCost: routeEntry?.pathCost,
456
563
  bidirectionalLqi
457
- });
564
+ };
565
+ if (isFromA) {
566
+ pair.edgeAB = edge;
567
+ } else {
568
+ pair.edgeBA = edge;
569
+ }
458
570
  }
459
571
  const routes = parseRouteTable(node);
460
572
  for (const route of routes) {
@@ -467,104 +579,129 @@ function buildThreadConnections(nodes, extAddrMap, rloc16Map, unknownDevices) {
467
579
  toNodeId = unknownExtAddrMap.get(route.extAddress);
468
580
  }
469
581
  if (toNodeId === void 0 || toNodeId === fromNodeId) continue;
470
- const connectionKey = `${fromNodeId}-${toNodeId}`;
471
- const reverseKey = `${toNodeId}-${fromNodeId}`;
472
- if (seenConnections.has(connectionKey) || seenConnections.has(reverseKey)) {
473
- continue;
582
+ const pairKey = makePairKey(fromNodeId, toNodeId);
583
+ if (!pairs.has(pairKey)) {
584
+ const [nodeA, nodeB] = fromNodeId < toNodeId ? [fromNodeId, toNodeId] : [toNodeId, fromNodeId];
585
+ pairs.set(pairKey, { pairKey, nodeA, nodeB });
474
586
  }
475
- seenConnections.add(connectionKey);
587
+ const pair = pairs.get(pairKey);
588
+ const isFromA = fromNodeId === pair.nodeA;
589
+ if (isFromA && pair.edgeAB) continue;
590
+ if (!isFromA && pair.edgeBA) continue;
476
591
  const bidirectionalLqi = getRouteBidirectionalLqi(route);
477
592
  const signalColor = bidirectionalLqi !== void 0 ? getSignalColorFromLqi(bidirectionalLqi) : "var(--md-sys-color-outline, grey)";
478
- connections.push({
593
+ const edge = {
479
594
  fromNodeId,
480
595
  toNodeId,
481
596
  signalColor,
597
+ signalLevel: bidirectionalLqi !== void 0 ? getSignalLevelFromLqi(bidirectionalLqi) : void 0,
482
598
  lqi: bidirectionalLqi ?? 0,
483
599
  rssi: null,
484
600
  pathCost: route.pathCost,
485
601
  bidirectionalLqi,
486
602
  fromRouteTable: true
487
- });
603
+ };
604
+ if (isFromA) {
605
+ pair.edgeAB = edge;
606
+ } else {
607
+ pair.edgeBA = edge;
608
+ }
488
609
  }
489
610
  }
490
- return connections;
611
+ return pairs;
491
612
  }
492
- function getNodeConnections(nodeId, nodes, extAddrMap, rloc16Map) {
613
+ function getNodeConnectionsFromPairs(nodeId, edgePairs, nodes, filters) {
493
614
  const connections = [];
494
- const seenConnectedIds = /* @__PURE__ */ new Set();
495
- const node = nodes[nodeId];
496
- if (!node) return connections;
497
- const thisExtAddr = getThreadExtendedAddress(node);
498
- const neighbors = parseNeighborTable(node);
499
- for (const neighbor of neighbors) {
500
- let connectedNodeId = extAddrMap.get(neighbor.extAddress);
501
- if (connectedNodeId === void 0 && rloc16Map && neighbor.rloc16 !== 0) {
502
- connectedNodeId = rloc16Map.get(neighbor.rloc16);
615
+ const hiddenNodeIds = /* @__PURE__ */ new Set();
616
+ if (filters?.hideOfflineNodes) {
617
+ for (const node of Object.values(nodes)) {
618
+ if (node.available === false) {
619
+ hiddenNodeIds.add(String(node.node_id));
620
+ }
503
621
  }
504
- const connectedNode = connectedNodeId ? nodes[connectedNodeId] : void 0;
505
- const isUnknown = connectedNodeId === void 0;
506
- const displayId = connectedNodeId ?? `unknown_${neighbor.extAddress.toString(16).toUpperCase().padStart(16, "0")}`;
507
- seenConnectedIds.add(displayId);
508
- const routeEntry = findRouteByExtAddress(node, neighbor.extAddress);
509
- const bidirectionalLqi = routeEntry ? getRouteBidirectionalLqi(routeEntry) : void 0;
510
- connections.push({
511
- connectedNodeId: displayId,
512
- connectedNode,
513
- extAddressHex: neighbor.extAddress.toString(16).toUpperCase().padStart(16, "0"),
514
- signalColor: getSignalColor(neighbor),
515
- lqi: neighbor.lqi,
516
- rssi: neighbor.avgRssi ?? neighbor.lastRssi,
517
- isOutgoing: true,
518
- isUnknown,
519
- pathCost: routeEntry?.pathCost,
520
- bidirectionalLqi
521
- });
522
622
  }
523
- if (thisExtAddr !== void 0) {
524
- for (const otherNode of Object.values(nodes)) {
525
- const otherNodeId = String(otherNode.node_id);
526
- if (otherNodeId === nodeId) continue;
527
- if (seenConnectedIds.has(otherNodeId)) continue;
528
- const otherNeighbors = parseNeighborTable(otherNode);
529
- const reverseEntry = otherNeighbors.find((n) => n.extAddress === thisExtAddr);
530
- if (reverseEntry) {
531
- const otherExtAddr = getThreadExtendedAddress(otherNode);
532
- const extAddrHex = otherExtAddr ? otherExtAddr.toString(16).toUpperCase().padStart(16, "0") : "Unknown";
533
- const routeEntry = findRouteByExtAddress(otherNode, thisExtAddr);
534
- const bidirectionalLqi = routeEntry ? getRouteBidirectionalLqi(routeEntry) : void 0;
535
- connections.push({
536
- connectedNodeId: otherNodeId,
537
- connectedNode: otherNode,
538
- extAddressHex: extAddrHex,
539
- signalColor: getSignalColor(reverseEntry),
540
- lqi: reverseEntry.lqi,
541
- rssi: reverseEntry.avgRssi ?? reverseEntry.lastRssi,
542
- isOutgoing: false,
543
- isUnknown: false,
544
- pathCost: routeEntry?.pathCost,
545
- bidirectionalLqi
546
- });
623
+ for (const pair of edgePairs.values()) {
624
+ const isA = pair.nodeA === nodeId;
625
+ const isB = pair.nodeB === nodeId;
626
+ if (!isA && !isB) continue;
627
+ const remoteId = isA ? pair.nodeB : pair.nodeA;
628
+ const outgoing = isA ? pair.edgeAB : pair.edgeBA;
629
+ const incoming = isA ? pair.edgeBA : pair.edgeAB;
630
+ const survivors = [];
631
+ for (const [conn, isOut] of [
632
+ [outgoing, true],
633
+ [incoming, false]
634
+ ]) {
635
+ if (!conn) continue;
636
+ if (filters) {
637
+ const fromId = String(conn.fromNodeId);
638
+ const toId = String(conn.toNodeId);
639
+ if (hiddenNodeIds.has(fromId) || hiddenNodeIds.has(toId)) continue;
640
+ if (filters.hideWeakSignalEdges && conn.signalLevel === "weak") continue;
641
+ if (filters.hideMediumSignalEdges && conn.signalLevel === "medium") continue;
642
+ if (filters.hideStrongSignalEdges && conn.signalLevel === "strong") continue;
547
643
  }
644
+ survivors.push({ conn, isOutgoing: isOut });
548
645
  }
646
+ if (survivors.length === 0) continue;
647
+ let winner;
648
+ const outgoingSurvivor = survivors.find((s) => s.isOutgoing);
649
+ if (outgoingSurvivor) {
650
+ winner = outgoingSurvivor;
651
+ } else {
652
+ survivors.sort((a, b) => getEdgeSignalScore(a.conn) - getEdgeSignalScore(b.conn));
653
+ winner = survivors[0];
654
+ }
655
+ const remoteNode = nodes[remoteId];
656
+ const isExternalUnknown = remoteId.startsWith("unknown_");
657
+ const isExternalBr = remoteId.startsWith("br_");
658
+ const isUnknown = isExternalUnknown || isExternalBr;
659
+ let extAddressHex;
660
+ if (isExternalUnknown) {
661
+ extAddressHex = remoteId.slice("unknown_".length);
662
+ } else if (isExternalBr) {
663
+ extAddressHex = remoteId.slice("br_".length);
664
+ } else if (remoteNode) {
665
+ extAddressHex = getThreadExtendedAddressHex(remoteNode) ?? "Unknown";
666
+ } else {
667
+ extAddressHex = "Unknown";
668
+ }
669
+ connections.push({
670
+ connectedNodeId: remoteId,
671
+ connectedNode: remoteNode,
672
+ extAddressHex,
673
+ signalColor: winner.conn.signalColor,
674
+ signalLevel: winner.conn.signalLevel,
675
+ lqi: winner.conn.lqi,
676
+ rssi: winner.conn.rssi,
677
+ isOutgoing: winner.isOutgoing,
678
+ isReverseOnly: !outgoing,
679
+ isUnknown,
680
+ pathCost: winner.conn.pathCost,
681
+ bidirectionalLqi: winner.conn.bidirectionalLqi
682
+ });
549
683
  }
550
684
  return connections;
551
685
  }
552
686
  export {
553
687
  buildExtAddrMap,
554
688
  buildRloc16Map,
555
- buildThreadConnections,
689
+ buildThreadEdgePairs,
556
690
  categorizeDevices,
691
+ decodeMeshcopStateBitmap,
557
692
  findRouteByExtAddress,
558
693
  findUnknownDevices,
559
694
  getDeviceName,
695
+ getEdgeSignalScore,
560
696
  getNetworkType,
561
- getNodeConnections,
697
+ getNodeConnectionsFromPairs,
562
698
  getRoutableDestinationsCount,
563
699
  getRouteBidirectionalLqi,
564
700
  getSignalColor,
565
701
  getSignalColorFromLqi,
566
702
  getSignalColorFromRssi,
567
703
  getSignalLevel,
704
+ getSignalLevelFromLqi,
568
705
  getThreadChannel,
569
706
  getThreadExtendedAddress,
570
707
  getThreadExtendedAddressHex,
@@ -575,6 +712,7 @@ export {
575
712
  getWiFiDiagnostics,
576
713
  getWiFiSecurityTypeName,
577
714
  getWiFiVersionName,
715
+ makePairKey,
578
716
  parseNeighborTable,
579
717
  parseRouteTable,
580
718
  signalLevelToColor
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/pages/network/network-utils.ts"],
4
- "mappings": "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",
4
+ "mappings": "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",
5
5
  "names": []
6
6
  }
@@ -3,24 +3,37 @@
3
3
  * Copyright 2025-2026 Open Home Foundation
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
+ import type { BorderRouterEntry } from "@matter-server/ws-client";
6
7
  import { BaseNetworkGraph } from "./base-network-graph.js";
8
+ import type { ThreadEdgePair, ThreadExternalDevice } from "./network-types.js";
7
9
  declare global {
8
10
  interface HTMLElementTagNameMap {
9
11
  "thread-graph": ThreadGraph;
10
12
  }
11
13
  }
12
14
  export declare class ThreadGraph extends BaseNetworkGraph {
13
- /** Cache of unknown devices for the current render */
15
+ borderRouters: ReadonlyMap<string, BorderRouterEntry>;
16
+ hideOfflineNodes: boolean;
17
+ hideWeakSignalEdges: boolean;
18
+ hideMediumSignalEdges: boolean;
19
+ hideStrongSignalEdges: boolean;
20
+ /** Cache of external Thread devices (Border Routers and unknown) for the current render */
14
21
  private _unknownDevices;
15
- /** Cached map of unknown devices (rebuilt in _updateGraph) */
22
+ /** Cached map of external Thread devices (rebuilt in _updateGraph) */
16
23
  private _unknownDevicesMapCache;
17
- /** Get unknown devices as a map for use by details panel */
18
- get unknownDevicesMap(): Map<string, {
19
- extAddressHex: string;
20
- isRouter: boolean;
21
- seenBy: string[];
22
- bestRssi: number | null;
23
- }>;
24
+ /** All computed edge pairs (rebuilt in _updateGraph) */
25
+ private _edgePairs;
26
+ /** Base state of each edge after filter+dedup, before highlight */
27
+ private _edgeBaseState;
28
+ /** Whether highlight is currently active */
29
+ private _isHighlighted;
30
+ /** Node ID currently highlighted (for icon restoration on clear) */
31
+ private _highlightedNodeId;
32
+ /** Get external Thread devices as a map for use by details panel */
33
+ get unknownDevicesMap(): ReadonlyMap<string, ThreadExternalDevice>;
34
+ /** Get computed edge pairs (for potential use by other components) */
35
+ get edgePairs(): Map<string, ThreadEdgePair>;
36
+ updated(changedProperties: Map<string, unknown>): void;
24
37
  /**
25
38
  * Searches for a Thread node (known or unknown) by extended address and selects it.
26
39
  * Accepts formats like:
@@ -31,6 +44,52 @@ export declare class ThreadGraph extends BaseNetworkGraph {
31
44
  */
32
45
  selectByExtendedAddress(address: string): boolean;
33
46
  protected _updateGraph(): void;
47
+ /**
48
+ * Highlights edges connected to the selected node with swap/arrow logic.
49
+ *
50
+ * For each visible edge connected to the highlighted node:
51
+ * - If the visible edge comes from the remote node AND there is a
52
+ * dedup-hidden edge from the highlighted node → SWAP: show the
53
+ * highlighted node's edge instead (its signal is better or equal,
54
+ * but we prefer the highlighted node's perspective).
55
+ * - Otherwise → thicken the edge. If the pair is truly one-way (only
56
+ * one of edgeAB/edgeBA exists), also draw an arrow in the data
57
+ * direction so asymmetric visibility is visible at a glance.
58
+ */
59
+ protected _highlightConnections(nodeId: number | string): void;
60
+ /**
61
+ * Thicken a connected edge and add a directional arrow when the pair is
62
+ * truly one-way in data (only one of edgeAB/edgeBA exists). Used for the
63
+ * highlighted-reports-peer branch where filter-hidden peer directions
64
+ * should not draw an arrow on the user's own perspective.
65
+ *
66
+ * Explicit arrow object (vs the shorthand "to") keeps the head visible
67
+ * on dashed offline edges where some vis.js builds skip the shorthand.
68
+ */
69
+ private _asymmetricEdgeUpdate;
70
+ /**
71
+ * Thicken a connected edge and always add a directional arrow. Used for
72
+ * the remote-reports-highlighted branch where the displayed edge is the
73
+ * peer's direction (no swap target available); the user sees the same
74
+ * single line whether the outgoing direction is filter-hidden or absent.
75
+ */
76
+ private _reverseEdgeUpdate;
77
+ /**
78
+ * Swap a node's icon between the default and highlighted variants.
79
+ * Kept separate so both `_highlightConnections` (switching target) and
80
+ * `_clearHighlights` (fully unselecting) reach the same end state.
81
+ */
82
+ private _setNodeIconHighlight;
83
+ /**
84
+ * Clears all highlights and restores the graph to its base state
85
+ * (after filter+dedup, before highlight modifications).
86
+ */
87
+ protected _clearHighlights(): void;
88
+ /**
89
+ * Restores all edges to their base state (undoes highlight modifications).
90
+ * This resets hidden/visible state, width, color, and dashes.
91
+ */
92
+ private _restoreEdgeBaseState;
34
93
  render(): import("lit-html").TemplateResult<1>;
35
94
  }
36
95
  //# sourceMappingURL=thread-graph.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"thread-graph.d.ts","sourceRoot":"","sources":["../../../../src/pages/network/thread-graph.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAa3D,OAAO,CAAC,MAAM,CAAC,CAAC;IACZ,UAAU,qBAAqB;QAC3B,cAAc,EAAE,WAAW,CAAC;KAC/B;CACJ;AAED,qBACa,WAAY,SAAQ,gBAAgB;IAC7C,sDAAsD;IACtD,OAAO,CAAC,eAAe,CAA6B;IAEpD,8DAA8D;IAC9D,OAAO,CAAC,uBAAuB,CAGjB;IAEd,4DAA4D;IAC5D,IAAW,iBAAiB,IAAI,GAAG,CAC/B,MAAM,EACN;QAAE,aAAa,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAC;QAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAC1F,CAEA;IAED;;;;;;;OAOG;IACI,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CA4BvD;IAED,UAAmB,YAAY,IAAI,IAAI,CA8GtC;IAEQ,MAAM,yCAad;CACJ"}
1
+ {"version":3,"file":"thread-graph.d.ts","sourceRoot":"","sources":["../../../../src/pages/network/thread-graph.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAQlE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,KAAK,EAIR,cAAc,EACd,oBAAoB,EACvB,MAAM,oBAAoB,CAAC;AAa5B,OAAO,CAAC,MAAM,CAAC,CAAC;IACZ,UAAU,qBAAqB;QAC3B,cAAc,EAAE,WAAW,CAAC;KAC/B;CACJ;AAaD,qBACa,WAAY,SAAQ,gBAAgB;IACb,aAAa,EAAE,WAAW,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAa;IAG3F,gBAAgB,UAAS;IAGzB,mBAAmB,UAAS;IAG5B,qBAAqB,UAAS;IAG9B,qBAAqB,UAAS;IAErC,2FAA2F;IAC3F,OAAO,CAAC,eAAe,CAA8B;IAErD,sEAAsE;IACtE,OAAO,CAAC,uBAAuB,CAAgD;IAE/E,wDAAwD;IACxD,OAAO,CAAC,UAAU,CAA0C;IAE5D,mEAAmE;IACnE,OAAO,CAAC,cAAc,CAAkD;IAExE,4CAA4C;IAC5C,OAAO,CAAC,cAAc,CAAS;IAE/B,oEAAoE;IACpE,OAAO,CAAC,kBAAkB,CAAuB;IAEjD,oEAAoE;IACpE,IAAW,iBAAiB,IAAI,WAAW,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAExE;IAED,sEAAsE;IACtE,IAAW,SAAS,IAAI,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAElD;IAEQ,OAAO,CAAC,iBAAiB,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAe9D;IAED;;;;;;;OAOG;IACI,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CA4BvD;IAED,UAAmB,YAAY,IAAI,IAAI,CAkOtC;IAED;;;;;;;;;;;OAWG;IACH,UAAmB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAwItE;IAED;;;;;;;;OAQG;IACH,OAAO,CAAC,qBAAqB;IAa7B;;;;;OAKG;IACH,OAAO,CAAC,kBAAkB;IAQ1B;;;;OAIG;IACH,OAAO,CAAC,qBAAqB;IA0B7B;;;OAGG;IACH,UAAmB,gBAAgB,IAAI,IAAI,CA0B1C;IAED;;;OAGG;IACH,OAAO,CAAC,qBAAqB;IAiBpB,MAAM,yCAqBd;CACJ"}