@matterbridge/core 3.6.1-dev-20260313-1c1c125 → 3.6.1-dev-20260314-9cef6d3

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.
@@ -2,7 +2,7 @@ import { KeypadInputServer } from '@matter/node/behaviors/keypad-input';
2
2
  import { MediaPlaybackServer } from '@matter/node/behaviors/media-playback';
3
3
  import { KeypadInput } from '@matter/types/clusters/keypad-input';
4
4
  import { MediaPlayback } from '@matter/types/clusters/media-playback';
5
- import { MatterbridgeOnOffServer, MatterbridgeServer } from '../matterbridgeBehaviors.js';
5
+ import { MatterbridgeOnOffServer, MatterbridgeServer } from '../matterbridgeBehaviorsServer.js';
6
6
  import { basicVideoPlayer, powerSource } from '../matterbridgeDeviceTypes.js';
7
7
  import { MatterbridgeEndpoint } from '../matterbridgeEndpoint.js';
8
8
  export class BasicVideoPlayer extends MatterbridgeEndpoint {
@@ -1,6 +1,6 @@
1
1
  import { ContentLauncherServer } from '@matter/node/behaviors/content-launcher';
2
2
  import { MediaPlayback } from '@matter/types/clusters/media-playback';
3
- import { MatterbridgeServer } from '../matterbridgeBehaviors.js';
3
+ import { MatterbridgeServer } from '../matterbridgeBehaviorsServer.js';
4
4
  import { castingVideoPlayer, powerSource } from '../matterbridgeDeviceTypes.js';
5
5
  import { MatterbridgeEndpoint } from '../matterbridgeEndpoint.js';
6
6
  import { MatterbridgeKeypadInputServer, MatterbridgeMediaPlaybackServer } from './basicVideoPlayer.js';
@@ -2,7 +2,7 @@ import { AttributeElement, ClusterElement, ClusterModel, CommandElement, Datatyp
2
2
  import { ClusterBehavior } from '@matter/node';
3
3
  import { ClusterType } from '@matter/types';
4
4
  import { ClosureControl } from '../clusters/closure-control.js';
5
- import { MatterbridgeServer } from '../matterbridgeBehaviors.js';
5
+ import { MatterbridgeServer } from '../matterbridgeBehaviorsServer.js';
6
6
  import { closure } from '../matterbridgeDeviceTypes.js';
7
7
  import { MatterbridgeEndpoint } from '../matterbridgeEndpoint.js';
8
8
  const ClosureControlSchema = ClusterElement({
@@ -2,7 +2,7 @@ import { AttributeElement, ClusterElement, ClusterModel, CommandElement, Datatyp
2
2
  import { ClusterBehavior } from '@matter/node';
3
3
  import { ClusterType } from '@matter/types';
4
4
  import { ClosureDimension } from '../clusters/closure-dimension.js';
5
- import { MatterbridgeServer } from '../matterbridgeBehaviors.js';
5
+ import { MatterbridgeServer } from '../matterbridgeBehaviorsServer.js';
6
6
  import { closurePanel } from '../matterbridgeDeviceTypes.js';
7
7
  import { MatterbridgeEndpoint } from '../matterbridgeEndpoint.js';
8
8
  const ClosureDimensionSchema = ClusterElement({
@@ -2,7 +2,7 @@ import { DishwasherAlarmServer } from '@matter/node/behaviors/dishwasher-alarm';
2
2
  import { DishwasherModeServer } from '@matter/node/behaviors/dishwasher-mode';
3
3
  import { DishwasherMode } from '@matter/types/clusters/dishwasher-mode';
4
4
  import { ModeBase } from '@matter/types/clusters/mode-base';
5
- import { MatterbridgeOnOffServer, MatterbridgeServer } from '../matterbridgeBehaviors.js';
5
+ import { MatterbridgeOnOffServer, MatterbridgeServer } from '../matterbridgeBehaviorsServer.js';
6
6
  import { dishwasher, powerSource } from '../matterbridgeDeviceTypes.js';
7
7
  import { MatterbridgeEndpoint } from '../matterbridgeEndpoint.js';
8
8
  import { createLevelTemperatureControlClusterServer, createNumberTemperatureControlClusterServer } from './temperatureControl.js';
@@ -4,7 +4,7 @@ import { DeviceEnergyManagement } from '@matter/types/clusters/device-energy-man
4
4
  import { EnergyEvse } from '@matter/types/clusters/energy-evse';
5
5
  import { EnergyEvseMode } from '@matter/types/clusters/energy-evse-mode';
6
6
  import { ModeBase } from '@matter/types/clusters/mode-base';
7
- import { MatterbridgeServer } from '../matterbridgeBehaviors.js';
7
+ import { MatterbridgeServer } from '../matterbridgeBehaviorsServer.js';
8
8
  import { deviceEnergyManagement, electricalSensor, evse, powerSource } from '../matterbridgeDeviceTypes.js';
9
9
  import { MatterbridgeEndpoint } from '../matterbridgeEndpoint.js';
10
10
  export class Evse extends MatterbridgeEndpoint {
@@ -3,7 +3,7 @@ import { LaundryWasherModeServer } from '@matter/node/behaviors/laundry-washer-m
3
3
  import { LaundryWasherControls } from '@matter/types/clusters/laundry-washer-controls';
4
4
  import { LaundryWasherMode } from '@matter/types/clusters/laundry-washer-mode';
5
5
  import { ModeBase } from '@matter/types/clusters/mode-base';
6
- import { MatterbridgeOnOffServer, MatterbridgeServer } from '../matterbridgeBehaviors.js';
6
+ import { MatterbridgeOnOffServer, MatterbridgeServer } from '../matterbridgeBehaviorsServer.js';
7
7
  import { laundryWasher, powerSource } from '../matterbridgeDeviceTypes.js';
8
8
  import { MatterbridgeEndpoint } from '../matterbridgeEndpoint.js';
9
9
  import { createLevelTemperatureControlClusterServer, createNumberTemperatureControlClusterServer } from './temperatureControl.js';
@@ -3,7 +3,7 @@ import { MicrowaveOvenModeServer } from '@matter/node/behaviors/microwave-oven-m
3
3
  import { MicrowaveOvenControl } from '@matter/types/clusters/microwave-oven-control';
4
4
  import { MicrowaveOvenMode } from '@matter/types/clusters/microwave-oven-mode';
5
5
  import { OperationalState } from '@matter/types/clusters/operational-state';
6
- import { MatterbridgeOperationalStateServer, MatterbridgeServer } from '../matterbridgeBehaviors.js';
6
+ import { MatterbridgeOperationalStateServer, MatterbridgeServer } from '../matterbridgeBehaviorsServer.js';
7
7
  import { microwaveOven, powerSource } from '../matterbridgeDeviceTypes.js';
8
8
  import { MatterbridgeEndpoint } from '../matterbridgeEndpoint.js';
9
9
  export class MicrowaveOven extends MatterbridgeEndpoint {
@@ -3,7 +3,7 @@ import { OvenModeServer } from '@matter/node/behaviors/oven-mode';
3
3
  import { ModeBase } from '@matter/types/clusters/mode-base';
4
4
  import { OperationalState } from '@matter/types/clusters/operational-state';
5
5
  import { OvenMode } from '@matter/types/clusters/oven-mode';
6
- import { MatterbridgeServer } from '../matterbridgeBehaviors.js';
6
+ import { MatterbridgeServer } from '../matterbridgeBehaviorsServer.js';
7
7
  import { oven, powerSource, temperatureControlledCabinetHeater } from '../matterbridgeDeviceTypes.js';
8
8
  import { MatterbridgeEndpoint } from '../matterbridgeEndpoint.js';
9
9
  import { createNumberTemperatureControlClusterServer } from './temperatureControl.js';
@@ -2,7 +2,7 @@ import { RefrigeratorAlarmServer } from '@matter/node/behaviors/refrigerator-ala
2
2
  import { RefrigeratorAndTemperatureControlledCabinetModeServer } from '@matter/node/behaviors/refrigerator-and-temperature-controlled-cabinet-mode';
3
3
  import { ModeBase } from '@matter/types/clusters/mode-base';
4
4
  import { RefrigeratorAndTemperatureControlledCabinetMode } from '@matter/types/clusters/refrigerator-and-temperature-controlled-cabinet-mode';
5
- import { MatterbridgeServer } from '../matterbridgeBehaviors.js';
5
+ import { MatterbridgeServer } from '../matterbridgeBehaviorsServer.js';
6
6
  import { powerSource, refrigerator, temperatureControlledCabinetCooler } from '../matterbridgeDeviceTypes.js';
7
7
  import { MatterbridgeEndpoint } from '../matterbridgeEndpoint.js';
8
8
  import { createNumberTemperatureControlClusterServer } from './temperatureControl.js';
@@ -9,7 +9,7 @@ import { RvcCleanMode } from '@matter/types/clusters/rvc-clean-mode';
9
9
  import { RvcOperationalState } from '@matter/types/clusters/rvc-operational-state';
10
10
  import { RvcRunMode } from '@matter/types/clusters/rvc-run-mode';
11
11
  import { ServiceArea } from '@matter/types/clusters/service-area';
12
- import { MatterbridgeServer, MatterbridgeServiceAreaServer } from '../matterbridgeBehaviors.js';
12
+ import { MatterbridgeServer, MatterbridgeServiceAreaServer } from '../matterbridgeBehaviorsServer.js';
13
13
  import { powerSource, roboticVacuumCleaner } from '../matterbridgeDeviceTypes.js';
14
14
  import { MatterbridgeEndpoint } from '../matterbridgeEndpoint.js';
15
15
  export class RoboticVacuumCleaner extends MatterbridgeEndpoint {
@@ -1,6 +1,6 @@
1
1
  import { TemperatureControlServer } from '@matter/node/behaviors/temperature-control';
2
2
  import { TemperatureControl } from '@matter/types/clusters/temperature-control';
3
- import { MatterbridgeServer } from '../matterbridgeBehaviors.js';
3
+ import { MatterbridgeServer } from '../matterbridgeBehaviorsServer.js';
4
4
  export function createLevelTemperatureControlClusterServer(endpoint, selectedTemperatureLevel = 1, supportedTemperatureLevels = ['Cold', 'Warm', 'Hot', '30°', '40°', '60°', '80°']) {
5
5
  endpoint.behaviors.require(MatterbridgeLevelTemperatureControlServer.with(TemperatureControl.Feature.TemperatureLevel), {
6
6
  selectedTemperatureLevel,
@@ -4,7 +4,7 @@ import { DeviceEnergyManagement } from '@matter/types/clusters/device-energy-man
4
4
  import { ModeBase } from '@matter/types/clusters/mode-base';
5
5
  import { WaterHeaterManagement } from '@matter/types/clusters/water-heater-management';
6
6
  import { WaterHeaterMode } from '@matter/types/clusters/water-heater-mode';
7
- import { MatterbridgeServer } from '../matterbridgeBehaviors.js';
7
+ import { MatterbridgeServer } from '../matterbridgeBehaviorsServer.js';
8
8
  import { deviceEnergyManagement, electricalSensor, powerSource, waterHeater } from '../matterbridgeDeviceTypes.js';
9
9
  import { MatterbridgeEndpoint } from '../matterbridgeEndpoint.js';
10
10
  export class WaterHeater extends MatterbridgeEndpoint {
package/dist/export.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  export { addVirtualDevice } from './helpers.js';
2
2
  export * from './matterbridgeAccessoryPlatform.js';
3
- export * from './matterbridgeBehaviors.js';
3
+ export * from './matterbridgeBehaviorsServer.js';
4
4
  export * from './matterbridgeDeviceTypes.js';
5
5
  export * from './matterbridgeDynamicPlatform.js';
6
6
  export * from './matterbridgeEndpoint.js';
package/dist/export.js CHANGED
@@ -2,7 +2,7 @@ if (process.argv.includes('--loader') || process.argv.includes('-loader'))
2
2
  console.log('\u001B[32mIndex loaded.\u001B[40;0m');
3
3
  export { addVirtualDevice } from './helpers.js';
4
4
  export * from './matterbridgeAccessoryPlatform.js';
5
- export * from './matterbridgeBehaviors.js';
5
+ export * from './matterbridgeBehaviorsServer.js';
6
6
  export * from './matterbridgeDeviceTypes.js';
7
7
  export * from './matterbridgeDynamicPlatform.js';
8
8
  export * from './matterbridgeEndpoint.js';
@@ -93,6 +93,8 @@ export declare function deleteDevice(owner: ServerNode<ServerNode.RootEndpoint>
93
93
  export declare function getMoveToLevelRequest(level: number, transitionTime: number, executeIfOff: boolean): LevelControl.MoveToLevelRequest;
94
94
  export declare function getMoveToColorTemperatureRequest(colorTemperatureMireds: number, transitionTime: number, executeIfOff: boolean): ColorControl.MoveToColorTemperatureRequest;
95
95
  export declare function getMoveToHueRequest(hue: number, transitionTime: number, executeIfOff: boolean): ColorControl.MoveToHueRequest;
96
+ export declare function getEnhancedMoveToHueRequest(enhancedHue: number, transitionTime: number, executeIfOff: boolean): ColorControl.EnhancedMoveToHueRequest;
96
97
  export declare function getMoveToSaturationRequest(saturation: number, transitionTime: number, executeIfOff: boolean): ColorControl.MoveToSaturationRequest;
97
98
  export declare function getMoveToHueAndSaturationRequest(hue: number, saturation: number, transitionTime: number, executeIfOff: boolean): ColorControl.MoveToHueAndSaturationRequest;
99
+ export declare function getEnhancedMoveToHueAndSaturationRequest(enhancedHue: number, saturation: number, transitionTime: number, executeIfOff: boolean): ColorControl.EnhancedMoveToHueAndSaturationRequest;
98
100
  export declare function getMoveToColorRequest(colorX: number, colorY: number, transitionTime: number, executeIfOff: boolean): ColorControl.MoveToColorRequest;
@@ -579,6 +579,7 @@ export async function addDevice(owner, device, pause = 10) {
579
579
  process.stderr.write(`${er}Error adding device ${device.maybeId}.${device.maybeNumber}: ${errorMessage}${rs}\nStack: ${errorInspect}\n`);
580
580
  return false;
581
581
  }
582
+ await device.construction.ready;
582
583
  expect(owner.parts.has(device)).toBeTruthy();
583
584
  expect(owner.lifecycle.isPartsReady).toBeTruthy();
584
585
  expect(device.lifecycle.isReady).toBeTruthy();
@@ -642,6 +643,16 @@ export function getMoveToHueRequest(hue, transitionTime, executeIfOff) {
642
643
  };
643
644
  return request;
644
645
  }
646
+ export function getEnhancedMoveToHueRequest(enhancedHue, transitionTime, executeIfOff) {
647
+ const request = {
648
+ enhancedHue,
649
+ transitionTime,
650
+ direction: ColorControl.Direction.Shortest,
651
+ optionsMask: { executeIfOff },
652
+ optionsOverride: { executeIfOff },
653
+ };
654
+ return request;
655
+ }
645
656
  export function getMoveToSaturationRequest(saturation, transitionTime, executeIfOff) {
646
657
  const request = {
647
658
  saturation,
@@ -661,6 +672,16 @@ export function getMoveToHueAndSaturationRequest(hue, saturation, transitionTime
661
672
  };
662
673
  return request;
663
674
  }
675
+ export function getEnhancedMoveToHueAndSaturationRequest(enhancedHue, saturation, transitionTime, executeIfOff) {
676
+ const request = {
677
+ enhancedHue,
678
+ saturation,
679
+ transitionTime,
680
+ optionsMask: { executeIfOff },
681
+ optionsOverride: { executeIfOff },
682
+ };
683
+ return request;
684
+ }
664
685
  export function getMoveToColorRequest(colorX, colorY, transitionTime, executeIfOff) {
665
686
  const request = {
666
687
  colorX,
@@ -1,6 +1,6 @@
1
1
  import { BindingBehavior } from '@matter/main/behaviors/binding';
2
2
  import { DescriptorServer } from '@matter/main/behaviors/descriptor';
3
- import { MatterbridgeServer } from './matterbridgeBehaviors.js';
3
+ import { MatterbridgeServer } from './matterbridgeBehaviorsServer.js';
4
4
  export class MatterbridgeBindingServer extends BindingBehavior {
5
5
  async initialize() {
6
6
  const device = this.endpoint.stateOf(MatterbridgeServer);
@@ -1327,12 +1327,12 @@ declare const MatterbridgeThermostatServer_base: import("@matter/node").ClusterB
1327
1327
  }>, void, any>;
1328
1328
  readonly atomicRequest: import("@matter/types").Command<import("@matter/types").TypeFromFields<{
1329
1329
  requestType: import("@matter/types").FieldType<Thermostat.RequestType>;
1330
- attributeRequests: import("@matter/types").FieldType<import("@matter/types/datatype").AttributeId[]>;
1330
+ attributeRequests: import("@matter/types").FieldType<import("@matter/types").AttributeId[]>;
1331
1331
  timeout: import("@matter/types").OptionalFieldType<number>;
1332
1332
  }>, import("@matter/types").TypeFromFields<{
1333
1333
  statusCode: import("@matter/types").FieldType<import("@matter/types").Status>;
1334
1334
  attributeStatus: import("@matter/types").FieldType<import("@matter/types").TypeFromFields<{
1335
- attributeId: import("@matter/types").FieldType<import("@matter/types/datatype").AttributeId>;
1335
+ attributeId: import("@matter/types").FieldType<import("@matter/types").AttributeId>;
1336
1336
  statusCode: import("@matter/types").FieldType<import("@matter/types").Status>;
1337
1337
  }>[]>;
1338
1338
  timeout: import("@matter/types").OptionalFieldType<number>;
@@ -1692,12 +1692,12 @@ declare const MatterbridgePresetThermostatServer_base: import("@matter/node").Cl
1692
1692
  }>, void, any>;
1693
1693
  readonly atomicRequest: import("@matter/types").Command<import("@matter/types").TypeFromFields<{
1694
1694
  requestType: import("@matter/types").FieldType<Thermostat.RequestType>;
1695
- attributeRequests: import("@matter/types").FieldType<import("@matter/types/datatype").AttributeId[]>;
1695
+ attributeRequests: import("@matter/types").FieldType<import("@matter/types").AttributeId[]>;
1696
1696
  timeout: import("@matter/types").OptionalFieldType<number>;
1697
1697
  }>, import("@matter/types").TypeFromFields<{
1698
1698
  statusCode: import("@matter/types").FieldType<import("@matter/types").Status>;
1699
1699
  attributeStatus: import("@matter/types").FieldType<import("@matter/types").TypeFromFields<{
1700
- attributeId: import("@matter/types").FieldType<import("@matter/types/datatype").AttributeId>;
1700
+ attributeId: import("@matter/types").FieldType<import("@matter/types").AttributeId>;
1701
1701
  statusCode: import("@matter/types").FieldType<import("@matter/types").Status>;
1702
1702
  }>[]>;
1703
1703
  timeout: import("@matter/types").OptionalFieldType<number>;
@@ -1,3 +1,4 @@
1
+ import { Bytes } from '@matter/general';
1
2
  import { Behavior } from '@matter/node';
2
3
  import { ActivatedCarbonFilterMonitoringServer } from '@matter/node/behaviors/activated-carbon-filter-monitoring';
3
4
  import { BooleanStateConfigurationServer } from '@matter/node/behaviors/boolean-state-configuration';
@@ -19,6 +20,7 @@ import { SwitchServer } from '@matter/node/behaviors/switch';
19
20
  import { ThermostatServer } from '@matter/node/behaviors/thermostat';
20
21
  import { ValveConfigurationAndControlServer } from '@matter/node/behaviors/valve-configuration-and-control';
21
22
  import { WindowCoveringServer } from '@matter/node/behaviors/window-covering';
23
+ import { StatusResponse } from '@matter/types';
22
24
  import { BooleanStateConfiguration } from '@matter/types/clusters/boolean-state-configuration';
23
25
  import { ColorControl } from '@matter/types/clusters/color-control';
24
26
  import { DeviceEnergyManagement } from '@matter/types/clusters/device-energy-management';
@@ -380,6 +382,12 @@ export class MatterbridgePresetThermostatServer extends ThermostatServer.with(Th
380
382
  const device = this.endpoint.stateOf(MatterbridgeServer);
381
383
  device.log.info(`Setting preset to ${request.presetHandle} (endpoint ${this.endpoint.maybeId}.${this.endpoint.maybeNumber})`);
382
384
  device.commandHandler.executeHandler('setActivePresetRequest', { request, cluster: ThermostatServer.id, attributes: this.state, endpoint: this.endpoint });
385
+ if (request.presetHandle !== null) {
386
+ const preset = this.state.persistedPresets?.find((storedPreset) => storedPreset.presetHandle !== null && Bytes.areEqual(storedPreset.presetHandle, request.presetHandle));
387
+ if (preset === undefined)
388
+ throw new StatusResponse.InvalidCommandError('Requested PresetHandle not found');
389
+ }
390
+ this.state.activePresetHandle = request.presetHandle;
383
391
  device.log.debug(`MatterbridgePresetThermostatServer: setActivePresetRequest called with presetHandle: ${request.presetHandle}`);
384
392
  }
385
393
  }
@@ -62,15 +62,27 @@ export declare class MatterbridgeEndpoint extends Endpoint {
62
62
  setAttribute(clusterId: Behavior.Type | ClusterType | ClusterId | string, attribute: string, value: boolean | number | bigint | string | object | null, log?: AnsiLogger): Promise<boolean>;
63
63
  updateAttribute(cluster: Behavior.Type | ClusterType | ClusterId | string, attribute: string, value: boolean | number | bigint | string | object | null, log?: AnsiLogger): Promise<boolean>;
64
64
  subscribeAttribute(cluster: Behavior.Type | ClusterType | ClusterId | string, attribute: string, listener: (newValue: any, oldValue: any, context: ActionContext) => void, log?: AnsiLogger): Promise<boolean>;
65
- setCluster(cluster: Behavior.Type | ClusterType | ClusterId | string, value: Record<string, boolean | number | bigint | string | object | undefined | null>, log?: AnsiLogger): Promise<boolean>;
66
- getCluster(cluster: Behavior.Type | ClusterType | ClusterId | string, log?: AnsiLogger): Record<string, boolean | number | bigint | string | object | undefined | null> | undefined;
65
+ setCluster<T extends Behavior.Type>(cluster: T, value: Behavior.StateOf<T>, log?: AnsiLogger): Promise<boolean>;
66
+ setCluster<T extends ClusterType>(cluster: T, value: ClusterType.AttributeValues<T>, log?: AnsiLogger): Promise<boolean>;
67
+ setCluster(cluster: ClusterId | string, value: Record<string, boolean | number | bigint | string | object | undefined | null>, log?: AnsiLogger): Promise<boolean>;
68
+ getCluster<T extends Behavior.Type>(cluster: T, log?: AnsiLogger): Behavior.StateOf<T> | undefined;
69
+ getCluster<T extends ClusterType>(cluster: T, log?: AnsiLogger): ClusterType.AttributeValues<T> | undefined;
70
+ getCluster(cluster: ClusterId | string, log?: AnsiLogger): Record<string, boolean | number | bigint | string | object | undefined | null> | undefined;
67
71
  triggerEvent(cluster: Behavior.Type | ClusterType | ClusterId | string, event: string, payload: Record<string, boolean | number | bigint | string | object | undefined | null>, log?: AnsiLogger): Promise<boolean>;
68
72
  addClusterServers(serverList: ClusterId[]): this;
69
73
  addFixedLabel(label: string, value: string): Promise<this>;
70
74
  addUserLabel(label: string, value: string): Promise<this>;
71
75
  addCommandHandler(command: keyof MatterbridgeEndpointCommands, handler: CommandHandlerFunction): this;
72
76
  executeCommandHandler(command: keyof MatterbridgeEndpointCommands, request?: Record<string, boolean | number | bigint | string | object | null>, cluster?: string, attributes?: Record<string, boolean | number | bigint | string | object | null>, endpoint?: MatterbridgeEndpoint): Promise<void>;
73
- invokeBehaviorCommand(cluster: Behavior.Type | ClusterType | ClusterId | string, command: keyof MatterbridgeEndpointCommands, params?: Record<string, boolean | number | bigint | string | object | null>): Promise<void>;
77
+ invokeBehaviorCommand<T extends Behavior.Type, C extends keyof {
78
+ [K in keyof InstanceType<T> as InstanceType<T>[K] extends (...args: unknown[]) => unknown ? K : never]: InstanceType<T>[K];
79
+ }>(cluster: T, command: C, params?: {
80
+ [K in keyof InstanceType<T> as InstanceType<T>[K] extends (...args: unknown[]) => unknown ? K : never]: InstanceType<T>[K];
81
+ }[C] extends (...args: infer P) => unknown ? P[0] : never): Promise<void>;
82
+ invokeBehaviorCommand<T extends ClusterType, C extends keyof ClusterType.CommandsOf<T>>(cluster: T, command: C, params?: ClusterType.CommandsOf<T>[C] extends {
83
+ requestSchema: infer S extends import('@matter/types/tlv').TlvSchema<unknown>;
84
+ } ? import('@matter/types/tlv').TypeFromSchema<S> : never): Promise<void>;
85
+ invokeBehaviorCommand(cluster: ClusterId | string, command: keyof MatterbridgeEndpointCommands, params?: Record<string, boolean | number | bigint | string | object | null>): Promise<void>;
74
86
  addRequiredClusterServers(): MatterbridgeEndpoint;
75
87
  addOptionalClusterServers(): MatterbridgeEndpoint;
76
88
  getAllClusterServers(): Behavior.Type[];
@@ -62,7 +62,7 @@ import { VendorId } from '@matter/types/datatype';
62
62
  import { inspectError } from '@matterbridge/utils/error';
63
63
  import { isValidNumber, isValidObject, isValidString } from '@matterbridge/utils/validate';
64
64
  import { AnsiLogger, CYAN, db, debugStringify, hk, or, YELLOW, zb } from 'node-ansi-logger';
65
- import { MatterbridgeActivatedCarbonFilterMonitoringServer, MatterbridgeBooleanStateConfigurationServer, MatterbridgeColorControlServer, MatterbridgeDeviceEnergyManagementModeServer, MatterbridgeDeviceEnergyManagementServer, MatterbridgeDoorLockServer, MatterbridgeEnhancedColorControlServer, MatterbridgeFanControlServer, MatterbridgeHepaFilterMonitoringServer, MatterbridgeIdentifyServer, MatterbridgeLevelControlServer, MatterbridgeLiftTiltWindowCoveringServer, MatterbridgeLiftWindowCoveringServer, MatterbridgeModeSelectServer, MatterbridgeOnOffServer, MatterbridgeOperationalStateServer, MatterbridgePowerSourceServer, MatterbridgePresetThermostatServer, MatterbridgeServer, MatterbridgeSmokeCoAlarmServer, MatterbridgeSwitchServer, MatterbridgeThermostatServer, MatterbridgeValveConfigurationAndControlServer, } from './matterbridgeBehaviors.js';
65
+ import { MatterbridgeActivatedCarbonFilterMonitoringServer, MatterbridgeBooleanStateConfigurationServer, MatterbridgeColorControlServer, MatterbridgeDeviceEnergyManagementModeServer, MatterbridgeDeviceEnergyManagementServer, MatterbridgeDoorLockServer, MatterbridgeEnhancedColorControlServer, MatterbridgeFanControlServer, MatterbridgeHepaFilterMonitoringServer, MatterbridgeIdentifyServer, MatterbridgeLevelControlServer, MatterbridgeLiftTiltWindowCoveringServer, MatterbridgeLiftWindowCoveringServer, MatterbridgeModeSelectServer, MatterbridgeOnOffServer, MatterbridgeOperationalStateServer, MatterbridgePowerSourceServer, MatterbridgePresetThermostatServer, MatterbridgeServer, MatterbridgeSmokeCoAlarmServer, MatterbridgeSwitchServer, MatterbridgeThermostatServer, MatterbridgeValveConfigurationAndControlServer, } from './matterbridgeBehaviorsServer.js';
66
66
  import { addClusterServers, addFixedLabel, addOptionalClusterServers, addRequiredClusterServers, addUserLabel, checkNotLatinCharacters, createUniqueId, featuresFor, generateUniqueId, getApparentElectricalPowerMeasurementClusterServer, getAttribute, getAttributeId, getBehavior, getBehaviourTypesFromClusterClientIds, getBehaviourTypesFromClusterServerIds, getCluster, getClusterId, getDefaultDeviceEnergyManagementClusterServer, getDefaultDeviceEnergyManagementModeClusterServer, getDefaultElectricalEnergyMeasurementClusterServer, getDefaultElectricalPowerMeasurementClusterServer, getDefaultFlowMeasurementClusterServer, getDefaultIlluminanceMeasurementClusterServer, getDefaultOccupancySensingClusterServer, getDefaultOperationalStateClusterServer, getDefaultPowerSourceBatteryClusterServer, getDefaultPowerSourceRechargeableBatteryClusterServer, getDefaultPowerSourceReplaceableBatteryClusterServer, getDefaultPowerSourceWiredClusterServer, getDefaultPressureMeasurementClusterServer, getDefaultRelativeHumidityMeasurementClusterServer, getDefaultTemperatureMeasurementClusterServer, invokeBehaviorCommand, lowercaseFirstLetter, setAttribute, setCluster, subscribeAttribute, triggerEvent, updateAttribute, } from './matterbridgeEndpointHelpers.js';
67
67
  const MATTERBRIDGE_ENDPOINT_BRAND = Symbol('MatterbridgeEndpoint.brand');
68
68
  export function isMatterbridgeEndpoint(value) {
@@ -910,7 +910,7 @@ export class MatterbridgeEndpoint extends Endpoint {
910
910
  ...(occupied !== undefined ? { unoccupiedCoolingSetpoint: unoccupiedCoolingSetpoint !== undefined ? unoccupiedCoolingSetpoint * 100 : 2700 } : {}),
911
911
  ...(occupied !== undefined ? { occupancy: { occupied } } : {}),
912
912
  ...(occupied !== undefined ? { externallyMeasuredOccupancy: true } : {}),
913
- numberOfPresets: Array.isArray(presetsList) ? presetsList.length : 0,
913
+ numberOfPresets: Math.max(Array.isArray(presetsList) ? presetsList.length : 0, 10),
914
914
  activePresetHandle: activePresetHandle !== undefined ? Uint8Array.from([activePresetHandle]) : null,
915
915
  presets: (presetsList ?? []).map((p) => ({
916
916
  presetHandle: Uint8Array.from(p.presetHandle || [0]),
@@ -18,7 +18,7 @@ import { TemperatureMeasurement } from '@matter/types/clusters/temperature-measu
18
18
  import { ClusterId, VendorId } from '@matter/types/datatype';
19
19
  import { MeasurementType, Semtag } from '@matter/types/globals';
20
20
  import { AnsiLogger } from 'node-ansi-logger';
21
- import { MatterbridgeDeviceEnergyManagementModeServer, MatterbridgeDeviceEnergyManagementServer, MatterbridgeOperationalStateServer, MatterbridgePowerSourceServer } from './matterbridgeBehaviors.js';
21
+ import { MatterbridgeDeviceEnergyManagementModeServer, MatterbridgeDeviceEnergyManagementServer, MatterbridgeOperationalStateServer, MatterbridgePowerSourceServer } from './matterbridgeBehaviorsServer.js';
22
22
  import { MatterbridgeEndpoint } from './matterbridgeEndpoint.js';
23
23
  import { MatterbridgeEndpointCommands } from './matterbridgeEndpointTypes.js';
24
24
  export declare function capitalizeFirstLetter(name: string): string;
@@ -83,7 +83,7 @@ import { deepCopy } from '@matterbridge/utils/deep-copy';
83
83
  import { deepEqual } from '@matterbridge/utils/deep-equal';
84
84
  import { isValidArray } from '@matterbridge/utils/validate';
85
85
  import { BLUE, CYAN, db, debugStringify, er, hk, or, YELLOW, zb } from 'node-ansi-logger';
86
- import { MatterbridgeBooleanStateConfigurationServer, MatterbridgeColorControlServer, MatterbridgeDeviceEnergyManagementModeServer, MatterbridgeDeviceEnergyManagementServer, MatterbridgeDoorLockServer, MatterbridgeFanControlServer, MatterbridgeIdentifyServer, MatterbridgeLevelControlServer, MatterbridgeLiftWindowCoveringServer, MatterbridgeModeSelectServer, MatterbridgeOnOffServer, MatterbridgeOperationalStateServer, MatterbridgePowerSourceServer, MatterbridgeSmokeCoAlarmServer, MatterbridgeThermostatServer, MatterbridgeValveConfigurationAndControlServer, } from './matterbridgeBehaviors.js';
86
+ import { MatterbridgeBooleanStateConfigurationServer, MatterbridgeColorControlServer, MatterbridgeDeviceEnergyManagementModeServer, MatterbridgeDeviceEnergyManagementServer, MatterbridgeDoorLockServer, MatterbridgeFanControlServer, MatterbridgeIdentifyServer, MatterbridgeLevelControlServer, MatterbridgeLiftWindowCoveringServer, MatterbridgeModeSelectServer, MatterbridgeOnOffServer, MatterbridgeOperationalStateServer, MatterbridgePowerSourceServer, MatterbridgeSmokeCoAlarmServer, MatterbridgeThermostatServer, MatterbridgeValveConfigurationAndControlServer, } from './matterbridgeBehaviorsServer.js';
87
87
  export function capitalizeFirstLetter(name) {
88
88
  if (!name)
89
89
  return name;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@matterbridge/core",
3
- "version": "3.6.1-dev-20260313-1c1c125",
3
+ "version": "3.6.1-dev-20260314-9cef6d3",
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.6.1-dev-20260313-1c1c125",
126
- "@matterbridge/thread": "3.6.1-dev-20260313-1c1c125",
127
- "@matterbridge/types": "3.6.1-dev-20260313-1c1c125",
128
- "@matterbridge/utils": "3.6.1-dev-20260313-1c1c125",
125
+ "@matterbridge/dgram": "3.6.1-dev-20260314-9cef6d3",
126
+ "@matterbridge/thread": "3.6.1-dev-20260314-9cef6d3",
127
+ "@matterbridge/types": "3.6.1-dev-20260314-9cef6d3",
128
+ "@matterbridge/utils": "3.6.1-dev-20260314-9cef6d3",
129
129
  "archiver": "7.0.1",
130
130
  "express": "5.2.1",
131
131
  "glob": "13.0.6",