@matterbridge/core 3.7.2-dev-20260330-bb55c39 → 3.7.2-dev-20260402-c12a10e

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.
@@ -76,12 +76,10 @@ import { MatterbridgeServer } from './behaviors/matterbridgeServer.js';
76
76
  import { MatterbridgeModeSelectServer } from './behaviors/modeSelectServer.js';
77
77
  import { MatterbridgeOnOffServer } from './behaviors/onOffServer.js';
78
78
  import { MatterbridgeOperationalStateServer } from './behaviors/operationalStateServer.js';
79
- import { MatterbridgePinDoorLockServer } from './behaviors/pinDoorLockServer.js';
80
79
  import { MatterbridgePowerSourceServer } from './behaviors/powerSourceServer.js';
81
80
  import { MatterbridgeSmokeCoAlarmServer } from './behaviors/smokeCoAlarmServer.js';
82
81
  import { MatterbridgeSwitchServer } from './behaviors/switchServer.js';
83
82
  import { MatterbridgeThermostatServer } from './behaviors/thermostatServer.js';
84
- import { MatterbridgeUserPinDoorLockServer } from './behaviors/userPinDoorLockServer.js';
85
83
  import { MatterbridgeValveConfigurationAndControlServer } from './behaviors/valveConfigurationAndControlServer.js';
86
84
  import { MatterbridgeWindowCoveringServer } from './behaviors/windowCoveringServer.js';
87
85
  import { CommandHandler } from './matterbridgeEndpointCommandHandler.js';
@@ -264,7 +262,7 @@ export class MatterbridgeEndpoint extends Endpoint {
264
262
  return this;
265
263
  }
266
264
  async executeCommandHandler(command, request, cluster, attributes, endpoint) {
267
- await this.commandHandler.executeHandler(command, { command, request, cluster, attributes, endpoint });
265
+ return this.commandHandler.executeHandler(command, { command, request, cluster, attributes, endpoint });
268
266
  }
269
267
  async invokeBehaviorCommand(cluster, command, params) {
270
268
  await invokeBehaviorCommand(this, cluster, command, params);
@@ -1068,8 +1066,8 @@ export class MatterbridgeEndpoint extends Endpoint {
1068
1066
  });
1069
1067
  return this;
1070
1068
  }
1071
- createDefaultDoorLockClusterServer(lockState = DoorLock.LockState.Locked, lockType = DoorLock.LockType.DeadBolt) {
1072
- this.behaviors.require(MatterbridgeDoorLockServer.enable({
1069
+ createDefaultDoorLockClusterServer(lockState = DoorLock.LockState.Locked, lockType = DoorLock.LockType.DeadBolt, autoRelockTime = 0) {
1070
+ this.behaviors.require(MatterbridgeDoorLockServer.with().enable({
1073
1071
  events: { doorLockAlarm: true, lockOperation: true, lockOperationError: true },
1074
1072
  commands: { lockDoor: true, unlockDoor: true, unlockWithTimeout: true },
1075
1073
  }), {
@@ -1078,33 +1076,12 @@ export class MatterbridgeEndpoint extends Endpoint {
1078
1076
  actuatorEnabled: true,
1079
1077
  operatingMode: DoorLock.OperatingMode.Normal,
1080
1078
  supportedOperatingModes: { normal: false, vacation: true, privacy: true, noRemoteLockUnlock: false, passage: true, alwaysSet: 2047 },
1081
- autoRelockTime: 0,
1079
+ autoRelockTime,
1082
1080
  });
1083
1081
  return this;
1084
1082
  }
1085
- createPinDoorLockClusterServer(lockState = DoorLock.LockState.Locked, lockType = DoorLock.LockType.DeadBolt) {
1086
- this.behaviors.require(MatterbridgePinDoorLockServer.with(DoorLock.Feature.PinCredential, DoorLock.Feature.CredentialOverTheAirAccess).enable({
1087
- events: { doorLockAlarm: true, lockOperation: true, lockOperationError: true },
1088
- commands: { lockDoor: true, unlockDoor: true, unlockWithTimeout: true, setUserStatus: true, getUserStatus: true, setUserType: true, getUserType: true },
1089
- }), {
1090
- lockState,
1091
- lockType,
1092
- actuatorEnabled: true,
1093
- operatingMode: DoorLock.OperatingMode.Normal,
1094
- supportedOperatingModes: { normal: false, vacation: true, privacy: true, noRemoteLockUnlock: false, passage: true, alwaysSet: 2047 },
1095
- autoRelockTime: 0,
1096
- numberOfPinUsersSupported: 10,
1097
- maxPinCodeLength: 10,
1098
- minPinCodeLength: 4,
1099
- wrongCodeEntryLimit: 5,
1100
- userCodeTemporaryDisableTime: 60,
1101
- sendPinOverTheAir: true,
1102
- requirePinForRemoteOperation: true,
1103
- });
1104
- return this;
1105
- }
1106
- createUserPinDoorLockClusterServer(lockState = DoorLock.LockState.Locked, lockType = DoorLock.LockType.DeadBolt) {
1107
- this.behaviors.require(MatterbridgeUserPinDoorLockServer.with(DoorLock.Feature.User, DoorLock.Feature.PinCredential, DoorLock.Feature.CredentialOverTheAirAccess).enable({
1083
+ createUserPinDoorLockClusterServer(lockState = DoorLock.LockState.Locked, lockType = DoorLock.LockType.DeadBolt, autoRelockTime = 0, minPinCodeLength = 4, maxPinCodeLength = 10) {
1084
+ this.behaviors.require(MatterbridgeDoorLockServer.with(DoorLock.Feature.User, DoorLock.Feature.PinCredential).enable({
1108
1085
  events: { doorLockAlarm: true, lockOperation: true, lockOperationError: true },
1109
1086
  commands: { lockDoor: true, unlockDoor: true, unlockWithTimeout: true },
1110
1087
  }), {
@@ -1113,13 +1090,12 @@ export class MatterbridgeEndpoint extends Endpoint {
1113
1090
  actuatorEnabled: true,
1114
1091
  operatingMode: DoorLock.OperatingMode.Normal,
1115
1092
  supportedOperatingModes: { normal: false, vacation: true, privacy: true, noRemoteLockUnlock: false, passage: true, alwaysSet: 2047 },
1116
- autoRelockTime: 0,
1093
+ autoRelockTime,
1117
1094
  numberOfPinUsersSupported: 10,
1118
- maxPinCodeLength: 10,
1119
- minPinCodeLength: 4,
1095
+ minPinCodeLength,
1096
+ maxPinCodeLength,
1120
1097
  wrongCodeEntryLimit: 5,
1121
1098
  userCodeTemporaryDisableTime: 60,
1122
- requirePinForRemoteOperation: true,
1123
1099
  numberOfTotalUsersSupported: 10,
1124
1100
  credentialRulesSupport: { single: true },
1125
1101
  numberOfCredentialsSupportedPerUser: 10,
@@ -129,7 +129,10 @@ export type CommandHandlerData<T extends CommandHandlers = CommandHandlers> = Co
129
129
  export type CommandHandlerPayload<T extends CommandHandlers = CommandHandlers> = CommandHandlerData<T> & {
130
130
  context?: ActionContext;
131
131
  };
132
- export type CommandHandlerFunction<T extends CommandHandlers = CommandHandlers> = (data: CommandHandlerPayload<T>) => void | Promise<void>;
132
+ type VoidReturn = ReturnType<() => void>;
133
+ export type CommandHandlerResponse<T extends CommandHandlers = CommandHandlers> = T extends keyof CommandHandlerResponseMap ? CommandHandlerResponseMap[T] : VoidReturn;
134
+ export type CommandHandlerExecutionResult<T extends CommandHandlers = CommandHandlers> = T extends keyof CommandHandlerResponseMap ? CommandHandlerResponseMap[T] | undefined : VoidReturn;
135
+ export type CommandHandlerFunction<T extends CommandHandlers = CommandHandlers> = (data: CommandHandlerPayload<T>) => CommandHandlerResponse<T> | Promise<CommandHandlerResponse<T>>;
133
136
  export type CommandHandlerDataMap = {
134
137
  'identify': CommandHandlerData<'Identify.identify'>;
135
138
  'triggerEffect': CommandHandlerData<'Identify.triggerEffect'>;
@@ -918,11 +921,14 @@ export type CommandHandlerDataMap = {
918
921
  endpoint: MatterbridgeEndpoint;
919
922
  };
920
923
  };
924
+ export type CommandHandlerResponseMap = {
925
+ 'DoorLock.getUser': DoorLock.GetUserResponse;
926
+ };
921
927
  export declare class CommandHandler {
922
928
  private handler;
923
929
  hasHandler<K extends CommandHandlers>(command: K): boolean;
924
930
  addHandler<K extends CommandHandlers>(command: K, handler: CommandHandlerFunction<K>): void;
925
- executeHandler<K extends CommandHandlers>(command: K, ...args: Parameters<CommandHandlerFunction<K>>): Promise<void>;
931
+ executeHandler<K extends CommandHandlers>(command: K, ...args: Parameters<CommandHandlerFunction<K>>): Promise<CommandHandlerExecutionResult<K>>;
926
932
  removeHandler<K extends CommandHandlers>(command: K, handler: CommandHandlerFunction<K>): void;
927
933
  }
928
934
  export {};
@@ -16,12 +16,13 @@ export class CommandHandler {
16
16
  }
17
17
  const fallbackCommand = command.includes('.') ? command.split('.').pop() : undefined;
18
18
  if (fallbackCommand === undefined)
19
- return;
19
+ return undefined;
20
20
  for (const { command: registeredCommand, handler } of this.handler) {
21
21
  if (registeredCommand === fallbackCommand) {
22
22
  return await handler(...args);
23
23
  }
24
24
  }
25
+ return undefined;
25
26
  }
26
27
  removeHandler(command, handler) {
27
28
  this.handler = this.handler.filter(({ command: registeredCommand, handler: registeredHandler }) => {
@@ -74,6 +74,7 @@ export declare class PluginManager extends EventEmitter<PluginManagerEvents> {
74
74
  install(packageName: string): void;
75
75
  uninstall(packageName: string): void;
76
76
  getAuthor(packageJson: Record<string, string | number | Record<string, string | number | object>>): string;
77
+ getDescription(packageJson: Record<string, string | number | Record<string, string | number | object>>): string;
77
78
  getHomepage(packageJson: Record<string, string | number | Record<string, string | number | object>>): string | undefined;
78
79
  getHelp(packageJson: Record<string, string | number | Record<string, string | number | object>>): string | undefined;
79
80
  getChangelog(packageJson: Record<string, string | number | Record<string, string | number | object>>): string | undefined;
@@ -537,6 +537,11 @@ export class PluginManager extends EventEmitter {
537
537
  return packageJson.author.name;
538
538
  return 'Unknown author';
539
539
  }
540
+ getDescription(packageJson) {
541
+ if (packageJson.description && typeof packageJson.description === 'string')
542
+ return packageJson.description;
543
+ return 'No description';
544
+ }
540
545
  getHomepage(packageJson) {
541
546
  if (packageJson.homepage && typeof packageJson.homepage === 'string' && packageJson.homepage.includes('http')) {
542
547
  return packageJson.homepage.replace('git+', '').replace('.git', '');
@@ -828,7 +833,7 @@ export class PluginManager extends EventEmitter {
828
833
  if (pluginInstance.default) {
829
834
  const config = await this.loadConfig(plugin);
830
835
  plugin.name = packageJson.name;
831
- plugin.description = packageJson.description ?? 'No description';
836
+ plugin.description = this.getDescription(packageJson);
832
837
  plugin.version = packageJson.version;
833
838
  plugin.author = this.getAuthor(packageJson);
834
839
  plugin.configJson = config;
@@ -853,7 +858,7 @@ export class PluginManager extends EventEmitter {
853
858
  platform.isLoaded = true;
854
859
  platform.setMatterNode?.(this.matterbridge.addBridgedEndpoint.bind(this.matterbridge), this.matterbridge.removeBridgedEndpoint.bind(this.matterbridge), this.matterbridge.removeAllBridgedEndpoints.bind(this.matterbridge), this.matterbridge.addVirtualEndpoint.bind(this.matterbridge));
855
860
  plugin.name = packageJson.name;
856
- plugin.description = packageJson.description ?? 'No description';
861
+ plugin.description = this.getDescription(packageJson);
857
862
  plugin.version = packageJson.version;
858
863
  plugin.author = this.getAuthor(packageJson);
859
864
  plugin.homepage = this.getHomepage(packageJson);
@@ -1150,6 +1155,13 @@ export class PluginManager extends EventEmitter {
1150
1155
  'readOnly': true,
1151
1156
  'ui:widget': 'hidden',
1152
1157
  },
1158
+ version: {
1159
+ 'title': 'Plugin Version',
1160
+ 'description': 'Plugin version',
1161
+ 'type': 'string',
1162
+ 'readOnly': true,
1163
+ 'ui:widget': 'hidden',
1164
+ },
1153
1165
  debug: {
1154
1166
  title: 'Enable Debug',
1155
1167
  description: 'Enable the debug for the plugin (development only)',
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@matterbridge/core",
3
- "version": "3.7.2-dev-20260330-bb55c39",
3
+ "version": "3.7.2-dev-20260402-c12a10e",
4
4
  "description": "Matterbridge core library",
5
5
  "author": "https://github.com/Luligu",
6
6
  "homepage": "https://matterbridge.io/",
@@ -126,10 +126,10 @@
126
126
  ],
127
127
  "dependencies": {
128
128
  "@matter/main": "0.16.10",
129
- "@matterbridge/dgram": "3.7.2-dev-20260330-bb55c39",
130
- "@matterbridge/thread": "3.7.2-dev-20260330-bb55c39",
131
- "@matterbridge/types": "3.7.2-dev-20260330-bb55c39",
132
- "@matterbridge/utils": "3.7.2-dev-20260330-bb55c39",
129
+ "@matterbridge/dgram": "3.7.2-dev-20260402-c12a10e",
130
+ "@matterbridge/thread": "3.7.2-dev-20260402-c12a10e",
131
+ "@matterbridge/types": "3.7.2-dev-20260402-c12a10e",
132
+ "@matterbridge/utils": "3.7.2-dev-20260402-c12a10e",
133
133
  "express": "5.2.1",
134
134
  "multer": "2.1.1",
135
135
  "node-ansi-logger": "3.2.1-dev-20260327-7069fd7",
@@ -1,32 +0,0 @@
1
- import { DoorLockServer } from '@matter/node/behaviors/door-lock';
2
- import { DoorLock } from '@matter/types/clusters/door-lock';
3
- declare const MatterbridgePinDoorLockServer_base: import("@matter/node").ClusterBehavior.Type<import("@matter/types").ClusterTypeModifier.WithAlterations<import("@matter/types").ClusterComposer.WithFeatures<DoorLock.Cluster, readonly [DoorLock.Feature.PinCredential, DoorLock.Feature.CredentialOverTheAirAccess]>, import("@matter/types").ClusterTypeModifier.ElementFlagAlterations<{
4
- readonly events: {
5
- readonly doorLockAlarm: true;
6
- readonly lockOperation: true;
7
- readonly lockOperationError: true;
8
- };
9
- readonly commands: {
10
- readonly lockDoor: true;
11
- readonly unlockDoor: true;
12
- readonly unlockWithTimeout: true;
13
- readonly setUserStatus: true;
14
- readonly getUserStatus: true;
15
- readonly setUserType: true;
16
- readonly getUserType: true;
17
- };
18
- }>>, 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>, import("@matter/node/behaviors/door-lock").DoorLockInterface>;
19
- export declare class MatterbridgePinDoorLockServer extends MatterbridgePinDoorLockServer_base {
20
- lockDoor(request: DoorLock.LockDoorRequest): Promise<void>;
21
- unlockDoor(request: DoorLock.UnlockDoorRequest): Promise<void>;
22
- unlockWithTimeout(request: DoorLock.UnlockWithTimeoutRequest): Promise<void>;
23
- setPinCode(request: DoorLock.SetPinCodeRequest): Promise<void>;
24
- getPinCode(request: DoorLock.GetPinCodeRequest): Promise<DoorLock.GetPinCodeResponse>;
25
- clearPinCode(request: DoorLock.ClearPinCodeRequest): Promise<void>;
26
- clearAllPinCodes(): Promise<void>;
27
- setUserStatus(request: DoorLock.SetUserStatusRequest): Promise<void>;
28
- getUserStatus(request: DoorLock.GetUserStatusRequest): Promise<DoorLock.GetUserStatusResponse>;
29
- setUserType(request: DoorLock.SetUserTypeRequest): Promise<void>;
30
- getUserType(request: DoorLock.GetUserTypeRequest): Promise<DoorLock.GetUserTypeResponse>;
31
- }
32
- export {};
@@ -1,168 +0,0 @@
1
- import { DoorLockServer } from '@matter/node/behaviors/door-lock';
2
- import { DoorLock } from '@matter/types/clusters/door-lock';
3
- import { getEnumDescription } from '@matterbridge/utils';
4
- import { MatterbridgeServer } from './matterbridgeServer.js';
5
- export class MatterbridgePinDoorLockServer extends DoorLockServer.with(DoorLock.Feature.PinCredential, DoorLock.Feature.CredentialOverTheAirAccess).enable({
6
- events: { doorLockAlarm: true, lockOperation: true, lockOperationError: true },
7
- commands: { lockDoor: true, unlockDoor: true, unlockWithTimeout: true, setUserStatus: true, getUserStatus: true, setUserType: true, getUserType: true },
8
- }) {
9
- async lockDoor(request) {
10
- const device = this.endpoint.stateOf(MatterbridgeServer);
11
- 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})`);
12
- await device.commandHandler.executeHandler('DoorLock.lockDoor', {
13
- command: 'lockDoor',
14
- request,
15
- cluster: DoorLockServer.id,
16
- attributes: this.state,
17
- endpoint: this.endpoint,
18
- context: this.context,
19
- });
20
- device.log.debug(`MatterbridgeDoorLockServer: lockDoor called`);
21
- await super.lockDoor(request);
22
- }
23
- async unlockDoor(request) {
24
- const device = this.endpoint.stateOf(MatterbridgeServer);
25
- 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})`);
26
- await device.commandHandler.executeHandler('DoorLock.unlockDoor', {
27
- command: 'unlockDoor',
28
- request,
29
- cluster: DoorLockServer.id,
30
- attributes: this.state,
31
- endpoint: this.endpoint,
32
- context: this.context,
33
- });
34
- device.log.debug(`MatterbridgeDoorLockServer: unlockDoor called`);
35
- await super.unlockDoor(request);
36
- }
37
- async unlockWithTimeout(request) {
38
- const device = this.endpoint.stateOf(MatterbridgeServer);
39
- device.log.info(`Unlocking door with pincode ${request.pinCode ? '0x' + Buffer.from(request.pinCode).toString('hex') : 'N/A'} timeout ${request.timeout} seconds (endpoint ${this.endpoint.maybeId}.${this.endpoint.maybeNumber})`);
40
- await device.commandHandler.executeHandler('DoorLock.unlockWithTimeout', {
41
- command: 'unlockWithTimeout',
42
- request,
43
- cluster: DoorLockServer.id,
44
- attributes: this.state,
45
- endpoint: this.endpoint,
46
- context: this.context,
47
- });
48
- device.log.debug(`MatterbridgeDoorLockServer: unlockWithTimeout called`);
49
- this.state.lockState = DoorLock.LockState.Unlocked;
50
- }
51
- async setPinCode(request) {
52
- const device = this.endpoint.stateOf(MatterbridgeServer);
53
- 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})`);
54
- await device.commandHandler.executeHandler('DoorLock.setPinCode', {
55
- command: 'setPinCode',
56
- request,
57
- cluster: DoorLockServer.id,
58
- attributes: this.state,
59
- endpoint: this.endpoint,
60
- context: this.context,
61
- });
62
- device.log.debug(`MatterbridgeDoorLockServer: setPinCode called for user ${request.userId}`);
63
- }
64
- async getPinCode(request) {
65
- const device = this.endpoint.stateOf(MatterbridgeServer);
66
- device.log.info(`Getting pin code for user ${request.userId} (endpoint ${this.endpoint.maybeId}.${this.endpoint.maybeNumber})`);
67
- await device.commandHandler.executeHandler('DoorLock.getPinCode', {
68
- command: 'getPinCode',
69
- request,
70
- cluster: DoorLockServer.id,
71
- attributes: this.state,
72
- endpoint: this.endpoint,
73
- context: this.context,
74
- });
75
- return {
76
- userId: request.userId,
77
- userStatus: DoorLock.UserStatus.Available,
78
- userType: DoorLock.UserType.UnrestrictedUser,
79
- pinCode: Buffer.from('1234'),
80
- };
81
- }
82
- async clearPinCode(request) {
83
- const device = this.endpoint.stateOf(MatterbridgeServer);
84
- device.log.info(`Clearing pin code for ${request.pinSlotIndex === 0xfffe ? 'all slots' : 'slot ' + request.pinSlotIndex} (endpoint ${this.endpoint.maybeId}.${this.endpoint.maybeNumber})`);
85
- await device.commandHandler.executeHandler('DoorLock.clearPinCode', {
86
- command: 'clearPinCode',
87
- request,
88
- cluster: DoorLockServer.id,
89
- attributes: this.state,
90
- endpoint: this.endpoint,
91
- context: this.context,
92
- });
93
- device.log.debug(`MatterbridgeDoorLockServer: clearPinCode called for ${request.pinSlotIndex === 0xfffe ? 'all PIN slots' : 'PIN slot ' + request.pinSlotIndex}`);
94
- }
95
- async clearAllPinCodes() {
96
- const device = this.endpoint.stateOf(MatterbridgeServer);
97
- device.log.info(`Clearing all pin codes (endpoint ${this.endpoint.maybeId}.${this.endpoint.maybeNumber})`);
98
- await device.commandHandler.executeHandler('DoorLock.clearAllPinCodes', {
99
- command: 'clearAllPinCodes',
100
- request: {},
101
- cluster: DoorLockServer.id,
102
- attributes: this.state,
103
- endpoint: this.endpoint,
104
- context: this.context,
105
- });
106
- device.log.debug('MatterbridgeDoorLockServer: clearAllPinCodes called');
107
- }
108
- async setUserStatus(request) {
109
- const device = this.endpoint.stateOf(MatterbridgeServer);
110
- device.log.info(`Setting user status for user ${request.userId} to ${getEnumDescription(DoorLock.UserStatus, request.userStatus)} (endpoint ${this.endpoint.maybeId}.${this.endpoint.maybeNumber})`);
111
- await device.commandHandler.executeHandler('DoorLock.setUserStatus', {
112
- command: 'setUserStatus',
113
- request,
114
- cluster: DoorLockServer.id,
115
- attributes: this.state,
116
- endpoint: this.endpoint,
117
- context: this.context,
118
- });
119
- device.log.debug(`MatterbridgeDoorLockServer: setUserStatus called for user ${request.userId}`);
120
- }
121
- async getUserStatus(request) {
122
- const device = this.endpoint.stateOf(MatterbridgeServer);
123
- device.log.info(`Getting user status for user ${request.userId} (endpoint ${this.endpoint.maybeId}.${this.endpoint.maybeNumber})`);
124
- await device.commandHandler.executeHandler('DoorLock.getUserStatus', {
125
- command: 'getUserStatus',
126
- request,
127
- cluster: DoorLockServer.id,
128
- attributes: this.state,
129
- endpoint: this.endpoint,
130
- context: this.context,
131
- });
132
- device.log.debug(`MatterbridgeDoorLockServer: getUserStatus called for user ${request.userId}`);
133
- return {
134
- userId: request.userId,
135
- userStatus: DoorLock.UserStatus.Available,
136
- };
137
- }
138
- async setUserType(request) {
139
- const device = this.endpoint.stateOf(MatterbridgeServer);
140
- device.log.info(`Setting user type for user ${request.userId} to ${getEnumDescription(DoorLock.UserType, request.userType)} (endpoint ${this.endpoint.maybeId}.${this.endpoint.maybeNumber})`);
141
- await device.commandHandler.executeHandler('DoorLock.setUserType', {
142
- command: 'setUserType',
143
- request,
144
- cluster: DoorLockServer.id,
145
- attributes: this.state,
146
- endpoint: this.endpoint,
147
- context: this.context,
148
- });
149
- device.log.debug(`MatterbridgeDoorLockServer: setUserType called for user ${request.userId}`);
150
- }
151
- async getUserType(request) {
152
- const device = this.endpoint.stateOf(MatterbridgeServer);
153
- device.log.info(`Getting user type for user ${request.userId} (endpoint ${this.endpoint.maybeId}.${this.endpoint.maybeNumber})`);
154
- await device.commandHandler.executeHandler('DoorLock.getUserType', {
155
- command: 'getUserType',
156
- request,
157
- cluster: DoorLockServer.id,
158
- attributes: this.state,
159
- endpoint: this.endpoint,
160
- context: this.context,
161
- });
162
- device.log.debug(`MatterbridgeDoorLockServer: getUserType called for user ${request.userId}`);
163
- return {
164
- userId: request.userId,
165
- userType: DoorLock.UserType.UnrestrictedUser,
166
- };
167
- }
168
- }
@@ -1,57 +0,0 @@
1
- import { DoorLockServer } from '@matter/node/behaviors/door-lock';
2
- import { DoorLock } from '@matter/types/clusters/door-lock';
3
- import { FabricIndex } from '@matter/types/datatype';
4
- declare const MatterbridgeUserPinDoorLockServer_base: import("@matter/node").ClusterBehavior.Type<import("@matter/types").ClusterTypeModifier.WithAlterations<import("@matter/types").ClusterComposer.WithFeatures<DoorLock.Cluster, readonly [DoorLock.Feature.User, DoorLock.Feature.PinCredential, DoorLock.Feature.CredentialOverTheAirAccess]>, import("@matter/types").ClusterTypeModifier.ElementFlagAlterations<{
5
- readonly events: {
6
- readonly doorLockAlarm: true;
7
- readonly lockOperation: true;
8
- readonly lockOperationError: true;
9
- };
10
- readonly commands: {
11
- readonly lockDoor: true;
12
- readonly unlockDoor: true;
13
- readonly unlockWithTimeout: true;
14
- };
15
- }>>, import("@matter/node").ClusterBehavior.Type<import("@matter/types").ClusterComposer.WithFeatures<DoorLock.Cluster, readonly [DoorLock.Feature.User, DoorLock.Feature.PinCredential, DoorLock.Feature.CredentialOverTheAirAccess]>, typeof DoorLockServer, import("@matter/node/behaviors/door-lock").DoorLockInterface>, import("@matter/node/behaviors/door-lock").DoorLockInterface>;
16
- export declare class MatterbridgeUserPinDoorLockServer extends MatterbridgeUserPinDoorLockServer_base {
17
- protected internal: MatterbridgeUserPinDoorLockServer.Internal;
18
- private getAccessingFabricIndex;
19
- private findStoredCredential;
20
- private getStoredCredentialStateDebug;
21
- private logStoredCredentialState;
22
- private hasMatchingPinCredential;
23
- private validateRemotePinCode;
24
- private getNextOccupiedCredentialIndex;
25
- private upsertStoredCredential;
26
- private clearStoredCredential;
27
- lockDoor(request: DoorLock.LockDoorRequest): Promise<void>;
28
- unlockDoor(request: DoorLock.UnlockDoorRequest): Promise<void>;
29
- unlockWithTimeout(request: DoorLock.UnlockWithTimeoutRequest): Promise<void>;
30
- setUser(request: DoorLock.SetUserRequest): Promise<void>;
31
- getUser(request: DoorLock.GetUserRequest): Promise<DoorLock.GetUserResponse>;
32
- clearUser(request: DoorLock.ClearUserRequest): Promise<void>;
33
- setCredential(request: DoorLock.SetCredentialRequest): Promise<DoorLock.SetCredentialResponse>;
34
- getCredentialStatus(request: DoorLock.GetCredentialStatusRequest): Promise<DoorLock.GetCredentialStatusResponse>;
35
- clearCredential(request: DoorLock.ClearCredentialRequest): Promise<void>;
36
- }
37
- export declare namespace MatterbridgeUserPinDoorLockServer {
38
- type StoredCredential = DoorLock.Credential & {
39
- credentialData: Uint8Array;
40
- };
41
- type StoredUser = {
42
- userIndex: number;
43
- userName: string | null;
44
- userUniqueId: number | null;
45
- userStatus: DoorLock.UserStatus | null;
46
- userType: DoorLock.UserType | null;
47
- credentialRule: DoorLock.CredentialRule | null;
48
- credentials: StoredCredential[] | null;
49
- creatorFabricIndex: FabricIndex | null;
50
- lastModifiedFabricIndex: FabricIndex | null;
51
- nextUserIndex: number | null;
52
- };
53
- class Internal {
54
- users: StoredUser[];
55
- }
56
- }
57
- export {};