matterbridge 1.6.1 → 1.6.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 (139) hide show
  1. package/CHANGELOG.md +35 -1
  2. package/README-DEV.md +0 -4
  3. package/README-NGINX.md +63 -0
  4. package/README.md +4 -0
  5. package/dist/cli.js +15 -7
  6. package/dist/cli.js.map +1 -1
  7. package/dist/deviceManager.d.ts +1 -1
  8. package/dist/deviceManager.d.ts.map +1 -1
  9. package/dist/deviceManager.js +1 -1
  10. package/dist/deviceManager.js.map +1 -1
  11. package/dist/index.d.ts +9 -9
  12. package/dist/index.d.ts.map +1 -1
  13. package/dist/index.js +23 -10
  14. package/dist/index.js.map +1 -1
  15. package/dist/matter/export.d.ts +5 -0
  16. package/dist/matter/export.d.ts.map +1 -0
  17. package/dist/matter/export.js +5 -0
  18. package/dist/matter/export.js.map +1 -0
  19. package/dist/matterbridge.d.ts +12 -7
  20. package/dist/matterbridge.d.ts.map +1 -1
  21. package/dist/matterbridge.js +113 -83
  22. package/dist/matterbridge.js.map +1 -1
  23. package/dist/matterbridgeAccessoryPlatform.d.ts.map +1 -1
  24. package/dist/matterbridgeAccessoryPlatform.js.map +1 -1
  25. package/dist/matterbridgeBehaviors.d.ts +1123 -0
  26. package/dist/matterbridgeBehaviors.d.ts.map +1 -0
  27. package/dist/matterbridgeBehaviors.js +281 -0
  28. package/dist/matterbridgeBehaviors.js.map +1 -0
  29. package/dist/matterbridgeDevice.d.ts +2069 -1511
  30. package/dist/matterbridgeDevice.d.ts.map +1 -1
  31. package/dist/matterbridgeDevice.js +192 -196
  32. package/dist/matterbridgeDevice.js.map +1 -1
  33. package/dist/matterbridgeDeviceTypes.d.ts +58 -0
  34. package/dist/matterbridgeDeviceTypes.d.ts.map +1 -0
  35. package/dist/matterbridgeDeviceTypes.js +308 -0
  36. package/dist/matterbridgeDeviceTypes.js.map +1 -0
  37. package/dist/matterbridgeDynamicPlatform.d.ts.map +1 -1
  38. package/dist/matterbridgeDynamicPlatform.js.map +1 -1
  39. package/dist/matterbridgeEdge.d.ts +19 -20
  40. package/dist/matterbridgeEdge.d.ts.map +1 -1
  41. package/dist/matterbridgeEdge.js +505 -102
  42. package/dist/matterbridgeEdge.js.map +1 -1
  43. package/dist/matterbridgeEndpoint.d.ts +3544 -2304
  44. package/dist/matterbridgeEndpoint.d.ts.map +1 -1
  45. package/dist/matterbridgeEndpoint.js +671 -467
  46. package/dist/matterbridgeEndpoint.js.map +1 -1
  47. package/dist/matterbridgePlatform.d.ts +4 -3
  48. package/dist/matterbridgePlatform.d.ts.map +1 -1
  49. package/dist/matterbridgePlatform.js +10 -2
  50. package/dist/matterbridgePlatform.js.map +1 -1
  51. package/dist/matterbridgeTypes.d.ts +7 -8
  52. package/dist/matterbridgeTypes.d.ts.map +1 -1
  53. package/dist/matterbridgeTypes.js.map +1 -1
  54. package/dist/matterbridgeWebsocket.d.ts +1 -1
  55. package/dist/matterbridgeWebsocket.d.ts.map +1 -1
  56. package/dist/matterbridgeWebsocket.js +5 -3
  57. package/dist/matterbridgeWebsocket.js.map +1 -1
  58. package/dist/pluginManager.d.ts.map +1 -1
  59. package/dist/pluginManager.js +16 -7
  60. package/dist/pluginManager.js.map +1 -1
  61. package/dist/utils/colorUtils.js +1 -1
  62. package/dist/utils/colorUtils.js.map +1 -1
  63. package/dist/utils/utils.d.ts +21 -0
  64. package/dist/utils/utils.d.ts.map +1 -1
  65. package/dist/utils/utils.js +49 -3
  66. package/dist/utils/utils.js.map +1 -1
  67. package/frontend/build/asset-manifest.json +62 -6
  68. package/frontend/build/index.html +1 -1
  69. package/frontend/build/static/css/main.823e08b6.css +2 -0
  70. package/frontend/build/static/css/main.823e08b6.css.map +1 -0
  71. package/frontend/build/static/js/main.a14c87e7.js +115 -0
  72. package/frontend/build/static/js/{main.045d08f7.js.LICENSE.txt → main.a14c87e7.js.LICENSE.txt} +3 -3
  73. package/frontend/build/static/js/main.a14c87e7.js.map +1 -0
  74. package/frontend/build/static/media/roboto-cyrillic-300-normal.1b79538ccd585c259996.woff2 +0 -0
  75. package/frontend/build/static/media/roboto-cyrillic-300-normal.5f077fd7b977d1715acf.woff +0 -0
  76. package/frontend/build/static/media/roboto-cyrillic-400-normal.5d2930082227d172f62c.woff +0 -0
  77. package/frontend/build/static/media/roboto-cyrillic-400-normal.a9e19870cf6c4b973427.woff2 +0 -0
  78. package/frontend/build/static/media/roboto-cyrillic-500-normal.0ae2428323939af5e1ad.woff2 +0 -0
  79. package/frontend/build/static/media/roboto-cyrillic-500-normal.dd7bc8a52c6c70c5a3f5.woff +0 -0
  80. package/frontend/build/static/media/roboto-cyrillic-700-normal.3f6e1548bd5175a8c342.woff +0 -0
  81. package/frontend/build/static/media/roboto-cyrillic-700-normal.4fdfc29a10e7d4b7c527.woff2 +0 -0
  82. package/frontend/build/static/media/roboto-cyrillic-ext-300-normal.795dbc8140e3fef82983.woff +0 -0
  83. package/frontend/build/static/media/roboto-cyrillic-ext-300-normal.80947a31d23c70204b47.woff2 +0 -0
  84. package/frontend/build/static/media/roboto-cyrillic-ext-400-normal.135d076fa32aa0b4d105.woff +0 -0
  85. package/frontend/build/static/media/roboto-cyrillic-ext-400-normal.5cec61a21cc20180fbe1.woff2 +0 -0
  86. package/frontend/build/static/media/roboto-cyrillic-ext-500-normal.6de16332fda843a3dc3d.woff2 +0 -0
  87. package/frontend/build/static/media/roboto-cyrillic-ext-500-normal.c0a0638f90b31d6454ba.woff +0 -0
  88. package/frontend/build/static/media/roboto-cyrillic-ext-700-normal.4750292c47fa2bc6ac1a.woff2 +0 -0
  89. package/frontend/build/static/media/roboto-cyrillic-ext-700-normal.ca247189fc12d00de361.woff +0 -0
  90. package/frontend/build/static/media/roboto-greek-300-normal.285f3e6261d8eb20417d.woff2 +0 -0
  91. package/frontend/build/static/media/roboto-greek-300-normal.889beddda1c9bd9f97df.woff +0 -0
  92. package/frontend/build/static/media/roboto-greek-400-normal.160a791a8e4f46bca3cc.woff +0 -0
  93. package/frontend/build/static/media/roboto-greek-400-normal.2c32b1315be61477013a.woff2 +0 -0
  94. package/frontend/build/static/media/roboto-greek-500-normal.60810e07c7b0273013aa.woff +0 -0
  95. package/frontend/build/static/media/roboto-greek-500-normal.f95e757c5483310f9c11.woff2 +0 -0
  96. package/frontend/build/static/media/roboto-greek-700-normal.77dd370f2001e184ba0d.woff2 +0 -0
  97. package/frontend/build/static/media/roboto-greek-700-normal.df87b053fae3d7ad5f7a.woff +0 -0
  98. package/frontend/build/static/media/roboto-greek-ext-300-normal.b590dbe5c639944366d1.woff +0 -0
  99. package/frontend/build/static/media/roboto-greek-ext-300-normal.d6049cb54aa6fbe14c42.woff2 +0 -0
  100. package/frontend/build/static/media/roboto-greek-ext-400-normal.16eb83b4a3b1ea994243.woff +0 -0
  101. package/frontend/build/static/media/roboto-greek-ext-400-normal.1df4abad55796d11a0c8.woff2 +0 -0
  102. package/frontend/build/static/media/roboto-greek-ext-500-normal.4a96ba31abcce0f5d52b.woff2 +0 -0
  103. package/frontend/build/static/media/roboto-greek-ext-500-normal.fd28d9c008bf3af1bed7.woff +0 -0
  104. package/frontend/build/static/media/roboto-greek-ext-700-normal.2dd6febad11502dec6a6.woff2 +0 -0
  105. package/frontend/build/static/media/roboto-greek-ext-700-normal.4abdc9fff4507f17d726.woff +0 -0
  106. package/frontend/build/static/media/roboto-latin-300-normal.b850f1ff581ea232fac9.woff2 +0 -0
  107. package/frontend/build/static/media/roboto-latin-300-normal.c4bc0593c9954d79cb3a.woff +0 -0
  108. package/frontend/build/static/media/roboto-latin-400-normal.047a7839f69b209db815.woff +0 -0
  109. package/frontend/build/static/media/roboto-latin-400-normal.297d48e1b5a10c0831a9.woff2 +0 -0
  110. package/frontend/build/static/media/roboto-latin-500-normal.68d40d6d01c6f85d24ba.woff +0 -0
  111. package/frontend/build/static/media/roboto-latin-500-normal.7077203b1982951ecf76.woff2 +0 -0
  112. package/frontend/build/static/media/roboto-latin-700-normal.4535474e1cf8598695ad.woff2 +0 -0
  113. package/frontend/build/static/media/roboto-latin-700-normal.9f6a16a7770c87b2042b.woff +0 -0
  114. package/frontend/build/static/media/roboto-latin-ext-300-normal.14982a9e4857a93b6dce.woff +0 -0
  115. package/frontend/build/static/media/roboto-latin-ext-300-normal.97cbc447d4a8d41a9543.woff2 +0 -0
  116. package/frontend/build/static/media/roboto-latin-ext-400-normal.27da5b36b6d3a16f53f4.woff +0 -0
  117. package/frontend/build/static/media/roboto-latin-ext-400-normal.2eeae187764baf05867d.woff2 +0 -0
  118. package/frontend/build/static/media/roboto-latin-ext-500-normal.06c30711d588145a4541.woff +0 -0
  119. package/frontend/build/static/media/roboto-latin-ext-500-normal.9a18d7bb9ff7a6af7b32.woff2 +0 -0
  120. package/frontend/build/static/media/roboto-latin-ext-700-normal.18841836e391d39e83a8.woff2 +0 -0
  121. package/frontend/build/static/media/roboto-latin-ext-700-normal.3c5bcdd0e69c4c3ffafe.woff +0 -0
  122. package/frontend/build/static/media/roboto-vietnamese-300-normal.c96b16e5c05c7b7c3e89.woff2 +0 -0
  123. package/frontend/build/static/media/roboto-vietnamese-300-normal.f5e7cea32756dfe7af40.woff +0 -0
  124. package/frontend/build/static/media/roboto-vietnamese-400-normal.0dc97c66f9b542d6fa17.woff +0 -0
  125. package/frontend/build/static/media/roboto-vietnamese-400-normal.d3f8e26d6c27de8102b6.woff2 +0 -0
  126. package/frontend/build/static/media/roboto-vietnamese-500-normal.090fabef926bdc0e9b9f.woff2 +0 -0
  127. package/frontend/build/static/media/roboto-vietnamese-500-normal.23b7b8a2524d2d4b637b.woff +0 -0
  128. package/frontend/build/static/media/roboto-vietnamese-700-normal.0a79a9fabfc32e33f360.woff2 +0 -0
  129. package/frontend/build/static/media/roboto-vietnamese-700-normal.35ed0597568ff6f19c16.woff +0 -0
  130. package/npm-shrinkwrap.json +117 -36
  131. package/package.json +8 -3
  132. package/dist/matterbridgeController.d.ts +0 -24
  133. package/dist/matterbridgeController.d.ts.map +0 -1
  134. package/dist/matterbridgeController.js +0 -386
  135. package/dist/matterbridgeController.js.map +0 -1
  136. package/frontend/build/static/css/main.1cf003ae.css +0 -2
  137. package/frontend/build/static/css/main.1cf003ae.css.map +0 -1
  138. package/frontend/build/static/js/main.045d08f7.js +0 -3
  139. package/frontend/build/static/js/main.045d08f7.js.map +0 -1
@@ -25,32 +25,32 @@ import { fileURLToPath } from 'url';
25
25
  import { promises as fs } from 'fs';
26
26
  import { exec, spawn } from 'child_process';
27
27
  import { createServer } from 'http';
28
- import https from 'https';
29
28
  import EventEmitter from 'events';
30
- import express from 'express';
31
29
  import os from 'os';
32
30
  import path from 'path';
31
+ import { randomBytes } from 'crypto';
32
+ // Package modules
33
+ import https from 'https';
34
+ import express from 'express';
33
35
  import WebSocket, { WebSocketServer } from 'ws';
34
36
  // NodeStorage and AnsiLogger modules
35
37
  import { NodeStorageManager } from 'node-persist-manager';
36
- import { AnsiLogger, UNDERLINE, UNDERLINEOFF, YELLOW, db, debugStringify, stringify, BRIGHT, RESET, er, nf, rs, wr, RED, GREEN, zb, hk, or, idn, BLUE, CYAN, nt } from 'node-ansi-logger';
38
+ import { AnsiLogger, UNDERLINE, UNDERLINEOFF, YELLOW, db, debugStringify, stringify, BRIGHT, RESET, er, nf, rs, wr, RED, GREEN, zb, CYAN, nt, idn, or, hk, BLUE } from 'node-ansi-logger';
37
39
  // Matterbridge
38
40
  import { MatterbridgeDevice } from './matterbridgeDevice.js';
39
- import { logInterfaces, wait, waiter, createZip, copyDirectory } from './utils/utils.js';
41
+ import { WS_ID_LOG, WS_ID_REFRESH_NEEDED, WS_ID_RESTART_NEEDED, wsMessageHandler } from './matterbridgeWebsocket.js';
42
+ import { logInterfaces, wait, waiter, createZip, copyDirectory, getParameter, getIntParameter, hasParameter } from './utils/utils.js';
40
43
  import { PluginManager } from './pluginManager.js';
41
44
  import { DeviceManager } from './deviceManager.js';
42
- // @project-chip/matter-node.js
43
- import { CommissioningController, CommissioningServer, MatterServer } from '@project-chip/matter-node.js';
44
- import { BasicInformationCluster, BridgedDeviceBasicInformation, BridgedDeviceBasicInformationCluster, ClusterServer, FixedLabelCluster, GeneralCommissioning, PowerSourceCluster, SwitchCluster, ThreadNetworkDiagnosticsCluster, getClusterNameById, } from '@project-chip/matter-node.js/cluster';
45
- import { DeviceTypeId, VendorId } from '@project-chip/matter-node.js/datatype';
46
- import { Aggregator, DeviceTypes, NodeStateInformation } from '@project-chip/matter-node.js/device';
47
- import { Format, Level, Logger } from '@project-chip/matter-node.js/log';
48
- import { ManualPairingCodeCodec, QrCodeSchema } from '@project-chip/matter-node.js/schema';
49
- import { StorageBackendDisk, StorageBackendJsonFile, StorageManager } from '@project-chip/matter-node.js/storage';
50
- import { getParameter, getIntParameter, hasParameter } from '@project-chip/matter-node.js/util';
51
- import { CryptoNode } from '@project-chip/matter-node.js/crypto';
52
- import { Specification } from '@project-chip/matter-node.js/model';
53
- import { WS_ID_LOG, WS_ID_REFRESH_NEEDED, WS_ID_RESTART_NEEDED, wsMessageHandler } from './matterbridgeWebsocket.js';
45
+ import { MatterbridgeEndpoint } from './matterbridgeEndpoint.js';
46
+ // @matter
47
+ import { DeviceTypeId, Logger, LogLevel as MatterLogLevel, LogFormat as MatterLogFormat, VendorId, StorageManager } from '@matter/main';
48
+ import { BasicInformationCluster, BridgedDeviceBasicInformation, BridgedDeviceBasicInformationCluster, FixedLabelCluster, GeneralCommissioning, PowerSourceCluster, SwitchCluster, ThreadNetworkDiagnosticsCluster } from '@matter/main/clusters';
49
+ import { getClusterNameById, ManualPairingCodeCodec, QrCodeSchema } from '@matter/main/types';
50
+ import { StorageBackendDisk, StorageBackendJsonFile } from '@matter/nodejs';
51
+ // @project-chip
52
+ import { CommissioningController, CommissioningServer, MatterServer } from '@project-chip/matter.js';
53
+ import { Aggregator, DeviceTypes, NodeStateInformation } from '@project-chip/matter.js/device';
54
54
  // Default colors
55
55
  const plg = '\u001B[38;5;33m';
56
56
  const dev = '\u001B[38;5;79m';
@@ -91,9 +91,11 @@ export class Matterbridge extends EventEmitter {
91
91
  matterbridgeConnected: false,
92
92
  bridgeMode: '',
93
93
  restartMode: '',
94
+ edge: hasParameter('edge'),
95
+ profile: getParameter('profile'),
94
96
  loggerLevel: "info" /* LogLevel.INFO */,
95
97
  fileLogger: false,
96
- matterLoggerLevel: Level.INFO,
98
+ matterLoggerLevel: MatterLogLevel.INFO,
97
99
  matterFileLogger: false,
98
100
  mattermdnsinterface: undefined,
99
101
  matteripv4address: undefined,
@@ -117,6 +119,7 @@ export class Matterbridge extends EventEmitter {
117
119
  bridgeMode = '';
118
120
  restartMode = '';
119
121
  profile = getParameter('profile');
122
+ edge = hasParameter('edge');
120
123
  log;
121
124
  matterbrideLoggerFile = 'matterbridge' + (getParameter('profile') ? '.' + getParameter('profile') : '') + '.log';
122
125
  matterLoggerFile = 'matter' + (getParameter('profile') ? '.' + getParameter('profile') : '') + '.log';
@@ -157,8 +160,8 @@ export class Matterbridge extends EventEmitter {
157
160
  matterAggregator;
158
161
  commissioningServer;
159
162
  commissioningController;
160
- aggregatorVendorId = VendorId(0xfff1);
161
- aggregatorProductId = 0x8000;
163
+ aggregatorVendorId = VendorId(getIntParameter('vendorId') ?? 0xfff1);
164
+ aggregatorProductId = getIntParameter('productId') ?? 0x8000;
162
165
  static instance;
163
166
  // We load asyncronously so is private
164
167
  constructor() {
@@ -315,39 +318,39 @@ export class Matterbridge extends EventEmitter {
315
318
  if (hasParameter('matterlogger')) {
316
319
  const level = getParameter('matterlogger');
317
320
  if (level === 'debug') {
318
- Logger.defaultLogLevel = Level.DEBUG;
321
+ Logger.defaultLogLevel = MatterLogLevel.DEBUG;
319
322
  }
320
323
  else if (level === 'info') {
321
- Logger.defaultLogLevel = Level.INFO;
324
+ Logger.defaultLogLevel = MatterLogLevel.INFO;
322
325
  }
323
326
  else if (level === 'notice') {
324
- Logger.defaultLogLevel = Level.NOTICE;
327
+ Logger.defaultLogLevel = MatterLogLevel.NOTICE;
325
328
  }
326
329
  else if (level === 'warn') {
327
- Logger.defaultLogLevel = Level.WARN;
330
+ Logger.defaultLogLevel = MatterLogLevel.WARN;
328
331
  }
329
332
  else if (level === 'error') {
330
- Logger.defaultLogLevel = Level.ERROR;
333
+ Logger.defaultLogLevel = MatterLogLevel.ERROR;
331
334
  }
332
335
  else if (level === 'fatal') {
333
- Logger.defaultLogLevel = Level.FATAL;
336
+ Logger.defaultLogLevel = MatterLogLevel.FATAL;
334
337
  }
335
338
  else {
336
339
  this.log.warn(`Invalid matter.js logger level: ${level}. Using default level "info".`);
337
- Logger.defaultLogLevel = Level.INFO;
340
+ Logger.defaultLogLevel = MatterLogLevel.INFO;
338
341
  }
339
342
  }
340
343
  else {
341
- Logger.defaultLogLevel = await this.nodeContext.get('matterLogLevel', Level.INFO);
344
+ Logger.defaultLogLevel = await this.nodeContext.get('matterLogLevel', MatterLogLevel.INFO);
342
345
  }
343
- Logger.format = Format.ANSI;
346
+ Logger.format = MatterLogFormat.ANSI;
344
347
  Logger.setLogger('default', this.createMatterLogger());
345
348
  // Create the file logger for matter.js (context: matterFileLog)
346
349
  if (hasParameter('matterfilelogger') || (await this.nodeContext.get('matterFileLog', false))) {
347
350
  this.matterbridgeInformation.matterFileLogger = true;
348
351
  Logger.addLogger('matterfilelogger', await this.createMatterFileLogger(path.join(this.matterbridgeDirectory, this.matterLoggerFile), true), {
349
352
  defaultLogLevel: Logger.defaultLogLevel,
350
- logFormat: Format.PLAIN,
353
+ logFormat: MatterLogFormat.PLAIN,
351
354
  });
352
355
  }
353
356
  this.log.debug(`Matter logLevel: ${Logger.defaultLogLevel} fileLoger: ${this.matterbridgeInformation.matterFileLogger}.`);
@@ -632,6 +635,7 @@ export class Matterbridge extends EventEmitter {
632
635
  if (hasParameter('bridge') || (!hasParameter('childbridge') && (await this.nodeContext?.get('bridgeMode', '')) === 'bridge')) {
633
636
  this.bridgeMode = 'bridge';
634
637
  MatterbridgeDevice.bridgeMode = 'bridge';
638
+ MatterbridgeEndpoint.bridgeMode = 'bridge';
635
639
  this.log.debug(`Starting matterbridge in mode ${this.bridgeMode}`);
636
640
  await this.startBridge();
637
641
  return;
@@ -640,6 +644,7 @@ export class Matterbridge extends EventEmitter {
640
644
  if (hasParameter('childbridge') || (!hasParameter('bridge') && (await this.nodeContext?.get('bridgeMode', '')) === 'childbridge')) {
641
645
  this.bridgeMode = 'childbridge';
642
646
  MatterbridgeDevice.bridgeMode = 'childbridge';
647
+ MatterbridgeEndpoint.bridgeMode = 'childbridge';
643
648
  this.log.debug(`Starting matterbridge in mode ${this.bridgeMode}`);
644
649
  await this.startChildbridge();
645
650
  return;
@@ -695,12 +700,12 @@ export class Matterbridge extends EventEmitter {
695
700
  process.removeAllListeners('unhandledRejection');
696
701
  this.exceptionHandler = async (error) => {
697
702
  this.log.fatal('Unhandled Exception detected at:', error.stack || error, rs);
698
- await this.cleanup('Unhandled Exception detected, cleaning up...');
703
+ // await this.cleanup('Unhandled Exception detected, cleaning up...');
699
704
  };
700
705
  process.on('uncaughtException', this.exceptionHandler);
701
706
  this.rejectionHandler = async (reason, promise) => {
702
707
  this.log.fatal('Unhandled Rejection detected at:', promise, 'reason:', reason instanceof Error ? reason.stack : reason, rs);
703
- await this.cleanup('Unhandled Rejection detected, cleaning up...');
708
+ // await this.cleanup('Unhandled Rejection detected, cleaning up...');
704
709
  };
705
710
  process.on('unhandledRejection', this.rejectionHandler);
706
711
  this.log.debug(`Registering SIGINT and SIGTERM signal handlers...`);
@@ -993,22 +998,22 @@ export class Matterbridge extends EventEmitter {
993
998
  const message = formattedLog.slice(65);
994
999
  matterLogger.logName = logger;
995
1000
  switch (_level) {
996
- case Level.DEBUG:
1001
+ case MatterLogLevel.DEBUG:
997
1002
  matterLogger.log("debug" /* LogLevel.DEBUG */, message);
998
1003
  break;
999
- case Level.INFO:
1004
+ case MatterLogLevel.INFO:
1000
1005
  matterLogger.log("info" /* LogLevel.INFO */, message);
1001
1006
  break;
1002
- case Level.NOTICE:
1007
+ case MatterLogLevel.NOTICE:
1003
1008
  matterLogger.log("notice" /* LogLevel.NOTICE */, message);
1004
1009
  break;
1005
- case Level.WARN:
1010
+ case MatterLogLevel.WARN:
1006
1011
  matterLogger.log("warn" /* LogLevel.WARN */, message);
1007
1012
  break;
1008
- case Level.ERROR:
1013
+ case MatterLogLevel.ERROR:
1009
1014
  matterLogger.log("error" /* LogLevel.ERROR */, message);
1010
1015
  break;
1011
- case Level.FATAL:
1016
+ case MatterLogLevel.FATAL:
1012
1017
  matterLogger.log("fatal" /* LogLevel.FATAL */, message);
1013
1018
  break;
1014
1019
  default:
@@ -1050,22 +1055,22 @@ export class Matterbridge extends EventEmitter {
1050
1055
  const logger = parts[1];
1051
1056
  const finalMessage = parts.slice(2).join(' ') + os.EOL;
1052
1057
  switch (_level) {
1053
- case Level.DEBUG:
1058
+ case MatterLogLevel.DEBUG:
1054
1059
  await fs.appendFile(filePath, `[${timestamp}] [${logger}] [debug] ${finalMessage}`);
1055
1060
  break;
1056
- case Level.INFO:
1061
+ case MatterLogLevel.INFO:
1057
1062
  await fs.appendFile(filePath, `[${timestamp}] [${logger}] [info] ${finalMessage}`);
1058
1063
  break;
1059
- case Level.NOTICE:
1064
+ case MatterLogLevel.NOTICE:
1060
1065
  await fs.appendFile(filePath, `[${timestamp}] [${logger}] [notice] ${finalMessage}`);
1061
1066
  break;
1062
- case Level.WARN:
1067
+ case MatterLogLevel.WARN:
1063
1068
  await fs.appendFile(filePath, `[${timestamp}] [${logger}] [warn] ${finalMessage}`);
1064
1069
  break;
1065
- case Level.ERROR:
1070
+ case MatterLogLevel.ERROR:
1066
1071
  await fs.appendFile(filePath, `[${timestamp}] [${logger}] [error] ${finalMessage}`);
1067
1072
  break;
1068
- case Level.FATAL:
1073
+ case MatterLogLevel.FATAL:
1069
1074
  await fs.appendFile(filePath, `[${timestamp}] [${logger}] [fatal] ${finalMessage}`);
1070
1075
  break;
1071
1076
  default:
@@ -1280,6 +1285,18 @@ export class Matterbridge extends EventEmitter {
1280
1285
  this.initialized = false;
1281
1286
  }
1282
1287
  }
1288
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
1289
+ async addBridgedEndpoint(pluginName, device) {
1290
+ // Nothing to do here
1291
+ }
1292
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
1293
+ async removeBridgedEndpoint(pluginName, device) {
1294
+ // Nothing to do here
1295
+ }
1296
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
1297
+ async removeAllBridgedEndpoints(pluginName) {
1298
+ // Nothing to do here
1299
+ }
1283
1300
  /**
1284
1301
  * Adds a bridged device to the Matterbridge.
1285
1302
  * @param pluginName - The name of the plugin.
@@ -1955,39 +1972,52 @@ export class Matterbridge extends EventEmitter {
1955
1972
  * @param {StorageContext} context - The storage context.
1956
1973
  * @returns {Aggregator} - The created Matter Aggregator.
1957
1974
  */
1975
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
1958
1976
  async createMatterAggregator(context, pluginName) {
1959
- const random = 'AG' + CryptoNode.getRandomData(8).toHex();
1977
+ /*
1978
+ const random = randomBytes(8).toString('hex');
1960
1979
  await context.set('aggregatorSerialNumber', await context.get('aggregatorSerialNumber', random));
1961
1980
  await context.set('aggregatorUniqueId', await context.get('aggregatorUniqueId', random));
1962
- this.log.debug(`Creating matter aggregator for plugin ${plg}${pluginName}${db} with uniqueId ${await context.get('aggregatorUniqueId')} serialNumber ${await context.get('aggregatorSerialNumber')}`);
1963
- this.log.debug(`Creating matter aggregator for plugin ${plg}${pluginName}${db} with softwareVersion ${await context.get('softwareVersion', 1)} softwareVersionString ${await context.get('softwareVersionString', '1.0.0')}`);
1964
- this.log.debug(`Creating matter aggregator for plugin ${plg}${pluginName}${db} with hardwareVersion ${await context.get('hardwareVersion', 1)} hardwareVersionString ${await context.get('hardwareVersionString', '1.0.0')}`);
1981
+
1982
+ this.log.debug(`Creating matter aggregator for plugin ${plg}${pluginName}${db} with uniqueId ${await context.get<string>('aggregatorUniqueId')} serialNumber ${await context.get<string>('aggregatorSerialNumber')}`);
1983
+ this.log.debug(`Creating matter aggregator for plugin ${plg}${pluginName}${db} with softwareVersion ${await context.get<number>('softwareVersion', 1)} softwareVersionString ${await context.get<string>('softwareVersionString', '1.0.0')}`);
1984
+ this.log.debug(`Creating matter aggregator for plugin ${plg}${pluginName}${db} with hardwareVersion ${await context.get<number>('hardwareVersion', 1)} hardwareVersionString ${await context.get<string>('hardwareVersionString', '1.0.0')}`);
1985
+ */
1965
1986
  const matterAggregator = new Aggregator();
1966
- matterAggregator.addClusterServer(ClusterServer(BasicInformationCluster, {
1967
- dataModelRevision: 1,
1968
- location: 'FR',
1969
- vendorId: VendorId(0xfff1),
1970
- vendorName: 'Matterbridge',
1971
- productId: 0x8000,
1972
- productName: 'Matterbridge aggregator',
1973
- productLabel: 'Matterbridge aggregator',
1974
- nodeLabel: 'Matterbridge aggregator',
1975
- serialNumber: await context.get('aggregatorSerialNumber'),
1976
- uniqueId: await context.get('aggregatorUniqueId'),
1977
- softwareVersion: await context.get('softwareVersion', 1),
1978
- softwareVersionString: await context.get('softwareVersionString', '1.0.0'),
1979
- hardwareVersion: await context.get('hardwareVersion', 1),
1980
- hardwareVersionString: await context.get('hardwareVersionString', '1.0.0'),
1981
- reachable: true,
1982
- capabilityMinima: { caseSessionsPerFabric: 3, subscriptionsPerFabric: 3 },
1983
- specificationVersion: Specification.SPECIFICATION_VERSION,
1984
- maxPathsPerInvoke: 1,
1985
- }, {}, {
1986
- startUp: true,
1987
- shutDown: true,
1988
- leave: true,
1989
- reachableChanged: true,
1990
- }));
1987
+ /*
1988
+ matterAggregator.addClusterServer(
1989
+ ClusterServer(
1990
+ BasicInformationCluster,
1991
+ {
1992
+ dataModelRevision: 1,
1993
+ location: 'FR',
1994
+ vendorId: VendorId(0xfff1),
1995
+ vendorName: 'Matterbridge',
1996
+ productId: 0x8000,
1997
+ productName: 'Matterbridge aggregator',
1998
+ productLabel: 'Matterbridge aggregator',
1999
+ nodeLabel: 'Matterbridge aggregator',
2000
+ serialNumber: await context.get<string>('aggregatorSerialNumber'),
2001
+ uniqueId: await context.get<string>('aggregatorUniqueId'),
2002
+ softwareVersion: await context.get<number>('softwareVersion', 1),
2003
+ softwareVersionString: await context.get<string>('softwareVersionString', '1.0.0'),
2004
+ hardwareVersion: await context.get<number>('hardwareVersion', 1),
2005
+ hardwareVersionString: await context.get<string>('hardwareVersionString', '1.0.0'),
2006
+ reachable: true,
2007
+ capabilityMinima: { caseSessionsPerFabric: 3, subscriptionsPerFabric: 3 },
2008
+ specificationVersion: Specification.SPECIFICATION_VERSION,
2009
+ maxPathsPerInvoke: 1,
2010
+ },
2011
+ {},
2012
+ {
2013
+ startUp: true,
2014
+ shutDown: true,
2015
+ leave: true,
2016
+ reachableChanged: true,
2017
+ },
2018
+ ),
2019
+ );
2020
+ */
1991
2021
  return matterAggregator;
1992
2022
  }
1993
2023
  /**
@@ -2180,7 +2210,7 @@ export class Matterbridge extends EventEmitter {
2180
2210
  if (!this.storageManager)
2181
2211
  throw new Error('No storage manager initialized');
2182
2212
  this.log.debug(`Creating commissioning server storage context for ${plg}${pluginName}${db}`);
2183
- const random = 'CS' + CryptoNode.getRandomData(8).toHex();
2213
+ const random = randomBytes(8).toString('hex');
2184
2214
  const storageContext = this.storageManager.createContext(pluginName);
2185
2215
  await storageContext.set('deviceName', deviceName);
2186
2216
  await storageContext.set('deviceType', deviceType);
@@ -3122,22 +3152,22 @@ export class Matterbridge extends EventEmitter {
3122
3152
  if (command === 'setmjloglevel') {
3123
3153
  this.log.debug('Matter.js log level:', param);
3124
3154
  if (param === 'Debug') {
3125
- Logger.defaultLogLevel = Level.DEBUG;
3155
+ Logger.defaultLogLevel = MatterLogLevel.DEBUG;
3126
3156
  }
3127
3157
  else if (param === 'Info') {
3128
- Logger.defaultLogLevel = Level.INFO;
3158
+ Logger.defaultLogLevel = MatterLogLevel.INFO;
3129
3159
  }
3130
3160
  else if (param === 'Notice') {
3131
- Logger.defaultLogLevel = Level.NOTICE;
3161
+ Logger.defaultLogLevel = MatterLogLevel.NOTICE;
3132
3162
  }
3133
3163
  else if (param === 'Warn') {
3134
- Logger.defaultLogLevel = Level.WARN;
3164
+ Logger.defaultLogLevel = MatterLogLevel.WARN;
3135
3165
  }
3136
3166
  else if (param === 'Error') {
3137
- Logger.defaultLogLevel = Level.ERROR;
3167
+ Logger.defaultLogLevel = MatterLogLevel.ERROR;
3138
3168
  }
3139
3169
  else if (param === 'Fatal') {
3140
- Logger.defaultLogLevel = Level.FATAL;
3170
+ Logger.defaultLogLevel = MatterLogLevel.FATAL;
3141
3171
  }
3142
3172
  await this.nodeContext?.set('matterLogLevel', Logger.defaultLogLevel);
3143
3173
  res.json({ message: 'Command received' });
@@ -3191,8 +3221,8 @@ export class Matterbridge extends EventEmitter {
3191
3221
  if (param === 'true') {
3192
3222
  try {
3193
3223
  Logger.addLogger('matterfilelogger', await this.createMatterFileLogger(path.join(this.matterbridgeDirectory, this.matterLoggerFile), true), {
3194
- defaultLogLevel: Level.DEBUG,
3195
- logFormat: Format.PLAIN,
3224
+ defaultLogLevel: MatterLogLevel.DEBUG,
3225
+ logFormat: MatterLogFormat.PLAIN,
3196
3226
  });
3197
3227
  }
3198
3228
  catch (error) {
@@ -3480,8 +3510,8 @@ export class Matterbridge extends EventEmitter {
3480
3510
  await this.logNodeAndSystemInfo();
3481
3511
  this.matterbridgeDirectory = dataPath;
3482
3512
  // Set matter.js logger level and format
3483
- Logger.defaultLogLevel = Level.INFO;
3484
- Logger.format = Format.ANSI;
3513
+ Logger.defaultLogLevel = MatterLogLevel.INFO;
3514
+ Logger.format = MatterLogFormat.ANSI;
3485
3515
  // Start the storage and create matterbridgeContext
3486
3516
  await this.startMatterStorage('json', path.join(this.matterbridgeDirectory, this.matterStorageName));
3487
3517
  if (!this.storageManager)