@matterbridge/core 3.5.5-dev-20260214-5ba3053 → 3.5.5-dev-20260215-042e9dd

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.
@@ -28,9 +28,7 @@ export declare class Frontend extends EventEmitter<FrontendEvents> {
28
28
  destroy(): void;
29
29
  private msgHandler;
30
30
  set logLevel(logLevel: LogLevel);
31
- validateReq(req: import('express').Request<unknown, unknown, unknown, {
32
- password?: string;
33
- }>, res: import('express').Response): boolean;
31
+ private validateReq;
34
32
  start(port?: number): Promise<void>;
35
33
  stop(): Promise<void>;
36
34
  private getApiSettings;
package/dist/frontend.js CHANGED
@@ -22,7 +22,7 @@ export class Frontend extends EventEmitter {
22
22
  port = 8283;
23
23
  listening = false;
24
24
  storedPassword = undefined;
25
- authClients = [];
25
+ authClients = new Set();
26
26
  expressApp;
27
27
  httpServer;
28
28
  httpsServer;
@@ -136,7 +136,7 @@ export class Frontend extends EventEmitter {
136
136
  this.log.logLevel = logLevel;
137
137
  }
138
138
  validateReq(req, res) {
139
- if (req.ip && !this.authClients.includes(req.ip)) {
139
+ if (req.ip && !this.authClients.has(req.ip)) {
140
140
  this.log.warn(`Warning blocked unauthorized access request ${req.originalUrl ?? req.url} from ${req.ip}`);
141
141
  res.status(401).json({ error: 'Unauthorized' });
142
142
  return false;
@@ -182,7 +182,11 @@ export class Frontend extends EventEmitter {
182
182
  if (this.webSocketServer?.clients.size === 0) {
183
183
  AnsiLogger.setGlobalCallback(undefined);
184
184
  this.log.debug('All WebSocket clients disconnected. WebSocketServer logger global callback removed');
185
- this.authClients = [];
185
+ setTimeout(() => {
186
+ this.log.debug('All WebSocket clients disconnected. Auth clients list cleared');
187
+ if (this.webSocketServer?.clients.size === 0)
188
+ this.authClients.clear();
189
+ }, 250).unref();
186
190
  }
187
191
  });
188
192
  ws.on('error', (error) => {
@@ -234,7 +238,7 @@ export class Frontend extends EventEmitter {
234
238
  }
235
239
  this.log.debug(`WebSocket upgrade success host ${url.host} password ${password ? '[redacted]' : '(empty)'}`);
236
240
  if (req.socket.remoteAddress)
237
- this.authClients.push(req.socket.remoteAddress);
241
+ this.authClients.add(req.socket.remoteAddress);
238
242
  this.webSocketServer?.handleUpgrade(req, socket, head, (ws) => {
239
243
  this.webSocketServer?.emit('connection', ws, req);
240
244
  });
@@ -362,7 +366,7 @@ export class Frontend extends EventEmitter {
362
366
  }
363
367
  this.log.debug(`WebSocket upgrade success host ${url.host} password ${password ? '[redacted]' : '(empty)'}`);
364
368
  if (req.socket.remoteAddress)
365
- this.authClients.push(req.socket.remoteAddress);
369
+ this.authClients.add(req.socket.remoteAddress);
366
370
  this.webSocketServer?.handleUpgrade(req, socket, head, (ws) => {
367
371
  this.webSocketServer?.emit('connection', ws, req);
368
372
  });
@@ -406,7 +410,7 @@ export class Frontend extends EventEmitter {
406
410
  this.log.debug('/api/login password valid');
407
411
  res.json({ valid: true });
408
412
  if (req.ip)
409
- this.authClients.push(req.ip);
413
+ this.authClients.add(req.ip);
410
414
  }
411
415
  else {
412
416
  this.log.warn('/api/login error wrong password');
@@ -165,6 +165,12 @@ export async function startMatterbridge(bridgeMode = 'bridge', frontendPort = 82
165
165
  expect(Matterbridge.instance).toBeUndefined();
166
166
  matterbridge = await Matterbridge.loadInstance(true);
167
167
  expect(matterbridge.environment).toBeDefined();
168
+ expect(matterbridge.systemCheckTimeout).toBeDefined();
169
+ expect(matterbridge.checkUpdateTimeout).toBeDefined();
170
+ expect(matterbridge.checkUpdateInterval).toBeDefined();
171
+ clearTimeout(matterbridge.systemCheckTimeout);
172
+ clearTimeout(matterbridge.checkUpdateTimeout);
173
+ clearInterval(matterbridge.checkUpdateInterval);
168
174
  new MdnsService(matterbridge.environment);
169
175
  expect(matterbridge).toBeDefined();
170
176
  expect(matterbridge.profile).toBeUndefined();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@matterbridge/core",
3
- "version": "3.5.5-dev-20260214-5ba3053",
3
+ "version": "3.5.5-dev-20260215-042e9dd",
4
4
  "description": "Matterbridge core library",
5
5
  "author": "https://github.com/Luligu",
6
6
  "homepage": "https://matterbridge.io/",
@@ -122,10 +122,10 @@
122
122
  ],
123
123
  "dependencies": {
124
124
  "@matter/main": "0.16.8",
125
- "@matterbridge/dgram": "3.5.5-dev-20260214-5ba3053",
126
- "@matterbridge/thread": "3.5.5-dev-20260214-5ba3053",
127
- "@matterbridge/types": "3.5.5-dev-20260214-5ba3053",
128
- "@matterbridge/utils": "3.5.5-dev-20260214-5ba3053",
125
+ "@matterbridge/dgram": "3.5.5-dev-20260215-042e9dd",
126
+ "@matterbridge/thread": "3.5.5-dev-20260215-042e9dd",
127
+ "@matterbridge/types": "3.5.5-dev-20260215-042e9dd",
128
+ "@matterbridge/utils": "3.5.5-dev-20260215-042e9dd",
129
129
  "archiver": "7.0.1",
130
130
  "express": "5.2.1",
131
131
  "glob": "13.0.3",