homebridge-config-ui-x 5.8.1-alpha.0 → 5.8.1-alpha.2

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 (156) hide show
  1. package/dist/app.module.js +2 -0
  2. package/dist/app.module.js.map +1 -1
  3. package/dist/core/config/config.interfaces.d.ts +11 -10
  4. package/dist/core/homebridge-ipc/homebridge-ipc.service.d.ts +1 -1
  5. package/dist/core/homebridge-ipc/homebridge-ipc.service.js +2 -4
  6. package/dist/core/homebridge-ipc/homebridge-ipc.service.js.map +1 -1
  7. package/dist/modules/bridges/bridge-identifier.util.d.ts +9 -0
  8. package/dist/modules/bridges/bridge-identifier.util.js +30 -0
  9. package/dist/modules/bridges/bridge-identifier.util.js.map +1 -0
  10. package/dist/modules/bridges/bridges.controller.d.ts +11 -0
  11. package/dist/modules/bridges/bridges.controller.js +156 -0
  12. package/dist/modules/bridges/bridges.controller.js.map +1 -0
  13. package/dist/modules/bridges/bridges.interfaces.d.ts +72 -0
  14. package/dist/modules/bridges/bridges.interfaces.js +3 -0
  15. package/dist/modules/bridges/bridges.interfaces.js.map +1 -0
  16. package/dist/modules/bridges/bridges.module.d.ts +2 -0
  17. package/dist/modules/bridges/bridges.module.js +39 -0
  18. package/dist/modules/bridges/bridges.module.js.map +1 -0
  19. package/dist/modules/bridges/bridges.service.d.ts +16 -0
  20. package/dist/modules/bridges/bridges.service.js +168 -0
  21. package/dist/modules/bridges/bridges.service.js.map +1 -0
  22. package/dist/modules/child-bridges/child-bridges.gateway.d.ts +1 -14
  23. package/dist/modules/child-bridges/child-bridges.gateway.js +1 -67
  24. package/dist/modules/child-bridges/child-bridges.gateway.js.map +1 -1
  25. package/dist/modules/child-bridges/child-bridges.interfaces.d.ts +5 -43
  26. package/dist/modules/child-bridges/child-bridges.module.js +0 -8
  27. package/dist/modules/child-bridges/child-bridges.module.js.map +1 -1
  28. package/dist/modules/child-bridges/child-bridges.service.d.ts +9 -40
  29. package/dist/modules/child-bridges/child-bridges.service.js +10 -345
  30. package/dist/modules/child-bridges/child-bridges.service.js.map +1 -1
  31. package/dist/modules/config-editor/config-editor.service.js +0 -7
  32. package/dist/modules/config-editor/config-editor.service.js.map +1 -1
  33. package/dist/modules/matter-bridges/matter-bridges.controller.d.ts +18 -0
  34. package/dist/modules/matter-bridges/matter-bridges.controller.js +104 -0
  35. package/dist/modules/matter-bridges/matter-bridges.controller.js.map +1 -0
  36. package/dist/modules/matter-bridges/matter-bridges.gateway.d.ts +0 -3
  37. package/dist/modules/matter-bridges/matter-bridges.gateway.js +0 -42
  38. package/dist/modules/matter-bridges/matter-bridges.gateway.js.map +1 -1
  39. package/dist/modules/matter-bridges/matter-bridges.interfaces.d.ts +11 -46
  40. package/dist/modules/matter-bridges/matter-bridges.interfaces.js +0 -7
  41. package/dist/modules/matter-bridges/matter-bridges.interfaces.js.map +1 -1
  42. package/dist/modules/matter-bridges/matter-bridges.module.js +8 -2
  43. package/dist/modules/matter-bridges/matter-bridges.module.js.map +1 -1
  44. package/dist/modules/matter-bridges/matter-bridges.service.d.ts +24 -14
  45. package/dist/modules/matter-bridges/matter-bridges.service.js +236 -53
  46. package/dist/modules/matter-bridges/matter-bridges.service.js.map +1 -1
  47. package/dist/modules/plugins/plugins.service.js +2 -29
  48. package/dist/modules/plugins/plugins.service.js.map +1 -1
  49. package/dist/modules/server/server.controller.d.ts +14 -6
  50. package/dist/modules/server/server.controller.js +36 -20
  51. package/dist/modules/server/server.controller.js.map +1 -1
  52. package/dist/modules/server/server.module.js +3 -1
  53. package/dist/modules/server/server.module.js.map +1 -1
  54. package/dist/modules/server/server.service.d.ts +10 -1
  55. package/dist/modules/server/server.service.js +79 -2
  56. package/dist/modules/server/server.service.js.map +1 -1
  57. package/dist/modules/status/status.controller.d.ts +1 -1
  58. package/dist/modules/status/status.controller.js +1 -3
  59. package/dist/modules/status/status.controller.js.map +1 -1
  60. package/package.json +6 -6
  61. package/public/{chunk-TUKDK3NJ.js → chunk-2EKZK7NX.js} +1 -1
  62. package/public/{chunk-Z5SXR7XM.js → chunk-33PMRDBB.js} +1 -1
  63. package/public/chunk-3EACECYJ.js +2 -0
  64. package/public/{chunk-L5FTKOE7.js → chunk-3XNA4EQU.js} +1 -1
  65. package/public/chunk-4Y2KPCHA.js +1 -0
  66. package/public/chunk-5BCOF7IG.js +49 -0
  67. package/public/{chunk-AVLU4OBB.js → chunk-5EZCX7HV.js} +1 -1
  68. package/public/{chunk-4DQ2NOSN.js → chunk-5KMVHZV7.js} +1 -1
  69. package/public/{chunk-PUVYEUNW.js → chunk-6VILNURQ.js} +1 -1
  70. package/public/{chunk-EXIREAXJ.js → chunk-A5EKMCXX.js} +1 -1
  71. package/public/{chunk-TENKBXZX.js → chunk-AR55D6KT.js} +1 -1
  72. package/public/{chunk-AP4JI74X.js → chunk-AW6ZPEG3.js} +1 -1
  73. package/public/{chunk-ZYJD3IFR.js → chunk-AWJONODF.js} +1 -1
  74. package/public/{chunk-JFCVTQA4.js → chunk-BD2WNMUL.js} +1 -1
  75. package/public/{chunk-OPWPZI2P.js → chunk-BJULQD6Z.js} +1 -1
  76. package/public/{chunk-YDANTMYI.js → chunk-BKJWDEC4.js} +1 -1
  77. package/public/chunk-BQTCHQHZ.js +1 -0
  78. package/public/{chunk-W6TEFWHS.js → chunk-BXTJNIAF.js} +1 -1
  79. package/public/{chunk-AJ7QBH6A.js → chunk-COBEXT75.js} +1 -1
  80. package/public/{chunk-TXS667XX.js → chunk-D4FV2NR6.js} +1 -1
  81. package/public/{chunk-HQO55IAP.js → chunk-ELWCTORK.js} +1 -1
  82. package/public/{chunk-CZKY2WDA.js → chunk-EYNZEIGI.js} +1 -1
  83. package/public/{chunk-5WCKLLH6.js → chunk-FBEAGLXX.js} +1 -1
  84. package/public/{chunk-AJSLB3ED.js → chunk-FKNFGRMF.js} +1 -1
  85. package/public/{chunk-CBGOSEHO.js → chunk-GOK2QVWT.js} +1 -1
  86. package/public/{chunk-G45L27Q7.js → chunk-GXMQ3BRX.js} +1 -1
  87. package/public/chunk-HNA35CNP.js +1 -0
  88. package/public/{chunk-A6MJKCXP.js → chunk-JA7WBGLB.js} +1 -1
  89. package/public/{chunk-4SJ7LVRB.js → chunk-JAPQGXHI.js} +1 -1
  90. package/public/chunk-JIUPKHC6.js +5 -0
  91. package/public/{chunk-2LNPZWQG.js → chunk-K3HCHWTM.js} +1 -1
  92. package/public/{chunk-OISGHRTF.js → chunk-K4H6PB2J.js} +1 -1
  93. package/public/{chunk-PNB2QVH3.js → chunk-KAFW5DRA.js} +1 -1
  94. package/public/{chunk-PTSXKYWE.js → chunk-KZ6XXGP4.js} +1 -1
  95. package/public/{chunk-NACTGAO2.js → chunk-LGGTBRNV.js} +1 -1
  96. package/public/{chunk-D7S7TYFI.js → chunk-LXFAOFAX.js} +1 -1
  97. package/public/{chunk-2FZPXF6E.js → chunk-M3FIN2AA.js} +1 -1
  98. package/public/{chunk-7C5NPZ7J.js → chunk-M7GSB47P.js} +1 -1
  99. package/public/{chunk-HMTMYCVH.js → chunk-MBD42QUN.js} +1 -1
  100. package/public/chunk-MJBWBNSG.js +1 -0
  101. package/public/chunk-NWKHE4QY.js +19 -0
  102. package/public/{chunk-VDZRGZBL.js → chunk-OI6KCFXH.js} +1 -1
  103. package/public/chunk-P3A7PEYC.js +17 -0
  104. package/public/{chunk-IWJB7IT2.js → chunk-PC74JU2B.js} +1 -1
  105. package/public/{chunk-Q5YQZNNH.js → chunk-Q3A53XG6.js} +1 -1
  106. package/public/{chunk-LKOTF3NL.js → chunk-R6PJW4VJ.js} +1 -1
  107. package/public/{chunk-P2UG4QRG.js → chunk-ROHOV4PQ.js} +1 -1
  108. package/public/{chunk-CQKRPPY5.js → chunk-SFXLRTS5.js} +1 -1
  109. package/public/chunk-SHCD57ND.js +1 -0
  110. package/public/chunk-SXARTKV3.js +1 -0
  111. package/public/{chunk-RWGYAZ5Z.js → chunk-TKL5NWVB.js} +1 -1
  112. package/public/{chunk-PXZ3C3WB.js → chunk-TUI3ZP5I.js} +1 -1
  113. package/public/{chunk-QJNBG7IQ.js → chunk-U4SKVUE5.js} +1 -1
  114. package/public/{chunk-36O7RGHR.js → chunk-UHSROVQY.js} +1 -1
  115. package/public/{chunk-BVFXBL5M.js → chunk-ULZPLNSU.js} +1 -1
  116. package/public/chunk-V7NTVYMU.js +4 -0
  117. package/public/{chunk-LOVIIHLB.js → chunk-VI7CE3DV.js} +1 -1
  118. package/public/chunk-VUV53WFF.js +1 -0
  119. package/public/{chunk-PT3BSLVU.js → chunk-WYZEY4PO.js} +1 -1
  120. package/public/{chunk-PWTIH4WJ.js → chunk-XID2DQIK.js} +1 -1
  121. package/public/{chunk-5YQJFB37.js → chunk-XRLPCXVY.js} +1 -1
  122. package/public/chunk-Y3W3WZ42.js +1 -0
  123. package/public/{chunk-HTO5QSUD.js → chunk-YKU27KZX.js} +1 -1
  124. package/public/{chunk-UKQ7VNGQ.js → chunk-YPUYAJME.js} +1 -1
  125. package/public/{chunk-FEK3NRZH.js → chunk-YULDG6HZ.js} +1 -1
  126. package/public/chunk-Z37KQHXT.js +2 -0
  127. package/public/{chunk-YNDC5MZW.js → chunk-ZINKZV7F.js} +1 -1
  128. package/public/{chunk-NV5MWDBB.js → chunk-ZNLFE6SA.js} +1 -1
  129. package/public/index.html +2 -2
  130. package/public/{main-3LNHHNC2.js → main-NHC6QBFW.js} +1 -1
  131. package/public/media/fa-brands-400-E7XUCEPO.woff2 +0 -0
  132. package/public/media/fa-regular-400-LBQEIAJB.woff2 +0 -0
  133. package/public/media/fa-solid-900-XY6737PV.woff2 +0 -0
  134. package/public/{styles-JQW3VPD2.css → styles-4Y3CNLUV.css} +1 -1
  135. package/scripts/extract-plugin-alias.js +87 -3
  136. package/dist/modules/child-bridges/child-bridges.controller.d.ts +0 -35
  137. package/dist/modules/child-bridges/child-bridges.controller.js +0 -284
  138. package/dist/modules/child-bridges/child-bridges.controller.js.map +0 -1
  139. package/public/chunk-2CYCDT6U.js +0 -1
  140. package/public/chunk-3SCINSZK.js +0 -5
  141. package/public/chunk-4PASWGPR.js +0 -1
  142. package/public/chunk-5EMBTLJ7.js +0 -4
  143. package/public/chunk-5K72UETZ.js +0 -1
  144. package/public/chunk-7OTM6HOE.js +0 -1
  145. package/public/chunk-AXC7PSAQ.js +0 -16
  146. package/public/chunk-JES74EAE.js +0 -2
  147. package/public/chunk-MRBPQZKJ.js +0 -1
  148. package/public/chunk-NE5XVVZY.js +0 -1
  149. package/public/chunk-NKX7JONP.js +0 -1
  150. package/public/chunk-PW42N7TW.js +0 -49
  151. package/public/chunk-SJQJVLLN.js +0 -19
  152. package/public/chunk-UUN7J43O.js +0 -2
  153. package/public/chunk-VTV2NDYL.js +0 -1
  154. package/public/media/fa-brands-400-E3YNADOB.woff2 +0 -0
  155. package/public/media/fa-regular-400-UOSVBSEG.woff2 +0 -0
  156. package/public/media/fa-solid-900-6JWCQRDQ.woff2 +0 -0
@@ -8,19 +8,30 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
8
8
  var __metadata = (this && this.__metadata) || function (k, v) {
9
9
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
10
  };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ var MatterBridgesService_1;
11
15
  Object.defineProperty(exports, "__esModule", { value: true });
12
16
  exports.MatterBridgesService = void 0;
17
+ const node_path_1 = __importDefault(require("node:path"));
18
+ const node_process_1 = __importDefault(require("node:process"));
13
19
  const common_1 = require("@nestjs/common");
20
+ const fs_extra_1 = __importDefault(require("fs-extra"));
14
21
  const homebridge_ipc_service_1 = require("../../core/homebridge-ipc/homebridge-ipc.service");
15
- let MatterBridgesService = class MatterBridgesService {
16
- constructor(homebridgeIpcService) {
22
+ const config_editor_service_1 = require("../config-editor/config-editor.service");
23
+ let MatterBridgesService = MatterBridgesService_1 = class MatterBridgesService {
24
+ constructor(homebridgeIpcService, configEditorService) {
17
25
  this.homebridgeIpcService = homebridgeIpcService;
26
+ this.configEditorService = configEditorService;
27
+ this.logger = new common_1.Logger(MatterBridgesService_1.name);
18
28
  }
19
29
  async getMatterBridges() {
20
30
  try {
21
31
  return await this.homebridgeIpcService.requestResponse('matterBridgeMetadataRequest', 'matterBridgeMetadataResponse');
22
32
  }
23
33
  catch (e) {
34
+ this.logger.error(`Failed to get Matter bridges: ${e.message}`);
24
35
  return [];
25
36
  }
26
37
  }
@@ -28,6 +39,23 @@ let MatterBridgesService = class MatterBridgesService {
28
39
  const listener = (data) => {
29
40
  client.emit('matter-bridge-status-update', data);
30
41
  };
42
+ try {
43
+ const commissioningInfo = await this.getCommissioningInfo('main-bridge');
44
+ const config = await this.configEditorService.getConfigFile();
45
+ const matterConfig = await this.getMatterConfig();
46
+ client.emit('matter-bridge-status-update', {
47
+ identifier: 'main-bridge',
48
+ setupUri: commissioningInfo.setupUri,
49
+ pin: commissioningInfo.pin,
50
+ commissioned: commissioningInfo.commissioned,
51
+ matterEnabled: commissioningInfo.matterEnabled,
52
+ name: matterConfig?.name || (config.bridge.name ? `${config.bridge.name} (Matter)` : 'Homebridge Matter Bridge'),
53
+ status: commissioningInfo.setupUri ? 'ok' : 'pending',
54
+ });
55
+ }
56
+ catch (e) {
57
+ this.logger.debug(`Could not get initial Matter bridge status: ${e.message}`);
58
+ }
31
59
  this.homebridgeIpcService.setMaxListeners(this.homebridgeIpcService.getMaxListeners() + 1);
32
60
  this.homebridgeIpcService.on('matterBridgeStatusUpdate', listener);
33
61
  const onEnd = () => {
@@ -41,47 +69,86 @@ let MatterBridgesService = class MatterBridgesService {
41
69
  client.on('end', onEnd.bind(this));
42
70
  client.on('disconnect', onEnd.bind(this));
43
71
  }
44
- stopStartRestartMatterBridge(event, deviceId) {
45
- this.homebridgeIpcService.sendMessage(event, deviceId);
72
+ stopStartRestartMatterBridge(event, bridgeId) {
73
+ this.homebridgeIpcService.sendMessage(event, bridgeId);
46
74
  return {
47
75
  ok: true,
48
76
  };
49
77
  }
50
- async restartMatterBridge(usernameOrIdentifier) {
51
- const identifier = await this.resolveIdentifier(usernameOrIdentifier);
52
- return this.stopStartRestartMatterBridge('restartMatterBridge', identifier);
78
+ async restartMatterBridge(bridgeId) {
79
+ return this.stopStartRestartMatterBridge('restartMatterBridge', bridgeId);
53
80
  }
54
- async stopMatterBridge(usernameOrIdentifier) {
55
- const identifier = await this.resolveIdentifier(usernameOrIdentifier);
56
- return this.stopStartRestartMatterBridge('stopMatterBridge', identifier);
81
+ async stopMatterBridge(bridgeId) {
82
+ return this.stopStartRestartMatterBridge('stopMatterBridge', bridgeId);
57
83
  }
58
- async startMatterBridge(usernameOrIdentifier) {
59
- const identifier = await this.resolveIdentifier(usernameOrIdentifier);
60
- return this.stopStartRestartMatterBridge('startMatterBridge', identifier);
84
+ async startMatterBridge(bridgeId) {
85
+ return this.stopStartRestartMatterBridge('startMatterBridge', bridgeId);
61
86
  }
62
- async resolveIdentifier(usernameOrIdentifier) {
63
- if (usernameOrIdentifier.match(/^HB-[A-Z0-9]{8}-[A-Z0-9]{4}$/)) {
64
- const bridges = await this.getMatterBridges();
65
- const bridge = bridges.find(b => b.serialNumber === usernameOrIdentifier);
66
- if (!bridge) {
67
- throw new Error(`Matter bridge not found: ${usernameOrIdentifier}`);
87
+ sanitizeBridgeId(bridgeId) {
88
+ return bridgeId.replace(/[^a-z0-9]/gi, '-').replace(/-+/g, '-').replace(/^-|-$/g, '');
89
+ }
90
+ async getCommissioningInfo(lookupKey) {
91
+ if (!lookupKey) {
92
+ throw new Error('Bridge ID or username is required');
93
+ }
94
+ let bridgeId = lookupKey;
95
+ if (lookupKey.includes(':')) {
96
+ bridgeId = `${lookupKey}-matter`;
97
+ }
98
+ const sanitizedBridgeId = this.sanitizeBridgeId(bridgeId);
99
+ const matterConfig = await this.getMatterConfig();
100
+ const matterEnabled = matterConfig !== null;
101
+ let configuredPort;
102
+ try {
103
+ const config = await this.configEditorService.getConfigFile();
104
+ if (bridgeId === 'main-bridge') {
105
+ configuredPort = config.bridge.matter?.port;
106
+ }
107
+ else {
108
+ const blocks = [
109
+ ...(config.accessories || []),
110
+ ...(config.platforms || []),
111
+ ].filter((block) => block._bridge?.username);
112
+ const block = blocks.find((b) => lookupKey.includes(':') ? b._bridge.username === lookupKey : b._bridge.username === lookupKey);
113
+ configuredPort = block?._bridge?.matter?.port;
68
114
  }
69
- return bridge.identifier;
70
115
  }
71
- return usernameOrIdentifier;
72
- }
73
- async getCommissioningInfo(usernameOrIdentifier) {
74
- if (!usernameOrIdentifier) {
75
- throw new Error('Username or identifier is required');
116
+ catch (e) {
117
+ this.logger.debug(`Could not read port from config for ${bridgeId}: ${e.message}`);
118
+ }
119
+ try {
120
+ const storagePath = node_process_1.default.env.UIX_STORAGE_PATH || node_path_1.default.join(node_process_1.default.env.HOME || node_process_1.default.env.USERPROFILE || '', '.homebridge');
121
+ const matterPath = node_path_1.default.join(storagePath, 'matter', sanitizedBridgeId);
122
+ const commissioningPath = node_path_1.default.join(matterPath, 'commissioning.json');
123
+ if (await fs_extra_1.default.pathExists(commissioningPath)) {
124
+ const diskInfo = await fs_extra_1.default.readJson(commissioningPath);
125
+ this.logger.debug(`Loaded commissioning info from disk for ${bridgeId}`);
126
+ return {
127
+ setupUri: diskInfo.qrCode,
128
+ pin: diskInfo.manualPairingCode,
129
+ serialNumber: diskInfo.serialNumber,
130
+ port: configuredPort,
131
+ commissioned: diskInfo.commissioned || false,
132
+ matterEnabled,
133
+ };
134
+ }
135
+ }
136
+ catch (e) {
137
+ this.logger.debug(`Could not read commissioning info from disk for ${bridgeId}: ${e.message}`);
76
138
  }
77
- const identifier = await this.resolveIdentifier(usernameOrIdentifier);
78
139
  try {
79
- await this.homebridgeIpcService.sendMessage('matterCommissioningInfoRequest', identifier);
80
- return await this.homebridgeIpcService.requestResponse('matterCommissioningInfoRequest', 'matterCommissioningInfoResponse');
140
+ const info = await this.homebridgeIpcService.requestResponse('matterCommissioningInfoRequest', 'matterCommissioningInfoResponse', bridgeId);
141
+ return {
142
+ ...info,
143
+ matterEnabled,
144
+ };
81
145
  }
82
146
  catch (e) {
83
- console.error(`Failed to get commissioning info for ${identifier}:`, e);
84
- return { commissioned: false };
147
+ this.logger.error(`Failed to get commissioning info for bridge ${bridgeId}: ${e.message}`);
148
+ return {
149
+ commissioned: false,
150
+ matterEnabled,
151
+ };
85
152
  }
86
153
  }
87
154
  async getMatterAccessories() {
@@ -89,7 +156,7 @@ let MatterBridgesService = class MatterBridgesService {
89
156
  return await this.homebridgeIpcService.requestResponse('matterAccessoriesRequest', 'matterAccessoriesResponse');
90
157
  }
91
158
  catch (e) {
92
- console.error('Failed to get Matter accessories:', e);
159
+ this.logger.error(`Failed to get Matter accessories: ${e.message}`);
93
160
  return { children: {} };
94
161
  }
95
162
  }
@@ -104,43 +171,159 @@ let MatterBridgesService = class MatterBridgesService {
104
171
  const bridges = await this.getMatterBridges();
105
172
  return bridges.filter(bridge => bridge.plugin === pluginName);
106
173
  }
107
- async openCommissioningWindow(payload) {
174
+ async getMatterBridgeIdentifiers() {
175
+ const configService = this.configEditorService;
176
+ const storagePath = node_process_1.default.env.UIX_STORAGE_PATH || node_path_1.default.join(node_process_1.default.env.HOME || node_process_1.default.env.USERPROFILE || '', '.homebridge');
177
+ const matterPath = node_path_1.default.join(storagePath, 'matter');
178
+ const identifiers = [];
108
179
  try {
109
- const identifier = await this.resolveIdentifier(payload.bridgeId);
110
- await this.homebridgeIpcService.sendMessage('matterOpenCommissioningWindow', { ...payload, bridgeId: identifier });
111
- return await this.homebridgeIpcService.requestResponse('matterCommissioningWindowRequest', 'matterCommissioningWindowResponse');
180
+ if (!await fs_extra_1.default.pathExists(matterPath)) {
181
+ return identifiers;
182
+ }
183
+ let childBridgeMetadata = [];
184
+ try {
185
+ childBridgeMetadata = await this.homebridgeIpcService.requestResponse('childBridgeMetadataRequest', 'childBridgeMetadataResponse');
186
+ }
187
+ catch (e) {
188
+ this.logger.debug(`Could not get child bridge metadata: ${e.message}`);
189
+ }
190
+ const dirs = await fs_extra_1.default.readdir(matterPath);
191
+ for (const dir of dirs) {
192
+ const dirPath = node_path_1.default.join(matterPath, dir);
193
+ const stat = await fs_extra_1.default.stat(dirPath);
194
+ if (!stat.isDirectory()) {
195
+ continue;
196
+ }
197
+ const identifier = dir;
198
+ const type = identifier === 'main-bridge' ? 'main' : 'child';
199
+ const commissioningPath = node_path_1.default.join(dirPath, 'commissioning.json');
200
+ let commissioned = false;
201
+ let serialNumber;
202
+ try {
203
+ if (await fs_extra_1.default.pathExists(commissioningPath)) {
204
+ const commissioningData = await fs_extra_1.default.readJson(commissioningPath);
205
+ commissioned = commissioningData.commissioned || false;
206
+ serialNumber = commissioningData.serialNumber;
207
+ }
208
+ }
209
+ catch (e) {
210
+ this.logger.debug(`Could not read commissioning file for ${identifier}: ${e.message}`);
211
+ }
212
+ let username;
213
+ let name;
214
+ if (type === 'child') {
215
+ const childBridge = childBridgeMetadata.find(b => b.matterIdentifier === identifier);
216
+ username = childBridge?.username;
217
+ if (username) {
218
+ try {
219
+ const config = await configService.getConfigFile();
220
+ const blocks = [
221
+ ...(config.accessories || []),
222
+ ...(config.platforms || []),
223
+ ].filter((block) => block._bridge?.username?.toUpperCase() === username.toUpperCase());
224
+ if (blocks.length > 0) {
225
+ name = blocks[0]._bridge?.matter?.name || blocks[0].name || blocks[0].platform || blocks[0].accessory;
226
+ }
227
+ }
228
+ catch (e) {
229
+ this.logger.debug(`Could not read config for child bridge ${identifier}: ${e.message}`);
230
+ }
231
+ }
232
+ if (!name) {
233
+ name = identifier;
234
+ }
235
+ }
236
+ else {
237
+ try {
238
+ const config = await configService.getConfigFile();
239
+ name = config.bridge.matter?.name || config.bridge.name;
240
+ }
241
+ catch (e) {
242
+ this.logger.debug(`Could not read config for main bridge: ${e.message}`);
243
+ }
244
+ }
245
+ identifiers.push({
246
+ identifier,
247
+ type,
248
+ name,
249
+ commissioned,
250
+ username,
251
+ serialNumber,
252
+ });
253
+ }
254
+ return identifiers;
112
255
  }
113
256
  catch (e) {
114
- console.error('Failed to open commissioning window:', e);
115
- throw e;
257
+ this.logger.error(`Failed to get Matter bridge identifiers: ${e.message}`);
258
+ return identifiers;
116
259
  }
117
260
  }
118
- async closeCommissioningWindow(usernameOrIdentifier) {
261
+ async getMatterConfig() {
262
+ const config = await this.configEditorService.getConfigFile();
263
+ return config.bridge.matter !== undefined ? config.bridge.matter : null;
264
+ }
265
+ async updateMatterConfig(matterConfig) {
266
+ this.validateMatterConfig(matterConfig);
267
+ const config = await this.configEditorService.getConfigFile();
268
+ config.bridge.matter = matterConfig;
269
+ await this.configEditorService.updateConfigFile(config);
270
+ return matterConfig;
271
+ }
272
+ async deleteMatterConfig() {
273
+ const config = await this.configEditorService.getConfigFile();
274
+ delete config.bridge.matter;
275
+ await this.configEditorService.updateConfigFile(config);
276
+ }
277
+ async deleteMatterBridge(identifier) {
278
+ const storagePath = node_process_1.default.env.UIX_STORAGE_PATH || node_path_1.default.join(node_process_1.default.env.HOME || node_process_1.default.env.USERPROFILE || '', '.homebridge');
279
+ const matterPath = node_path_1.default.join(storagePath, 'matter');
280
+ const bridgePath = node_path_1.default.join(matterPath, identifier);
119
281
  try {
120
- const identifier = await this.resolveIdentifier(usernameOrIdentifier);
121
- await this.homebridgeIpcService.sendMessage('matterCloseCommissioningWindow', identifier);
122
- return await this.homebridgeIpcService.requestResponse('matterCommissioningWindowRequest', 'matterCommissioningWindowResponse');
282
+ if (!await fs_extra_1.default.pathExists(bridgePath)) {
283
+ throw new common_1.BadRequestException(`Matter bridge ${identifier} does not exist`);
284
+ }
285
+ await fs_extra_1.default.remove(bridgePath);
123
286
  }
124
287
  catch (e) {
125
- console.error('Failed to close commissioning window:', e);
126
- throw e;
288
+ if (e instanceof common_1.BadRequestException) {
289
+ throw e;
290
+ }
291
+ throw new common_1.BadRequestException(`Failed to delete Matter bridge ${identifier}: ${e.message}`);
127
292
  }
128
293
  }
129
- async getCommissioningStatus(usernameOrIdentifier) {
130
- try {
131
- const identifier = await this.resolveIdentifier(usernameOrIdentifier);
132
- await this.homebridgeIpcService.sendMessage('matterCommissioningStatusRequest', identifier);
133
- return await this.homebridgeIpcService.requestResponse('matterCommissioningStatusRequest', 'matterCommissioningStatusResponse');
294
+ validateMatterConfig(matterConfig) {
295
+ if (matterConfig.port !== undefined) {
296
+ if (typeof matterConfig.port !== 'number'
297
+ || !Number.isInteger(matterConfig.port)
298
+ || matterConfig.port < 1024
299
+ || matterConfig.port > 65535) {
300
+ throw new common_1.BadRequestException('Port must be an integer between 1024 and 65535');
301
+ }
302
+ if ([5353, 8080, 8443].includes(matterConfig.port)) {
303
+ throw new common_1.BadRequestException('Port 5353, 8080, and 8443 are reserved and cannot be used');
304
+ }
134
305
  }
135
- catch (e) {
136
- console.error('Failed to get commissioning status:', e);
137
- throw e;
306
+ if (matterConfig.name !== undefined) {
307
+ if (typeof matterConfig.name !== 'string') {
308
+ throw new common_1.BadRequestException('Name must be a string');
309
+ }
310
+ if (matterConfig.name.trim() === '') {
311
+ throw new common_1.BadRequestException('Name cannot be empty');
312
+ }
313
+ if (matterConfig.name.length > 32) {
314
+ throw new common_1.BadRequestException('Name must be 32 characters or less');
315
+ }
316
+ const printableAsciiPattern = /^[\x20-\x7E]*$/;
317
+ if (!printableAsciiPattern.test(matterConfig.name)) {
318
+ throw new common_1.BadRequestException('Name must contain only printable ASCII characters');
319
+ }
138
320
  }
139
321
  }
140
322
  };
141
323
  exports.MatterBridgesService = MatterBridgesService;
142
- exports.MatterBridgesService = MatterBridgesService = __decorate([
324
+ exports.MatterBridgesService = MatterBridgesService = MatterBridgesService_1 = __decorate([
143
325
  (0, common_1.Injectable)(),
144
- __metadata("design:paramtypes", [homebridge_ipc_service_1.HomebridgeIpcService])
326
+ __metadata("design:paramtypes", [homebridge_ipc_service_1.HomebridgeIpcService,
327
+ config_editor_service_1.ConfigEditorService])
145
328
  ], MatterBridgesService);
146
329
  //# sourceMappingURL=matter-bridges.service.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"matter-bridges.service.js","sourceRoot":"","sources":["../../../src/modules/matter-bridges/matter-bridges.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"matter-bridges.service.js","sourceRoot":"","sources":["../../../src/modules/matter-bridges/matter-bridges.service.ts"],"names":[],"mappings":"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"}
@@ -344,11 +344,11 @@ let PluginsService = PluginsService_1 = class PluginsService {
344
344
  pluginAction.version = await this.getNpmModuleLatestVersion(pluginAction.name);
345
345
  }
346
346
  const userPlatform = (0, node_os_1.platform)();
347
- if (this.configService.ui.webroot && (0, semver_1.lt)(pluginAction.version, '5.7.1-alpha.0')) {
347
+ if (this.configService.ui.webroot && (0, semver_1.lt)(pluginAction.version, '5.8.1-alpha.0')) {
348
348
  throw new Error(`Cannot install HB UI v${pluginAction.version} when a webroot is configured.\n\r`
349
349
  + 'Please either:\n\r'
350
350
  + ' - Remove the configured webroot, restart Homebridge, then try the install again, or\n\r'
351
- + ' - Install HB UI v5.8.0 or later.\n\r\n\r');
351
+ + ' - Install HB UI v5.9.0 or later.\n\r\n\r');
352
352
  }
353
353
  let installPath = this.configService.customPluginPath
354
354
  ? this.configService.customPluginPath
@@ -674,38 +674,11 @@ let PluginsService = PluginsService_1 = class PluginsService {
674
674
  },
675
675
  },
676
676
  };
677
- const matterBridgeSchema = {
678
- type: 'object',
679
- notitle: true,
680
- condition: {
681
- functionBody: 'return false',
682
- },
683
- properties: {
684
- name: {
685
- type: 'string',
686
- },
687
- port: {
688
- type: 'integer',
689
- maximum: 65535,
690
- },
691
- vendorId: {
692
- type: 'integer',
693
- },
694
- productId: {
695
- type: 'integer',
696
- },
697
- debug: {
698
- type: 'boolean',
699
- },
700
- },
701
- };
702
677
  if (configSchema.schema && typeof configSchema.schema.properties === 'object') {
703
678
  configSchema.schema.properties._bridge = childBridgeSchema;
704
- configSchema.schema.properties._matter = matterBridgeSchema;
705
679
  }
706
680
  else if (typeof configSchema.schema === 'object') {
707
681
  configSchema.schema._bridge = childBridgeSchema;
708
- configSchema.schema._matter = matterBridgeSchema;
709
682
  }
710
683
  return configSchema;
711
684
  }