@matterbridge/core 3.7.10 → 3.8.0-dev-20260524-eed6b4a

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.
Files changed (52) hide show
  1. package/dist/behaviors/activatedCarbonFilterMonitoringServer.d.ts +5 -2
  2. package/dist/behaviors/bindingServer.js +0 -2
  3. package/dist/behaviors/booleanStateConfigurationServer.d.ts +6 -1
  4. package/dist/behaviors/colorControlServer.d.ts +20 -774
  5. package/dist/behaviors/deviceEnergyManagementServer.d.ts +9 -299
  6. package/dist/behaviors/doorLockServer.d.ts +29 -47
  7. package/dist/behaviors/doorLockServer.js +11 -299
  8. package/dist/behaviors/fanControlServer.d.ts +8 -1
  9. package/dist/behaviors/hepaFilterMonitoringServer.d.ts +5 -2
  10. package/dist/behaviors/smokeCoAlarmServer.d.ts +4 -77
  11. package/dist/behaviors/thermostatServer.d.ts +20 -722
  12. package/dist/behaviors/valveConfigurationAndControlServer.d.ts +4 -1
  13. package/dist/behaviors/windowCoveringServer.d.ts +28 -564
  14. package/dist/clusters/closure-control.d.ts +130 -620
  15. package/dist/clusters/closure-control.js +15 -170
  16. package/dist/clusters/closure-dimension.d.ts +148 -814
  17. package/dist/clusters/closure-dimension.js +15 -202
  18. package/dist/clusters/export.d.ts +1 -3
  19. package/dist/clusters/export.js +1 -3
  20. package/dist/clusters/soil-measurement.d.ts +31 -31
  21. package/dist/clusters/soil-measurement.js +29 -19
  22. package/dist/devices/closure.d.ts +14 -291
  23. package/dist/devices/closure.js +6 -13
  24. package/dist/devices/closurePanel.d.ts +13 -370
  25. package/dist/devices/closurePanel.js +9 -15
  26. package/dist/devices/evse.d.ts +7 -1
  27. package/dist/devices/heatPump.js +5 -5
  28. package/dist/devices/irrigationSystem.js +2 -2
  29. package/dist/devices/microwaveOven.d.ts +5 -76
  30. package/dist/devices/roboticVacuumCleaner.js +5 -5
  31. package/dist/devices/soilSensor.d.ts +0 -15
  32. package/dist/devices/soilSensor.js +4 -20
  33. package/dist/devices/temperatureControl.d.ts +10 -130
  34. package/dist/frontend.js +9 -9
  35. package/dist/helpers.js +0 -8
  36. package/dist/jestutils/jestBroadcastServerSpy.d.ts +2 -2
  37. package/dist/jestutils/jestMatterTest.js +4 -4
  38. package/dist/jestutils/jestMatterbridgeEndpointSpy.d.ts +34 -37
  39. package/dist/jestutils/jestMatterbridgePlatformSpy.d.ts +4 -4
  40. package/dist/jestutils/jestMatterbridgeTest.js +1 -1
  41. package/dist/matter/export.d.ts +11 -0
  42. package/dist/matter/export.js +11 -0
  43. package/dist/matterbridge.d.ts +3 -0
  44. package/dist/matterbridge.js +10 -4
  45. package/dist/matterbridgeDeviceTypes.d.ts +15 -0
  46. package/dist/matterbridgeDeviceTypes.js +305 -162
  47. package/dist/matterbridgeEndpoint.d.ts +35 -25
  48. package/dist/matterbridgeEndpoint.js +6 -7
  49. package/dist/matterbridgeEndpointCommandHandler.d.ts +3 -59
  50. package/dist/matterbridgeEndpointHelpers.d.ts +83 -1382
  51. package/dist/matterbridgeEndpointHelpers.js +20 -5
  52. package/package.json +8 -8
@@ -1,24 +1,8 @@
1
- import { AttributeElement, ClusterElement, ClusterModel } from '@matter/main/model';
2
- import { ClusterBehavior } from '@matter/node';
1
+ import { SoilMeasurementServer } from '@matter/node/behaviors/soil-measurement';
2
+ import { SoilMeasurement } from '@matter/types/clusters/soil-measurement';
3
3
  import { MeasurementType } from '@matter/types/globals';
4
- import { SoilMeasurement } from '../clusters/soil-measurement.js';
5
4
  import { powerSource, soilSensor } from '../matterbridgeDeviceTypes.js';
6
5
  import { MatterbridgeEndpoint } from '../matterbridgeEndpoint.js';
7
- const SoilMeasurementSchema = ClusterElement({
8
- id: SoilMeasurement.Cluster.id,
9
- name: SoilMeasurement.Cluster.name,
10
- classification: 'application',
11
- }, AttributeElement({ id: 0xfffd, name: 'ClusterRevision', type: 'ClusterRevision', conformance: 'M', default: SoilMeasurement.Cluster.revision }), AttributeElement({ id: 0xfffc, name: 'FeatureMap', type: 'FeatureMap', conformance: 'M', default: 0 }), AttributeElement({ id: 0x0000, name: 'soilMoistureMeasurementLimits', type: 'MeasurementAccuracyStruct', conformance: 'M' }), AttributeElement({
12
- id: 0x0001,
13
- name: 'soilMoistureMeasuredValue',
14
- type: 'percent',
15
- conformance: 'M',
16
- quality: 'X',
17
- default: null,
18
- }));
19
- const SoilMeasurementBehavior = ClusterBehavior.for(SoilMeasurement.Cluster, new ClusterModel(SoilMeasurementSchema));
20
- export class SoilMeasurementServer extends SoilMeasurementBehavior {
21
- }
22
6
  export class SoilSensor extends MatterbridgeEndpoint {
23
7
  constructor(name, serial, options = {}) {
24
8
  super([soilSensor, powerSource], { id: `${name.replaceAll(' ', '')}-${serial.replaceAll(' ', '')}` });
@@ -44,9 +28,9 @@ export class SoilSensor extends MatterbridgeEndpoint {
44
28
  this.createDefaultTemperatureMeasurementClusterServer(options.temperatureMeasuredValue);
45
29
  }
46
30
  async setSoilMoistureMeasuredValue(value) {
47
- await this.setAttribute(SoilMeasurement.Cluster.id, 'soilMoistureMeasuredValue', value);
31
+ await this.setAttribute(SoilMeasurement.id, 'soilMoistureMeasuredValue', value);
48
32
  }
49
33
  getSoilMoistureMeasuredValue() {
50
- return this.getAttribute(SoilMeasurement.Cluster, 'soilMoistureMeasuredValue');
34
+ return this.getAttribute(SoilMeasurement, 'soilMoistureMeasuredValue');
51
35
  }
52
36
  }
@@ -3,140 +3,20 @@ import { TemperatureControl } from '@matter/types/clusters/temperature-control';
3
3
  import { MatterbridgeEndpoint } from '../matterbridgeEndpoint.js';
4
4
  export declare function createLevelTemperatureControlClusterServer(endpoint: MatterbridgeEndpoint, selectedTemperatureLevel?: number, supportedTemperatureLevels?: string[]): MatterbridgeEndpoint;
5
5
  export declare function createNumberTemperatureControlClusterServer(endpoint: MatterbridgeEndpoint, temperatureSetpoint?: number, minTemperature?: number, maxTemperature?: number, step?: number): MatterbridgeEndpoint;
6
- declare const MatterbridgeLevelTemperatureControlServer_base: import("@matter/node").ClusterBehavior.Type<import("@matter/types").ClusterComposer.WithFeatures<import("@matter/types").ClusterType.Of<{
7
- readonly id: 86;
8
- readonly name: "TemperatureControl";
9
- readonly revision: 1;
10
- readonly features: {
11
- readonly temperatureNumber: import("@matter/types").BitFlag;
12
- readonly temperatureLevel: import("@matter/types").BitFlag;
13
- readonly temperatureStep: import("@matter/types").BitFlag;
14
- };
15
- readonly commands: {
16
- readonly setTemperature: import("@matter/types").Command<import("@matter/types").TypeFromFields<{
17
- targetTemperature: import("@matter/types").OptionalFieldType<number>;
18
- targetTemperatureLevel: import("@matter/types").OptionalFieldType<number>;
19
- }>, void, any>;
20
- };
21
- readonly extensions: readonly [{
22
- readonly flags: {
23
- readonly temperatureNumber: true;
24
- };
25
- readonly component: {
26
- readonly attributes: {
27
- readonly temperatureSetpoint: import("@matter/types").Attribute<number, any>;
28
- readonly minTemperature: import("@matter/types").FixedAttribute<number, any>;
29
- readonly maxTemperature: import("@matter/types").FixedAttribute<number, any>;
30
- };
31
- };
32
- }, {
33
- readonly flags: {
34
- readonly temperatureStep: true;
35
- };
36
- readonly component: {
37
- readonly attributes: {
38
- readonly step: import("@matter/types").FixedAttribute<number, any>;
39
- };
40
- };
41
- }, {
42
- readonly flags: {
43
- readonly temperatureLevel: true;
44
- };
45
- readonly component: {
46
- readonly attributes: {
47
- readonly selectedTemperatureLevel: import("@matter/types").Attribute<number, any>;
48
- readonly supportedTemperatureLevels: import("@matter/types").Attribute<string[], any>;
49
- };
50
- };
51
- }, {
52
- readonly flags: {
53
- readonly temperatureStep: true;
54
- readonly temperatureNumber: false;
55
- };
56
- readonly component: false;
57
- }, {
58
- readonly flags: {
59
- readonly temperatureNumber: true;
60
- readonly temperatureLevel: true;
61
- };
62
- readonly component: false;
63
- }, {
64
- readonly flags: {
65
- readonly temperatureNumber: false;
66
- readonly temperatureLevel: false;
67
- };
68
- readonly component: false;
69
- }];
70
- }>, readonly [TemperatureControl.Feature.TemperatureLevel]>, typeof TemperatureControlServer, import("@matter/node/behaviors/temperature-control").TemperatureControlInterface>;
6
+ declare const MatterbridgeLevelTemperatureControlServer_base: import("@matter/node").ClusterBehavior.Type<typeof TemperatureControlServer, import("@matter/types").ClusterType.WithSupportedFeatures<TemperatureControl, {
7
+ temperatureNumber: false;
8
+ temperatureLevel: true;
9
+ temperatureStep: false;
10
+ }>, import("@matter/types").ClusterType.Concrete, new () => {}, "temperatureControl">;
71
11
  export declare class MatterbridgeLevelTemperatureControlServer extends MatterbridgeLevelTemperatureControlServer_base {
72
12
  initialize(): void;
73
13
  setTemperature(request: TemperatureControl.SetTemperatureRequest): Promise<void>;
74
14
  }
75
- declare const MatterbridgeNumberTemperatureControlServer_base: import("@matter/node").ClusterBehavior.Type<import("@matter/types").ClusterComposer.WithFeatures<import("@matter/types").ClusterType.Of<{
76
- readonly id: 86;
77
- readonly name: "TemperatureControl";
78
- readonly revision: 1;
79
- readonly features: {
80
- readonly temperatureNumber: import("@matter/types").BitFlag;
81
- readonly temperatureLevel: import("@matter/types").BitFlag;
82
- readonly temperatureStep: import("@matter/types").BitFlag;
83
- };
84
- readonly commands: {
85
- readonly setTemperature: import("@matter/types").Command<import("@matter/types").TypeFromFields<{
86
- targetTemperature: import("@matter/types").OptionalFieldType<number>;
87
- targetTemperatureLevel: import("@matter/types").OptionalFieldType<number>;
88
- }>, void, any>;
89
- };
90
- readonly extensions: readonly [{
91
- readonly flags: {
92
- readonly temperatureNumber: true;
93
- };
94
- readonly component: {
95
- readonly attributes: {
96
- readonly temperatureSetpoint: import("@matter/types").Attribute<number, any>;
97
- readonly minTemperature: import("@matter/types").FixedAttribute<number, any>;
98
- readonly maxTemperature: import("@matter/types").FixedAttribute<number, any>;
99
- };
100
- };
101
- }, {
102
- readonly flags: {
103
- readonly temperatureStep: true;
104
- };
105
- readonly component: {
106
- readonly attributes: {
107
- readonly step: import("@matter/types").FixedAttribute<number, any>;
108
- };
109
- };
110
- }, {
111
- readonly flags: {
112
- readonly temperatureLevel: true;
113
- };
114
- readonly component: {
115
- readonly attributes: {
116
- readonly selectedTemperatureLevel: import("@matter/types").Attribute<number, any>;
117
- readonly supportedTemperatureLevels: import("@matter/types").Attribute<string[], any>;
118
- };
119
- };
120
- }, {
121
- readonly flags: {
122
- readonly temperatureStep: true;
123
- readonly temperatureNumber: false;
124
- };
125
- readonly component: false;
126
- }, {
127
- readonly flags: {
128
- readonly temperatureNumber: true;
129
- readonly temperatureLevel: true;
130
- };
131
- readonly component: false;
132
- }, {
133
- readonly flags: {
134
- readonly temperatureNumber: false;
135
- readonly temperatureLevel: false;
136
- };
137
- readonly component: false;
138
- }];
139
- }>, readonly [TemperatureControl.Feature.TemperatureNumber, TemperatureControl.Feature.TemperatureStep]>, typeof TemperatureControlServer, import("@matter/node/behaviors/temperature-control").TemperatureControlInterface>;
15
+ declare const MatterbridgeNumberTemperatureControlServer_base: import("@matter/node").ClusterBehavior.Type<typeof TemperatureControlServer, import("@matter/types").ClusterType.WithSupportedFeatures<TemperatureControl, {
16
+ temperatureNumber: true;
17
+ temperatureLevel: false;
18
+ temperatureStep: true;
19
+ }>, import("@matter/types").ClusterType.Concrete, new () => {}, "temperatureControl">;
140
20
  export declare class MatterbridgeNumberTemperatureControlServer extends MatterbridgeNumberTemperatureControlServer_base {
141
21
  initialize(): void;
142
22
  setTemperature(request: TemperatureControl.SetTemperatureRequest): Promise<void>;
package/dist/frontend.js CHANGED
@@ -896,9 +896,9 @@ export class Frontend extends EventEmitter {
896
896
  matterMdnsInterface: this.matterbridge.mdnsInterface,
897
897
  matterIpv4Address: this.matterbridge.ipv4Address,
898
898
  matterIpv6Address: this.matterbridge.ipv6Address,
899
- matterPort: this.matterbridge.port || 5540,
900
- matterDiscriminator: this.matterbridge.discriminator,
901
- matterPasscode: this.matterbridge.passcode,
899
+ matterPort: this.matterbridge.initialPort || 5540,
900
+ matterDiscriminator: this.matterbridge.initialDiscriminator,
901
+ matterPasscode: this.matterbridge.initialPasscode,
902
902
  readOnly: this.readOnly,
903
903
  shellyBoard: this.shellyBoard,
904
904
  shellySysUpdate: this.shellySysUpdate,
@@ -1826,7 +1826,7 @@ export class Frontend extends EventEmitter {
1826
1826
  const port = isValidString(data.params.value) ? parseInt(data.params.value) : 0;
1827
1827
  if (isValidNumber(port, 5540, 5600)) {
1828
1828
  this.log.debug(`Set matter commissioning port to ${CYAN}${port}${db}`);
1829
- this.matterbridge.port = port;
1829
+ this.matterbridge.port = this.matterbridge.initialPort = port;
1830
1830
  await this.matterbridge.nodeContext?.set('matterport', port);
1831
1831
  this.wssSendRestartRequired();
1832
1832
  sendResponse({ id: data.id, method: data.method, src: 'Matterbridge', dst: data.src, success: true });
@@ -1834,7 +1834,7 @@ export class Frontend extends EventEmitter {
1834
1834
  }
1835
1835
  else {
1836
1836
  this.log.debug(`Reset matter commissioning port to ${CYAN}5540${db}`);
1837
- this.matterbridge.port = 5540;
1837
+ this.matterbridge.port = this.matterbridge.initialPort = 5540;
1838
1838
  await this.matterbridge.nodeContext?.set('matterport', 5540);
1839
1839
  this.wssSendRestartRequired();
1840
1840
  sendResponse({ id: data.id, method: data.method, src: 'Matterbridge', dst: data.src, error: 'Invalid value: reset matter commissioning port to default 5540' });
@@ -1845,7 +1845,7 @@ export class Frontend extends EventEmitter {
1845
1845
  const discriminator = isValidString(data.params.value) ? parseInt(data.params.value) : 0;
1846
1846
  if (isValidNumber(discriminator, 0, 4095)) {
1847
1847
  this.log.debug(`Set matter commissioning discriminator to ${CYAN}${discriminator}${db}`);
1848
- this.matterbridge.discriminator = discriminator;
1848
+ this.matterbridge.discriminator = this.matterbridge.initialDiscriminator = discriminator;
1849
1849
  await this.matterbridge.nodeContext?.set('matterdiscriminator', discriminator);
1850
1850
  this.wssSendRestartRequired();
1851
1851
  sendResponse({ id: data.id, method: data.method, src: 'Matterbridge', dst: data.src, success: true });
@@ -1853,7 +1853,7 @@ export class Frontend extends EventEmitter {
1853
1853
  }
1854
1854
  else {
1855
1855
  this.log.debug(`Reset matter commissioning discriminator to ${CYAN}undefined${db}`);
1856
- this.matterbridge.discriminator = undefined;
1856
+ this.matterbridge.discriminator = this.matterbridge.initialDiscriminator = undefined;
1857
1857
  await this.matterbridge.nodeContext?.remove('matterdiscriminator');
1858
1858
  this.wssSendRestartRequired();
1859
1859
  sendResponse({
@@ -1869,7 +1869,7 @@ export class Frontend extends EventEmitter {
1869
1869
  case 'setmatterpasscode':
1870
1870
  const passcode = isValidString(data.params.value) ? parseInt(data.params.value) : 0;
1871
1871
  if (isValidNumber(passcode, 1, 99999998) && CommissioningOptions.FORBIDDEN_PASSCODES.includes(passcode) === false) {
1872
- this.matterbridge.passcode = passcode;
1872
+ this.matterbridge.passcode = this.matterbridge.initialPasscode = passcode;
1873
1873
  this.log.debug(`Set matter commissioning passcode to ${CYAN}${passcode}${db}`);
1874
1874
  await this.matterbridge.nodeContext?.set('matterpasscode', passcode);
1875
1875
  this.wssSendRestartRequired();
@@ -1878,7 +1878,7 @@ export class Frontend extends EventEmitter {
1878
1878
  }
1879
1879
  else {
1880
1880
  this.log.debug(`Reset matter commissioning passcode to ${CYAN}undefined${db}`);
1881
- this.matterbridge.passcode = undefined;
1881
+ this.matterbridge.passcode = this.matterbridge.initialPasscode = undefined;
1882
1882
  await this.matterbridge.nodeContext?.remove('matterpasscode');
1883
1883
  this.wssSendRestartRequired();
1884
1884
  sendResponse({
package/dist/helpers.js CHANGED
@@ -9,8 +9,6 @@ import { MountedOnOffControlDevice } from '@matter/node/devices/mounted-on-off-c
9
9
  import { OnOffLightDevice } from '@matter/node/devices/on-off-light';
10
10
  import { OnOffLightSwitchDevice } from '@matter/node/devices/on-off-light-switch';
11
11
  import { OnOffPlugInUnitDevice } from '@matter/node/devices/on-off-plug-in-unit';
12
- import { Identify } from '@matter/types/clusters/identify';
13
- import { OnOff } from '@matter/types/clusters/on-off';
14
12
  import { VendorId } from '@matter/types/datatype';
15
13
  import { hasParameter } from '@matterbridge/utils/cli';
16
14
  import { doorLockDevice } from './matterbridgeDeviceTypes.js';
@@ -51,12 +49,6 @@ export async function addVirtualDevice(aggregatorEndpoint, name, type, callback)
51
49
  });
52
50
  await aggregatorEndpoint.add(device);
53
51
  await device.construction.ready;
54
- if (type === 'switch') {
55
- await device.act(async (agent) => {
56
- const descriptor = await agent.load(DescriptorServer);
57
- descriptor.state.clientList.push(Identify.Cluster.id, OnOff.Cluster.id);
58
- });
59
- }
60
52
  if (type === 'mounted_switch') {
61
53
  await device.act(async (agent) => {
62
54
  const descriptor = await agent.load(DescriptorServer);
@@ -8,5 +8,5 @@ export declare const broadcastBroadcastServerSpy: import("jest-mock").SpiedFunct
8
8
  export declare const requestBroadcastServerSpy: import("jest-mock").SpiedFunction<(<K extends keyof import("@matterbridge/types").WorkerMessageTypes>(message: import("@matterbridge/types").WorkerMessageRequest<K>) => void)>;
9
9
  export declare const respondBroadcastServerSpy: import("jest-mock").SpiedFunction<(<K extends keyof import("@matterbridge/types").WorkerMessageTypes>(message: import("@matterbridge/types").WorkerMessageResponse<K>) => void)>;
10
10
  export declare const fetchBroadcastServerSpy: import("jest-mock").SpiedFunction<(<T extends import("@matterbridge/types").WorkerMessageRequestAny, K extends Extract<keyof import("@matterbridge/types").WorkerMessageTypes, T["type"]>>(message: T, timeout?: number) => Promise<import("@matterbridge/types").WorkerMessageResponseSuccess<K>>)>;
11
- export declare const broadcastMessageHandlerBroadcastServerSpy: import("jest-mock").SpiedSetter<import("@matterbridge/types").WorkerSrcType> | import("jest-mock").SpiedGetter<import("@matterbridge/types").WorkerSrcType>;
12
- export declare const broadcastMessageErrorHandlerBroadcastServerSpy: import("jest-mock").SpiedSetter<import("@matterbridge/types").WorkerSrcType> | import("jest-mock").SpiedGetter<import("@matterbridge/types").WorkerSrcType>;
11
+ export declare const broadcastMessageHandlerBroadcastServerSpy: import("jest-mock").SpiedGetter<import("@matterbridge/types").WorkerSrcType> | import("jest-mock").SpiedSetter<import("@matterbridge/types").WorkerSrcType>;
12
+ export declare const broadcastMessageErrorHandlerBroadcastServerSpy: import("jest-mock").SpiedGetter<import("@matterbridge/types").WorkerSrcType> | import("jest-mock").SpiedSetter<import("@matterbridge/types").WorkerSrcType>;
@@ -57,10 +57,10 @@ export function getPlatformMatterbridge() {
57
57
  matterbridgePluginDirectory: path.join(HOMEDIR, 'Matterbridge'),
58
58
  matterbridgeCertDirectory: path.join(HOMEDIR, '.mattercert'),
59
59
  globalModulesDirectory: path.join(HOMEDIR, 'node_modules'),
60
- matterbridgeVersion: '3.7.10',
61
- matterbridgeLatestVersion: '3.7.10',
62
- matterbridgeDevVersion: '3.7.10',
63
- frontendVersion: '3.7.10',
60
+ matterbridgeVersion: '3.8.0',
61
+ matterbridgeLatestVersion: '3.8.0',
62
+ matterbridgeDevVersion: '3.8.0',
63
+ frontendVersion: '3.8.0',
64
64
  bridgeMode: '',
65
65
  restartMode: '',
66
66
  virtualMode: 'mounted_switch',
@@ -1,57 +1,54 @@
1
1
  export declare const setClusterMatterbridgeEndpointSpy: import("jest-mock").SpiedFunction<{
2
2
  <T extends import("@matter/node").Behavior.Type>(cluster: T, value: import("@matter/node").Behavior.StateOf<T>, log?: import("node-ansi-logger").AnsiLogger): Promise<boolean>;
3
- <T extends import("@matter/types").ClusterType>(cluster: T, value: import("@matter/types").ClusterType.AttributeValues<T>, log?: import("node-ansi-logger").AnsiLogger): Promise<boolean>;
3
+ <T extends import("@matter/types").ClusterType>(cluster: T, value: T["Typing"] extends {
4
+ Attributes: infer Attributes;
5
+ } ? Attributes : {}, log?: import("node-ansi-logger").AnsiLogger): Promise<boolean>;
4
6
  (cluster: import("@matter/types").ClusterId | string, value: Record<string, boolean | number | bigint | string | object | undefined | null>, log?: import("node-ansi-logger").AnsiLogger): Promise<boolean>;
5
7
  }>;
6
8
  export declare const setAttributeMatterbridgeEndpointSpy: import("jest-mock").SpiedFunction<{
7
9
  <T extends import("@matter/node").Behavior.Type, A extends keyof import("@matter/node").Behavior.StateOf<T>>(clusterId: T, attribute: A, value: import("@matter/node").Behavior.StateOf<T>[A], log?: import("node-ansi-logger").AnsiLogger): Promise<boolean>;
8
- <T extends import("@matter/types").ClusterType, A extends keyof import("@matter/types").ClusterType.AttributeValues<T>>(clusterId: T, attribute: A, value: import("@matter/types").ClusterType.AttributeValues<T>[A], log?: import("node-ansi-logger").AnsiLogger): Promise<boolean>;
10
+ <T extends import("@matter/types").ClusterType, A extends keyof (T["Typing"] extends {
11
+ Attributes: infer Attributes;
12
+ } ? Attributes : {})>(clusterId: T, attribute: A, value: (T["Typing"] extends {
13
+ Attributes: infer Attributes;
14
+ } ? Attributes : {})[A], log?: import("node-ansi-logger").AnsiLogger): Promise<boolean>;
9
15
  (clusterId: import("@matter/types").ClusterId | string, attribute: string, value: boolean | number | bigint | string | object | null, log?: import("node-ansi-logger").AnsiLogger): Promise<boolean>;
10
16
  }>;
11
17
  export declare const updateAttributeMatterbridgeEndpointSpy: import("jest-mock").SpiedFunction<{
12
18
  <T extends import("@matter/node").Behavior.Type, A extends keyof import("@matter/node").Behavior.StateOf<T>>(cluster: T, attribute: A, value: import("@matter/node").Behavior.StateOf<T>[A], log?: import("node-ansi-logger").AnsiLogger): Promise<boolean>;
13
- <T extends import("@matter/types").ClusterType, A extends keyof import("@matter/types").ClusterType.AttributeValues<T>>(cluster: T, attribute: A, value: import("@matter/types").ClusterType.AttributeValues<T>[A], log?: import("node-ansi-logger").AnsiLogger): Promise<boolean>;
19
+ <T extends import("@matter/types").ClusterType, A extends keyof (T["Typing"] extends {
20
+ Attributes: infer Attributes;
21
+ } ? Attributes : {})>(cluster: T, attribute: A, value: (T["Typing"] extends {
22
+ Attributes: infer Attributes;
23
+ } ? Attributes : {})[A], log?: import("node-ansi-logger").AnsiLogger): Promise<boolean>;
14
24
  (cluster: import("@matter/types").ClusterId | string, attribute: string, value: boolean | number | bigint | string | object | null, log?: import("node-ansi-logger").AnsiLogger): Promise<boolean>;
15
25
  }>;
16
26
  export declare const subscribeAttributeMatterbridgeEndpointSpy: import("jest-mock").SpiedFunction<{
17
27
  <T extends import("@matter/node").Behavior.Type, A extends keyof import("@matter/node").Behavior.StateOf<T>>(cluster: T, attribute: A, listener: (newValue: import("@matter/node").Behavior.StateOf<T>[A], oldValue: import("@matter/node").Behavior.StateOf<T>[A], context: import("@matter/node").ActionContext) => void, log?: import("node-ansi-logger").AnsiLogger): Promise<boolean>;
18
- <T extends import("@matter/types").ClusterType, A extends keyof import("@matter/types").ClusterType.AttributeValues<T>>(cluster: T, attribute: A, listener: (newValue: import("@matter/types").ClusterType.AttributeValues<T>[A], oldValue: import("@matter/types").ClusterType.AttributeValues<T>[A], context: import("@matter/node").ActionContext) => void, log?: import("node-ansi-logger").AnsiLogger): Promise<boolean>;
28
+ <T extends import("@matter/types").ClusterType, A extends keyof (T["Typing"] extends {
29
+ Attributes: infer Attributes;
30
+ } ? Attributes : {})>(cluster: T, attribute: A, listener: (newValue: (T["Typing"] extends {
31
+ Attributes: infer Attributes;
32
+ } ? Attributes : {})[A], oldValue: (T["Typing"] extends {
33
+ Attributes: infer Attributes;
34
+ } ? Attributes : {})[A], context: import("@matter/node").ActionContext) => void, log?: import("node-ansi-logger").AnsiLogger): Promise<boolean>;
19
35
  (cluster: import("@matter/types").ClusterId | string, attribute: string, listener: (newValue: any, oldValue: any, context: import("@matter/node").ActionContext) => void, log?: import("node-ansi-logger").AnsiLogger): Promise<boolean>;
20
36
  }>;
21
37
  export declare const triggerEventMatterbridgeEndpointSpy: import("jest-mock").SpiedFunction<{
22
- <T extends import("@matter/node").Behavior.Type, E extends keyof import("@matter/types").ClusterType.EventsOf<T extends {
23
- cluster: infer C extends import("@matter/types").ClusterType;
24
- } ? C : import("@matter/types").ClusterType.Of<{
25
- readonly id: 0;
26
- readonly revision: 0;
27
- readonly name: "Unknown";
28
- readonly attributes: {};
29
- readonly commands: {};
30
- readonly events: {};
31
- }>> & string>(cluster: T, event: E, payload: E extends keyof import("@matter/types").ClusterType.EventsOf<T extends {
32
- cluster: infer C extends import("@matter/types").ClusterType;
33
- } ? C : import("@matter/types").ClusterType.Of<{
34
- readonly id: 0;
35
- readonly revision: 0;
36
- readonly name: "Unknown";
37
- readonly attributes: {};
38
- readonly commands: {};
39
- readonly events: {};
40
- }>> ? import("@matter/types").ClusterType.EventsOf<T extends {
41
- cluster: infer C extends import("@matter/types").ClusterType;
42
- } ? C : import("@matter/types").ClusterType.Of<{
43
- readonly id: 0;
44
- readonly revision: 0;
45
- readonly name: "Unknown";
46
- readonly attributes: {};
47
- readonly commands: {};
48
- readonly events: {};
49
- }>>[E] extends {
50
- schema: infer S extends import("@matter/types").TlvSchema<unknown>;
51
- } ? import("@matter/types").TypeFromSchema<S> : never : never, log?: import("node-ansi-logger").AnsiLogger): Promise<boolean>;
52
- <T extends import("@matter/types").ClusterType, E extends keyof import("@matter/types").ClusterType.EventsOf<T> & string>(cluster: T, event: E, payload: E extends keyof import("@matter/types").ClusterType.EventsOf<T> ? import("@matter/types").ClusterType.EventsOf<T>[E] extends {
53
- schema: infer S extends import("@matter/types").TlvSchema<unknown>;
54
- } ? import("@matter/types").TypeFromSchema<S> : never : never, log?: import("node-ansi-logger").AnsiLogger): Promise<boolean>;
38
+ <T extends import("@matter/node").Behavior.Type, E extends keyof ((T extends {
39
+ Interface: infer N extends import("@matter/types").ClusterTyping;
40
+ } ? N : import("@matter/types").ClusterTyping)["Events"] & {}) & string>(cluster: T, event: E, payload: E extends keyof ((T extends {
41
+ Interface: infer N extends import("@matter/types").ClusterTyping;
42
+ } ? N : import("@matter/types").ClusterTyping)["Events"] & {}) & string ? ((T extends {
43
+ Interface: infer N extends import("@matter/types").ClusterTyping;
44
+ } ? N : import("@matter/types").ClusterTyping)["Events"] & {})[E] : never, log?: import("node-ansi-logger").AnsiLogger): Promise<boolean>;
45
+ <T extends import("@matter/types").ClusterType, E extends keyof (T["Typing"] extends {
46
+ Events: infer Events;
47
+ } ? Events : Record<string, never>) & string>(cluster: T, event: E, payload: E extends keyof (T["Typing"] extends {
48
+ Events: infer Events;
49
+ } ? Events : Record<string, never>) ? (T["Typing"] extends {
50
+ Events: infer Events;
51
+ } ? Events : Record<string, never>)[E] : never, log?: import("node-ansi-logger").AnsiLogger): Promise<boolean>;
55
52
  (cluster: import("@matter/types").ClusterId | string, event: string, payload: Record<string, boolean | number | bigint | string | object | undefined | null>, log?: import("node-ansi-logger").AnsiLogger): Promise<boolean>;
56
53
  }>;
57
54
  export declare const triggerSwitchEventMatterbridgeEndpointSpy: import("jest-mock").SpiedFunction<(event: "Single" | "Double" | "Long" | "Press" | "Release", log?: import("node-ansi-logger").AnsiLogger) => Promise<boolean>>;
@@ -1,4 +1,4 @@
1
- export declare const destroyMatterbridgePlatformSpy: import("jest-mock").SpiedSetter<string | boolean | import("node-ansi-logger").AnsiLogger | Promise<void> | import("../matterbridgePlatform.js").PlatformConfig | import("../matterbridgePlatform.js").PlatformMatterbridge | import("node-persist-manager").NodeStorage> | import("jest-mock").SpiedGetter<string | boolean | import("node-ansi-logger").AnsiLogger | Promise<void> | import("../matterbridgePlatform.js").PlatformConfig | import("../matterbridgePlatform.js").PlatformMatterbridge | import("node-persist-manager").NodeStorage>;
1
+ export declare const destroyMatterbridgePlatformSpy: import("jest-mock").SpiedGetter<string | boolean | import("node-ansi-logger").AnsiLogger | Promise<void> | import("../matterbridgePlatform.js").PlatformConfig | import("../matterbridgePlatform.js").PlatformMatterbridge | import("node-persist-manager").NodeStorage> | import("jest-mock").SpiedSetter<string | boolean | import("node-ansi-logger").AnsiLogger | Promise<void> | import("../matterbridgePlatform.js").PlatformConfig | import("../matterbridgePlatform.js").PlatformMatterbridge | import("node-persist-manager").NodeStorage>;
2
2
  export declare const onStartMatterbridgePlatformSpy: import("jest-mock").SpiedFunction<(reason?: string) => Promise<void>>;
3
3
  export declare const onConfigureMatterbridgePlatformSpy: import("jest-mock").SpiedFunction<() => Promise<void>>;
4
4
  export declare const onShutdownMatterbridgePlatformSpy: import("jest-mock").SpiedFunction<(reason?: string) => Promise<void>>;
@@ -24,7 +24,7 @@ export declare const registerVirtualDeviceMatterbridgePlatformSpy: import("jest-
24
24
  export declare const registerDeviceMatterbridgePlatformSpy: import("jest-mock").SpiedFunction<(device: import("../matterbridgeEndpoint.js").MatterbridgeEndpoint) => Promise<void>>;
25
25
  export declare const unregisterDeviceMatterbridgePlatformSpy: import("jest-mock").SpiedFunction<(device: import("../matterbridgeEndpoint.js").MatterbridgeEndpoint) => Promise<void>>;
26
26
  export declare const unregisterAllDevicesMatterbridgePlatformSpy: import("jest-mock").SpiedFunction<(delay?: number) => Promise<void>>;
27
- export declare const saveSelectsMatterbridgePlatformSpy: import("jest-mock").SpiedSetter<string | boolean | import("node-ansi-logger").AnsiLogger | Promise<void> | import("../matterbridgePlatform.js").PlatformConfig | import("../matterbridgePlatform.js").PlatformMatterbridge | import("node-persist-manager").NodeStorage> | import("jest-mock").SpiedGetter<string | boolean | import("node-ansi-logger").AnsiLogger | Promise<void> | import("../matterbridgePlatform.js").PlatformConfig | import("../matterbridgePlatform.js").PlatformMatterbridge | import("node-persist-manager").NodeStorage>;
27
+ export declare const saveSelectsMatterbridgePlatformSpy: import("jest-mock").SpiedGetter<string | boolean | import("node-ansi-logger").AnsiLogger | Promise<void> | import("../matterbridgePlatform.js").PlatformConfig | import("../matterbridgePlatform.js").PlatformMatterbridge | import("node-persist-manager").NodeStorage> | import("jest-mock").SpiedSetter<string | boolean | import("node-ansi-logger").AnsiLogger | Promise<void> | import("../matterbridgePlatform.js").PlatformConfig | import("../matterbridgePlatform.js").PlatformMatterbridge | import("node-persist-manager").NodeStorage>;
28
28
  export declare const clearSelectMatterbridgePlatformSpy: import("jest-mock").SpiedFunction<() => Promise<void>>;
29
29
  export declare const clearDeviceSelectMatterbridgePlatformSpy: import("jest-mock").SpiedFunction<(serial: string) => Promise<void>>;
30
30
  export declare const clearEntitySelectMatterbridgePlatformSpy: import("jest-mock").SpiedFunction<(name: string) => Promise<void>>;
@@ -56,5 +56,5 @@ export declare const getSelectEntitiesMatterbridgePlatformSpy: import("jest-mock
56
56
  export declare const verifyMatterbridgeVersionMatterbridgePlatformSpy: import("jest-mock").SpiedFunction<(requiredVersion: string, destroy?: boolean) => boolean>;
57
57
  export declare const validateDeviceMatterbridgePlatformSpy: import("jest-mock").SpiedFunction<(device: string | string[], log?: boolean) => boolean>;
58
58
  export declare const validateEntityMatterbridgePlatformSpy: import("jest-mock").SpiedFunction<(device: string, entity: string, log?: boolean) => boolean>;
59
- export declare const clearEndpointNumbersMatterbridgePlatformSpy: import("jest-mock").SpiedSetter<string | boolean | import("node-ansi-logger").AnsiLogger | Promise<void> | import("../matterbridgePlatform.js").PlatformConfig | import("../matterbridgePlatform.js").PlatformMatterbridge | import("node-persist-manager").NodeStorage> | import("jest-mock").SpiedGetter<string | boolean | import("node-ansi-logger").AnsiLogger | Promise<void> | import("../matterbridgePlatform.js").PlatformConfig | import("../matterbridgePlatform.js").PlatformMatterbridge | import("node-persist-manager").NodeStorage>;
60
- export declare const checkEndpointNumbersMatterbridgePlatformSpy: import("jest-mock").SpiedSetter<string | boolean | import("node-ansi-logger").AnsiLogger | Promise<void> | import("../matterbridgePlatform.js").PlatformConfig | import("../matterbridgePlatform.js").PlatformMatterbridge | import("node-persist-manager").NodeStorage> | import("jest-mock").SpiedGetter<string | boolean | import("node-ansi-logger").AnsiLogger | Promise<void> | import("../matterbridgePlatform.js").PlatformConfig | import("../matterbridgePlatform.js").PlatformMatterbridge | import("node-persist-manager").NodeStorage>;
59
+ export declare const clearEndpointNumbersMatterbridgePlatformSpy: import("jest-mock").SpiedGetter<string | boolean | import("node-ansi-logger").AnsiLogger | Promise<void> | import("../matterbridgePlatform.js").PlatformConfig | import("../matterbridgePlatform.js").PlatformMatterbridge | import("node-persist-manager").NodeStorage> | import("jest-mock").SpiedSetter<string | boolean | import("node-ansi-logger").AnsiLogger | Promise<void> | import("../matterbridgePlatform.js").PlatformConfig | import("../matterbridgePlatform.js").PlatformMatterbridge | import("node-persist-manager").NodeStorage>;
60
+ export declare const checkEndpointNumbersMatterbridgePlatformSpy: import("jest-mock").SpiedGetter<string | boolean | import("node-ansi-logger").AnsiLogger | Promise<void> | import("../matterbridgePlatform.js").PlatformConfig | import("../matterbridgePlatform.js").PlatformMatterbridge | import("node-persist-manager").NodeStorage> | import("jest-mock").SpiedSetter<string | boolean | import("node-ansi-logger").AnsiLogger | Promise<void> | import("../matterbridgePlatform.js").PlatformConfig | import("../matterbridgePlatform.js").PlatformMatterbridge | import("node-persist-manager").NodeStorage>;
@@ -109,7 +109,7 @@ export async function createMatterbridgeEnvironment() {
109
109
  matterbridge = await Matterbridge.loadInstance(false);
110
110
  expect(matterbridge).toBeDefined();
111
111
  expect(matterbridge).toBeInstanceOf(Matterbridge);
112
- matterbridge.matterbridgeVersion = '3.7.10';
112
+ matterbridge.matterbridgeVersion = '3.8.0';
113
113
  matterbridge.bridgeMode = 'bridge';
114
114
  matterbridge.rootDirectory = path.join(HOMEDIR);
115
115
  matterbridge.homeDirectory = path.join(HOMEDIR);
@@ -1,3 +1,14 @@
1
1
  export * from '@matter/main';
2
2
  export { AttributeElement, ClusterElement, ClusterModel, CommandElement, EventElement, FieldElement, MatterDefinition } from '@matter/main/model';
3
3
  export { MdnsService, Val } from '@matter/main/protocol';
4
+ export { CommonAreaNamespaceTag as AreaNamespaceTag } from '@matter/main/node';
5
+ export { CommonClosureTag as ClosureTag } from '@matter/main/node';
6
+ export { CommonCompassDirectionTag as CompassDirectionTag } from '@matter/main/node';
7
+ export { CommonCompassLocationTag as CompassLocationTag } from '@matter/main/node';
8
+ export { CommonDirectionTag as DirectionTag } from '@matter/main/node';
9
+ export { CommonLandmarkNamespaceTag as LandmarkNamespaceTag } from '@matter/main/node';
10
+ export { CommonLevelTag as LevelTag } from '@matter/main/node';
11
+ export { CommonLocationTag as LocationTag } from '@matter/main/node';
12
+ export { CommonNumberTag as NumberTag } from '@matter/main/node';
13
+ export { CommonPositionTag as PositionTag } from '@matter/main/node';
14
+ export { CommonRelativePositionTag as RelativePositionTag } from '@matter/main/node';
@@ -1,3 +1,14 @@
1
1
  export * from '@matter/main';
2
2
  export { AttributeElement, ClusterElement, ClusterModel, CommandElement, EventElement, FieldElement, MatterDefinition } from '@matter/main/model';
3
3
  export { MdnsService, Val } from '@matter/main/protocol';
4
+ export { CommonAreaNamespaceTag as AreaNamespaceTag } from '@matter/main/node';
5
+ export { CommonClosureTag as ClosureTag } from '@matter/main/node';
6
+ export { CommonCompassDirectionTag as CompassDirectionTag } from '@matter/main/node';
7
+ export { CommonCompassLocationTag as CompassLocationTag } from '@matter/main/node';
8
+ export { CommonDirectionTag as DirectionTag } from '@matter/main/node';
9
+ export { CommonLandmarkNamespaceTag as LandmarkNamespaceTag } from '@matter/main/node';
10
+ export { CommonLevelTag as LevelTag } from '@matter/main/node';
11
+ export { CommonLocationTag as LocationTag } from '@matter/main/node';
12
+ export { CommonNumberTag as NumberTag } from '@matter/main/node';
13
+ export { CommonPositionTag as PositionTag } from '@matter/main/node';
14
+ export { CommonRelativePositionTag as RelativePositionTag } from '@matter/main/node';
@@ -90,8 +90,11 @@ export declare class Matterbridge extends EventEmitter<MatterbridgeEvents> {
90
90
  ipv4Address: string | undefined;
91
91
  ipv6Address: string | undefined;
92
92
  port: number | undefined;
93
+ initialPort: number | undefined;
93
94
  passcode: number | undefined;
95
+ initialPasscode: number | undefined;
94
96
  discriminator: number | undefined;
97
+ initialDiscriminator: number | undefined;
95
98
  certification: DeviceCertification.Configuration | undefined;
96
99
  serverNode: ServerNode<ServerNode.RootEndpoint> | undefined;
97
100
  aggregatorNode: Endpoint<AggregatorEndpoint> | undefined;
@@ -122,8 +122,11 @@ export class Matterbridge extends EventEmitter {
122
122
  ipv4Address;
123
123
  ipv6Address;
124
124
  port;
125
+ initialPort;
125
126
  passcode;
127
+ initialPasscode;
126
128
  discriminator;
129
+ initialDiscriminator;
127
130
  certification;
128
131
  serverNode;
129
132
  aggregatorNode;
@@ -382,9 +385,10 @@ export class Matterbridge extends EventEmitter {
382
385
  if (!this.nodeStorage || !this.nodeContext) {
383
386
  throw new Error('Fatal error creating node storage manager and context for matterbridge');
384
387
  }
385
- this.port = getIntParameter('port') ?? (await this.nodeContext.get('matterport', 5540)) ?? 5540;
386
- this.passcode = getIntParameter('passcode') ?? (await this.nodeContext.get('matterpasscode')) ?? PaseClient.generateRandomPasscode(this.environment.get(Crypto));
387
- this.discriminator =
388
+ this.initialPort = this.port = getIntParameter('port') ?? (await this.nodeContext.get('matterport', 5540)) ?? 5540;
389
+ this.initialPasscode = this.passcode =
390
+ getIntParameter('passcode') ?? (await this.nodeContext.get('matterpasscode')) ?? PaseClient.generateRandomPasscode(this.environment.get(Crypto));
391
+ this.initialDiscriminator = this.discriminator =
388
392
  getIntParameter('discriminator') ?? (await this.nodeContext.get('matterdiscriminator')) ?? PaseClient.generateRandomDiscriminator(this.environment.get(Crypto));
389
393
  const pairingFilePath = path.join(this.matterbridgeCertDirectory, 'pairing.json');
390
394
  try {
@@ -652,7 +656,7 @@ export class Matterbridge extends EventEmitter {
652
656
  execSync(`${sudo ? 'sudo ' : ''}npm install -g ${path.join(this.matterbridgeDirectory, 'uploads', plugin.tarballPath)} --no-fund --no-audit --silent --omit=dev`);
653
657
  }
654
658
  else {
655
- this.log.info(`Plugin ${plg}${plugin.name}${nf} not found. Trying to reinstall it from npm...`);
659
+ this.log.info(`Plugin ${plg}${plugin.name}${nf} not found. Trying to reinstall it from npm${plugin.version.includes('-dev-') ? ' with tag @dev' : ''}...`);
656
660
  execSync(`${sudo ? 'sudo ' : ''}npm install -g ${plugin.name}${plugin.version.includes('-dev-') ? '@dev' : ''} --no-fund --no-audit --silent --omit=dev`);
657
661
  }
658
662
  this.log.info(`Plugin ${plg}${plugin.name}${nf} reinstalled.`);
@@ -1945,6 +1949,8 @@ export class Matterbridge extends EventEmitter {
1945
1949
  listeningAddressIpv4: this.ipv4Address,
1946
1950
  listeningAddressIpv6: this.ipv6Address,
1947
1951
  port,
1952
+ tcp: true,
1953
+ transportPreference: 'udp',
1948
1954
  },
1949
1955
  operationalCredentials: {
1950
1956
  certification: this.certification,
@@ -31,6 +31,7 @@ export declare const DeviceTypeDefinition: ({ name, code, deviceClass, revision,
31
31
  requiredClientClusters?: ClusterId[];
32
32
  optionalClientClusters?: ClusterId[];
33
33
  }) => DeviceTypeDefinition;
34
+ export declare const baseDevice: DeviceTypeDefinition;
34
35
  export declare const rootNode: DeviceTypeDefinition;
35
36
  export declare const powerSource: DeviceTypeDefinition;
36
37
  export declare const OTARequestor: DeviceTypeDefinition;
@@ -97,3 +98,17 @@ export declare const soilSensor: DeviceTypeDefinition;
97
98
  export declare const irrigationSystem: DeviceTypeDefinition;
98
99
  export declare const closure: DeviceTypeDefinition;
99
100
  export declare const closurePanel: DeviceTypeDefinition;
101
+ export declare const closureController: DeviceTypeDefinition;
102
+ export declare const meterReferencePoint: DeviceTypeDefinition;
103
+ export declare const electricalEnergyTariff: DeviceTypeDefinition;
104
+ export declare const electricalMeter: DeviceTypeDefinition;
105
+ export declare const electricalUtilityMeter: DeviceTypeDefinition;
106
+ export declare const camera: DeviceTypeDefinition;
107
+ export declare const floodlightCamera: DeviceTypeDefinition;
108
+ export declare const videoDoorbell: DeviceTypeDefinition;
109
+ export declare const intercom: DeviceTypeDefinition;
110
+ export declare const audioDoorbell: DeviceTypeDefinition;
111
+ export declare const snapshotCamera: DeviceTypeDefinition;
112
+ export declare const chime: DeviceTypeDefinition;
113
+ export declare const cameraController: DeviceTypeDefinition;
114
+ export declare const doorbell: DeviceTypeDefinition;