@matterbridge/core 3.9.1-dev-20260614-89d7aeb → 3.9.1-dev-20260617-b1e1b99

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 (107) hide show
  1. package/README.md +5 -3
  2. package/dist/backend.js +17 -6
  3. package/dist/backendExpress.d.ts +1 -1
  4. package/dist/backendExpress.js +12 -12
  5. package/dist/backendWsServer.d.ts +1 -1
  6. package/dist/backendWsServer.js +3 -3
  7. package/dist/behaviors/activatedCarbonFilterMonitoringServer.d.ts +2 -2
  8. package/dist/behaviors/bindingServer.d.ts +4 -4
  9. package/dist/behaviors/bindingServer.js +2 -2
  10. package/dist/behaviors/booleanStateConfigurationServer.d.ts +2 -2
  11. package/dist/behaviors/booleanStateConfigurationServer.js +2 -1
  12. package/dist/behaviors/colorControlServer.d.ts +9 -9
  13. package/dist/behaviors/deviceEnergyManagementServer.d.ts +4 -4
  14. package/dist/behaviors/doorLockServer.d.ts +18 -18
  15. package/dist/behaviors/doorLockServer.js +2 -2
  16. package/dist/behaviors/fanControlServer.d.ts +2 -2
  17. package/dist/behaviors/hepaFilterMonitoringServer.d.ts +2 -2
  18. package/dist/behaviors/identifyServer.d.ts +1 -1
  19. package/dist/behaviors/levelControlServer.d.ts +1 -1
  20. package/dist/behaviors/matterbridgeServer.d.ts +2 -2
  21. package/dist/behaviors/modeSelectServer.d.ts +1 -1
  22. package/dist/behaviors/operationalStateServer.d.ts +1 -1
  23. package/dist/behaviors/serviceAreaServer.d.ts +1 -1
  24. package/dist/behaviors/smokeCoAlarmServer.d.ts +1 -1
  25. package/dist/behaviors/thermostatServer.d.ts +10 -10
  26. package/dist/behaviors/valveConfigurationAndControlServer.d.ts +1 -1
  27. package/dist/behaviors/windowCoveringServer.d.ts +7 -7
  28. package/dist/behaviors/windowCoveringServer.js +3 -3
  29. package/dist/cli.js +9 -9
  30. package/dist/cliEmitter.js +2 -2
  31. package/dist/cliHistory.js +2 -2
  32. package/dist/clusters/closure-control.d.ts +1 -1
  33. package/dist/clusters/closure-dimension.d.ts +1 -1
  34. package/dist/clusters/export.d.ts +1 -1
  35. package/dist/clusters/export.js +1 -1
  36. package/dist/clusters/soil-measurement.d.ts +1 -1
  37. package/dist/deviceManager.d.ts +1 -1
  38. package/dist/deviceManager.js +3 -4
  39. package/dist/devices/batteryStorage.js +2 -1
  40. package/dist/devices/closure.d.ts +6 -6
  41. package/dist/devices/closurePanel.d.ts +6 -6
  42. package/dist/devices/cooktop.d.ts +1 -1
  43. package/dist/devices/cooktop.js +2 -1
  44. package/dist/devices/dishwasher.d.ts +1 -1
  45. package/dist/devices/evse.d.ts +3 -3
  46. package/dist/devices/evse.js +4 -2
  47. package/dist/devices/extractorHood.js +2 -1
  48. package/dist/devices/heatPump.js +7 -8
  49. package/dist/devices/irrigationSystem.d.ts +1 -1
  50. package/dist/devices/laundryDryer.d.ts +1 -1
  51. package/dist/devices/laundryWasher.d.ts +1 -1
  52. package/dist/devices/oven.d.ts +2 -2
  53. package/dist/devices/oven.js +4 -3
  54. package/dist/devices/refrigerator.d.ts +2 -2
  55. package/dist/devices/refrigerator.js +2 -1
  56. package/dist/devices/solarPower.d.ts +1 -1
  57. package/dist/devices/solarPower.js +2 -1
  58. package/dist/devices/temperatureControl.d.ts +3 -3
  59. package/dist/devices/waterHeater.js +2 -1
  60. package/dist/export.js +2 -2
  61. package/dist/frontend.js +39 -39
  62. package/dist/helpers.d.ts +1 -1
  63. package/dist/helpers.js +6 -14
  64. package/dist/jestutils/jestBroadcastServerSpy.d.ts +13 -12
  65. package/dist/jestutils/jestBroadcastServerSpy.js +1 -1
  66. package/dist/jestutils/jestDeviceManagerSpy.d.ts +14 -13
  67. package/dist/jestutils/jestDeviceManagerSpy.js +1 -1
  68. package/dist/jestutils/jestFrontendSpy.d.ts +7 -9
  69. package/dist/jestutils/jestFrontendSpy.js +1 -1
  70. package/dist/jestutils/jestMatterTest.js +1 -1
  71. package/dist/jestutils/jestMatterbridgeEndpointSpy.d.ts +6 -54
  72. package/dist/jestutils/jestMatterbridgeEndpointSpy.js +1 -1
  73. package/dist/jestutils/jestMatterbridgePlatformSpy.d.ts +43 -60
  74. package/dist/jestutils/jestMatterbridgePlatformSpy.js +1 -1
  75. package/dist/jestutils/jestMatterbridgeSpy.d.ts +5 -4
  76. package/dist/jestutils/jestMatterbridgeSpy.js +1 -1
  77. package/dist/jestutils/jestMatterbridgeTest.d.ts +2 -2
  78. package/dist/jestutils/jestMatterbridgeTest.js +1 -1
  79. package/dist/jestutils/jestPluginManagerSpy.d.ts +40 -47
  80. package/dist/jestutils/jestPluginManagerSpy.js +1 -1
  81. package/dist/jestutils/jestSetupTest.d.ts +0 -1
  82. package/dist/jestutils/jestSetupTest.js +13 -12
  83. package/dist/jestutils/matterRequest.d.ts +1 -1
  84. package/dist/matterNode.js +8 -6
  85. package/dist/matterbridge.js +11 -21
  86. package/dist/matterbridgeAccessoryPlatform.d.ts +1 -1
  87. package/dist/matterbridgeAccessoryPlatform.js +2 -2
  88. package/dist/matterbridgeDeviceTypes.js +2 -2
  89. package/dist/matterbridgeDynamicPlatform.d.ts +1 -1
  90. package/dist/matterbridgeDynamicPlatform.js +2 -2
  91. package/dist/matterbridgeEndpoint.d.ts +9 -9
  92. package/dist/matterbridgeEndpoint.js +9 -8
  93. package/dist/matterbridgeEndpointCommandHandler.d.ts +40 -40
  94. package/dist/matterbridgeEndpointCommandHandler.js +2 -2
  95. package/dist/matterbridgeEndpointHelpers.d.ts +23 -23
  96. package/dist/matterbridgeEndpointHelpers.js +3 -4
  97. package/dist/matterbridgeEndpointTypes.js +2 -3
  98. package/dist/matterbridgeFactory.d.ts +1 -1
  99. package/dist/matterbridgeFactory.js +2 -2
  100. package/dist/matterbridgePlatform.d.ts +1 -1
  101. package/dist/matterbridgePlatform.js +2 -2
  102. package/dist/mb_coap.js +3 -1
  103. package/dist/mb_health.js +3 -1
  104. package/dist/mb_mdns.js +10 -7
  105. package/dist/pluginManager.d.ts +1 -1
  106. package/dist/pluginManager.js +11 -6
  107. package/package.json +7 -7
package/README.md CHANGED
@@ -6,10 +6,12 @@
6
6
  [![Docker Pulls](https://img.shields.io/docker/pulls/luligu/matterbridge?label=docker%20pulls)](https://hub.docker.com/r/luligu/matterbridge)
7
7
  ![Node.js CI](https://github.com/Luligu/matterbridge/actions/workflows/build.yml/badge.svg)
8
8
  ![CodeQL](https://github.com/Luligu/matterbridge/actions/workflows/codeql.yml/badge.svg)
9
- [![codecov](https://codecov.io/gh/Luligu/matterbridge/branch/main/graph/badge.svg)](https://codecov.io/gh/Luligu/matterbridge)
10
- [![styled with prettier](https://img.shields.io/badge/styled_with-Prettier-f8bc45.svg?logo=prettier)](https://prettier.io/)
11
- [![linted with eslint](https://img.shields.io/badge/linted_with-ES_Lint-4B32C3.svg?logo=eslint)](https://eslint.org/)
9
+ [![Codecov](https://codecov.io/gh/Luligu/matterbridge/branch/main/graph/badge.svg)](https://codecov.io/gh/Luligu/matterbridge)
10
+ [![tested with Vitest](https://img.shields.io/badge/tested_with-Vitest-6E9F18.svg?logo=vitest&logoColor=white)](https://vitest.dev)
11
+ [![styled with Oxc](https://img.shields.io/badge/styled_with-Oxc-9BE4E0.svg?logo=oxc&logoColor=white)](https://oxc.rs/docs/guide/usage/formatter.html)
12
+ [![linted with Oxc](https://img.shields.io/badge/linted_with-Oxc-9BE4E0.svg?logo=oxc&logoColor=white)](https://oxc.rs/docs/guide/usage/linter.html)
12
13
  [![TypeScript](https://img.shields.io/badge/TypeScript-3178C6?logo=typescript&logoColor=white)](https://www.typescriptlang.org/)
14
+ [![TypeScript Native](https://img.shields.io/badge/TypeScript_Native-3178C6?logo=typescript&logoColor=white)](https://github.com/microsoft/typescript-go)
13
15
  [![ESM](https://img.shields.io/badge/ESM-Node.js-339933?logo=node.js&logoColor=white)](https://nodejs.org/)
14
16
  [![matterbridge.io](https://img.shields.io/badge/matterbridge.io-online-brightgreen)](https://matterbridge.io)
15
17
 
package/dist/backend.js CHANGED
@@ -3,9 +3,9 @@ import path from 'node:path';
3
3
  import { BroadcastServer } from '@matterbridge/thread';
4
4
  import { getParameter, hasParameter } from '@matterbridge/utils/cli';
5
5
  import { getErrorMessage, inspectError, logError } from '@matterbridge/utils/error';
6
+ import { logModuleLoaded } from '@matterbridge/utils/loader';
6
7
  import { AnsiLogger, rs, UNDERLINE, UNDERLINEOFF } from 'node-ansi-logger';
7
- if (hasParameter('loader'))
8
- console.log('\u001B[32m[' + new Date().toLocaleTimeString('en-US', { hour12: false, hour: '2-digit', minute: '2-digit', second: '2-digit', fractionalSecondDigits: 3 }) + '] Backend loaded.\u001B[40;0m');
8
+ logModuleLoaded('Backend');
9
9
  export class Backend extends EventEmitter {
10
10
  debug;
11
11
  verbose;
@@ -36,7 +36,6 @@ export class Backend extends EventEmitter {
36
36
  this.server.on('broadcast_message', this.broadcastMsgHandler.bind(this));
37
37
  }
38
38
  destroy() {
39
- this.server.off('broadcast_message', this.broadcastMsgHandler.bind(this));
40
39
  this.server.close();
41
40
  }
42
41
  async broadcastMsgHandler(msg) {
@@ -61,6 +60,7 @@ export class Backend extends EventEmitter {
61
60
  this.backendWsServer = new BackendWsServer(this.matterbridge, this);
62
61
  if (!hasParameter('ssl')) {
63
62
  const http = await import('node:http');
63
+ await this.backendExpress.start();
64
64
  try {
65
65
  this.log.debug(`Creating HTTP server...`);
66
66
  this.httpServer = http.createServer(this.backendExpress.expressApp);
@@ -68,8 +68,10 @@ export class Backend extends EventEmitter {
68
68
  catch (error) {
69
69
  logError(this.log, `Failed to create HTTP server`, error);
70
70
  this.emit('server_error', error);
71
+ await this.backendExpress.stop();
71
72
  return;
72
73
  }
74
+ await this.backendWsServer.start();
73
75
  this.httpServer.listen(this.port, getParameter('bind'), () => {
74
76
  const addr = this.httpServer?.address();
75
77
  if (addr && typeof addr !== 'string') {
@@ -110,7 +112,7 @@ export class Backend extends EventEmitter {
110
112
  socket.destroy();
111
113
  }
112
114
  }
113
- return;
115
+ return undefined;
114
116
  });
115
117
  this.httpServer.on('error', (error) => {
116
118
  this.log.error(`Frontend http server error listening on ${this.port}`);
@@ -123,7 +125,7 @@ export class Backend extends EventEmitter {
123
125
  break;
124
126
  }
125
127
  this.emit('server_error', error);
126
- return;
128
+ return undefined;
127
129
  });
128
130
  }
129
131
  else {
@@ -191,6 +193,7 @@ export class Backend extends EventEmitter {
191
193
  httpsServerOptions.rejectUnauthorized = true;
192
194
  }
193
195
  const https = await import('node:https');
196
+ await this.backendExpress.start();
194
197
  try {
195
198
  this.log.debug(`Creating HTTPS server...`);
196
199
  this.httpsServer = https.createServer(httpsServerOptions, this.backendExpress.expressApp);
@@ -198,8 +201,10 @@ export class Backend extends EventEmitter {
198
201
  catch (error) {
199
202
  logError(this.log, `Failed to create HTTPS server`, error);
200
203
  this.emit('server_error', error);
204
+ await this.backendExpress.stop();
201
205
  return;
202
206
  }
207
+ await this.backendWsServer.start();
203
208
  this.httpsServer.listen(this.port, getParameter('bind'), () => {
204
209
  const addr = this.httpsServer?.address();
205
210
  if (addr && typeof addr !== 'string') {
@@ -239,7 +244,7 @@ export class Backend extends EventEmitter {
239
244
  socket.destroy();
240
245
  }
241
246
  }
242
- return;
247
+ return undefined;
243
248
  });
244
249
  this.httpsServer.on('error', (error) => {
245
250
  this.log.error(`Frontend https server error listening on ${this.port}`);
@@ -259,6 +264,7 @@ export class Backend extends EventEmitter {
259
264
  }
260
265
  async stop() {
261
266
  this.log.debug('Stopping backend...');
267
+ await this.backendWsServer?.stop();
262
268
  if (this.httpServer) {
263
269
  this.log.debug('Closing http server...');
264
270
  this.httpServer.close();
@@ -279,6 +285,11 @@ export class Backend extends EventEmitter {
279
285
  this.httpsServer = undefined;
280
286
  this.log.debug('Backend https server closed successfully');
281
287
  }
288
+ await this.backendExpress?.stop();
289
+ this.backendWsServer?.destroy();
290
+ this.backendExpress?.destroy();
291
+ this.backendWsServer = undefined;
292
+ this.backendExpress = undefined;
282
293
  this.log.debug('Backend stopped');
283
294
  }
284
295
  getApiSettings() {
@@ -1,6 +1,6 @@
1
1
  import { type SharedMatterbridge } from '@matterbridge/types';
2
2
  import express from 'express';
3
- import { type Backend } from './backend.js';
3
+ import type { Backend } from './backend.js';
4
4
  export declare class BackendExpress {
5
5
  private debug;
6
6
  private verbose;
@@ -5,13 +5,13 @@ import { MATTER_LOGGER_FILE, MATTER_STORAGE_DIR, MATTERBRIDGE_BACKUP_FILE, MATTE
5
5
  import { hasParameter } from '@matterbridge/utils/cli';
6
6
  import { getErrorMessage } from '@matterbridge/utils/error';
7
7
  import { formatBytes } from '@matterbridge/utils/format';
8
+ import { logModuleLoaded } from '@matterbridge/utils/loader';
8
9
  import escapeHtml from 'escape-html';
9
10
  import express from 'express';
10
11
  import { rateLimit } from 'express-rate-limit';
11
12
  import multer from 'multer';
12
13
  import { AnsiLogger, er, nf } from 'node-ansi-logger';
13
- if (hasParameter('loader'))
14
- console.log('\u001B[32m[' + new Date().toLocaleTimeString('en-US', { hour12: false, hour: '2-digit', minute: '2-digit', second: '2-digit', fractionalSecondDigits: 3 }) + '] BackendExpress loaded.\u001B[40;0m');
14
+ logModuleLoaded('BackendExpress');
15
15
  export class BackendExpress {
16
16
  debug;
17
17
  verbose;
@@ -40,7 +40,6 @@ export class BackendExpress {
40
40
  this.server.on('broadcast_message', this.broadcastMsgHandler.bind(this));
41
41
  }
42
42
  destroy() {
43
- this.server.off('broadcast_message', this.broadcastMsgHandler.bind(this));
44
43
  this.server.close();
45
44
  }
46
45
  async broadcastMsgHandler(msg) {
@@ -53,6 +52,7 @@ export class BackendExpress {
53
52
  this.log.logLevel = msg.params.logLevel;
54
53
  this.server.respond({ ...msg, result: { logLevel: this.log.logLevel } });
55
54
  break;
55
+ default:
56
56
  }
57
57
  }
58
58
  }
@@ -76,7 +76,7 @@ export class BackendExpress {
76
76
  });
77
77
  }
78
78
  this.expressApp.use(express.static(path.join(this.matterbridge.rootDirectory, 'apps', 'frontend', 'build')));
79
- this.expressApp.post('/api/login', express.json(), async (req, res) => {
79
+ this.expressApp.post('/api/login', express.json(), (req, res) => {
80
80
  const { password } = req.body;
81
81
  this.log.debug(`The frontend sent /api/login with password ${password ? '[redacted]' : '(empty)'}`);
82
82
  if (this.backend.storedPassword === '' || password === this.backend.storedPassword) {
@@ -131,19 +131,19 @@ export class BackendExpress {
131
131
  };
132
132
  res.status(200).json(memoryReport);
133
133
  });
134
- this.expressApp.get('/api/settings', async (req, res) => {
134
+ this.expressApp.get('/api/settings', (req, res) => {
135
135
  this.log.debug('The frontend sent /api/settings');
136
136
  if (!this.validateReq(req, res))
137
137
  return;
138
138
  res.json(this.backend.getApiSettings());
139
139
  });
140
- this.expressApp.get('/api/plugins', async (req, res) => {
140
+ this.expressApp.get('/api/plugins', (req, res) => {
141
141
  this.log.debug('The frontend sent /api/plugins');
142
142
  if (!this.validateReq(req, res))
143
143
  return;
144
144
  res.json(this.backend.getApiPlugins());
145
145
  });
146
- this.expressApp.get('/api/devices', async (req, res) => {
146
+ this.expressApp.get('/api/devices', (req, res) => {
147
147
  this.log.debug('The frontend sent /api/devices');
148
148
  if (!this.validateReq(req, res))
149
149
  return;
@@ -310,7 +310,7 @@ export class BackendExpress {
310
310
  res.status(500).send('Error reading history file.');
311
311
  }
312
312
  });
313
- this.expressApp.get('/api/download-backup', this.fileLimiter, async (req, res) => {
313
+ this.expressApp.get('/api/download-backup', this.fileLimiter, (req, res) => {
314
314
  this.log.debug('The frontend sent /api/download-backup');
315
315
  if (!this.validateReq(req, res))
316
316
  return;
@@ -325,7 +325,7 @@ export class BackendExpress {
325
325
  }
326
326
  });
327
327
  });
328
- this.expressApp.get('/api/download-mbstorage', this.fileLimiter, async (req, res) => {
328
+ this.expressApp.get('/api/download-mbstorage', this.fileLimiter, (req, res) => {
329
329
  this.log.debug('The frontend sent /api/download-mbstorage');
330
330
  if (!this.validateReq(req, res))
331
331
  return;
@@ -340,7 +340,7 @@ export class BackendExpress {
340
340
  }
341
341
  });
342
342
  });
343
- this.expressApp.get('/api/download-mjstorage', this.fileLimiter, async (req, res) => {
343
+ this.expressApp.get('/api/download-mjstorage', this.fileLimiter, (req, res) => {
344
344
  this.log.debug('The frontend sent /api/download-mjstorage');
345
345
  if (!this.validateReq(req, res))
346
346
  return;
@@ -355,7 +355,7 @@ export class BackendExpress {
355
355
  }
356
356
  });
357
357
  });
358
- this.expressApp.get('/api/download-pluginstorage', this.fileLimiter, async (req, res) => {
358
+ this.expressApp.get('/api/download-pluginstorage', this.fileLimiter, (req, res) => {
359
359
  this.log.debug('The frontend sent /api/download-pluginstorage');
360
360
  if (!this.validateReq(req, res))
361
361
  return;
@@ -370,7 +370,7 @@ export class BackendExpress {
370
370
  }
371
371
  });
372
372
  });
373
- this.expressApp.get('/api/download-pluginconfig', this.fileLimiter, async (req, res) => {
373
+ this.expressApp.get('/api/download-pluginconfig', this.fileLimiter, (req, res) => {
374
374
  this.log.debug('The frontend sent /api/download-pluginconfig');
375
375
  if (!this.validateReq(req, res))
376
376
  return;
@@ -1,7 +1,7 @@
1
1
  import type { EndpointNumber } from '@matter/types/datatype';
2
2
  import type { ApiMatter, RefreshRequiredChanged, SharedMatterbridge, WsMessageBroadcast } from '@matterbridge/types';
3
3
  import { WebSocketServer } from 'ws';
4
- import { type Backend } from './backend.js';
4
+ import type { Backend } from './backend.js';
5
5
  export declare class BackendWsServer {
6
6
  private debug;
7
7
  private verbose;
@@ -2,12 +2,12 @@ import { Logger, LogLevel as MatterLogLevel } from '@matter/general';
2
2
  import { BroadcastServer } from '@matterbridge/thread';
3
3
  import { hasParameter } from '@matterbridge/utils/cli';
4
4
  import { inspectError } from '@matterbridge/utils/error';
5
+ import { logModuleLoaded } from '@matterbridge/utils/loader';
5
6
  import { isValidNumber, isValidString } from '@matterbridge/utils/validate';
6
7
  import { fireAndForget, withTimeout } from '@matterbridge/utils/wait';
7
8
  import { AnsiLogger, CYAN, debugStringify, nf } from 'node-ansi-logger';
8
9
  import { WebSocket, WebSocketServer } from 'ws';
9
- if (hasParameter('loader'))
10
- console.log('\u001B[32m[' + new Date().toLocaleTimeString('en-US', { hour12: false, hour: '2-digit', minute: '2-digit', second: '2-digit', fractionalSecondDigits: 3 }) + '] BackendWsServer loaded.\u001B[40;0m');
10
+ logModuleLoaded('BackendWsServer');
11
11
  export class BackendWsServer {
12
12
  debug;
13
13
  verbose;
@@ -31,7 +31,6 @@ export class BackendWsServer {
31
31
  this.server.on('broadcast_message', this.broadcastMsgHandler.bind(this));
32
32
  }
33
33
  destroy() {
34
- this.server.off('broadcast_message', this.broadcastMsgHandler.bind(this));
35
34
  this.server.close();
36
35
  }
37
36
  broadcastMsgHandler(msg) {
@@ -44,6 +43,7 @@ export class BackendWsServer {
44
43
  this.log.logLevel = msg.params.logLevel;
45
44
  this.server.respond({ ...msg, result: { logLevel: this.log.logLevel } });
46
45
  break;
46
+ default:
47
47
  }
48
48
  }
49
49
  }
@@ -1,9 +1,9 @@
1
1
  import { ActivatedCarbonFilterMonitoringServer } from '@matter/node/behaviors/activated-carbon-filter-monitoring';
2
- import { type ActivatedCarbonFilterMonitoring } from '@matter/types/clusters/activated-carbon-filter-monitoring';
2
+ import type { ActivatedCarbonFilterMonitoring } from '@matter/types/clusters/activated-carbon-filter-monitoring';
3
3
  declare const MatterbridgeActivatedCarbonFilterMonitoringServer_base: import("@matter/node").ClusterBehavior.Type<typeof ActivatedCarbonFilterMonitoringServer, import("@matter/types").ClusterType.WithSupportedFeatures<ActivatedCarbonFilterMonitoring, {
4
+ warning: false;
4
5
  condition: true;
5
6
  replacementProductList: false;
6
- warning: false;
7
7
  }>, import("@matter/types").ClusterType.Concrete, new () => {}, "activatedCarbonFilterMonitoring">;
8
8
  export declare class MatterbridgeActivatedCarbonFilterMonitoringServer extends MatterbridgeActivatedCarbonFilterMonitoringServer_base {
9
9
  resetCondition(): Promise<void>;
@@ -1,11 +1,11 @@
1
- import { type Endpoint } from '@matter/main/node';
1
+ import type { Endpoint } from '@matter/main/node';
2
2
  import { BindingBehavior, BindingServer } from '@matter/node/behaviors/binding';
3
- import { type ClusterId } from '@matter/types';
4
- import { type Binding } from '@matter/types/clusters/binding';
3
+ import type { ClusterId } from '@matter/types';
4
+ import type { Binding } from '@matter/types/clusters/binding';
5
5
  export declare class MatterbridgeBindingServer extends BindingServer {
6
6
  protected internal: MatterbridgeBindingServer.Internal;
7
7
  state: MatterbridgeBindingServer.State;
8
- initialize(): Promise<void>;
8
+ initialize(): void;
9
9
  [Symbol.asyncDispose](): Promise<void>;
10
10
  getEndpoint(clusterId: ClusterId): Endpoint | undefined;
11
11
  }
@@ -3,7 +3,7 @@ import { DescriptorServer } from '@matter/node/behaviors/descriptor';
3
3
  import { debugStringify, nt } from 'node-ansi-logger';
4
4
  import { MatterbridgeServer } from './matterbridgeServer.js';
5
5
  export class MatterbridgeBindingServer extends BindingServer {
6
- async initialize() {
6
+ initialize() {
7
7
  super.initialize();
8
8
  const device = this.endpoint.stateOf(MatterbridgeServer);
9
9
  device.log.info(`Initializing MatterbridgeBindingServer (endpoint ${this.endpoint.maybeId}.${this.endpoint.maybeNumber}) with clientList: ${this.state.clientList.join(', ')}`);
@@ -31,7 +31,7 @@ export class MatterbridgeBindingServer extends BindingServer {
31
31
  return;
32
32
  await resolution.node.set({ network: { autoSubscribe: true } });
33
33
  });
34
- this.reactTo(this.events.removed, async (resolution) => {
34
+ this.reactTo(this.events.removed, (resolution) => {
35
35
  device.log.notice(`MatterbridgeBindingServer (endpoint ${this.endpoint.maybeId}.${this.endpoint.maybeNumber}) binding removed: kind ${resolution.kind} entry ${debugStringify(resolution.entry)}${nt}`);
36
36
  this.internal.boundEndpoints.delete(resolution.entry);
37
37
  });
@@ -1,10 +1,10 @@
1
1
  import { BooleanStateConfigurationServer } from '@matter/node/behaviors/boolean-state-configuration';
2
2
  import { BooleanStateConfiguration } from '@matter/types/clusters/boolean-state-configuration';
3
3
  declare const MatterbridgeBooleanStateConfigurationServer_base: import("@matter/node").ClusterBehavior.Type<typeof BooleanStateConfigurationServer, import("@matter/types").ClusterType.WithSupportedFeatures<BooleanStateConfiguration, {
4
- alarmSuppress: false;
4
+ visual: true;
5
5
  audible: true;
6
+ alarmSuppress: false;
6
7
  sensitivityLevel: true;
7
- visual: true;
8
8
  }>, import("@matter/types").ClusterType.Concrete, new () => {}, "booleanStateConfiguration">;
9
9
  export declare class MatterbridgeBooleanStateConfigurationServer extends MatterbridgeBooleanStateConfigurationServer_base {
10
10
  enableDisableAlarm(request: BooleanStateConfiguration.EnableDisableAlarmRequest): Promise<void>;
@@ -1,10 +1,11 @@
1
1
  import { BooleanStateConfigurationServer } from '@matter/node/behaviors/boolean-state-configuration';
2
2
  import { BooleanStateConfiguration } from '@matter/types/clusters/boolean-state-configuration';
3
+ import { debugStringify } from 'node-ansi-logger';
3
4
  import { MatterbridgeServer } from './matterbridgeServer.js';
4
5
  export class MatterbridgeBooleanStateConfigurationServer extends BooleanStateConfigurationServer.with(BooleanStateConfiguration.Feature.Visual, BooleanStateConfiguration.Feature.Audible, BooleanStateConfiguration.Feature.SensitivityLevel) {
5
6
  async enableDisableAlarm(request) {
6
7
  const device = this.endpoint.stateOf(MatterbridgeServer);
7
- device.log.info(`Enabling/disabling alarm ${request.alarmsToEnableDisable} (endpoint ${this.endpoint.maybeId}.${this.endpoint.maybeNumber})`);
8
+ device.log.info(`Enabling/disabling alarm ${debugStringify(request.alarmsToEnableDisable)} (endpoint ${this.endpoint.maybeId}.${this.endpoint.maybeNumber})`);
8
9
  await device.commandHandler.executeHandler('BooleanStateConfiguration.enableDisableAlarm', {
9
10
  command: 'enableDisableAlarm',
10
11
  request,
@@ -1,11 +1,11 @@
1
1
  import { ColorControlServer } from '@matter/node/behaviors/color-control';
2
2
  import { ColorControl } from '@matter/types/clusters/color-control';
3
3
  declare const MatterbridgeColorControlServer_base: import("@matter/node").ClusterBehavior.Type<typeof ColorControlServer, import("@matter/types").ClusterType.WithSupportedFeatures<ColorControl, {
4
- colorLoop: false;
5
- colorTemperature: true;
6
- enhancedHue: true;
7
4
  hueSaturation: true;
5
+ enhancedHue: true;
6
+ colorLoop: false;
8
7
  xy: true;
8
+ colorTemperature: true;
9
9
  }>, import("@matter/types").ClusterType.Concrete, typeof import("@matter/node/behaviors/color-control").ColorControlBaseServer.Internal, "colorControl">;
10
10
  export declare class MatterbridgeColorControlServer extends MatterbridgeColorControlServer_base {
11
11
  moveToHue(request: ColorControl.MoveToHueRequest): Promise<void>;
@@ -17,17 +17,17 @@ export declare class MatterbridgeColorControlServer extends MatterbridgeColorCon
17
17
  moveToColorTemperature(request: ColorControl.MoveToColorTemperatureRequest): Promise<void>;
18
18
  }
19
19
  declare const MatterbridgeEnhancedColorControlServer_base: import("@matter/node").ClusterBehavior.Type<typeof MatterbridgeColorControlServer, import("@matter/types").ClusterType.WithSupportedFeatures<import("@matter/types").ClusterType.WithSupportedFeatures<ColorControl, {
20
- colorLoop: false;
21
- colorTemperature: true;
22
- enhancedHue: true;
23
20
  hueSaturation: true;
24
- xy: true;
25
- }>, {
21
+ enhancedHue: true;
26
22
  colorLoop: false;
23
+ xy: true;
27
24
  colorTemperature: true;
28
- enhancedHue: true;
25
+ }>, {
29
26
  hueSaturation: true;
27
+ enhancedHue: true;
28
+ colorLoop: false;
30
29
  xy: true;
30
+ colorTemperature: true;
31
31
  }>, import("@matter/types").ClusterType.Concrete, typeof import("@matter/node/behaviors/color-control").ColorControlBaseServer.Internal, "colorControl">;
32
32
  export declare class MatterbridgeEnhancedColorControlServer extends MatterbridgeEnhancedColorControlServer_base {
33
33
  }
@@ -1,13 +1,13 @@
1
1
  import { DeviceEnergyManagementServer } from '@matter/node/behaviors/device-energy-management';
2
2
  import { DeviceEnergyManagement } from '@matter/types/clusters/device-energy-management';
3
3
  declare const MatterbridgeDeviceEnergyManagementServer_base: import("@matter/node").ClusterBehavior.Type<typeof DeviceEnergyManagementServer, import("@matter/types").ClusterType.WithSupportedFeatures<DeviceEnergyManagement, {
4
- constraintBasedAdjustment: false;
5
- forecastAdjustment: false;
6
- pausable: false;
7
4
  powerAdjustment: true;
8
5
  powerForecastReporting: true;
9
- startTimeAdjustment: false;
10
6
  stateForecastReporting: false;
7
+ startTimeAdjustment: false;
8
+ pausable: false;
9
+ forecastAdjustment: false;
10
+ constraintBasedAdjustment: false;
11
11
  }>, import("@matter/types").ClusterType.Concrete, new () => {}, "deviceEnergyManagement">;
12
12
  export declare class MatterbridgeDeviceEnergyManagementServer extends MatterbridgeDeviceEnergyManagementServer_base {
13
13
  powerAdjustRequest(request: DeviceEnergyManagement.PowerAdjustRequest): Promise<void>;
@@ -1,36 +1,36 @@
1
1
  import { DoorLockServer } from '@matter/node/behaviors/door-lock';
2
2
  import { DoorLock } from '@matter/types/clusters/door-lock';
3
3
  declare const MatterbridgeDoorLockServer_base: import("@matter/node").ClusterBehavior.Type<import("@matter/node").ClusterBehavior.Type<typeof DoorLockServer, import("@matter/types").ClusterType.WithSupportedFeatures<DoorLock, {
4
- aliroBleuwb: false;
5
- aliroProvisioning: false;
6
- credentialOverTheAirAccess: false;
7
- doorPositionSensor: false;
8
- faceCredentials: false;
9
- fingerCredentials: false;
10
- holidaySchedules: false;
11
4
  pinCredential: true;
12
5
  rfidCredential: false;
13
- unbolting: false;
14
- user: true;
6
+ fingerCredentials: false;
15
7
  weekDayAccessSchedules: false;
16
- yearDayAccessSchedules: false;
17
- }>, import("@matter/types").ClusterType.Concrete, typeof import("@matter/node/behaviors/door-lock").DoorLockBaseServer.Internal, "doorLock">, import("@matter/types").ClusterType.WithEnabledAttributes<import("@matter/types").ClusterType.WithEnabledEvents<import("@matter/types").ClusterType.WithSupportedFeatures<DoorLock, {
18
- aliroBleuwb: false;
19
- aliroProvisioning: false;
20
- credentialOverTheAirAccess: false;
21
8
  doorPositionSensor: false;
22
9
  faceCredentials: false;
23
- fingerCredentials: false;
10
+ credentialOverTheAirAccess: false;
11
+ user: true;
12
+ yearDayAccessSchedules: false;
24
13
  holidaySchedules: false;
14
+ unbolting: false;
15
+ aliroProvisioning: false;
16
+ aliroBleuwb: false;
17
+ }>, import("@matter/types").ClusterType.Concrete, typeof import("@matter/node/behaviors/door-lock").DoorLockBaseServer.Internal, "doorLock">, import("@matter/types").ClusterType.WithEnabledAttributes<import("@matter/types").ClusterType.WithEnabledEvents<import("@matter/types").ClusterType.WithSupportedFeatures<DoorLock, {
25
18
  pinCredential: true;
26
19
  rfidCredential: false;
27
- unbolting: false;
28
- user: true;
20
+ fingerCredentials: false;
29
21
  weekDayAccessSchedules: false;
22
+ doorPositionSensor: false;
23
+ faceCredentials: false;
24
+ credentialOverTheAirAccess: false;
25
+ user: true;
30
26
  yearDayAccessSchedules: false;
27
+ holidaySchedules: false;
28
+ unbolting: false;
29
+ aliroProvisioning: false;
30
+ aliroBleuwb: false;
31
31
  }>, "doorLockAlarm" | "lockOperation" | "lockOperationError">, never>, import("@matter/types").ClusterType.Concrete, typeof import("@matter/node/behaviors/door-lock").DoorLockBaseServer.Internal, "doorLock">;
32
32
  export declare class MatterbridgeDoorLockServer extends MatterbridgeDoorLockServer_base {
33
- initialize(): Promise<void>;
33
+ initialize(): void;
34
34
  lockDoor(request: DoorLock.LockDoorRequest): Promise<void>;
35
35
  unlockDoor(request: DoorLock.UnlockDoorRequest): Promise<void>;
36
36
  unlockWithTimeout(request: DoorLock.UnlockWithTimeoutRequest): Promise<void>;
@@ -6,10 +6,10 @@ export class MatterbridgeDoorLockServer extends DoorLockServer.with(DoorLock.Fea
6
6
  events: { doorLockAlarm: true, lockOperation: true, lockOperationError: true },
7
7
  commands: { lockDoor: true, unlockDoor: true, unlockWithTimeout: true },
8
8
  }) {
9
- async initialize() {
9
+ initialize() {
10
10
  const device = this.endpoint.stateOf(MatterbridgeServer);
11
11
  device.log.info(`Initializing MatterbridgeDoorLockServer (endpoint ${this.endpoint.maybeId}.${this.endpoint.maybeNumber})`);
12
- await super.initialize();
12
+ super.initialize();
13
13
  }
14
14
  async lockDoor(request) {
15
15
  const device = this.endpoint.stateOf(MatterbridgeServer);
@@ -1,11 +1,11 @@
1
1
  import { FanControlServer } from '@matter/node/behaviors/fan-control';
2
2
  import { FanControl } from '@matter/types/clusters/fan-control';
3
3
  declare const MatterbridgeFanControlServer_base: import("@matter/node").ClusterBehavior.Type<typeof FanControlServer, import("@matter/types").ClusterType.WithSupportedFeatures<FanControl, {
4
+ step: true;
4
5
  airflowDirection: false;
5
- auto: true;
6
6
  multiSpeed: false;
7
+ auto: true;
7
8
  rocking: false;
8
- step: true;
9
9
  wind: false;
10
10
  }>, import("@matter/types").ClusterType.Concrete, new () => {}, "fanControl">;
11
11
  export declare class MatterbridgeFanControlServer extends MatterbridgeFanControlServer_base {
@@ -1,9 +1,9 @@
1
1
  import { HepaFilterMonitoringServer } from '@matter/node/behaviors/hepa-filter-monitoring';
2
- import { type HepaFilterMonitoring } from '@matter/types/clusters/hepa-filter-monitoring';
2
+ import type { HepaFilterMonitoring } from '@matter/types/clusters/hepa-filter-monitoring';
3
3
  declare const MatterbridgeHepaFilterMonitoringServer_base: import("@matter/node").ClusterBehavior.Type<typeof HepaFilterMonitoringServer, import("@matter/types").ClusterType.WithSupportedFeatures<HepaFilterMonitoring, {
4
+ warning: false;
4
5
  condition: true;
5
6
  replacementProductList: false;
6
- warning: false;
7
7
  }>, import("@matter/types").ClusterType.Concrete, new () => {}, "hepaFilterMonitoring">;
8
8
  export declare class MatterbridgeHepaFilterMonitoringServer extends MatterbridgeHepaFilterMonitoringServer_base {
9
9
  resetCondition(): Promise<void>;
@@ -1,5 +1,5 @@
1
1
  import { IdentifyServer } from '@matter/node/behaviors/identify';
2
- import { type Identify } from '@matter/types/clusters/identify';
2
+ import type { Identify } from '@matter/types/clusters/identify';
3
3
  export declare class MatterbridgeIdentifyServer extends IdentifyServer {
4
4
  identify(request: Identify.IdentifyRequest): Promise<void>;
5
5
  triggerEffect(request: Identify.TriggerEffectRequest): Promise<void>;
@@ -1,5 +1,5 @@
1
1
  import { LevelControlServer } from '@matter/node/behaviors/level-control';
2
- import { type LevelControl } from '@matter/types/clusters/level-control';
2
+ import type { LevelControl } from '@matter/types/clusters/level-control';
3
3
  export declare class MatterbridgeLevelControlServer extends LevelControlServer {
4
4
  moveToLevel(request: LevelControl.MoveToLevelRequest): Promise<void>;
5
5
  moveToLevelWithOnOff(request: LevelControl.MoveToLevelRequest): Promise<void>;
@@ -1,6 +1,6 @@
1
1
  import { Behavior } from '@matter/node';
2
- import { type AnsiLogger } from 'node-ansi-logger';
3
- import { type CommandHandler } from '../matterbridgeEndpointCommandHandler.js';
2
+ import type { AnsiLogger } from 'node-ansi-logger';
3
+ import type { CommandHandler } from '../matterbridgeEndpointCommandHandler.js';
4
4
  export declare class MatterbridgeServer extends Behavior {
5
5
  static readonly id = "matterbridge";
6
6
  state: MatterbridgeServer.State;
@@ -1,5 +1,5 @@
1
1
  import { ModeSelectServer } from '@matter/node/behaviors/mode-select';
2
- import { type ModeSelect } from '@matter/types/clusters/mode-select';
2
+ import type { ModeSelect } from '@matter/types/clusters/mode-select';
3
3
  export declare class MatterbridgeModeSelectServer extends ModeSelectServer {
4
4
  changeToMode(request: ModeSelect.ChangeToModeRequest): Promise<void>;
5
5
  }
@@ -1,4 +1,4 @@
1
- import { type MaybePromise } from '@matter/general';
1
+ import type { MaybePromise } from '@matter/general';
2
2
  import { OperationalStateServer } from '@matter/node/behaviors/operational-state';
3
3
  import { OperationalState } from '@matter/types/clusters/operational-state';
4
4
  export declare class MatterbridgeOperationalStateServer extends OperationalStateServer {
@@ -1,5 +1,5 @@
1
1
  import { ServiceAreaServer } from '@matter/node/behaviors/service-area';
2
- import { type ServiceArea } from '@matter/types/clusters/service-area';
2
+ import type { ServiceArea } from '@matter/types/clusters/service-area';
3
3
  export declare class MatterbridgeServiceAreaServer extends ServiceAreaServer {
4
4
  selectAreas(request: ServiceArea.SelectAreasRequest): Promise<ServiceArea.SelectAreasResponse>;
5
5
  }
@@ -1,8 +1,8 @@
1
1
  import { SmokeCoAlarmServer } from '@matter/node/behaviors/smoke-co-alarm';
2
2
  import { SmokeCoAlarm } from '@matter/types/clusters/smoke-co-alarm';
3
3
  declare const MatterbridgeSmokeCoAlarmServer_base: import("@matter/node").ClusterBehavior.Type<typeof SmokeCoAlarmServer, import("@matter/types").ClusterType.WithSupportedFeatures<SmokeCoAlarm, {
4
- coAlarm: true;
5
4
  smokeAlarm: true;
5
+ coAlarm: true;
6
6
  }>, import("@matter/types").ClusterType.Concrete, new () => {}, "smokeCoAlarm">;
7
7
  export declare class MatterbridgeSmokeCoAlarmServer extends MatterbridgeSmokeCoAlarmServer_base {
8
8
  selfTestRequest(): Promise<void>;
@@ -1,14 +1,14 @@
1
1
  import { ThermostatServer } from '@matter/node/behaviors/thermostat';
2
2
  import { Thermostat } from '@matter/types/clusters/thermostat';
3
3
  declare const MatterbridgeThermostatServer_base: import("@matter/node").ClusterBehavior.Type<typeof ThermostatServer, import("@matter/types").ClusterType.WithSupportedFeatures<Thermostat, {
4
- autoMode: true;
5
- cooling: true;
6
- heating: true;
7
- localTemperatureNotExposed: false;
8
- matterScheduleConfiguration: false;
9
4
  occupancy: false;
10
5
  presets: true;
6
+ heating: true;
7
+ cooling: true;
11
8
  setback: false;
9
+ autoMode: true;
10
+ localTemperatureNotExposed: false;
11
+ matterScheduleConfiguration: false;
12
12
  }>, import("@matter/types").ClusterType.Concrete, typeof import("@matter/node/behaviors/thermostat").ThermostatBaseServer.Internal, "thermostat">;
13
13
  export declare class MatterbridgeThermostatServer extends MatterbridgeThermostatServer_base {
14
14
  initialize(): Promise<void>;
@@ -16,14 +16,14 @@ export declare class MatterbridgeThermostatServer extends MatterbridgeThermostat
16
16
  setActivePresetRequest(request: Thermostat.SetActivePresetRequest): Promise<void>;
17
17
  }
18
18
  declare const MatterbridgePresetThermostatServer_base: import("@matter/node").ClusterBehavior.Type<typeof ThermostatServer, import("@matter/types").ClusterType.WithSupportedFeatures<Thermostat, {
19
- autoMode: true;
20
- cooling: true;
21
- heating: true;
22
- localTemperatureNotExposed: false;
23
- matterScheduleConfiguration: false;
24
19
  occupancy: false;
25
20
  presets: true;
21
+ heating: true;
22
+ cooling: true;
26
23
  setback: false;
24
+ autoMode: true;
25
+ localTemperatureNotExposed: false;
26
+ matterScheduleConfiguration: false;
27
27
  }>, import("@matter/types").ClusterType.Concrete, typeof import("@matter/node/behaviors/thermostat").ThermostatBaseServer.Internal, "thermostat">;
28
28
  export declare class MatterbridgePresetThermostatServer extends MatterbridgePresetThermostatServer_base {
29
29
  }
@@ -1,8 +1,8 @@
1
1
  import { ValveConfigurationAndControlServer } from '@matter/node/behaviors/valve-configuration-and-control';
2
2
  import { ValveConfigurationAndControl } from '@matter/types/clusters/valve-configuration-and-control';
3
3
  declare const MatterbridgeValveConfigurationAndControlServer_base: import("@matter/node").ClusterBehavior.Type<typeof ValveConfigurationAndControlServer, import("@matter/types").ClusterType.WithSupportedFeatures<ValveConfigurationAndControl, {
4
- level: true;
5
4
  timeSync: false;
5
+ level: true;
6
6
  }>, import("@matter/types").ClusterType.Concrete, new () => {}, "valveConfigurationAndControl">;
7
7
  export declare class MatterbridgeValveConfigurationAndControlServer extends MatterbridgeValveConfigurationAndControlServer_base {
8
8
  open(request: ValveConfigurationAndControl.OpenRequest): Promise<void>;