homebridge 2.0.0-alpha.42 → 2.0.0-alpha.43

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 (37) hide show
  1. package/dist/api.d.ts +34 -0
  2. package/dist/api.d.ts.map +1 -1
  3. package/dist/api.js +28 -0
  4. package/dist/api.js.map +1 -1
  5. package/dist/bridgeService.d.ts +9 -2
  6. package/dist/bridgeService.d.ts.map +1 -1
  7. package/dist/bridgeService.js +14 -3
  8. package/dist/bridgeService.js.map +1 -1
  9. package/dist/bridgeTypes.d.ts +54 -0
  10. package/dist/bridgeTypes.d.ts.map +1 -0
  11. package/dist/bridgeTypes.js +8 -0
  12. package/dist/bridgeTypes.js.map +1 -0
  13. package/dist/childBridgeFork.d.ts +6 -2
  14. package/dist/childBridgeFork.d.ts.map +1 -1
  15. package/dist/childBridgeFork.js +58 -16
  16. package/dist/childBridgeFork.js.map +1 -1
  17. package/dist/childBridgeService.d.ts +20 -6
  18. package/dist/childBridgeService.d.ts.map +1 -1
  19. package/dist/childBridgeService.js +25 -2
  20. package/dist/childBridgeService.js.map +1 -1
  21. package/dist/matter/matterServer.d.ts +1 -0
  22. package/dist/matter/matterServer.d.ts.map +1 -1
  23. package/dist/matter/matterServer.js +74 -12
  24. package/dist/matter/matterServer.js.map +1 -1
  25. package/dist/matter/matterSharedTypes.d.ts +15 -17
  26. package/dist/matter/matterSharedTypes.d.ts.map +1 -1
  27. package/dist/matter/matterSharedTypes.js +3 -0
  28. package/dist/matter/matterSharedTypes.js.map +1 -1
  29. package/dist/matter/matterStorage.d.ts +7 -3
  30. package/dist/matter/matterStorage.d.ts.map +1 -1
  31. package/dist/matter/matterStorage.js +124 -37
  32. package/dist/matter/matterStorage.js.map +1 -1
  33. package/dist/server.d.ts +6 -0
  34. package/dist/server.d.ts.map +1 -1
  35. package/dist/server.js +67 -18
  36. package/dist/server.js.map +1 -1
  37. package/package.json +4 -4
@@ -1,8 +1,12 @@
1
+ import type { BaseBridgeMetadata, BaseCommissioningInfo } from '../bridgeTypes.js';
1
2
  /**
2
3
  * Shared Matter Types
3
4
  *
4
5
  * These types are used by both the homebridge core and the UI
5
6
  * to ensure consistency across the Matter implementation.
7
+ *
8
+ * Matter-specific interfaces extend the base bridge types for
9
+ * consistency with HAP child bridges.
6
10
  */
7
11
  /**
8
12
  * Matter bridge status states
@@ -23,45 +27,39 @@ export declare enum MatterBridgeStatus {
23
27
  }
24
28
  /**
25
29
  * Metadata for a Matter bridge instance
30
+ *
31
+ * Extends the base bridge metadata with Matter-specific properties.
32
+ * This ensures consistency with HAP child bridge metadata.
26
33
  */
27
- export interface MatterBridgeMetadata {
28
- /** Bridge type identifier */
34
+ export interface MatterBridgeMetadata extends Omit<BaseBridgeMetadata, 'type' | 'status'> {
35
+ /** Bridge type identifier (always 'matter') */
29
36
  type: 'matter';
30
37
  /** Current operational status */
31
38
  status: MatterBridgeStatus;
32
- /** Matter server port */
33
- port?: number;
34
39
  /** QR code payload for commissioning */
35
40
  qrCode?: string;
36
41
  /** Manual pairing code for commissioning */
37
42
  manualPairingCode?: string;
38
43
  /** Device serial number */
39
44
  serialNumber?: string;
40
- /** Display name of the bridge */
41
- name: string;
42
- /** Plugin identifier */
43
- plugin: string;
44
- /** Unique identifier for this bridge instance */
45
- identifier: string;
46
45
  /** Number of devices exposed by this bridge */
47
46
  deviceCount: number;
48
- /** Whether the bridge was manually stopped */
49
- manuallyStopped?: boolean;
50
- /** Process ID of the bridge if running as child process */
51
- pid?: number;
52
47
  /** Whether the bridge has been commissioned */
53
48
  commissioned?: boolean;
54
49
  }
55
50
  /**
56
51
  * Matter commissioning information
52
+ *
53
+ * Extends the base commissioning info with Matter-specific properties.
54
+ * This ensures consistency with HAP pairing information.
57
55
  */
58
- export interface MatterCommissioningInfo {
56
+ export interface MatterCommissioningInfo extends Omit<BaseCommissioningInfo, 'type' | 'commissioned'> {
57
+ /** Bridge type (always 'matter') */
58
+ type?: 'matter';
59
59
  /** QR code payload for commissioning */
60
60
  qrCode?: string;
61
61
  /** Manual pairing code for commissioning */
62
62
  manualPairingCode?: string;
63
- /** Device serial number */
64
- serialNumber?: string;
65
63
  /** Whether the device is commissioned */
66
64
  commissioned: boolean;
67
65
  }
@@ -1 +1 @@
1
- {"version":3,"file":"matterSharedTypes.d.ts","sourceRoot":"","sources":["../../src/matter/matterSharedTypes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"matterSharedTypes.d.ts","sourceRoot":"","sources":["../../src/matter/matterSharedTypes.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,9 @@
3
3
  *
4
4
  * These types are used by both the homebridge core and the UI
5
5
  * to ensure consistency across the Matter implementation.
6
+ *
7
+ * Matter-specific interfaces extend the base bridge types for
8
+ * consistency with HAP child bridges.
6
9
  */
7
10
  /**
8
11
  * Matter bridge status states
@@ -1 +1 @@
1
- {"version":3,"file":"matterSharedTypes.js","sourceRoot":"","sources":["../../src/matter/matterSharedTypes.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;GAEG;AACH,MAAM,CAAN,IAAY,kBAeX;AAfD,WAAY,kBAAkB;IAC5B;;OAEG;IACH,yCAAmB,CAAA;IAEnB;;OAEG;IACH,+BAAS,CAAA;IAET;;OAEG;IACH,mCAAa,CAAA;AACf,CAAC,EAfW,kBAAkB,KAAlB,kBAAkB,QAe7B;AAuGD;;GAEG;AACH,MAAM,CAAN,IAAY,sBAqBX;AArBD,WAAY,sBAAsB;IAChC,kDAAkD;IAClD,yCAAe,CAAA;IACf,uCAAuC;IACvC,uCAAa,CAAA;IACb,kCAAkC;IAClC,2CAAiB,CAAA;IACjB,+CAA+C;IAC/C,yCAAe,CAAA;IACf,mDAAmD;IACnD,2CAAiB,CAAA;IACjB,6CAA6C;IAC7C,wDAA8B,CAAA;IAC9B,gDAAgD;IAChD,8DAAoC,CAAA;IACpC,0CAA0C;IAC1C,wDAA8B,CAAA;IAC9B,2CAA2C;IAC3C,yCAAe,CAAA;IACf,iCAAiC;IACjC,+CAAqB,CAAA;AACvB,CAAC,EArBW,sBAAsB,KAAtB,sBAAsB,QAqBjC"}
1
+ {"version":3,"file":"matterSharedTypes.js","sourceRoot":"","sources":["../../src/matter/matterSharedTypes.ts"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AAEH;;GAEG;AACH,MAAM,CAAN,IAAY,kBAeX;AAfD,WAAY,kBAAkB;IAC5B;;OAEG;IACH,yCAAmB,CAAA;IAEnB;;OAEG;IACH,+BAAS,CAAA;IAET;;OAEG;IACH,mCAAa,CAAA;AACf,CAAC,EAfW,kBAAkB,KAAlB,kBAAkB,QAe7B;AAiGD;;GAEG;AACH,MAAM,CAAN,IAAY,sBAqBX;AArBD,WAAY,sBAAsB;IAChC,kDAAkD;IAClD,yCAAe,CAAA;IACf,uCAAuC;IACvC,uCAAa,CAAA;IACb,kCAAkC;IAClC,2CAAiB,CAAA;IACjB,+CAA+C;IAC/C,yCAAe,CAAA;IACf,mDAAmD;IACnD,2CAAiB,CAAA;IACjB,6CAA6C;IAC7C,wDAA8B,CAAA;IAC9B,gDAAgD;IAChD,8DAAoC,CAAA;IACpC,0CAA0C;IAC1C,wDAA8B,CAAA;IAC9B,2CAA2C;IAC3C,yCAAe,CAAA;IACf,iCAAiC;IACjC,+CAAqB,CAAA;AACvB,CAAC,EArBW,sBAAsB,KAAtB,sBAAsB,QAqBjC"}
@@ -4,13 +4,12 @@
4
4
  */
5
5
  export declare class HomebridgeMatterStorage {
6
6
  private namespace;
7
- private storagePath;
8
7
  private storage;
9
- private filePath;
8
+ private readonly filePath;
10
9
  private isInitialized;
11
- private initializationPromise;
12
10
  private writeTimer;
13
11
  private pendingWrite;
12
+ private persistLock;
14
13
  constructor(namespace: string, storagePath: string);
15
14
  /**
16
15
  * Synchronously initialize storage by loading existing data
@@ -26,6 +25,11 @@ export declare class HomebridgeMatterStorage {
26
25
  * Build a context key from an array of contexts
27
26
  */
28
27
  private buildContextKey;
28
+ /**
29
+ * Recursively convert special serialized types back to their original types
30
+ * This handles cases where objects weren't fully deserialized by the JSON reviver
31
+ */
32
+ private deserializeValue;
29
33
  /**
30
34
  * Get a value from storage (Matter.js interface)
31
35
  */
@@ -1 +1 @@
1
- {"version":3,"file":"matterStorage.d.ts","sourceRoot":"","sources":["../../src/matter/matterStorage.ts"],"names":[],"mappings":"AAoBA;;;GAGG;AACH,qBAAa,uBAAuB;IAShC,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,WAAW;IATrB,OAAO,CAAC,OAAO,CAA8B;IAC7C,OAAO,CAAC,QAAQ,CAAQ;IACxB,OAAO,CAAC,aAAa,CAAQ;IAC7B,OAAO,CAAC,qBAAqB,CAA6B;IAC1D,OAAO,CAAC,UAAU,CAA8B;IAChD,OAAO,CAAC,YAAY,CAAQ;gBAGlB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM;IAS7B;;;OAGG;IACH,OAAO,CAAC,cAAc;IA+BtB;;;OAGG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAKjC;;OAEG;IACH,OAAO,CAAC,eAAe;IAIvB;;OAEG;IACH,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS;IAMzD;;OAEG;IACH,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI;IAC1D,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAkB9D;;OAEG;IACH,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IAQ7C;;OAEG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI;IAsBlC;;OAEG;IACH,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE;IA8BlC;;OAEG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE;IA+BtC;;OAEG;IACH,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO;IAQ7C;;OAEG;IACG,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAwBlE;;OAEG;YACW,eAAe;IAsB7B;;OAEG;YACW,OAAO;IAgCrB;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAUnC;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAM5B;;OAEG;IACH,QAAQ,IAAI;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE;CAOjE;AAED;;;GAGG;AACH,qBAAa,oBAAoB;IAGnB,OAAO,CAAC,WAAW;IAF/B,OAAO,CAAC,QAAQ,CAAkD;gBAE9C,WAAW,EAAE,MAAM;IAEvC;;OAEG;IACH,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,uBAAuB;IAStD;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAM/B;;OAEG;IACH,WAAW,IAAI,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CAG3E"}
1
+ {"version":3,"file":"matterStorage.d.ts","sourceRoot":"","sources":["../../src/matter/matterStorage.ts"],"names":[],"mappings":"AAqBA;;;GAGG;AACH,qBAAa,uBAAuB;IAShC,OAAO,CAAC,SAAS;IARnB,OAAO,CAAC,OAAO,CAA8B;IAC7C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAQ;IACjC,OAAO,CAAC,aAAa,CAAQ;IAC7B,OAAO,CAAC,UAAU,CAA8B;IAChD,OAAO,CAAC,YAAY,CAAQ;IAC5B,OAAO,CAAC,WAAW,CAA6B;gBAGtC,SAAS,EAAE,MAAM,EACzB,WAAW,EAAE,MAAM;IASrB;;;OAGG;IACH,OAAO,CAAC,cAAc;IAgCtB;;;OAGG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAKjC;;OAEG;IACH,OAAO,CAAC,eAAe;IAIvB;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IAiCxB;;OAEG;IACH,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS;IA6CzD;;OAEG;IACH,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI;IAC1D,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAkB9D;;OAEG;IACH,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IAQ7C;;OAEG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI;IAsBlC;;OAEG;IACH,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE;IA8BlC;;OAEG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE;IA+BtC;;OAEG;IACH,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO;IAQ7C;;OAEG;IACG,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAwBlE;;OAEG;YACW,eAAe;IAsB7B;;OAEG;YACW,OAAO;IAqDrB;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAUnC;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAM5B;;OAEG;IACH,QAAQ,IAAI;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE;CAOjE;AAED;;;GAGG;AACH,qBAAa,oBAAoB;IAGnB,OAAO,CAAC,WAAW;IAF/B,OAAO,CAAC,QAAQ,CAAkD;gBAE9C,WAAW,EAAE,MAAM;IAEvC;;OAEG;IACH,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,uBAAuB;IAStD;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAM/B;;OAEG;IACH,WAAW,IAAI,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CAG3E"}
@@ -5,6 +5,7 @@
5
5
  * Provides persistent storage for Matter fabric data and device configuration.
6
6
  * This ensures commissioning data persists across Homebridge restarts.
7
7
  */
8
+ import { Buffer } from 'node:buffer';
8
9
  import * as fs from 'node:fs';
9
10
  import * as fsp from 'node:fs/promises';
10
11
  import * as path from 'node:path';
@@ -18,16 +19,14 @@ const STORAGE_WRITE_DEBOUNCE_MS = 100; // Delay for non-critical writes
18
19
  */
19
20
  export class HomebridgeMatterStorage {
20
21
  namespace;
21
- storagePath;
22
22
  storage = new Map();
23
23
  filePath;
24
24
  isInitialized = false;
25
- initializationPromise = null;
26
25
  writeTimer = null;
27
26
  pendingWrite = false;
27
+ persistLock = null;
28
28
  constructor(namespace, storagePath) {
29
29
  this.namespace = namespace;
30
- this.storagePath = storagePath;
31
30
  this.filePath = path.join(storagePath, `${namespace}.json`);
32
31
  // Synchronously load existing data to avoid race conditions with Matter.js
33
32
  // Matter.js expects storage to be immediately available
@@ -40,16 +39,16 @@ export class HomebridgeMatterStorage {
40
39
  initializeSync() {
41
40
  try {
42
41
  const fileContent = fs.readFileSync(this.filePath, 'utf-8');
43
- // Custom reviver to handle BigInt deserialization
44
- const data = JSON.parse(fileContent, (_key, value) => {
45
- if (value && typeof value === 'object' && value.__type === 'bigint') {
46
- return BigInt(value.value);
47
- }
48
- return value;
49
- });
42
+ // Parse WITHOUT a reviver - we'll deserialize manually
43
+ const data = JSON.parse(fileContent);
50
44
  // Ensure data is valid before loading
51
45
  if (data && typeof data === 'object') {
52
- this.storage = new Map(Object.entries(data));
46
+ // Deserialize ALL values as we load them into the Map
47
+ const entries = Object.entries(data).map(([key, value]) => [
48
+ key,
49
+ this.deserializeValue(value),
50
+ ]);
51
+ this.storage = new Map(entries);
53
52
  log.debug(`Loaded ${this.storage.size} entries for namespace: ${this.namespace}`);
54
53
  }
55
54
  else {
@@ -84,13 +83,81 @@ export class HomebridgeMatterStorage {
84
83
  buildContextKey(contexts) {
85
84
  return contexts.join('.');
86
85
  }
86
+ /**
87
+ * Recursively convert special serialized types back to their original types
88
+ * This handles cases where objects weren't fully deserialized by the JSON reviver
89
+ */
90
+ deserializeValue(value) {
91
+ if (value && typeof value === 'object') {
92
+ // Handle special type markers
93
+ const obj = value;
94
+ if (obj.__type === 'bigint' && typeof obj.value === 'string') {
95
+ return BigInt(obj.value);
96
+ }
97
+ if (obj.__type === 'Uint8Array' && Array.isArray(obj.value)) {
98
+ return new Uint8Array(obj.value);
99
+ }
100
+ // Handle Node.js Buffer JSON format: {type: "Buffer", data: [...]}
101
+ if (obj.type === 'Buffer' && Array.isArray(obj.data)) {
102
+ return new Uint8Array(obj.data);
103
+ }
104
+ // Recursively process arrays
105
+ if (Array.isArray(value)) {
106
+ return value.map(item => this.deserializeValue(item));
107
+ }
108
+ // Recursively process plain objects
109
+ if (Object.getPrototypeOf(value) === Object.prototype) {
110
+ const result = {};
111
+ for (const [k, v] of Object.entries(value)) {
112
+ result[k] = this.deserializeValue(v);
113
+ }
114
+ return result;
115
+ }
116
+ }
117
+ return value;
118
+ }
87
119
  /**
88
120
  * Get a value from storage (Matter.js interface)
89
121
  */
90
122
  get(contexts, key) {
91
123
  // Storage is initialized in constructor, so this should always work
92
124
  const fullKey = contexts.length ? `${this.buildContextKey(contexts)}.${key}` : key;
93
- return this.storage.get(fullKey);
125
+ const value = this.storage.get(fullKey);
126
+ // Debug logging for fabric data
127
+ if (fullKey.includes('fabric')) {
128
+ log.info(`[STORAGE GET] ${fullKey}`);
129
+ log.info(` Before deserialize: type=${typeof value}, constructor=${value?.constructor?.name}, isUint8Array=${value instanceof Uint8Array}`);
130
+ if (value && typeof value === 'object' && !(value instanceof Uint8Array)) {
131
+ const obj = value;
132
+ if (obj.__type) {
133
+ log.info(` Has __type: ${obj.__type}`);
134
+ }
135
+ // Check for nested Uint8Arrays
136
+ for (const key of Object.keys(obj).slice(0, 5)) {
137
+ const val = obj[key];
138
+ if (val && typeof val === 'object') {
139
+ log.info(` ${key}: type=${typeof val}, constructor=${val?.constructor?.name}, __type=${val.__type}, isUint8Array=${val instanceof Uint8Array}`);
140
+ }
141
+ }
142
+ }
143
+ }
144
+ // Ensure value is fully deserialized (handles nested special types)
145
+ const result = this.deserializeValue(value);
146
+ // Debug logging after deserialization
147
+ if (fullKey.includes('fabric')) {
148
+ log.info(` After deserialize: type=${typeof result}, constructor=${result?.constructor?.name}, isUint8Array=${result instanceof Uint8Array}`);
149
+ if (result && typeof result === 'object' && !(result instanceof Uint8Array)) {
150
+ const obj = result;
151
+ // Check for nested Uint8Arrays
152
+ for (const key of Object.keys(obj).slice(0, 5)) {
153
+ const val = obj[key];
154
+ if (val && typeof val === 'object') {
155
+ log.info(` ${key}: isUint8Array=${val instanceof Uint8Array}`);
156
+ }
157
+ }
158
+ }
159
+ }
160
+ return result;
94
161
  }
95
162
  set(contexts, keyOrValues, value) {
96
163
  const contextKey = this.buildContextKey(contexts);
@@ -222,13 +289,13 @@ export class HomebridgeMatterStorage {
222
289
  if (key.startsWith(prefix)) {
223
290
  const subKey = key.substring(prefix.length);
224
291
  if (!subKey.includes('.')) {
225
- values[subKey] = value;
292
+ values[subKey] = this.deserializeValue(value);
226
293
  }
227
294
  }
228
295
  }
229
296
  else {
230
297
  if (!key.includes('.')) {
231
- values[key] = value;
298
+ values[key] = this.deserializeValue(value);
232
299
  }
233
300
  }
234
301
  }
@@ -258,32 +325,52 @@ export class HomebridgeMatterStorage {
258
325
  * Persist storage to disk with atomic write
259
326
  */
260
327
  async persist() {
328
+ // Wait for any in-progress persist operation to complete
329
+ if (this.persistLock) {
330
+ await this.persistLock;
331
+ }
261
332
  if (!this.pendingWrite) {
262
333
  return;
263
334
  }
264
- try {
265
- const data = Object.fromEntries(this.storage.entries());
266
- const dir = path.dirname(this.filePath);
267
- // Ensure directory exists
268
- await fsp.mkdir(dir, { recursive: true });
269
- // Atomic write: write to temp file then rename
270
- const tempFile = `${this.filePath}.tmp`;
271
- // Custom replacer to handle BigInt serialization
272
- const jsonString = JSON.stringify(data, (_key, value) => {
273
- if (typeof value === 'bigint') {
274
- return { __type: 'bigint', value: value.toString() };
275
- }
276
- return value;
277
- }, 2);
278
- await fsp.writeFile(tempFile, jsonString, 'utf-8');
279
- await fsp.rename(tempFile, this.filePath);
280
- this.pendingWrite = false;
281
- log.debug(`Persisted ${this.storage.size} entries for namespace: ${this.namespace}`);
282
- }
283
- catch (error) {
284
- log.error(`Failed to persist storage for ${this.namespace}:`, error);
285
- // Don't throw - we don't want to break Matter operations
286
- }
335
+ // Create a new lock for this persist operation
336
+ this.persistLock = (async () => {
337
+ try {
338
+ const data = Object.fromEntries(this.storage.entries());
339
+ const dir = path.dirname(this.filePath);
340
+ // Ensure directory exists
341
+ await fsp.mkdir(dir, { recursive: true });
342
+ // Atomic write: write to temp file then rename
343
+ // Use a unique temp file to avoid conflicts
344
+ const tempFile = `${this.filePath}.tmp.${Date.now()}`;
345
+ // Custom replacer to handle BigInt, Uint8Array, and Buffer serialization
346
+ const jsonString = JSON.stringify(data, (_key, value) => {
347
+ if (typeof value === 'bigint') {
348
+ return { __type: 'bigint', value: value.toString() };
349
+ }
350
+ // Handle Buffer before Uint8Array since Buffer extends Uint8Array
351
+ // Note: Buffer.toJSON() returns {type: 'Buffer', data: [...]}, but we want consistent format
352
+ if (Buffer.isBuffer(value)) {
353
+ return { __type: 'Uint8Array', value: Array.from(value) };
354
+ }
355
+ if (value instanceof Uint8Array) {
356
+ return { __type: 'Uint8Array', value: Array.from(value) };
357
+ }
358
+ return value;
359
+ }, 2);
360
+ await fsp.writeFile(tempFile, jsonString, 'utf-8');
361
+ await fsp.rename(tempFile, this.filePath);
362
+ this.pendingWrite = false;
363
+ log.debug(`Persisted ${this.storage.size} entries for namespace: ${this.namespace}`);
364
+ }
365
+ catch (error) {
366
+ log.error(`Failed to persist storage for ${this.namespace}:`, error);
367
+ // Don't throw - we don't want to break Matter operations
368
+ }
369
+ finally {
370
+ this.persistLock = null;
371
+ }
372
+ })();
373
+ await this.persistLock;
287
374
  }
288
375
  /**
289
376
  * Force immediate persist (for shutdown)
@@ -1 +1 @@
1
- {"version":3,"file":"matterStorage.js","sourceRoot":"","sources":["../../src/matter/matterStorage.ts"],"names":[],"mappings":"AAAA,mBAAmB;AAEnB;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAA;AAC7B,OAAO,KAAK,GAAG,MAAM,kBAAkB,CAAA;AACvC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AAEjC,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAErC,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAA;AAE/C,kCAAkC;AAClC,MAAM,yBAAyB,GAAG,GAAG,CAAA,CAAC,gCAAgC;AAEtE;;;GAGG;AACH,MAAM,OAAO,uBAAuB;IASxB;IACA;IATF,OAAO,GAAqB,IAAI,GAAG,EAAE,CAAA;IACrC,QAAQ,CAAQ;IAChB,aAAa,GAAG,KAAK,CAAA;IACrB,qBAAqB,GAAyB,IAAI,CAAA;IAClD,UAAU,GAA0B,IAAI,CAAA;IACxC,YAAY,GAAG,KAAK,CAAA;IAE5B,YACU,SAAiB,EACjB,WAAmB;QADnB,cAAS,GAAT,SAAS,CAAQ;QACjB,gBAAW,GAAX,WAAW,CAAQ;QAE3B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,SAAS,OAAO,CAAC,CAAA;QAE3D,2EAA2E;QAC3E,wDAAwD;QACxD,IAAI,CAAC,cAAc,EAAE,CAAA;IACvB,CAAC;IAED;;;OAGG;IACK,cAAc;QACpB,IAAI,CAAC;YACH,MAAM,WAAW,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;YAC3D,kDAAkD;YAClD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;gBACnD,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;oBACpE,OAAO,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;gBAC5B,CAAC;gBACD,OAAO,KAAK,CAAA;YACd,CAAC,CAAC,CAAA;YACF,sCAAsC;YACtC,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACrC,IAAI,CAAC,OAAO,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAA;gBAC5C,GAAG,CAAC,KAAK,CAAC,UAAU,IAAI,CAAC,OAAO,CAAC,IAAI,2BAA2B,IAAI,CAAC,SAAS,EAAE,CAAC,CAAA;YACnF,CAAC;iBAAM,CAAC;gBACN,GAAG,CAAC,IAAI,CAAC,4BAA4B,IAAI,CAAC,SAAS,kBAAkB,CAAC,CAAA;gBACtE,IAAI,CAAC,OAAO,GAAG,IAAI,GAAG,EAAE,CAAA;YAC1B,CAAC;YACD,IAAI,CAAC,aAAa,GAAG,IAAI,CAAA;QAC3B,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC5B,GAAG,CAAC,KAAK,CAAC,sCAAsC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAA;YACnE,CAAC;iBAAM,CAAC;gBACN,GAAG,CAAC,IAAI,CAAC,8BAA8B,IAAI,CAAC,SAAS,KAAK,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAA;YAC7F,CAAC;YACD,6DAA6D;YAC7D,IAAI,CAAC,OAAO,GAAG,IAAI,GAAG,EAAE,CAAA;YACxB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAA;QAC3B,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,UAAU;QACd,gDAAgD;QAChD,OAAO,OAAO,CAAC,OAAO,EAAE,CAAA;IAC1B,CAAC;IAED;;OAEG;IACK,eAAe,CAAC,QAAkB;QACxC,OAAO,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAC3B,CAAC;IAED;;OAEG;IACH,GAAG,CAAC,QAAkB,EAAE,GAAW;QACjC,oEAAoE;QACpE,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAA;QAClF,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;IAClC,CAAC;IAOD,GAAG,CAAC,QAAkB,EAAE,WAA6C,EAAE,KAAe;QACpF,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAA;QAEjD,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE,CAAC;YACpC,MAAM,OAAO,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,UAAU,IAAI,WAAW,EAAE,CAAC,CAAC,CAAC,WAAW,CAAA;YACzE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;QAClC,CAAC;aAAM,CAAC;YACN,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;gBACjD,MAAM,OAAO,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,UAAU,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;gBACrD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAA;YAC9B,CAAC;QACH,CAAC;QAED,8CAA8C;QAC9C,KAAK,IAAI,CAAC,eAAe,EAAE,CAAA;IAC7B,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,QAAkB,EAAE,GAAW;QACpC,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAA;QAClF,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;QAC5C,IAAI,OAAO,EAAE,CAAC;YACZ,KAAK,IAAI,CAAC,eAAe,EAAE,CAAA;QAC7B,CAAC;IACH,CAAC;IAED;;OAEG;IACH,QAAQ,CAAC,QAAkB;QACzB,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAA;QACjD,MAAM,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,UAAU,GAAG,CAAC,CAAC,CAAC,EAAE,CAAA;QAEjD,mEAAmE;QACnE,MAAM,YAAY,GAAa,EAAE,CAAA;QACjC,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;YACtC,IAAI,CAAC,MAAM,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;gBACtC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;YACxB,CAAC;QACH,CAAC;QAED,wBAAwB;QACxB,KAAK,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;YAC/B,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;QAC1B,CAAC;QAED,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,KAAK,IAAI,CAAC,eAAe,EAAE,CAAA;QAC7B,CAAC;IACH,CAAC;IAED;;OAEG;IACH,IAAI,CAAC,QAAkB;QACrB,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;YACxB,OAAO,EAAE,CAAA;QACX,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAA;QACjD,MAAM,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,UAAU,GAAG,CAAC,CAAC,CAAC,EAAE,CAAA;QACjD,MAAM,WAAW,GAAa,EAAE,CAAA;QAEhC,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;YACtC,IAAI,MAAM,EAAE,CAAC;gBACX,yDAAyD;gBACzD,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;oBAC3B,MAAM,MAAM,GAAG,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;oBAC3C,oDAAoD;oBACpD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;wBAC1B,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;oBAC1B,CAAC;gBACH,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,wCAAwC;gBACxC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;oBACvB,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;gBACvB,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,WAAW,CAAA;IACpB,CAAC;IAED;;OAEG;IACH,QAAQ,CAAC,QAAkB;QACzB,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;YACxB,OAAO,EAAE,CAAA;QACX,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAA;QACjD,MAAM,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,UAAU,GAAG,CAAC,CAAC,CAAC,EAAE,CAAA;QACjD,MAAM,aAAa,GAAG,IAAI,GAAG,EAAU,CAAA;QAEvC,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;YACtC,IAAI,MAAM,EAAE,CAAC;gBACX,wCAAwC;gBACxC,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;oBAC3B,MAAM,MAAM,GAAG,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;oBAC3C,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;oBACnC,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;wBAChB,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAA;oBACjD,CAAC;gBACH,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,uCAAuC;gBACvC,MAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;gBACjC,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;oBACjB,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAA;gBAC/C,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;IAClC,CAAC;IAED;;OAEG;IACH,GAAG,CAAC,QAAkB,EAAE,GAAW;QACjC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;YACxB,OAAO,KAAK,CAAA;QACd,CAAC;QACD,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAA;QAClF,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;IAClC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM,CAAC,QAAkB;QAC7B,MAAM,IAAI,CAAC,UAAU,EAAE,CAAA;QACvB,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAA;QACjD,MAAM,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,UAAU,GAAG,CAAC,CAAC,CAAC,EAAE,CAAA;QACjD,MAAM,MAAM,GAA4B,EAAE,CAAA;QAE1C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;YAClD,IAAI,MAAM,EAAE,CAAC;gBACX,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;oBAC3B,MAAM,MAAM,GAAG,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;oBAC3C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;wBAC1B,MAAM,CAAC,MAAM,CAAC,GAAG,KAAK,CAAA;oBACxB,CAAC;gBACH,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;oBACvB,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;gBACrB,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAA;IACf,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,eAAe;QAC3B,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QAC/B,CAAC;QAED,IAAI,CAAC,YAAY,GAAG,IAAI,CAAA;QAExB,2DAA2D;QAC3D,MAAM,eAAe,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CACjE,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,eAAe,CAAC,CACxD,CAAA;QAED,IAAI,eAAe,EAAE,CAAC;YACpB,MAAM,IAAI,CAAC,OAAO,EAAE,CAAA;QACtB,CAAC;aAAM,CAAC;YACN,+BAA+B;YAC/B,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC,GAAG,EAAE;gBAChC,KAAK,IAAI,CAAC,OAAO,EAAE,CAAA;YACrB,CAAC,EAAE,yBAAyB,CAAC,CAAA;QAC/B,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,OAAO;QACnB,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YACvB,OAAM;QACR,CAAC;QAED,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAA;YACvD,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;YAEvC,0BAA0B;YAC1B,MAAM,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;YAEzC,+CAA+C;YAC/C,MAAM,QAAQ,GAAG,GAAG,IAAI,CAAC,QAAQ,MAAM,CAAA;YACvC,iDAAiD;YACjD,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;gBACtD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;oBAC9B,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAA;gBACtD,CAAC;gBACD,OAAO,KAAK,CAAA;YACd,CAAC,EAAE,CAAC,CAAC,CAAA;YACL,MAAM,GAAG,CAAC,SAAS,CAAC,QAAQ,EAAE,UAAU,EAAE,OAAO,CAAC,CAAA;YAClD,MAAM,GAAG,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAA;YAEzC,IAAI,CAAC,YAAY,GAAG,KAAK,CAAA;YACzB,GAAG,CAAC,KAAK,CAAC,aAAa,IAAI,CAAC,OAAO,CAAC,IAAI,2BAA2B,IAAI,CAAC,SAAS,EAAE,CAAC,CAAA;QACtF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,GAAG,CAAC,KAAK,CAAC,iCAAiC,IAAI,CAAC,SAAS,GAAG,EAAE,KAAK,CAAC,CAAA;YACpE,yDAAyD;QAC3D,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,YAAY;QAChB,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;YAC7B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAA;QACxB,CAAC;QACD,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,MAAM,IAAI,CAAC,OAAO,EAAE,CAAA;QACtB,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK;QACT,MAAM,IAAI,CAAC,YAAY,EAAE,CAAA;QACzB,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAA;QACpB,IAAI,CAAC,aAAa,GAAG,KAAK,CAAA;IAC5B,CAAC;IAED;;OAEG;IACH,QAAQ;QACN,OAAO;YACL,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI;YAC1B,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,IAAI,EAAE,IAAI,CAAC,QAAQ;SACpB,CAAA;IACH,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,OAAO,oBAAoB;IAGX;IAFZ,QAAQ,GAAyC,IAAI,GAAG,EAAE,CAAA;IAElE,YAAoB,WAAmB;QAAnB,gBAAW,GAAX,WAAW,CAAQ;IAAG,CAAC;IAE3C;;OAEG;IACH,UAAU,CAAC,SAAiB;QAC1B,IAAI,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;QAC1C,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,GAAG,IAAI,uBAAuB,CAAC,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC,CAAA;YAClE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;QACvC,CAAC;QACD,OAAO,OAAO,CAAA;IAChB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,QAAQ;QACZ,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAA;QACnF,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;QAC3B,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAA;IACvB,CAAC;IAED;;OAEG;IACH,WAAW;QACT,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAA;IAC9E,CAAC;CACF"}
1
+ {"version":3,"file":"matterStorage.js","sourceRoot":"","sources":["../../src/matter/matterStorage.ts"],"names":[],"mappings":"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"}
package/dist/server.d.ts CHANGED
@@ -62,6 +62,12 @@ export declare class Server {
62
62
  private static loadConfig;
63
63
  private loadAccessories;
64
64
  private loadPlatforms;
65
+ /**
66
+ * Generate a unique identifier for a child bridge
67
+ * - For HAP bridges: returns the uppercase MAC address
68
+ * - For Matter-only bridges: returns "matter-{plugin}-{identifier}"
69
+ */
70
+ private getChildBridgeKey;
65
71
  /**
66
72
  * Validate an external bridge config
67
73
  */
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAqCA,MAAM,WAAW,iBAAiB;IAChC,6BAA6B,CAAC,EAAE,OAAO,CAAA;IACvC,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,sBAAsB,CAAC,EAAE,OAAO,CAAA;CACjC;AAGD,0BAAkB,YAAY;IAC5B;;OAEG;IACH,OAAO,YAAY;IAEnB;;OAEG;IACH,EAAE,OAAO;IAET;;OAEG;IACH,IAAI,SAAS;CACd;AAED,qBAAa,MAAM;IAyBf,OAAO,CAAC,OAAO;IAxBjB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAe;IACnC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAe;IAC7C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAe;IAC7C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAY;IACvC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAqB;IAEzD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkB;IAGzC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAiD;IAG9E,OAAO,CAAC,YAAY,CAAC,CAAc;IAGnC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAA6C;IAG/E,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAyC;IAGzE,OAAO,CAAC,YAAY,CAAqC;gBAG/C,OAAO,GAAE,iBAAsB;IAmEzC;;;OAGG;IACH,OAAO,CAAC,eAAe;IAcV,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAsCnC;;OAEG;YACW,sBAAsB;IA8DpC;;OAEG;IACH,OAAO,CAAC,gCAAgC;IA2B3B,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAiBtC,OAAO,CAAC,aAAa;IAMrB,OAAO,CAAC,gCAAgC;IAMxC,OAAO,CAAC,iCAAiC;IAKzC,OAAO,CAAC,mCAAmC;IAK3C,OAAO,CAAC,6BAA6B;IAQrC,OAAO,CAAC,+BAA+B;IAQvC,OAAO,CAAC,gCAAgC;IAQxC,OAAO,CAAC,MAAM,CAAC,UAAU;IA0IzB,OAAO,CAAC,eAAe;IAwGvB,OAAO,CAAC,aAAa;IAiGrB;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAiCjC;;OAEG;IACH,OAAO,CAAC,0BAA0B;IA+NlC,OAAO,CAAC,cAAc;CAmBvB"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAqCA,MAAM,WAAW,iBAAiB;IAChC,6BAA6B,CAAC,EAAE,OAAO,CAAA;IACvC,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,sBAAsB,CAAC,EAAE,OAAO,CAAA;CACjC;AAGD,0BAAkB,YAAY;IAC5B;;OAEG;IACH,OAAO,YAAY;IAEnB;;OAEG;IACH,EAAE,OAAO;IAET;;OAEG;IACH,IAAI,SAAS;CACd;AAED,qBAAa,MAAM;IA0Bf,OAAO,CAAC,OAAO;IAzBjB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAe;IACnC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAe;IAC7C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAe;IAC7C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAY;IACvC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAqB;IAEzD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkB;IAIzC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA6C;IAG1E,OAAO,CAAC,YAAY,CAAC,CAAc;IAGnC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAA6C;IAG/E,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAyC;IAGzE,OAAO,CAAC,YAAY,CAAqC;gBAG/C,OAAO,GAAE,iBAAsB;IAmEzC;;;OAGG;IACH,OAAO,CAAC,eAAe;IAcV,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAsCnC;;OAEG;YACW,sBAAsB;IAiEpC;;OAEG;IACH,OAAO,CAAC,gCAAgC;IA2B3B,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAiBtC,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,gCAAgC;IAMxC,OAAO,CAAC,iCAAiC;IAKzC,OAAO,CAAC,mCAAmC;IAK3C,OAAO,CAAC,6BAA6B;IAQrC,OAAO,CAAC,+BAA+B;IAQvC,OAAO,CAAC,gCAAgC;IAQxC,OAAO,CAAC,MAAM,CAAC,UAAU;IA2IzB,OAAO,CAAC,eAAe;IA8GvB,OAAO,CAAC,aAAa;IAuGrB;;;;OAIG;IACH,OAAO,CAAC,iBAAiB;IASzB;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAgEjC;;OAEG;IACH,OAAO,CAAC,0BAA0B;IA+NlC,OAAO,CAAC,cAAc;CAmBvB"}
package/dist/server.js CHANGED
@@ -38,6 +38,7 @@ export class Server {
38
38
  externalPortService;
39
39
  config;
40
40
  // used to keep track of child bridges
41
+ // Key is either HAP username (MAC address) or Matter-only identifier (e.g., "matter-plugin-platform")
41
42
  childBridges = new Map();
42
43
  // Matter server instance for main bridge (if enabled)
43
44
  matterServer;
@@ -170,6 +171,8 @@ export class Server {
170
171
  // Start the Matter server
171
172
  await this.matterServer.start();
172
173
  log.info('Matter server initialized for main bridge');
174
+ // Inform the API that Matter is enabled
175
+ this.api._setMatterEnabled(true);
173
176
  // Send Matter status update to notify UI that Matter server is ready
174
177
  if (this.config.bridge.disableIpc !== true) {
175
178
  this.sendMainBridgeMatterStatusUpdate();
@@ -239,6 +242,7 @@ export class Server {
239
242
  }
240
243
  publishBridge() {
241
244
  this.bridgeService.publishBridge();
245
+ // Main bridge always has a pin (validated in loadConfig)
242
246
  this.printSetupInfo(this.config.bridge.pin);
243
247
  }
244
248
  handlePublishExternalAccessories(accessories) {
@@ -318,6 +322,7 @@ export class Server {
318
322
  bridge.username = bridge.username || defaultBridge.username;
319
323
  bridge.pin = bridge.pin || defaultBridge.pin;
320
324
  config.bridge = bridge;
325
+ // Main bridge username is always required and must be valid
321
326
  const username = config.bridge.username;
322
327
  if (!validMacAddress(username)) {
323
328
  throw new Error(`Not a valid username: ${username}. Must be 6 pairs of colon-separated hexadecimal chars (A-F 0-9), like a MAC address.`);
@@ -429,26 +434,31 @@ export class Server {
429
434
  }
430
435
  const logger = Logger.withPrefix(displayName);
431
436
  logger('Initializing %s accessory...', accessoryIdentifier);
432
- // Handle child HAP bridge
437
+ // Handle child bridge (HAP, Matter-only, or HAP+Matter)
433
438
  if (accessoryConfig._bridge) {
434
- // ensure the username is always uppercase
435
- accessoryConfig._bridge.username = accessoryConfig._bridge.username.toUpperCase();
439
+ // Ensure the username is always uppercase if it exists (HAP bridges only)
440
+ if (accessoryConfig._bridge.username) {
441
+ accessoryConfig._bridge.username = accessoryConfig._bridge.username.toUpperCase();
442
+ }
443
+ // Generate unique key for this child bridge
444
+ const bridgeKey = this.getChildBridgeKey("accessory" /* PluginType.ACCESSORY */, accessoryIdentifier, plugin.getPluginIdentifier(), accessoryConfig._bridge);
436
445
  try {
437
- this.validateChildBridgeConfig("accessory" /* PluginType.ACCESSORY */, accessoryIdentifier, accessoryConfig._bridge);
446
+ this.validateChildBridgeConfig("accessory" /* PluginType.ACCESSORY */, accessoryIdentifier, plugin.getPluginIdentifier(), accessoryConfig._bridge, bridgeKey);
438
447
  }
439
448
  catch (error) {
440
449
  log.error(error.message);
441
450
  return;
442
451
  }
443
452
  let childBridge;
444
- if (this.childBridges.has(accessoryConfig._bridge.username)) {
445
- childBridge = this.childBridges.get(accessoryConfig._bridge.username);
446
- logger(`Adding to existing child bridge ${accessoryConfig._bridge.username}`);
453
+ if (this.childBridges.has(bridgeKey)) {
454
+ childBridge = this.childBridges.get(bridgeKey);
455
+ logger(`Adding to existing child bridge ${bridgeKey}`);
447
456
  }
448
457
  else {
449
- logger(`Initializing child bridge ${accessoryConfig._bridge.username}`);
458
+ const bridgeType = accessoryConfig._bridge.matterOnly ? 'Matter-only' : 'HAP';
459
+ logger(`Initializing ${bridgeType} child bridge ${bridgeKey}`);
450
460
  childBridge = new ChildBridgeService("accessory" /* PluginType.ACCESSORY */, accessoryIdentifier, plugin, accessoryConfig._bridge, this.config, this.options, this.api, this.ipcService, this.externalPortService);
451
- this.childBridges.set(accessoryConfig._bridge.username, childBridge);
461
+ this.childBridges.set(bridgeKey, childBridge);
452
462
  }
453
463
  // add config to child bridge service
454
464
  childBridge.addConfig(accessoryConfig);
@@ -511,20 +521,25 @@ export class Server {
511
521
  }
512
522
  const logger = Logger.withPrefix(displayName);
513
523
  logger('Initializing %s platform...', platformIdentifier);
514
- // Handle child HAP bridge
524
+ // Handle child bridge (HAP, Matter-only, or HAP+Matter)
515
525
  if (platformConfig._bridge) {
516
- // ensure the username is always uppercase
517
- platformConfig._bridge.username = platformConfig._bridge.username.toUpperCase();
526
+ // Ensure the username is always uppercase if it exists (HAP bridges only)
527
+ if (platformConfig._bridge.username) {
528
+ platformConfig._bridge.username = platformConfig._bridge.username.toUpperCase();
529
+ }
530
+ // Generate unique key for this child bridge
531
+ const bridgeKey = this.getChildBridgeKey("platform" /* PluginType.PLATFORM */, platformIdentifier, plugin.getPluginIdentifier(), platformConfig._bridge);
518
532
  try {
519
- this.validateChildBridgeConfig("platform" /* PluginType.PLATFORM */, platformIdentifier, platformConfig._bridge);
533
+ this.validateChildBridgeConfig("platform" /* PluginType.PLATFORM */, platformIdentifier, plugin.getPluginIdentifier(), platformConfig._bridge, bridgeKey);
520
534
  }
521
535
  catch (error) {
522
536
  log.error(error.message);
523
537
  return;
524
538
  }
525
- logger(`Initializing child bridge ${platformConfig._bridge.username}`);
539
+ const bridgeType = platformConfig._bridge.matterOnly ? 'Matter-only' : 'HAP';
540
+ logger(`Initializing ${bridgeType} child bridge ${bridgeKey}`);
526
541
  const childBridge = new ChildBridgeService("platform" /* PluginType.PLATFORM */, platformIdentifier, plugin, platformConfig._bridge, this.config, this.options, this.api, this.ipcService, this.externalPortService);
527
- this.childBridges.set(platformConfig._bridge.username, childBridge);
542
+ this.childBridges.set(bridgeKey, childBridge);
528
543
  // add config to child bridge service
529
544
  childBridge.addConfig(platformConfig);
530
545
  // Matter for child bridges is handled inside the forked child process (childBridgeFork.ts)
@@ -545,16 +560,48 @@ export class Server {
545
560
  });
546
561
  return promises;
547
562
  }
563
+ /**
564
+ * Generate a unique identifier for a child bridge
565
+ * - For HAP bridges: returns the uppercase MAC address
566
+ * - For Matter-only bridges: returns "matter-{plugin}-{identifier}"
567
+ */
568
+ getChildBridgeKey(type, identifier, pluginName, bridgeConfig) {
569
+ if (bridgeConfig.matterOnly) {
570
+ // Matter-only bridge: generate identifier from plugin and platform/accessory name
571
+ return `matter-${pluginName}-${identifier}`;
572
+ }
573
+ // HAP bridge: use MAC address (already validated and uppercased)
574
+ return bridgeConfig.username.toUpperCase();
575
+ }
548
576
  /**
549
577
  * Validate an external bridge config
550
578
  */
551
- validateChildBridgeConfig(type, identifier, bridgeConfig) {
579
+ validateChildBridgeConfig(type, identifier, pluginName, bridgeConfig, bridgeKey) {
580
+ // Matter-only bridges don't require HAP fields
581
+ if (bridgeConfig.matterOnly) {
582
+ if (!bridgeConfig.matter) {
583
+ throw new Error(`Error loading the ${type} "${identifier}" requested in your config.json - `
584
+ + 'Matter-only bridge must have a "matter" configuration block in _bridge.matter.');
585
+ }
586
+ // Check for duplicate Matter-only bridges
587
+ if (this.childBridges.has(bridgeKey)) {
588
+ throw new Error(`Error loading the ${type} "${identifier}" requested in your config.json - `
589
+ + 'A Matter-only bridge with this plugin and platform/accessory combination already exists. Each Matter-only bridge must be unique.');
590
+ }
591
+ // Matter-only bridges don't need username/pin validation
592
+ return;
593
+ }
594
+ // HAP bridges (or HAP+Matter bridges) require username and pin
595
+ if (!bridgeConfig.username) {
596
+ throw new Error(`Error loading the ${type} "${identifier}" requested in your config.json - `
597
+ + 'Missing required field "_bridge.username". Set "matterOnly": true if you want a Matter-only bridge.');
598
+ }
552
599
  if (!validMacAddress(bridgeConfig.username)) {
553
600
  throw new Error(`Error loading the ${type} "${identifier}" requested in your config.json - `
554
601
  + `not a valid username in _bridge.username: "${bridgeConfig.username}". Must be 6 pairs of colon-separated hexadecimal chars (A-F 0-9), like a MAC address.`);
555
602
  }
556
- if (this.childBridges.has(bridgeConfig.username)) {
557
- const childBridge = this.childBridges.get(bridgeConfig.username);
603
+ if (this.childBridges.has(bridgeKey)) {
604
+ const childBridge = this.childBridges.get(bridgeKey);
558
605
  if (type === "platform" /* PluginType.PLATFORM */) {
559
606
  // only a single platform can exist on one child bridge
560
607
  throw new Error(`Error loading the ${type} "${identifier}" requested in your config.json - `
@@ -566,6 +613,8 @@ export class Server {
566
613
  + `Duplicate username found in _bridge.username: "${bridgeConfig.username}". You can only group accessories of the same type in a child bridge.`);
567
614
  }
568
615
  }
616
+ // Check that child bridge username doesn't conflict with main bridge
617
+ // Main bridge always has a username (validated in loadConfig)
569
618
  if (bridgeConfig.username === this.config.bridge.username.toUpperCase()) {
570
619
  throw new Error(`Error loading the ${type} "${identifier}" requested in your config.json - `
571
620
  + `Username found in _bridge.username: "${bridgeConfig.username}" is the same as the main bridge. Each child bridge platform/accessory must have it's own unique username.`);