matterbridge 3.0.1-dev-20250503-71b796a → 3.0.1-dev-20250503-466a8ec

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.
package/dist/frontend.js CHANGED
@@ -364,16 +364,6 @@ export class Frontend {
364
364
  }
365
365
  });
366
366
  });
367
- this.expressApp.get('/api/download-mjstorage', async (req, res) => {
368
- this.log.debug('The frontend sent /api/download-mjstorage');
369
- await createZip(path.join(os.tmpdir(), `matterbridge.${this.matterbridge.matterStorageName}.zip`), path.join(this.matterbridge.matterbridgeDirectory, this.matterbridge.matterStorageName));
370
- res.download(path.join(os.tmpdir(), `matterbridge.${this.matterbridge.matterStorageName}.zip`), `matterbridge.${this.matterbridge.matterStorageName}.zip`, (error) => {
371
- if (error) {
372
- this.log.error(`Error downloading the matter storage matterbridge.${this.matterbridge.matterStorageName}.zip: ${error instanceof Error ? error.message : error}`);
373
- res.status(500).send('Error downloading the matter storage zip file');
374
- }
375
- });
376
- });
377
367
  this.expressApp.get('/api/download-mbstorage', async (req, res) => {
378
368
  this.log.debug('The frontend sent /api/download-mbstorage');
379
369
  await createZip(path.join(os.tmpdir(), `matterbridge.${this.matterbridge.nodeStorageName}.zip`), path.join(this.matterbridge.matterbridgeDirectory, this.matterbridge.nodeStorageName));
@@ -384,6 +374,16 @@ export class Frontend {
384
374
  }
385
375
  });
386
376
  });
377
+ this.expressApp.get('/api/download-mjstorage', async (req, res) => {
378
+ this.log.debug('The frontend sent /api/download-mjstorage');
379
+ await createZip(path.join(os.tmpdir(), `matterbridge.${this.matterbridge.matterStorageName}.zip`), path.join(this.matterbridge.matterbridgeDirectory, this.matterbridge.matterStorageName));
380
+ res.download(path.join(os.tmpdir(), `matterbridge.${this.matterbridge.matterStorageName}.zip`), `matterbridge.${this.matterbridge.matterStorageName}.zip`, (error) => {
381
+ if (error) {
382
+ this.log.error(`Error downloading the matter storage matterbridge.${this.matterbridge.matterStorageName}.zip: ${error instanceof Error ? error.message : error}`);
383
+ res.status(500).send('Error downloading the matter storage zip file');
384
+ }
385
+ });
386
+ });
387
387
  this.expressApp.get('/api/download-pluginstorage', async (req, res) => {
388
388
  this.log.debug('The frontend sent /api/download-pluginstorage');
389
389
  await createZip(path.join(os.tmpdir(), `matterbridge.pluginstorage.zip`), this.matterbridge.matterbridgePluginDirectory);
@@ -965,44 +965,54 @@ export class Frontend {
965
965
  this.wssSendSnackbarMessage(`Saved config for plugin ${data.params.pluginName}`);
966
966
  this.wssSendRefreshRequired('plugins');
967
967
  this.wssSendRestartRequired();
968
+ client.send(JSON.stringify({ id: data.id, method: data.method, src: 'Matterbridge', dst: data.src, success: true }));
968
969
  }
969
970
  }
970
971
  else if (data.method === '/api/shellysysupdate') {
971
972
  const { triggerShellySysUpdate } = await import('./shelly.js');
972
973
  triggerShellySysUpdate(this.matterbridge);
974
+ client.send(JSON.stringify({ id: data.id, method: data.method, src: 'Matterbridge', dst: data.src, success: true }));
973
975
  }
974
976
  else if (data.method === '/api/shellymainupdate') {
975
977
  const { triggerShellyMainUpdate } = await import('./shelly.js');
976
978
  triggerShellyMainUpdate(this.matterbridge);
979
+ client.send(JSON.stringify({ id: data.id, method: data.method, src: 'Matterbridge', dst: data.src, success: true }));
977
980
  }
978
981
  else if (data.method === '/api/shellycreatesystemlog') {
979
982
  const { createShellySystemLog } = await import('./shelly.js');
980
983
  createShellySystemLog(this.matterbridge);
984
+ client.send(JSON.stringify({ id: data.id, method: data.method, src: 'Matterbridge', dst: data.src, success: true }));
981
985
  }
982
986
  else if (data.method === '/api/shellynetconfig') {
983
987
  this.log.debug('/api/shellynetconfig:', data.params);
984
988
  const { triggerShellyChangeIp: triggerShellyChangeNet } = await import('./shelly.js');
985
989
  triggerShellyChangeNet(this.matterbridge, data.params);
990
+ client.send(JSON.stringify({ id: data.id, method: data.method, src: 'Matterbridge', dst: data.src, success: true }));
986
991
  }
987
992
  else if (data.method === '/api/softreset') {
988
993
  const { triggerShellySoftReset } = await import('./shelly.js');
989
994
  triggerShellySoftReset(this.matterbridge);
995
+ client.send(JSON.stringify({ id: data.id, method: data.method, src: 'Matterbridge', dst: data.src, success: true }));
990
996
  }
991
997
  else if (data.method === '/api/hardreset') {
992
998
  const { triggerShellyHardReset } = await import('./shelly.js');
993
999
  triggerShellyHardReset(this.matterbridge);
1000
+ client.send(JSON.stringify({ id: data.id, method: data.method, src: 'Matterbridge', dst: data.src, success: true }));
994
1001
  }
995
1002
  else if (data.method === '/api/reboot') {
996
1003
  const { triggerShellyReboot } = await import('./shelly.js');
997
1004
  triggerShellyReboot(this.matterbridge);
1005
+ client.send(JSON.stringify({ id: data.id, method: data.method, src: 'Matterbridge', dst: data.src, success: true }));
998
1006
  }
999
1007
  else if (data.method === '/api/restart') {
1000
1008
  this.wssSendSnackbarMessage(`Restarting matterbridge...`, 0);
1001
1009
  await this.matterbridge.restartProcess();
1010
+ client.send(JSON.stringify({ id: data.id, method: data.method, src: 'Matterbridge', dst: data.src, success: true }));
1002
1011
  }
1003
1012
  else if (data.method === '/api/shutdown') {
1004
1013
  this.wssSendSnackbarMessage(`Shutting down matterbridge...`, 0);
1005
1014
  await this.matterbridge.shutdownProcess();
1015
+ client.send(JSON.stringify({ id: data.id, method: data.method, src: 'Matterbridge', dst: data.src, success: true }));
1006
1016
  }
1007
1017
  else if (data.method === '/api/create-backup') {
1008
1018
  this.wssSendSnackbarMessage('Creating backup...', 0);
@@ -1011,19 +1021,23 @@ export class Frontend {
1011
1021
  this.log.notice(`Backup ready to be downloaded.`);
1012
1022
  this.wssSendCloseSnackbarMessage('Creating backup...');
1013
1023
  this.wssSendSnackbarMessage('Backup ready to be downloaded', 10);
1024
+ client.send(JSON.stringify({ id: data.id, method: data.method, src: 'Matterbridge', dst: data.src, success: true }));
1014
1025
  }
1015
1026
  else if (data.method === '/api/unregister') {
1016
1027
  this.wssSendSnackbarMessage('Unregistering all bridged devices...', 0);
1017
1028
  await this.matterbridge.unregisterAndShutdownProcess();
1018
1029
  this.wssSendCloseSnackbarMessage('Unregistering all bridged devices...');
1030
+ client.send(JSON.stringify({ id: data.id, method: data.method, src: 'Matterbridge', dst: data.src, success: true }));
1019
1031
  }
1020
1032
  else if (data.method === '/api/reset') {
1021
1033
  this.wssSendSnackbarMessage('Resetting matterbridge commissioning...', 10);
1022
1034
  await this.matterbridge.shutdownProcessAndReset();
1035
+ client.send(JSON.stringify({ id: data.id, method: data.method, src: 'Matterbridge', dst: data.src, success: true }));
1023
1036
  }
1024
1037
  else if (data.method === '/api/factoryreset') {
1025
1038
  this.wssSendSnackbarMessage('Factory reset of matterbridge...', 10);
1026
1039
  await this.matterbridge.shutdownProcessAndFactoryReset();
1040
+ client.send(JSON.stringify({ id: data.id, method: data.method, src: 'Matterbridge', dst: data.src, success: true }));
1027
1041
  }
1028
1042
  else if (data.method === '/api/advertise') {
1029
1043
  const pairingCodes = await this.matterbridge.advertiseServerNode(this.matterbridge.serverNode);
@@ -1039,7 +1053,7 @@ export class Frontend {
1039
1053
  this.matterbridge.matterbridgeInformation.matterbridgeAdvertise = false;
1040
1054
  this.wssSendRefreshRequired('matterbridgeAdvertise');
1041
1055
  this.wssSendSnackbarMessage(`Stopped fabrics share`, 0);
1042
- client.send(JSON.stringify({ id: data.id, method: data.method, src: 'Matterbridge', dst: data.src }));
1056
+ client.send(JSON.stringify({ id: data.id, method: data.method, src: 'Matterbridge', dst: data.src, success: true }));
1043
1057
  }
1044
1058
  else if (data.method === '/api/settings') {
1045
1059
  client.send(JSON.stringify({ id: data.id, method: data.method, src: 'Matterbridge', dst: data.src, response: await this.getApiSettings() }));
@@ -1205,17 +1219,18 @@ export class Frontend {
1205
1219
  return;
1206
1220
  }
1207
1221
  this.log.debug(`Received /api/config name ${CYAN}${data.params.name}${db} value ${CYAN}${data.params.value}${db}`);
1208
- this.log.fatal(`Received /api/config name ${CYAN}${data.params.name}${db} value(${typeof data.params.value}) ${CYAN}${data.params.value}${db}`);
1209
1222
  switch (data.params.name) {
1210
1223
  case 'setpassword':
1211
1224
  if (isValidString(data.params.value)) {
1212
1225
  await this.matterbridge.nodeContext?.set('password', data.params.value);
1226
+ client.send(JSON.stringify({ id: data.id, method: data.method, src: 'Matterbridge', dst: data.src, success: true }));
1213
1227
  }
1214
1228
  break;
1215
1229
  case 'setbridgemode':
1216
- if (isValidString(data.params.value, 5)) {
1230
+ if (isValidString(data.params.value) && ['bridge', 'childbridge'].includes(data.params.value)) {
1217
1231
  await this.matterbridge.nodeContext?.set('bridgeMode', data.params.value);
1218
1232
  this.wssSendRestartRequired();
1233
+ client.send(JSON.stringify({ id: data.id, method: data.method, src: 'Matterbridge', dst: data.src, success: true }));
1219
1234
  }
1220
1235
  break;
1221
1236
  case 'setmbloglevel':
@@ -1240,6 +1255,7 @@ export class Frontend {
1240
1255
  await this.matterbridge.setLogLevel("fatal");
1241
1256
  }
1242
1257
  await this.matterbridge.nodeContext?.set('matterbridgeLogLevel', this.log.logLevel);
1258
+ client.send(JSON.stringify({ id: data.id, method: data.method, src: 'Matterbridge', dst: data.src, success: true }));
1243
1259
  }
1244
1260
  break;
1245
1261
  case 'setmblogfile':
@@ -1251,6 +1267,7 @@ export class Frontend {
1251
1267
  AnsiLogger.setGlobalLogfile(path.join(this.matterbridge.matterbridgeDirectory, this.matterbridge.matterbrideLoggerFile), this.matterbridge.matterbridgeInformation.loggerLevel, true);
1252
1268
  else
1253
1269
  AnsiLogger.setGlobalLogfile(undefined);
1270
+ client.send(JSON.stringify({ id: data.id, method: data.method, src: 'Matterbridge', dst: data.src, success: true }));
1254
1271
  }
1255
1272
  break;
1256
1273
  case 'setmjloglevel':
@@ -1276,6 +1293,7 @@ export class Frontend {
1276
1293
  }
1277
1294
  this.matterbridge.matterbridgeInformation.matterLoggerLevel = Logger.level;
1278
1295
  await this.matterbridge.nodeContext?.set('matterLogLevel', Logger.level);
1296
+ client.send(JSON.stringify({ id: data.id, method: data.method, src: 'Matterbridge', dst: data.src, success: true }));
1279
1297
  }
1280
1298
  break;
1281
1299
  case 'setmjlogfile':
@@ -1302,6 +1320,7 @@ export class Frontend {
1302
1320
  this.log.debug(`Error removing the matterfilelogger for file ${CYAN}${path.join(this.matterbridge.matterbridgeDirectory, this.matterbridge.matterLoggerFile)}${er}: ${error instanceof Error ? error.message : error}`);
1303
1321
  }
1304
1322
  }
1323
+ client.send(JSON.stringify({ id: data.id, method: data.method, src: 'Matterbridge', dst: data.src, success: true }));
1305
1324
  }
1306
1325
  break;
1307
1326
  case 'setmdnsinterface':
@@ -1311,6 +1330,7 @@ export class Frontend {
1311
1330
  this.matterbridge.matterbridgeInformation.mattermdnsinterface = this.matterbridge.mdnsInterface;
1312
1331
  await this.matterbridge.nodeContext?.set('mattermdnsinterface', data.params.value);
1313
1332
  this.wssSendRestartRequired();
1333
+ client.send(JSON.stringify({ id: data.id, method: data.method, src: 'Matterbridge', dst: data.src, success: true }));
1314
1334
  }
1315
1335
  break;
1316
1336
  case 'setipv4address':
@@ -1320,6 +1340,7 @@ export class Frontend {
1320
1340
  this.matterbridge.matterbridgeInformation.matteripv4address = this.matterbridge.ipv4address;
1321
1341
  await this.matterbridge.nodeContext?.set('matteripv4address', data.params.value);
1322
1342
  this.wssSendRestartRequired();
1343
+ client.send(JSON.stringify({ id: data.id, method: data.method, src: 'Matterbridge', dst: data.src, success: true }));
1323
1344
  }
1324
1345
  break;
1325
1346
  case 'setipv6address':
@@ -1329,6 +1350,7 @@ export class Frontend {
1329
1350
  this.matterbridge.matterbridgeInformation.matteripv6address = this.matterbridge.ipv6address;
1330
1351
  await this.matterbridge.nodeContext?.set('matteripv6address', data.params.value);
1331
1352
  this.wssSendRestartRequired();
1353
+ client.send(JSON.stringify({ id: data.id, method: data.method, src: 'Matterbridge', dst: data.src, success: true }));
1332
1354
  }
1333
1355
  break;
1334
1356
  case 'setmatterport':
@@ -1340,11 +1362,12 @@ export class Frontend {
1340
1362
  this.wssSendRestartRequired();
1341
1363
  }
1342
1364
  else {
1343
- this.log.debug(`Reset matter commissioning port to ${CYAN}5040${db}`);
1344
- this.matterbridge.matterbridgeInformation.matterPort = 5040;
1345
- await this.matterbridge.nodeContext?.set('matterport', 5040);
1365
+ this.log.debug(`Reset matter commissioning port to ${CYAN}5540${db}`);
1366
+ this.matterbridge.matterbridgeInformation.matterPort = 5540;
1367
+ await this.matterbridge.nodeContext?.set('matterport', 5540);
1346
1368
  this.wssSendRestartRequired();
1347
1369
  }
1370
+ client.send(JSON.stringify({ id: data.id, method: data.method, src: 'Matterbridge', dst: data.src, success: true }));
1348
1371
  break;
1349
1372
  case 'setmatterdiscriminator':
1350
1373
  data.params.value = isValidString(data.params.value) ? parseInt(data.params.value) : 0;
@@ -1360,6 +1383,7 @@ export class Frontend {
1360
1383
  await this.matterbridge.nodeContext?.remove('matterdiscriminator');
1361
1384
  this.wssSendRestartRequired();
1362
1385
  }
1386
+ client.send(JSON.stringify({ id: data.id, method: data.method, src: 'Matterbridge', dst: data.src, success: true }));
1363
1387
  break;
1364
1388
  case 'setmatterpasscode':
1365
1389
  data.params.value = isValidString(data.params.value) ? parseInt(data.params.value) : 0;
@@ -1375,7 +1399,11 @@ export class Frontend {
1375
1399
  await this.matterbridge.nodeContext?.remove('matterpasscode');
1376
1400
  this.wssSendRestartRequired();
1377
1401
  }
1402
+ client.send(JSON.stringify({ id: data.id, method: data.method, src: 'Matterbridge', dst: data.src, success: true }));
1378
1403
  break;
1404
+ default:
1405
+ this.log.warn(`Unknown parameter ${data.params.name} in /api/config`);
1406
+ client.send(JSON.stringify({ id: data.id, method: data.method, src: 'Matterbridge', dst: data.src, error: `Unknown parameter ${data.params.name} in /api/config` }));
1379
1407
  }
1380
1408
  }
1381
1409
  else if (data.method === '/api/command') {
@@ -1018,6 +1018,7 @@ export class Matterbridge extends EventEmitter {
1018
1018
  }
1019
1019
  async cleanup(message, restart = false) {
1020
1020
  if (this.initialized && !this.hasCleanupStarted) {
1021
+ this.emit('cleanup_started');
1021
1022
  this.hasCleanupStarted = true;
1022
1023
  this.log.info(message);
1023
1024
  if (this.startMatterInterval) {
@@ -1171,6 +1172,7 @@ export class Matterbridge extends EventEmitter {
1171
1172
  }
1172
1173
  this.hasCleanupStarted = false;
1173
1174
  this.initialized = false;
1175
+ this.emit('cleanup_completed');
1174
1176
  }
1175
1177
  else {
1176
1178
  this.log.debug('Cleanup already started...');
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "matterbridge",
3
- "version": "3.0.1-dev-20250503-71b796a",
3
+ "version": "3.0.1-dev-20250503-466a8ec",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "matterbridge",
9
- "version": "3.0.1-dev-20250503-71b796a",
9
+ "version": "3.0.1-dev-20250503-466a8ec",
10
10
  "license": "Apache-2.0",
11
11
  "dependencies": {
12
12
  "@matter/main": "0.13.0",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "matterbridge",
3
- "version": "3.0.1-dev-20250503-71b796a",
3
+ "version": "3.0.1-dev-20250503-466a8ec",
4
4
  "description": "Matterbridge plugin manager for Matter",
5
5
  "author": "https://github.com/Luligu",
6
6
  "license": "Apache-2.0",