matterbridge 3.3.8-dev-20251115-920acfc → 3.3.8-dev-20251115-ca5ff21

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.
@@ -1,14 +1,15 @@
1
1
  import { rmSync } from 'node:fs';
2
2
  import { inspect } from 'node:util';
3
3
  import path from 'node:path';
4
- import { AnsiLogger } from 'node-ansi-logger';
4
+ import { AnsiLogger, er, rs } from 'node-ansi-logger';
5
5
  import { LogLevel as MatterLogLevel, LogFormat as MatterLogFormat, Environment, Lifecycle } from '@matter/general';
6
6
  import { Endpoint, ServerNode, ServerNodeStore } from '@matter/node';
7
7
  import { DeviceTypeId, VendorId } from '@matter/types/datatype';
8
- import { AggregatorEndpoint, RootEndpoint } from '@matter/node/endpoints';
8
+ import { AggregatorEndpoint } from '@matter/node/endpoints';
9
9
  import { MdnsService } from '@matter/main/protocol';
10
10
  import { Matterbridge } from '../matterbridge.js';
11
11
  import { MATTER_STORAGE_NAME } from '../matterbridgeTypes.js';
12
+ import { bridge } from '../matterbridgeDeviceTypes.js';
12
13
  export let loggerLogSpy;
13
14
  export let loggerDebugSpy;
14
15
  export let loggerInfoSpy;
@@ -255,13 +256,15 @@ export async function assertAllEndpointNumbersPersisted(targetServer) {
255
256
  }
256
257
  return all.length;
257
258
  }
258
- export async function startServerNode(name, port) {
259
+ export async function startServerNode(name, port, deviceType = bridge.code) {
260
+ const { randomBytes } = await import('node:crypto');
261
+ const random = randomBytes(8).toString('hex');
259
262
  server = await ServerNode.create({
260
263
  id: name + 'ServerNode',
261
264
  environment,
262
265
  productDescription: {
263
266
  name: name + 'ServerNode',
264
- deviceType: DeviceTypeId(RootEndpoint.deviceType),
267
+ deviceType: DeviceTypeId(deviceType),
265
268
  vendorId: VendorId(0xfff1),
266
269
  productId: 0x8000,
267
270
  },
@@ -274,10 +277,17 @@ export async function startServerNode(name, port) {
274
277
  hardwareVersion: 1,
275
278
  softwareVersion: 1,
276
279
  reachable: true,
280
+ serialNumber: 'SN' + random,
281
+ uniqueId: 'UI' + random,
277
282
  },
278
283
  network: {
284
+ listeningAddressIpv4: undefined,
285
+ listeningAddressIpv6: undefined,
279
286
  port,
280
287
  },
288
+ operationalCredentials: {
289
+ certification: undefined,
290
+ },
281
291
  });
282
292
  expect(server).toBeDefined();
283
293
  expect(server.lifecycle.isReady).toBeTruthy();
@@ -338,7 +348,7 @@ export async function addDevice(owner, device, pause = 10) {
338
348
  catch (error) {
339
349
  const errorMessage = error instanceof Error ? error.message : error;
340
350
  const errorInspect = inspect(error, { depth: 10 });
341
- console.error(`Error adding device ${device.maybeId}.${device.maybeNumber}: ${errorMessage}\nstack: ${errorInspect}`);
351
+ process.stderr.write(`${er}Error adding device ${device.maybeId}.${device.maybeNumber}: ${errorMessage}${rs}\nStack: ${errorInspect}\n`);
342
352
  return false;
343
353
  }
344
354
  expect(owner.parts.has(device)).toBeTruthy();
@@ -363,7 +373,7 @@ export async function deleteDevice(owner, device, pause = 10) {
363
373
  catch (error) {
364
374
  const errorMessage = error instanceof Error ? error.message : error;
365
375
  const errorInspect = inspect(error, { depth: 10 });
366
- console.error(`Error deleting device ${device.maybeId}.${device.maybeNumber}: ${errorMessage}\nstack: ${errorInspect}`);
376
+ process.stderr.write(`${er}Error deleting device ${device.maybeId}.${device.maybeNumber}: ${errorMessage}${rs}\nStack: ${errorInspect}\n`);
367
377
  return false;
368
378
  }
369
379
  expect(owner.parts.has(device)).toBeFalsy();
@@ -113,8 +113,13 @@ export function createUniqueId(param1, param2, param3, param4) {
113
113
  hash.update(param1 + param2 + param3 + param4);
114
114
  return hash.digest('hex');
115
115
  }
116
- export function featuresFor(endpoint, behavior) {
117
- return endpoint.behaviors.supported[lowercaseFirstLetter(behavior)]['cluster']['supportedFeatures'];
116
+ export function featuresFor(endpoint, cluster) {
117
+ const behaviorId = getBehavior(endpoint, cluster)?.id;
118
+ if (!behaviorId) {
119
+ endpoint.log?.error(`featuresFor error: cluster not found on endpoint ${or}${endpoint.maybeId}${er}:${or}${endpoint.maybeNumber}${er}`);
120
+ return {};
121
+ }
122
+ return endpoint.behaviors.supported[lowercaseFirstLetter(behaviorId)]['cluster']['supportedFeatures'];
118
123
  }
119
124
  export function getBehaviourTypesFromClusterServerIds(clusterServerList) {
120
125
  const behaviorTypes = [];
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "matterbridge",
3
- "version": "3.3.8-dev-20251115-920acfc",
3
+ "version": "3.3.8-dev-20251115-ca5ff21",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "matterbridge",
9
- "version": "3.3.8-dev-20251115-920acfc",
9
+ "version": "3.3.8-dev-20251115-ca5ff21",
10
10
  "license": "Apache-2.0",
11
11
  "dependencies": {
12
12
  "@matter/main": "0.15.6",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "matterbridge",
3
- "version": "3.3.8-dev-20251115-920acfc",
3
+ "version": "3.3.8-dev-20251115-ca5ff21",
4
4
  "description": "Matterbridge plugin manager for Matter",
5
5
  "author": "https://github.com/Luligu",
6
6
  "license": "Apache-2.0",