@matterbridge/core 3.7.1-dev-20260324-7b86640 → 3.7.1-dev-20260325-72b7b24

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/helpers.js CHANGED
@@ -13,6 +13,8 @@ import { Identify } from '@matter/types/clusters/identify';
13
13
  import { OnOff } from '@matter/types/clusters/on-off';
14
14
  import { VendorId } from '@matter/types/datatype';
15
15
  import { hasParameter } from '@matterbridge/utils/cli';
16
+ import { doorLockDevice } from './matterbridgeDeviceTypes.js';
17
+ import { MatterbridgeEndpoint } from './matterbridgeEndpoint.js';
16
18
  export async function addVirtualDevice(aggregatorEndpoint, name, type, callback) {
17
19
  let deviceType;
18
20
  switch (type) {
@@ -36,7 +38,7 @@ export async function addVirtualDevice(aggregatorEndpoint, name, type, callback)
36
38
  vendorName: 'Matterbridge',
37
39
  productName: 'Matterbridge Virtual Device',
38
40
  nodeLabel: name.slice(0, 32),
39
- softwareVersion: 2000,
41
+ softwareVersion: 20000,
40
42
  softwareVersionString: '2.0.0',
41
43
  },
42
44
  onOff: { onOff: false },
@@ -71,6 +73,13 @@ export async function addVirtualDevice(aggregatorEndpoint, name, type, callback)
71
73
  return device;
72
74
  }
73
75
  export async function addVirtualDevices(matterbridge, aggregatorEndpoint) {
76
+ if (hasParameter('experimental') && matterbridge.bridgeMode === 'bridge' && aggregatorEndpoint) {
77
+ const lock = new MatterbridgeEndpoint(doorLockDevice, { id: 'system_lock' });
78
+ lock.createDefaultBridgedDeviceBasicInformationClusterServer('Matterbridge System Lock', 'sn_system_lock', 0xfff1, 'Matterbridge', 'Matterbridge Virtual Device', 20000, '2.0.0');
79
+ lock.createPinDoorLockClusterServer();
80
+ lock.addRequiredClusterServers();
81
+ await aggregatorEndpoint.add(lock);
82
+ }
74
83
  if (matterbridge.virtualMode !== 'disabled' && matterbridge.bridgeMode === 'bridge' && aggregatorEndpoint) {
75
84
  matterbridge.log.notice(`Creating virtual devices for Matterbridge server node...`);
76
85
  await addVirtualDevice(aggregatorEndpoint, 'Restart Matterbridge', matterbridge.virtualMode, async () => {
@@ -80,13 +89,7 @@ export async function addVirtualDevices(matterbridge, aggregatorEndpoint) {
80
89
  await matterbridge.shutdownProcess();
81
90
  });
82
91
  await addVirtualDevice(aggregatorEndpoint, 'Update Matterbridge', matterbridge.virtualMode, async () => {
83
- if (hasParameter('shelly')) {
84
- }
85
- else {
86
- await matterbridge.updateProcess();
87
- }
92
+ await matterbridge.updateProcess();
88
93
  });
89
- if (hasParameter('shelly')) {
90
- }
91
94
  }
92
95
  }
@@ -85,7 +85,7 @@ export class Matterbridge extends EventEmitter {
85
85
  logName: 'Matter',
86
86
  logNameColor: '\x1b[34m',
87
87
  logTimestampFormat: 4,
88
- logLevel: this.debug ? "debug" : "info",
88
+ logLevel: "debug",
89
89
  });
90
90
  matterLogLevel = this.matterLog.logLevel;
91
91
  matterFileLogger = false;
@@ -338,7 +338,7 @@ export class Matterbridge extends EventEmitter {
338
338
  await createDirectory(this.matterbridgeCertDirectory, 'Matterbridge Matter Certificate Directory', this.log);
339
339
  const currentFileDirectory = path.dirname(fileURLToPath(import.meta.url));
340
340
  this.rootDirectory = currentFileDirectory.includes(path.join('packages', 'core')) ? path.resolve(currentFileDirectory, '../', '../', '../') : path.resolve(currentFileDirectory, '../', '../', '..', '../');
341
- this.environment.vars.set('log.level', MatterLogLevel.INFO);
341
+ this.environment.vars.set('log.level', MatterLogLevel.DEBUG);
342
342
  this.environment.vars.set('log.format', hasParameter('no-ansi') || process.env.NO_COLOR === '1' ? MatterLogFormat.PLAIN : MatterLogFormat.ANSI);
343
343
  this.environment.vars.set('path.root', path.join(this.matterbridgeDirectory, MATTER_STORAGE_NAME));
344
344
  this.environment.vars.set('runtime.signals', false);
@@ -468,7 +468,7 @@ export class Matterbridge extends EventEmitter {
468
468
  }
469
469
  }
470
470
  else {
471
- this.log.logLevel = await this.nodeContext.get('matterbridgeLogLevel', this.shellyBoard ? "notice" : "info");
471
+ this.log.logLevel = await this.nodeContext.get('matterbridgeLogLevel', "info");
472
472
  }
473
473
  this.logLevel = this.log.logLevel;
474
474
  this.frontend.logLevel = this.log.logLevel;
@@ -508,9 +508,9 @@ export class Matterbridge extends EventEmitter {
508
508
  }
509
509
  }
510
510
  else {
511
- Logger.level = (await this.nodeContext.get('matterLogLevel', this.shellyBoard ? MatterLogLevel.NOTICE : MatterLogLevel.INFO));
511
+ Logger.level = (await this.nodeContext.get('matterLogLevel', MatterLogLevel.INFO));
512
512
  }
513
- Logger.format = MatterLogFormat.ANSI;
513
+ Logger.format = hasParameter('no-ansi') || process.env.NO_COLOR === '1' ? MatterLogFormat.PLAIN : MatterLogFormat.ANSI;
514
514
  this.matterLogLevel = MatterLogLevel.names[Logger.level];
515
515
  if (hasParameter('matterfilelogger') || (await this.nodeContext.get('matterFileLog', false))) {
516
516
  this.matterFileLogger = true;
@@ -24,6 +24,7 @@ import { ActivatedCarbonFilterMonitoring } from '@matter/types/clusters/activate
24
24
  import { BooleanStateConfiguration } from '@matter/types/clusters/boolean-state-configuration';
25
25
  import { ColorControl } from '@matter/types/clusters/color-control';
26
26
  import { DeviceEnergyManagement } from '@matter/types/clusters/device-energy-management';
27
+ import { DoorLock } from '@matter/types/clusters/door-lock';
27
28
  import { FanControl } from '@matter/types/clusters/fan-control';
28
29
  import { HepaFilterMonitoring } from '@matter/types/clusters/hepa-filter-monitoring';
29
30
  import { Identify } from '@matter/types/clusters/identify';
@@ -1430,9 +1431,14 @@ declare const MatterbridgeLiftTiltWindowCoveringServer_base: import("@matter/nod
1430
1431
  }>, readonly [WindowCovering.Feature.Lift, WindowCovering.Feature.PositionAwareLift, WindowCovering.Feature.Tilt, WindowCovering.Feature.PositionAwareTilt]>, readonly [WindowCovering.Feature.Lift, WindowCovering.Feature.PositionAwareLift, WindowCovering.Feature.Tilt, WindowCovering.Feature.PositionAwareTilt]>, typeof MatterbridgeWindowCoveringServer, import("@matter/node/behaviors/window-covering").WindowCoveringInterface>;
1431
1432
  export declare class MatterbridgeLiftTiltWindowCoveringServer extends MatterbridgeLiftTiltWindowCoveringServer_base {
1432
1433
  }
1433
- export declare class MatterbridgeDoorLockServer extends DoorLockServer {
1434
- lockDoor(): Promise<void>;
1435
- unlockDoor(): Promise<void>;
1434
+ declare const MatterbridgeDoorLockServer_base: import("@matter/node").ClusterBehavior.Type<import("@matter/types").ClusterComposer.WithFeatures<DoorLock.Cluster, readonly [DoorLock.Feature.PinCredential, DoorLock.Feature.CredentialOverTheAirAccess]>, typeof DoorLockServer, import("@matter/node/behaviors/door-lock").DoorLockInterface>;
1435
+ export declare class MatterbridgeDoorLockServer extends MatterbridgeDoorLockServer_base {
1436
+ lockDoor(request: DoorLock.LockDoorRequest): Promise<void>;
1437
+ unlockDoor(request: DoorLock.UnlockDoorRequest): Promise<void>;
1438
+ setPinCode(request: DoorLock.SetPinCodeRequest): Promise<void>;
1439
+ getPinCode(request: DoorLock.GetPinCodeRequest): Promise<DoorLock.GetPinCodeResponse>;
1440
+ clearPinCode(request: DoorLock.ClearPinCodeRequest): Promise<void>;
1441
+ clearAllPinCodes(): Promise<void>;
1436
1442
  }
1437
1443
  declare const MatterbridgeFanControlServer_base: import("@matter/node").ClusterBehavior.Type<import("@matter/types").ClusterComposer.WithFeatures<FanControl.Cluster, readonly [FanControl.Feature.Auto, FanControl.Feature.Step]>, typeof FanControlServer, import("@matter/node/behaviors/fan-control").FanControlInterface>;
1438
1444
  export declare class MatterbridgeFanControlServer extends MatterbridgeFanControlServer_base {
@@ -23,6 +23,7 @@ import { BooleanStateConfiguration } from '@matter/types/clusters/boolean-state-
23
23
  import { ColorControl } from '@matter/types/clusters/color-control';
24
24
  import { DeviceEnergyManagement } from '@matter/types/clusters/device-energy-management';
25
25
  import { DeviceEnergyManagementMode } from '@matter/types/clusters/device-energy-management-mode';
26
+ import { DoorLock } from '@matter/types/clusters/door-lock';
26
27
  import { FanControl } from '@matter/types/clusters/fan-control';
27
28
  import { ModeBase } from '@matter/types/clusters/mode-base';
28
29
  import { OperationalState } from '@matter/types/clusters/operational-state';
@@ -31,6 +32,7 @@ import { SmokeCoAlarm } from '@matter/types/clusters/smoke-co-alarm';
31
32
  import { Thermostat } from '@matter/types/clusters/thermostat';
32
33
  import { ValveConfigurationAndControl } from '@matter/types/clusters/valve-configuration-and-control';
33
34
  import { WindowCovering } from '@matter/types/clusters/window-covering';
35
+ import { getEnumDescription } from '@matterbridge/utils';
34
36
  export class MatterbridgeServer extends Behavior {
35
37
  static id = 'matterbridge';
36
38
  initialize() {
@@ -341,32 +343,85 @@ export class MatterbridgeLiftWindowCoveringServer extends MatterbridgeWindowCove
341
343
  }
342
344
  export class MatterbridgeLiftTiltWindowCoveringServer extends MatterbridgeWindowCoveringServer.with(WindowCovering.Feature.Lift, WindowCovering.Feature.PositionAwareLift, WindowCovering.Feature.Tilt, WindowCovering.Feature.PositionAwareTilt) {
343
345
  }
344
- export class MatterbridgeDoorLockServer extends DoorLockServer {
345
- async lockDoor() {
346
+ export class MatterbridgeDoorLockServer extends DoorLockServer.with(DoorLock.Feature.PinCredential, DoorLock.Feature.CredentialOverTheAirAccess) {
347
+ async lockDoor(request) {
346
348
  const device = this.endpoint.stateOf(MatterbridgeServer);
347
- device.log.info(`Locking door (endpoint ${this.endpoint.maybeId}.${this.endpoint.maybeNumber})`);
349
+ device.log.info(`Locking door with pincode ${request.pinCode ? '0x' + Buffer.from(request.pinCode).toString('hex') : 'N/A'} (endpoint ${this.endpoint.maybeId}.${this.endpoint.maybeNumber})`);
348
350
  await device.commandHandler.executeHandler('DoorLock.lockDoor', {
349
351
  command: 'lockDoor',
350
- request: {},
352
+ request,
351
353
  cluster: DoorLockServer.id,
352
354
  attributes: this.state,
353
355
  endpoint: this.endpoint,
354
356
  });
355
357
  device.log.debug(`MatterbridgeDoorLockServer: lockDoor called`);
356
- await super.lockDoor();
358
+ await super.lockDoor(request);
357
359
  }
358
- async unlockDoor() {
360
+ async unlockDoor(request) {
359
361
  const device = this.endpoint.stateOf(MatterbridgeServer);
360
- device.log.info(`Unlocking door (endpoint ${this.endpoint.maybeId}.${this.endpoint.maybeNumber})`);
362
+ device.log.info(`Unlocking door with pincode ${request.pinCode ? '0x' + Buffer.from(request.pinCode).toString('hex') : 'N/A'} (endpoint ${this.endpoint.maybeId}.${this.endpoint.maybeNumber})`);
361
363
  await device.commandHandler.executeHandler('DoorLock.unlockDoor', {
362
364
  command: 'unlockDoor',
363
- request: {},
365
+ request,
364
366
  cluster: DoorLockServer.id,
365
367
  attributes: this.state,
366
368
  endpoint: this.endpoint,
367
369
  });
368
370
  device.log.debug(`MatterbridgeDoorLockServer: unlockDoor called`);
369
- await super.unlockDoor();
371
+ await super.unlockDoor(request);
372
+ }
373
+ async setPinCode(request) {
374
+ const device = this.endpoint.stateOf(MatterbridgeServer);
375
+ device.log.info(`Setting pin code ${request.pin ? '0x' + Buffer.from(request.pin).toString('hex') : 'N/A'} for user ${request.userId} type ${getEnumDescription(DoorLock.UserType, request.userType)} status ${getEnumDescription(DoorLock.UserStatus, request.userStatus)} (endpoint ${this.endpoint.maybeId}.${this.endpoint.maybeNumber})`);
376
+ await device.commandHandler.executeHandler('DoorLock.setPinCode', {
377
+ command: 'setPinCode',
378
+ request,
379
+ cluster: DoorLockServer.id,
380
+ attributes: this.state,
381
+ endpoint: this.endpoint,
382
+ });
383
+ device.log.debug(`MatterbridgeDoorLockServer: setPinCode called for user ${request.userId}`);
384
+ }
385
+ async getPinCode(request) {
386
+ const device = this.endpoint.stateOf(MatterbridgeServer);
387
+ device.log.info(`Getting pin code for user ${request.userId} (endpoint ${this.endpoint.maybeId}.${this.endpoint.maybeNumber})`);
388
+ await device.commandHandler.executeHandler('DoorLock.getPinCode', {
389
+ command: 'getPinCode',
390
+ request,
391
+ cluster: DoorLockServer.id,
392
+ attributes: this.state,
393
+ endpoint: this.endpoint,
394
+ });
395
+ return {
396
+ userId: request.userId,
397
+ userStatus: DoorLock.UserStatus.Available,
398
+ userType: DoorLock.UserType.UnrestrictedUser,
399
+ pinCode: Buffer.from('1234'),
400
+ };
401
+ }
402
+ async clearPinCode(request) {
403
+ const device = this.endpoint.stateOf(MatterbridgeServer);
404
+ device.log.info(`Clearing pin code for ${request.pinSlotIndex === 0xfffe ? 'all slots' : 'slot ' + request.pinSlotIndex} (endpoint ${this.endpoint.maybeId}.${this.endpoint.maybeNumber})`);
405
+ await device.commandHandler.executeHandler('DoorLock.clearPinCode', {
406
+ command: 'clearPinCode',
407
+ request,
408
+ cluster: DoorLockServer.id,
409
+ attributes: this.state,
410
+ endpoint: this.endpoint,
411
+ });
412
+ device.log.debug(`MatterbridgeDoorLockServer: clearPinCode called for ${request.pinSlotIndex === 0xfffe ? 'all PIN slots' : 'PIN slot ' + request.pinSlotIndex}`);
413
+ }
414
+ async clearAllPinCodes() {
415
+ const device = this.endpoint.stateOf(MatterbridgeServer);
416
+ device.log.info(`Clearing all pin codes (endpoint ${this.endpoint.maybeId}.${this.endpoint.maybeNumber})`);
417
+ await device.commandHandler.executeHandler('DoorLock.clearAllPinCodes', {
418
+ command: 'clearAllPinCodes',
419
+ request: {},
420
+ cluster: DoorLockServer.id,
421
+ attributes: this.state,
422
+ endpoint: this.endpoint,
423
+ });
424
+ device.log.debug('MatterbridgeDoorLockServer: clearAllPinCodes called');
370
425
  }
371
426
  }
372
427
  export class MatterbridgeFanControlServer extends FanControlServer.with(FanControl.Feature.Auto, FanControl.Feature.Step) {
@@ -172,6 +172,7 @@ export declare class MatterbridgeEndpoint extends Endpoint {
172
172
  createDefaultHepaFilterMonitoringClusterServer(condition?: number, changeIndication?: ResourceMonitoring.ChangeIndication, inPlaceIndicator?: boolean | undefined, lastChangedTime?: number | null | undefined, replacementProductList?: ResourceMonitoring.ReplacementProduct[]): this;
173
173
  createDefaultActivatedCarbonFilterMonitoringClusterServer(condition?: number, changeIndication?: ResourceMonitoring.ChangeIndication, inPlaceIndicator?: boolean | undefined, lastChangedTime?: number | null | undefined, replacementProductList?: ResourceMonitoring.ReplacementProduct[]): this;
174
174
  createDefaultDoorLockClusterServer(lockState?: DoorLock.LockState, lockType?: DoorLock.LockType): this;
175
+ createPinDoorLockClusterServer(lockState?: DoorLock.LockState, lockType?: DoorLock.LockType): this;
175
176
  createDefaultModeSelectClusterServer(description: string, supportedModes: ModeSelect.ModeOption[], currentMode?: number, startUpMode?: number): this;
176
177
  createDefaultValveConfigurationAndControlClusterServer(valveState?: ValveConfigurationAndControl.ValveState, valveLevel?: number): this;
177
178
  createDefaultPumpConfigurationAndControlClusterServer(pumpMode?: PumpConfigurationAndControl.OperationMode): this;
@@ -1048,7 +1048,7 @@ export class MatterbridgeEndpoint extends Endpoint {
1048
1048
  return this;
1049
1049
  }
1050
1050
  createDefaultDoorLockClusterServer(lockState = DoorLock.LockState.Locked, lockType = DoorLock.LockType.DeadBolt) {
1051
- this.behaviors.require(MatterbridgeDoorLockServer.enable({ events: { doorLockAlarm: true, lockOperation: true, lockOperationError: true } }), {
1051
+ this.behaviors.require(MatterbridgeDoorLockServer.with().enable({ events: { doorLockAlarm: true, lockOperation: true, lockOperationError: true } }), {
1052
1052
  lockState,
1053
1053
  lockType,
1054
1054
  actuatorEnabled: true,
@@ -1058,6 +1058,26 @@ export class MatterbridgeEndpoint extends Endpoint {
1058
1058
  });
1059
1059
  return this;
1060
1060
  }
1061
+ createPinDoorLockClusterServer(lockState = DoorLock.LockState.Locked, lockType = DoorLock.LockType.DeadBolt) {
1062
+ this.behaviors.require(MatterbridgeDoorLockServer.with(DoorLock.Feature.PinCredential, DoorLock.Feature.CredentialOverTheAirAccess).enable({
1063
+ events: { doorLockAlarm: true, lockOperation: true, lockOperationError: true },
1064
+ }), {
1065
+ lockState,
1066
+ lockType,
1067
+ actuatorEnabled: true,
1068
+ operatingMode: DoorLock.OperatingMode.Normal,
1069
+ supportedOperatingModes: { normal: false, vacation: true, privacy: true, noRemoteLockUnlock: false, passage: true, alwaysSet: 2047 },
1070
+ autoRelockTime: 0,
1071
+ numberOfPinUsersSupported: 10,
1072
+ minPinCodeLength: 4,
1073
+ maxPinCodeLength: 10,
1074
+ sendPinOverTheAir: true,
1075
+ requirePinForRemoteOperation: true,
1076
+ wrongCodeEntryLimit: 5,
1077
+ userCodeTemporaryDisableTime: 60,
1078
+ });
1079
+ return this;
1080
+ }
1061
1081
  createDefaultModeSelectClusterServer(description, supportedModes, currentMode = 0, startUpMode = 0) {
1062
1082
  this.behaviors.require(MatterbridgeModeSelectServer, {
1063
1083
  description: description,
@@ -71,6 +71,16 @@ export interface MatterbridgeEndpointCommands {
71
71
  setTarget: HandlerFunction;
72
72
  lockDoor: HandlerFunction;
73
73
  unlockDoor: HandlerFunction;
74
+ setPinCode: HandlerFunction;
75
+ getPinCode: HandlerFunction;
76
+ clearPinCode: HandlerFunction;
77
+ clearAllPinCodes: HandlerFunction;
78
+ setUser: HandlerFunction;
79
+ getUser: HandlerFunction;
80
+ clearUser: HandlerFunction;
81
+ setCredential: HandlerFunction;
82
+ getCredentialStatus: HandlerFunction;
83
+ clearCredential: HandlerFunction;
74
84
  setpointRaiseLower: HandlerFunction;
75
85
  setActivePresetRequest: HandlerFunction;
76
86
  step: HandlerFunction;
@@ -383,6 +393,16 @@ export type CommandHandlerDataMap = {
383
393
  };
384
394
  'lockDoor': CommandHandlerData<'DoorLock.lockDoor'>;
385
395
  'unlockDoor': CommandHandlerData<'DoorLock.unlockDoor'>;
396
+ 'setPinCode': CommandHandlerData<'DoorLock.setPinCode'>;
397
+ 'getPinCode': CommandHandlerData<'DoorLock.getPinCode'>;
398
+ 'clearPinCode': CommandHandlerData<'DoorLock.clearPinCode'>;
399
+ 'clearAllPinCodes': CommandHandlerData<'DoorLock.clearAllPinCodes'>;
400
+ 'setUser': CommandHandlerData<'DoorLock.setUser'>;
401
+ 'getUser': CommandHandlerData<'DoorLock.getUser'>;
402
+ 'clearUser': CommandHandlerData<'DoorLock.clearUser'>;
403
+ 'setCredential': CommandHandlerData<'DoorLock.setCredential'>;
404
+ 'getCredentialStatus': CommandHandlerData<'DoorLock.getCredentialStatus'>;
405
+ 'clearCredential': CommandHandlerData<'DoorLock.clearCredential'>;
386
406
  'DoorLock.lockDoor': {
387
407
  command: 'lockDoor';
388
408
  request: DoorLock.LockDoorRequest;
@@ -397,6 +417,76 @@ export type CommandHandlerDataMap = {
397
417
  attributes: ClusterAttributeValues<(typeof DoorLock.Complete)['attributes']>;
398
418
  endpoint: MatterbridgeEndpoint;
399
419
  };
420
+ 'DoorLock.setPinCode': {
421
+ command: 'setPinCode';
422
+ request: DoorLock.SetPinCodeRequest;
423
+ cluster: 'doorLock';
424
+ attributes: ClusterAttributeValues<(typeof DoorLock.Complete)['attributes']>;
425
+ endpoint: MatterbridgeEndpoint;
426
+ };
427
+ 'DoorLock.getPinCode': {
428
+ command: 'getPinCode';
429
+ request: DoorLock.GetPinCodeRequest;
430
+ cluster: 'doorLock';
431
+ attributes: ClusterAttributeValues<(typeof DoorLock.Complete)['attributes']>;
432
+ endpoint: MatterbridgeEndpoint;
433
+ };
434
+ 'DoorLock.clearPinCode': {
435
+ command: 'clearPinCode';
436
+ request: DoorLock.ClearPinCodeRequest;
437
+ cluster: 'doorLock';
438
+ attributes: ClusterAttributeValues<(typeof DoorLock.Complete)['attributes']>;
439
+ endpoint: MatterbridgeEndpoint;
440
+ };
441
+ 'DoorLock.clearAllPinCodes': {
442
+ command: 'clearAllPinCodes';
443
+ request: {};
444
+ cluster: 'doorLock';
445
+ attributes: ClusterAttributeValues<(typeof DoorLock.Complete)['attributes']>;
446
+ endpoint: MatterbridgeEndpoint;
447
+ };
448
+ 'DoorLock.setUser': {
449
+ command: 'setUser';
450
+ request: DoorLock.SetUserRequest;
451
+ cluster: 'doorLock';
452
+ attributes: ClusterAttributeValues<(typeof DoorLock.Complete)['attributes']>;
453
+ endpoint: MatterbridgeEndpoint;
454
+ };
455
+ 'DoorLock.getUser': {
456
+ command: 'getUser';
457
+ request: DoorLock.GetUserRequest;
458
+ cluster: 'doorLock';
459
+ attributes: ClusterAttributeValues<(typeof DoorLock.Complete)['attributes']>;
460
+ endpoint: MatterbridgeEndpoint;
461
+ };
462
+ 'DoorLock.clearUser': {
463
+ command: 'clearUser';
464
+ request: DoorLock.ClearUserRequest;
465
+ cluster: 'doorLock';
466
+ attributes: ClusterAttributeValues<(typeof DoorLock.Complete)['attributes']>;
467
+ endpoint: MatterbridgeEndpoint;
468
+ };
469
+ 'DoorLock.setCredential': {
470
+ command: 'setCredential';
471
+ request: DoorLock.SetCredentialRequest;
472
+ cluster: 'doorLock';
473
+ attributes: ClusterAttributeValues<(typeof DoorLock.Complete)['attributes']>;
474
+ endpoint: MatterbridgeEndpoint;
475
+ };
476
+ 'DoorLock.getCredentialStatus': {
477
+ command: 'getCredentialStatus';
478
+ request: DoorLock.GetCredentialStatusRequest;
479
+ cluster: 'doorLock';
480
+ attributes: ClusterAttributeValues<(typeof DoorLock.Complete)['attributes']>;
481
+ endpoint: MatterbridgeEndpoint;
482
+ };
483
+ 'DoorLock.clearCredential': {
484
+ command: 'clearCredential';
485
+ request: DoorLock.ClearCredentialRequest;
486
+ cluster: 'doorLock';
487
+ attributes: ClusterAttributeValues<(typeof DoorLock.Complete)['attributes']>;
488
+ endpoint: MatterbridgeEndpoint;
489
+ };
400
490
  'setpointRaiseLower': CommandHandlerData<'Thermostat.setpointRaiseLower'>;
401
491
  'setActivePresetRequest': CommandHandlerData<'Thermostat.setActivePresetRequest'>;
402
492
  'Thermostat.setpointRaiseLower': {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@matterbridge/core",
3
- "version": "3.7.1-dev-20260324-7b86640",
3
+ "version": "3.7.1-dev-20260325-72b7b24",
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.10",
125
- "@matterbridge/dgram": "3.7.1-dev-20260324-7b86640",
126
- "@matterbridge/thread": "3.7.1-dev-20260324-7b86640",
127
- "@matterbridge/types": "3.7.1-dev-20260324-7b86640",
128
- "@matterbridge/utils": "3.7.1-dev-20260324-7b86640",
125
+ "@matterbridge/dgram": "3.7.1-dev-20260325-72b7b24",
126
+ "@matterbridge/thread": "3.7.1-dev-20260325-72b7b24",
127
+ "@matterbridge/types": "3.7.1-dev-20260325-72b7b24",
128
+ "@matterbridge/utils": "3.7.1-dev-20260325-72b7b24",
129
129
  "express": "5.2.1",
130
130
  "multer": "2.1.1",
131
131
  "node-ansi-logger": "3.2.0",