matter-server 0.2.4 → 0.2.6

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.
@@ -116,6 +116,10 @@ async function start() {
116
116
  logger.info(`Found legacy data: ${parts.join(", ")}`);
117
117
  }
118
118
  config = await ConfigStorage.create(env);
119
+ if (legacyData.mostCommonFabricLabel?.length && legacyData.mostCommonFabricLabel !== "HomeAssistant" && config.fabricLabel === "HomeAssistant") {
120
+ logger.info(`Setting fabric label from legacy data: "${legacyData.mostCommonFabricLabel}"`);
121
+ await config.set({ fabricLabel: legacyData.mostCommonFabricLabel });
122
+ }
119
123
  controller = await MatterController.create(
120
124
  env,
121
125
  config,
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/MatterServer.ts"],
4
- "mappings": "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",
4
+ "mappings": "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",
5
5
  "names": []
6
6
  }
@@ -6,6 +6,20 @@
6
6
  import { CertificateAuthorityConfiguration, Environment, LegacyFabricConfigData, LegacyServerFile } from "@matter-server/ws-controller";
7
7
  import { ChipConfigData } from "./index.js";
8
8
  import type { OperationalCredentials } from "./types.js";
9
+ /**
10
+ * Extract the most common fabric label from node attributes.
11
+ *
12
+ * For each node:
13
+ * 1. Gets "0/62/5" (CurrentFabricIndex) - the index of our controller's fabric on that node
14
+ * 2. Finds the matching entry in "0/62/1" (Fabrics) where key "254" equals CurrentFabricIndex
15
+ * 3. Extracts the label (key "5") from that entry
16
+ *
17
+ * Returns the label that appears most frequently across all nodes.
18
+ *
19
+ * @param serverFile The legacy server file with node data
20
+ * @returns The most common fabric label, or undefined if none found
21
+ */
22
+ export declare function extractMostCommonFabricLabel(serverFile: LegacyServerFile): string | undefined;
9
23
  /** Result of loading legacy data */
10
24
  export interface LegacyData {
11
25
  /** Chip config data (fabric certs, sessions, etc.) */
@@ -18,6 +32,8 @@ export interface LegacyData {
18
32
  operationalCredentials?: OperationalCredentials;
19
33
  /** Certificate Authority configuration (parsed from operational credentials) */
20
34
  certificateAuthorityConfig?: CertificateAuthorityConfiguration;
35
+ /** Most common fabric label found across all nodes (from attribute 0/62/1) */
36
+ mostCommonFabricLabel?: string;
21
37
  /** Whether any legacy data was found */
22
38
  hasData: boolean;
23
39
  /** Error message if loading failed */
@@ -1 +1 @@
1
- {"version":3,"file":"LegacyDataLoader.d.ts","sourceRoot":"","sources":["../../../src/converter/LegacyDataLoader.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACH,iCAAiC,EAGjC,WAAW,EACX,sBAAsB,EACtB,gBAAgB,EAEnB,MAAM,8BAA8B,CAAC;AAGtC,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAczD,oCAAoC;AACpC,MAAM,WAAW,UAAU;IACvB,sDAAsD;IACtD,UAAU,CAAC,EAAE,cAAc,CAAC;IAC5B,kDAAkD;IAClD,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B,qEAAqE;IACrE,YAAY,CAAC,EAAE,sBAAsB,CAAC;IACtC,4EAA4E;IAC5E,sBAAsB,CAAC,EAAE,sBAAsB,CAAC;IAChD,gFAAgF;IAChF,0BAA0B,CAAC,EAAE,iCAAiC,CAAC;IAC/D,wCAAwC;IACxC,OAAO,EAAE,OAAO,CAAC;IACjB,sCAAsC;IACtC,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;GAMG;AACH,wBAAsB,cAAc,CAAC,GAAG,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAsG/F;AAED;;;;;GAKG;AACH,wBAAsB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOzE;AAED;;;;;;;;GAQG;AACH,wBAAsB,oBAAoB,CACtC,GAAG,EAAE,WAAW,EAChB,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,sBAAsB,EACpC,UAAU,EAAE,gBAAgB,GAC7B,OAAO,CAAC,IAAI,CAAC,CAuBf;AAED;;;;;;;;;GASG;AACH,wBAAsB,yBAAyB,CAC3C,GAAG,EAAE,WAAW,EAChB,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,sBAAsB,EACpC,MAAM,EAAE,MAAM,GAAG,MAAM,EACvB,gBAAgB,EAAE,MAAM,GACzB,OAAO,CAAC,IAAI,CAAC,CA0Cf;AAED;;;;;;;;GAQG;AACH,wBAAsB,8BAA8B,CAChD,GAAG,EAAE,WAAW,EAChB,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,sBAAsB,EACpC,MAAM,EAAE,MAAM,GAAG,MAAM,GACxB,OAAO,CAAC,IAAI,CAAC,CA8Bf"}
1
+ {"version":3,"file":"LegacyDataLoader.d.ts","sourceRoot":"","sources":["../../../src/converter/LegacyDataLoader.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACH,iCAAiC,EAGjC,WAAW,EACX,sBAAsB,EACtB,gBAAgB,EAEnB,MAAM,8BAA8B,CAAC;AAGtC,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAsBzD;;;;;;;;;;;;GAYG;AACH,wBAAgB,4BAA4B,CAAC,UAAU,EAAE,gBAAgB,GAAG,MAAM,GAAG,SAAS,CAmD7F;AAED,oCAAoC;AACpC,MAAM,WAAW,UAAU;IACvB,sDAAsD;IACtD,UAAU,CAAC,EAAE,cAAc,CAAC;IAC5B,kDAAkD;IAClD,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B,qEAAqE;IACrE,YAAY,CAAC,EAAE,sBAAsB,CAAC;IACtC,4EAA4E;IAC5E,sBAAsB,CAAC,EAAE,sBAAsB,CAAC;IAChD,gFAAgF;IAChF,0BAA0B,CAAC,EAAE,iCAAiC,CAAC;IAC/D,8EAA8E;IAC9E,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,wCAAwC;IACxC,OAAO,EAAE,OAAO,CAAC;IACjB,sCAAsC;IACtC,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;GAMG;AACH,wBAAsB,cAAc,CAAC,GAAG,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAyG/F;AAED;;;;;GAKG;AACH,wBAAsB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOzE;AAED;;;;;;;;GAQG;AACH,wBAAsB,oBAAoB,CACtC,GAAG,EAAE,WAAW,EAChB,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,sBAAsB,EACpC,UAAU,EAAE,gBAAgB,GAC7B,OAAO,CAAC,IAAI,CAAC,CAuBf;AAED;;;;;;;;;GASG;AACH,wBAAsB,yBAAyB,CAC3C,GAAG,EAAE,WAAW,EAChB,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,sBAAsB,EACpC,MAAM,EAAE,MAAM,GAAG,MAAM,EACvB,gBAAgB,EAAE,MAAM,GACzB,OAAO,CAAC,IAAI,CAAC,CA0Cf;AAED;;;;;;;;GAQG;AACH,wBAAsB,8BAA8B,CAChD,GAAG,EAAE,WAAW,EAChB,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,sBAAsB,EACpC,MAAM,EAAE,MAAM,GAAG,MAAM,GACxB,OAAO,CAAC,IAAI,CAAC,CA8Bf"}
@@ -12,6 +12,47 @@ import { access, copyFile, readFile, writeFile } from "node:fs/promises";
12
12
  import { join } from "node:path";
13
13
  import { ChipConfigData } from "./index.js";
14
14
  const logger = Logger.get("LegacyDataLoader");
15
+ const FABRICS_ATTRIBUTE_PATH = "0/62/1";
16
+ const CURRENT_FABRIC_INDEX_PATH = "0/62/5";
17
+ const FABRIC_LABEL_KEY = "5";
18
+ const FABRIC_INDEX_KEY = "254";
19
+ function extractMostCommonFabricLabel(serverFile) {
20
+ const labelCounts = /* @__PURE__ */ new Map();
21
+ for (const nodeData of Object.values(serverFile.nodes)) {
22
+ const currentFabricIndex = nodeData.attributes[CURRENT_FABRIC_INDEX_PATH];
23
+ if (typeof currentFabricIndex !== "number") {
24
+ continue;
25
+ }
26
+ const fabricsAttr = nodeData.attributes[FABRICS_ATTRIBUTE_PATH];
27
+ if (!Array.isArray(fabricsAttr)) {
28
+ continue;
29
+ }
30
+ for (const fabricDescriptor of fabricsAttr) {
31
+ if (fabricDescriptor && typeof fabricDescriptor === "object" && fabricDescriptor[FABRIC_INDEX_KEY] === currentFabricIndex) {
32
+ const label = fabricDescriptor[FABRIC_LABEL_KEY];
33
+ if (typeof label === "string" && label.length > 0) {
34
+ labelCounts.set(label, (labelCounts.get(label) ?? 0) + 1);
35
+ }
36
+ break;
37
+ }
38
+ }
39
+ }
40
+ if (labelCounts.size === 0) {
41
+ return void 0;
42
+ }
43
+ let mostCommonLabel;
44
+ let maxCount = 0;
45
+ for (const [label, count] of labelCounts) {
46
+ if (count > maxCount) {
47
+ maxCount = count;
48
+ mostCommonLabel = label;
49
+ }
50
+ }
51
+ if (mostCommonLabel) {
52
+ logger.info(`Found most common fabric label "${mostCommonLabel}" (appeared in ${maxCount} node(s))`);
53
+ }
54
+ return mostCommonLabel;
55
+ }
15
56
  async function loadLegacyData(env, storagePath) {
16
57
  const result = {
17
58
  hasData: false
@@ -84,6 +125,7 @@ async function loadLegacyData(env, storagePath) {
84
125
  logger.info(
85
126
  `Loaded legacy server data from ${serverFileName}: ${nodeCount} node(s), last_node_id=${serverFile.last_node_id}`
86
127
  );
128
+ result.mostCommonFabricLabel = extractMostCommonFabricLabel(serverFile);
87
129
  } catch (err) {
88
130
  if (err.code !== "ENOENT") {
89
131
  logger.warn(`Error loading server file ${serverFileName}: ${err}`);
@@ -178,6 +220,7 @@ async function removeNodeFromLegacyServerFile(env, storagePath, fabricConfig, no
178
220
  }
179
221
  export {
180
222
  addNodeToLegacyServerFile,
223
+ extractMostCommonFabricLabel,
181
224
  hasLegacyData,
182
225
  loadLegacyData,
183
226
  removeNodeFromLegacyServerFile,
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/converter/LegacyDataLoader.ts"],
4
- "mappings": "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",
4
+ "mappings": "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",
5
5
  "names": []
6
6
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "matter-server",
3
- "version": "0.2.4",
3
+ "version": "0.2.6",
4
4
  "type": "module",
5
5
  "description": "WebSocket Matter server based on matter.js",
6
6
  "bugs": {
@@ -24,9 +24,9 @@
24
24
  },
25
25
  "dependencies": {
26
26
  "@matter/main": "0.16.5",
27
- "@matter-server/ws-controller": "0.2.4",
28
- "@matter-server/dashboard": "0.2.4",
29
- "@matter-server/custom-clusters": "0.2.4",
27
+ "@matter-server/ws-controller": "0.2.6",
28
+ "@matter-server/dashboard": "0.2.6",
29
+ "@matter-server/custom-clusters": "0.2.6",
30
30
  "commander": "^14.0.2",
31
31
  "express": "^5.2.1"
32
32
  },
@@ -34,7 +34,7 @@
34
34
  "@types/express": "^5.0.6",
35
35
  "@types/node": "^25.0.8",
36
36
  "@matter/testing": "0.16.5",
37
- "@matter-server/ws-client": "0.2.4"
37
+ "@matter-server/ws-client": "0.2.6"
38
38
  },
39
39
  "files": [
40
40
  "dist/**/*",
@@ -146,6 +146,17 @@ async function start() {
146
146
  }
147
147
 
148
148
  config = await ConfigStorage.create(env);
149
+
150
+ // If we found a most common fabric label in legacy data, use it as the default
151
+ // (only applies on first migration when no fabricLabel is stored yet)
152
+ if (
153
+ legacyData.mostCommonFabricLabel?.length &&
154
+ legacyData.mostCommonFabricLabel !== "HomeAssistant" &&
155
+ config.fabricLabel === "HomeAssistant"
156
+ ) {
157
+ logger.info(`Setting fabric label from legacy data: "${legacyData.mostCommonFabricLabel}"`);
158
+ await config.set({ fabricLabel: legacyData.mostCommonFabricLabel });
159
+ }
149
160
  controller = await MatterController.create(
150
161
  env,
151
162
  config,
@@ -30,6 +30,80 @@ import type { OperationalCredentials } from "./types.js";
30
30
 
31
31
  const logger = Logger.get("LegacyDataLoader");
32
32
 
33
+ // Attribute paths for OperationalCredentials cluster (62/0x3E)
34
+ const FABRICS_ATTRIBUTE_PATH = "0/62/1"; // Fabrics list
35
+ const CURRENT_FABRIC_INDEX_PATH = "0/62/5"; // CurrentFabricIndex
36
+
37
+ // Keys in the tag-based FabricDescriptor structure
38
+ const FABRIC_LABEL_KEY = "5"; // Label field
39
+ const FABRIC_INDEX_KEY = "254"; // FabricIndex field
40
+
41
+ /**
42
+ * Extract the most common fabric label from node attributes.
43
+ *
44
+ * For each node:
45
+ * 1. Gets "0/62/5" (CurrentFabricIndex) - the index of our controller's fabric on that node
46
+ * 2. Finds the matching entry in "0/62/1" (Fabrics) where key "254" equals CurrentFabricIndex
47
+ * 3. Extracts the label (key "5") from that entry
48
+ *
49
+ * Returns the label that appears most frequently across all nodes.
50
+ *
51
+ * @param serverFile The legacy server file with node data
52
+ * @returns The most common fabric label, or undefined if none found
53
+ */
54
+ export function extractMostCommonFabricLabel(serverFile: LegacyServerFile): string | undefined {
55
+ const labelCounts = new Map<string, number>();
56
+
57
+ for (const nodeData of Object.values(serverFile.nodes)) {
58
+ // Get the current fabric index for this node
59
+ const currentFabricIndex = nodeData.attributes[CURRENT_FABRIC_INDEX_PATH];
60
+ if (typeof currentFabricIndex !== "number") {
61
+ continue;
62
+ }
63
+
64
+ // Get the fabrics list
65
+ const fabricsAttr = nodeData.attributes[FABRICS_ATTRIBUTE_PATH];
66
+ if (!Array.isArray(fabricsAttr)) {
67
+ continue;
68
+ }
69
+
70
+ // Find the fabric entry matching our fabric index
71
+ for (const fabricDescriptor of fabricsAttr) {
72
+ if (
73
+ fabricDescriptor &&
74
+ typeof fabricDescriptor === "object" &&
75
+ fabricDescriptor[FABRIC_INDEX_KEY] === currentFabricIndex
76
+ ) {
77
+ const label = fabricDescriptor[FABRIC_LABEL_KEY];
78
+ if (typeof label === "string" && label.length > 0) {
79
+ labelCounts.set(label, (labelCounts.get(label) ?? 0) + 1);
80
+ }
81
+ break; // Found our fabric, no need to check others
82
+ }
83
+ }
84
+ }
85
+
86
+ if (labelCounts.size === 0) {
87
+ return undefined;
88
+ }
89
+
90
+ // Find the label with the highest count
91
+ let mostCommonLabel: string | undefined;
92
+ let maxCount = 0;
93
+ for (const [label, count] of labelCounts) {
94
+ if (count > maxCount) {
95
+ maxCount = count;
96
+ mostCommonLabel = label;
97
+ }
98
+ }
99
+
100
+ if (mostCommonLabel) {
101
+ logger.info(`Found most common fabric label "${mostCommonLabel}" (appeared in ${maxCount} node(s))`);
102
+ }
103
+
104
+ return mostCommonLabel;
105
+ }
106
+
33
107
  /** Result of loading legacy data */
34
108
  export interface LegacyData {
35
109
  /** Chip config data (fabric certs, sessions, etc.) */
@@ -42,6 +116,8 @@ export interface LegacyData {
42
116
  operationalCredentials?: OperationalCredentials;
43
117
  /** Certificate Authority configuration (parsed from operational credentials) */
44
118
  certificateAuthorityConfig?: CertificateAuthorityConfiguration;
119
+ /** Most common fabric label found across all nodes (from attribute 0/62/1) */
120
+ mostCommonFabricLabel?: string;
45
121
  /** Whether any legacy data was found */
46
122
  hasData: boolean;
47
123
  /** Error message if loading failed */
@@ -147,6 +223,9 @@ export async function loadLegacyData(env: Environment, storagePath: string): Pro
147
223
  logger.info(
148
224
  `Loaded legacy server data from ${serverFileName}: ${nodeCount} node(s), last_node_id=${serverFile.last_node_id}`,
149
225
  );
226
+
227
+ // Extract the most common fabric label from node attributes
228
+ result.mostCommonFabricLabel = extractMostCommonFabricLabel(serverFile);
150
229
  } catch (err) {
151
230
  if ((err as NodeJS.ErrnoException).code !== "ENOENT") {
152
231
  logger.warn(`Error loading server file ${serverFileName}: ${err}`);