@matterbridge/core 3.7.5-dev-20260419-96eefd1 → 3.7.5-dev-20260421-b7fd269

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,8 +1,13 @@
1
1
  export * from './jestBroadcastServerSpy.js';
2
2
  export * from './jestDeviceManagerSpy.js';
3
+ export * from './jestFlushAsync.js';
3
4
  export * from './jestFrontendSpy.js';
4
- export * from './jestHelpers.js';
5
+ export * from './jestLogAlive.js';
5
6
  export * from './jestMatterbridgeEndpointSpy.js';
6
7
  export * from './jestMatterbridgePlatformSpy.js';
7
8
  export * from './jestMatterbridgeSpy.js';
9
+ export * from './jestMatterbridgeTest.js';
10
+ export * from './jestMatterRequest.js';
11
+ export * from './jestMatterTest.js';
8
12
  export * from './jestPluginManagerSpy.js';
13
+ export * from './jestSetupTest.js';
@@ -1,8 +1,13 @@
1
1
  export * from './jestBroadcastServerSpy.js';
2
2
  export * from './jestDeviceManagerSpy.js';
3
+ export * from './jestFlushAsync.js';
3
4
  export * from './jestFrontendSpy.js';
4
- export * from './jestHelpers.js';
5
+ export * from './jestLogAlive.js';
5
6
  export * from './jestMatterbridgeEndpointSpy.js';
6
7
  export * from './jestMatterbridgePlatformSpy.js';
7
8
  export * from './jestMatterbridgeSpy.js';
9
+ export * from './jestMatterbridgeTest.js';
10
+ export * from './jestMatterRequest.js';
11
+ export * from './jestMatterTest.js';
8
12
  export * from './jestPluginManagerSpy.js';
13
+ export * from './jestSetupTest.js';
@@ -0,0 +1 @@
1
+ export declare function flushAsync(ticks?: number, microTurns?: number, pause?: number): Promise<void>;
@@ -0,0 +1,8 @@
1
+ export async function flushAsync(ticks = 3, microTurns = 10, pause = 250) {
2
+ for (let i = 0; i < ticks; i++)
3
+ await new Promise((resolve) => setImmediate(resolve));
4
+ for (let i = 0; i < microTurns; i++)
5
+ await Promise.resolve();
6
+ if (pause)
7
+ await new Promise((resolve) => setTimeout(resolve, pause));
8
+ }
@@ -0,0 +1,2 @@
1
+ import { AnsiLogger } from 'node-ansi-logger';
2
+ export declare function logKeepAlives(log?: AnsiLogger): number;
@@ -0,0 +1,31 @@
1
+ import { inspect } from 'node:util';
2
+ import { rs } from 'node-ansi-logger';
3
+ export function logKeepAlives(log) {
4
+ const handles = process._getActiveHandles?.() ?? [];
5
+ const requests = process._getActiveRequests?.() ?? [];
6
+ const fmtHandle = (h, i) => {
7
+ const ctor = h?.constructor?.name ?? 'Unknown';
8
+ const hasRef = typeof h?.hasRef === 'function' ? h.hasRef() : undefined;
9
+ const isPort = h?.constructor?.name?.includes('MessagePort');
10
+ const fd = h?.fd ?? h?._handle?.fd;
11
+ return { i, type: ctor, hasRef, isPort, fd };
12
+ };
13
+ const fmtReq = (r, i) => {
14
+ const ctor = r?.constructor?.name ?? 'Unknown';
15
+ return { i, type: ctor };
16
+ };
17
+ const summary = {
18
+ handles: handles.map(fmtHandle),
19
+ requests: requests.map(fmtReq),
20
+ };
21
+ if (summary.handles.length === 0 && summary.requests.length === 0) {
22
+ log?.debug('KeepAlive: no active handles or requests.');
23
+ }
24
+ else {
25
+ log?.debug(`KeepAlive:${rs}\n${inspect(summary, { depth: 5, colors: true })}`);
26
+ if (!log) {
27
+ process.stdout.write(`KeepAlive:\n${inspect(summary, { depth: 5, colors: true })}\n`);
28
+ }
29
+ }
30
+ return summary.handles.length + summary.requests.length;
31
+ }
@@ -0,0 +1,10 @@
1
+ import { ColorControl } from '@matter/main/clusters/color-control';
2
+ import { LevelControl } from '@matter/main/clusters/level-control';
3
+ export declare function getMoveToLevelRequest(level: number, transitionTime: number, executeIfOff: boolean): LevelControl.MoveToLevelRequest;
4
+ export declare function getMoveToColorTemperatureRequest(colorTemperatureMireds: number, transitionTime: number, executeIfOff: boolean): ColorControl.MoveToColorTemperatureRequest;
5
+ export declare function getMoveToHueRequest(hue: number, transitionTime: number, executeIfOff: boolean): ColorControl.MoveToHueRequest;
6
+ export declare function getEnhancedMoveToHueRequest(enhancedHue: number, transitionTime: number, executeIfOff: boolean): ColorControl.EnhancedMoveToHueRequest;
7
+ export declare function getMoveToSaturationRequest(saturation: number, transitionTime: number, executeIfOff: boolean): ColorControl.MoveToSaturationRequest;
8
+ export declare function getMoveToHueAndSaturationRequest(hue: number, saturation: number, transitionTime: number, executeIfOff: boolean): ColorControl.MoveToHueAndSaturationRequest;
9
+ export declare function getEnhancedMoveToHueAndSaturationRequest(enhancedHue: number, saturation: number, transitionTime: number, executeIfOff: boolean): ColorControl.EnhancedMoveToHueAndSaturationRequest;
10
+ export declare function getMoveToColorRequest(colorX: number, colorY: number, transitionTime: number, executeIfOff: boolean): ColorControl.MoveToColorRequest;
@@ -0,0 +1,78 @@
1
+ import { ColorControl } from '@matter/main/clusters/color-control';
2
+ export function getMoveToLevelRequest(level, transitionTime, executeIfOff) {
3
+ const request = {
4
+ level,
5
+ transitionTime,
6
+ optionsMask: { executeIfOff, coupleColorTempToLevel: false },
7
+ optionsOverride: { executeIfOff, coupleColorTempToLevel: false },
8
+ };
9
+ return request;
10
+ }
11
+ export function getMoveToColorTemperatureRequest(colorTemperatureMireds, transitionTime, executeIfOff) {
12
+ const request = {
13
+ colorTemperatureMireds,
14
+ transitionTime,
15
+ optionsMask: { executeIfOff },
16
+ optionsOverride: { executeIfOff },
17
+ };
18
+ return request;
19
+ }
20
+ export function getMoveToHueRequest(hue, transitionTime, executeIfOff) {
21
+ const request = {
22
+ hue,
23
+ transitionTime,
24
+ direction: ColorControl.Direction.Shortest,
25
+ optionsMask: { executeIfOff },
26
+ optionsOverride: { executeIfOff },
27
+ };
28
+ return request;
29
+ }
30
+ export function getEnhancedMoveToHueRequest(enhancedHue, transitionTime, executeIfOff) {
31
+ const request = {
32
+ enhancedHue,
33
+ transitionTime,
34
+ direction: ColorControl.Direction.Shortest,
35
+ optionsMask: { executeIfOff },
36
+ optionsOverride: { executeIfOff },
37
+ };
38
+ return request;
39
+ }
40
+ export function getMoveToSaturationRequest(saturation, transitionTime, executeIfOff) {
41
+ const request = {
42
+ saturation,
43
+ transitionTime,
44
+ optionsMask: { executeIfOff },
45
+ optionsOverride: { executeIfOff },
46
+ };
47
+ return request;
48
+ }
49
+ export function getMoveToHueAndSaturationRequest(hue, saturation, transitionTime, executeIfOff) {
50
+ const request = {
51
+ hue,
52
+ saturation,
53
+ transitionTime,
54
+ optionsMask: { executeIfOff },
55
+ optionsOverride: { executeIfOff },
56
+ };
57
+ return request;
58
+ }
59
+ export function getEnhancedMoveToHueAndSaturationRequest(enhancedHue, saturation, transitionTime, executeIfOff) {
60
+ const request = {
61
+ enhancedHue,
62
+ saturation,
63
+ transitionTime,
64
+ optionsMask: { executeIfOff },
65
+ optionsOverride: { executeIfOff },
66
+ };
67
+ return request;
68
+ }
69
+ export function getMoveToColorRequest(colorX, colorY, transitionTime, executeIfOff) {
70
+ const request = {
71
+ colorX,
72
+ colorY,
73
+ transitionTime,
74
+ optionsMask: { executeIfOff },
75
+ optionsOverride: { executeIfOff },
76
+ };
77
+ return request;
78
+ }
@@ -0,0 +1,19 @@
1
+ import '@matter/nodejs';
2
+ import { Environment } from '@matter/general';
3
+ import { Endpoint, ServerNode } from '@matter/node';
4
+ import { AggregatorEndpoint } from '@matter/node/endpoints';
5
+ import { DeviceTypeId } from '@matter/types/datatype';
6
+ export declare let environment: Environment;
7
+ export declare let server: ServerNode<ServerNode.RootEndpoint>;
8
+ export declare let aggregator: Endpoint<AggregatorEndpoint>;
9
+ export declare function createTestEnvironment(): Promise<Environment>;
10
+ export declare function destroyTestEnvironment(): Promise<void>;
11
+ export declare function flushAllEndpointNumberPersistence(targetServer: ServerNode, rounds?: number, ticks?: number, microTurns?: number, pause?: number): Promise<void>;
12
+ export declare function assertAllEndpointNumbersPersisted(targetServer: ServerNode): Promise<number>;
13
+ export declare function closeServerNodeStores(targetServer?: ServerNode): Promise<void>;
14
+ export declare function createServerNode(port: number, deviceType?: DeviceTypeId, ticks?: number, microTurns?: number, pause?: number): Promise<[ServerNode<ServerNode.RootEndpoint>, Endpoint<AggregatorEndpoint>]>;
15
+ export declare function startServerNode(ticks?: number, microTurns?: number, pause?: number): Promise<[ServerNode<ServerNode.RootEndpoint>, Endpoint<AggregatorEndpoint>]>;
16
+ export declare function stopServerNode(ticks?: number, microTurns?: number, pause?: number): Promise<void>;
17
+ export declare function flushServerNode(ticks?: number, microTurns?: number, pause?: number): Promise<void>;
18
+ export declare function addDevice(owner: ServerNode<ServerNode.RootEndpoint> | Endpoint<AggregatorEndpoint>, device: Endpoint, rounds?: number, pause?: number): Promise<boolean>;
19
+ export declare function deleteDevice(owner: ServerNode<ServerNode.RootEndpoint> | Endpoint<AggregatorEndpoint>, device: Endpoint, rounds?: number, pause?: number): Promise<boolean>;
@@ -0,0 +1,218 @@
1
+ import '@matter/nodejs';
2
+ import path from 'node:path';
3
+ import { inspect } from 'node:util';
4
+ import { Environment, Lifecycle, LogFormat as MatterLogFormat, LogLevel as MatterLogLevel } from '@matter/general';
5
+ import { Endpoint, ServerNode, ServerNodeStore } from '@matter/node';
6
+ import { AggregatorEndpoint } from '@matter/node/endpoints';
7
+ import { DeviceTypeId, VendorId } from '@matter/types/datatype';
8
+ import { MATTER_STORAGE_DIR } from '@matterbridge/types';
9
+ import { er, rs } from 'node-ansi-logger';
10
+ import { bridge } from '../matterbridgeDeviceTypes.js';
11
+ import { flushAsync } from './jestFlushAsync.js';
12
+ import { HOMEDIR, NAME } from './jestSetupTest.js';
13
+ export let environment;
14
+ export let server;
15
+ export let aggregator;
16
+ export async function createTestEnvironment() {
17
+ expect(NAME).toBeDefined();
18
+ expect(typeof NAME).toBe('string');
19
+ expect(NAME.length).toBeGreaterThanOrEqual(4);
20
+ environment = Environment.default;
21
+ environment.vars.set('log.level', MatterLogLevel.DEBUG);
22
+ environment.vars.set('log.format', MatterLogFormat.ANSI);
23
+ environment.vars.set('path.root', path.join(HOMEDIR, '.matterbridge', MATTER_STORAGE_DIR));
24
+ environment.vars.set('runtime.signals', false);
25
+ environment.vars.set('runtime.exitcode', false);
26
+ return environment;
27
+ }
28
+ export async function destroyTestEnvironment() {
29
+ }
30
+ export async function flushAllEndpointNumberPersistence(targetServer, rounds = 3, ticks = 1, microTurns = 1, pause = 10) {
31
+ const nodeStore = targetServer.env.get(ServerNodeStore);
32
+ for (let i = 0; i < rounds; i++) {
33
+ await flushAsync(ticks, microTurns, pause);
34
+ await nodeStore.endpointStores.close();
35
+ }
36
+ }
37
+ function getRootServerNode(endpoint) {
38
+ let current = endpoint;
39
+ while (current.owner) {
40
+ current = current.owner;
41
+ }
42
+ return current;
43
+ }
44
+ function collectAllEndpoints(root) {
45
+ const list = [];
46
+ const walk = (ep) => {
47
+ list.push(ep);
48
+ if (ep.parts) {
49
+ for (const child of ep.parts) {
50
+ walk(child);
51
+ }
52
+ }
53
+ };
54
+ walk(root);
55
+ return list;
56
+ }
57
+ export async function assertAllEndpointNumbersPersisted(targetServer) {
58
+ const nodeStore = targetServer.env.get(ServerNodeStore);
59
+ await nodeStore.endpointStores.close();
60
+ const all = collectAllEndpoints(targetServer);
61
+ for (const ep of all) {
62
+ const store = nodeStore.storeForEndpoint(ep);
63
+ if (ep.maybeNumber === 0) {
64
+ expect(store.number ?? 0).toBe(0);
65
+ }
66
+ else {
67
+ expect(store.number).toBeGreaterThan(0);
68
+ }
69
+ }
70
+ return all.length;
71
+ }
72
+ export async function closeServerNodeStores(targetServer) {
73
+ if (!targetServer)
74
+ targetServer = server;
75
+ await targetServer?.env.get(ServerNodeStore)?.endpointStores.close();
76
+ }
77
+ export async function createServerNode(port, deviceType = bridge.code, ticks = 1, microTurns = 1, pause = 10) {
78
+ const { randomBytes } = await import('node:crypto');
79
+ const random = randomBytes(8).toString('hex');
80
+ server = await ServerNode.create({
81
+ id: NAME + 'ServerNode',
82
+ environment,
83
+ productDescription: {
84
+ name: NAME + 'ServerNode',
85
+ deviceType: DeviceTypeId(deviceType),
86
+ vendorId: VendorId(0xfff1),
87
+ productId: 0x8000,
88
+ },
89
+ basicInformation: {
90
+ vendorId: VendorId(0xfff1),
91
+ vendorName: 'Matterbridge',
92
+ productId: 0x8000,
93
+ productName: 'Matterbridge ' + NAME,
94
+ nodeLabel: NAME + 'ServerNode',
95
+ hardwareVersion: 1,
96
+ softwareVersion: 1,
97
+ reachable: true,
98
+ serialNumber: 'SN' + random,
99
+ uniqueId: 'UI' + random,
100
+ },
101
+ network: {
102
+ listeningAddressIpv4: undefined,
103
+ listeningAddressIpv6: undefined,
104
+ port,
105
+ },
106
+ operationalCredentials: {
107
+ certification: undefined,
108
+ },
109
+ });
110
+ expect(server).toBeDefined();
111
+ expect(server.lifecycle.isReady).toBeTruthy();
112
+ aggregator = new Endpoint(AggregatorEndpoint, {
113
+ id: NAME + 'AggregatorNode',
114
+ });
115
+ expect(aggregator).toBeDefined();
116
+ await server.add(aggregator);
117
+ expect(server.parts.has(aggregator.id)).toBeTruthy();
118
+ expect(server.parts.has(aggregator)).toBeTruthy();
119
+ expect(aggregator.lifecycle.isReady).toBeTruthy();
120
+ expect(server.lifecycle.isOnline).toBeFalsy();
121
+ await flushAsync(ticks, microTurns, pause);
122
+ return [server, aggregator];
123
+ }
124
+ export async function startServerNode(ticks = 1, microTurns = 1, pause = 10) {
125
+ if (!server || !aggregator) {
126
+ throw new Error('Server node and aggregator must be created before starting the server. Call createServerNode() first.');
127
+ }
128
+ await new Promise((resolve) => {
129
+ server.lifecycle.online.on(async () => {
130
+ resolve();
131
+ });
132
+ server.start();
133
+ });
134
+ expect(server.lifecycle.isReady).toBeTruthy();
135
+ expect(server.lifecycle.isOnline).toBeTruthy();
136
+ expect(server.lifecycle.isCommissioned).toBeFalsy();
137
+ expect(server.lifecycle.isPartsReady).toBeTruthy();
138
+ expect(server.lifecycle.hasId).toBeTruthy();
139
+ expect(server.lifecycle.hasNumber).toBeTruthy();
140
+ expect(aggregator.lifecycle.isReady).toBeTruthy();
141
+ expect(aggregator.lifecycle.isInstalled).toBeTruthy();
142
+ expect(aggregator.lifecycle.isPartsReady).toBeTruthy();
143
+ expect(aggregator.lifecycle.hasId).toBeTruthy();
144
+ expect(aggregator.lifecycle.hasNumber).toBeTruthy();
145
+ await flushAsync(ticks, microTurns, pause);
146
+ return [server, aggregator];
147
+ }
148
+ export async function stopServerNode(ticks = 1, microTurns = 1, pause = 10) {
149
+ await flushAllEndpointNumberPersistence(server);
150
+ await assertAllEndpointNumbersPersisted(server);
151
+ expect(server).toBeDefined();
152
+ expect(server.lifecycle.isReady).toBeTruthy();
153
+ expect(server.lifecycle.isOnline).toBeTruthy();
154
+ await server.close();
155
+ expect(server.lifecycle.isReady).toBeFalsy();
156
+ expect(server.lifecycle.isOnline).toBeFalsy();
157
+ await flushAsync(ticks, microTurns, pause);
158
+ }
159
+ export async function flushServerNode(ticks = 1, microTurns = 1, pause = 10) {
160
+ await flushAllEndpointNumberPersistence(server);
161
+ await assertAllEndpointNumbersPersisted(server);
162
+ await flushAsync(ticks, microTurns, pause);
163
+ }
164
+ export async function addDevice(owner, device, rounds = 3, pause = 10) {
165
+ expect(owner).toBeDefined();
166
+ expect(device).toBeDefined();
167
+ expect(owner.lifecycle.isReady).toBeTruthy();
168
+ expect(owner.construction.status).toBe(Lifecycle.Status.Active);
169
+ expect(owner.lifecycle.isPartsReady).toBeTruthy();
170
+ const rootServerNode = getRootServerNode(owner);
171
+ await flushAllEndpointNumberPersistence(rootServerNode, rounds, pause);
172
+ try {
173
+ await owner.add(device);
174
+ }
175
+ catch (error) {
176
+ const errorMessage = error instanceof Error ? error.message : error;
177
+ const errorInspect = inspect(error, { depth: 10 });
178
+ process.stderr.write(`${er}Error adding device ${device.maybeId}.${device.maybeNumber}: ${errorMessage}${rs}\nStack: ${errorInspect}\n`);
179
+ return false;
180
+ }
181
+ await device.construction.ready;
182
+ expect(owner.parts.has(device)).toBeTruthy();
183
+ expect(owner.lifecycle.isPartsReady).toBeTruthy();
184
+ expect(device.lifecycle.isReady).toBeTruthy();
185
+ expect(device.lifecycle.isInstalled).toBeTruthy();
186
+ expect(device.lifecycle.hasId).toBeTruthy();
187
+ expect(device.lifecycle.hasNumber).toBeTruthy();
188
+ expect(device.construction.status).toBe(Lifecycle.Status.Active);
189
+ await flushAllEndpointNumberPersistence(rootServerNode, rounds, pause);
190
+ return true;
191
+ }
192
+ export async function deleteDevice(owner, device, rounds = 3, pause = 10) {
193
+ expect(owner).toBeDefined();
194
+ expect(device).toBeDefined();
195
+ expect(owner.lifecycle.isReady).toBeTruthy();
196
+ expect(owner.construction.status).toBe(Lifecycle.Status.Active);
197
+ expect(owner.lifecycle.isPartsReady).toBeTruthy();
198
+ const rootServerNode = getRootServerNode(owner);
199
+ await flushAllEndpointNumberPersistence(rootServerNode, rounds, pause);
200
+ try {
201
+ await device.delete();
202
+ }
203
+ catch (error) {
204
+ const errorMessage = error instanceof Error ? error.message : error;
205
+ const errorInspect = inspect(error, { depth: 10 });
206
+ process.stderr.write(`${er}Error deleting device ${device.maybeId}.${device.maybeNumber}: ${errorMessage}${rs}\nStack: ${errorInspect}\n`);
207
+ return false;
208
+ }
209
+ expect(owner.parts.has(device)).toBeFalsy();
210
+ expect(owner.lifecycle.isPartsReady).toBeTruthy();
211
+ expect(device.lifecycle.isReady).toBeFalsy();
212
+ expect(device.lifecycle.isInstalled).toBeFalsy();
213
+ expect(device.lifecycle.hasId).toBeTruthy();
214
+ expect(device.lifecycle.hasNumber).toBeTruthy();
215
+ expect(device.construction.status).toBe(Lifecycle.Status.Destroyed);
216
+ await flushAllEndpointNumberPersistence(rootServerNode, rounds, pause);
217
+ return true;
218
+ }
@@ -13,6 +13,11 @@ export declare const updateAttributeMatterbridgeEndpointSpy: import("jest-mock")
13
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>;
14
14
  (cluster: import("@matter/types").ClusterId | string, attribute: string, value: boolean | number | bigint | string | object | null, log?: import("node-ansi-logger").AnsiLogger): Promise<boolean>;
15
15
  }>;
16
+ export declare const subscribeAttributeMatterbridgeEndpointSpy: import("jest-mock").SpiedFunction<{
17
+ <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>;
19
+ (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
+ }>;
16
21
  export declare const triggerEventMatterbridgeEndpointSpy: import("jest-mock").SpiedFunction<{
17
22
  <T extends import("@matter/node").Behavior.Type, E extends keyof import("@matter/types").ClusterType.EventsOf<T extends {
18
23
  cluster: infer C extends import("@matter/types").ClusterType;
@@ -3,5 +3,6 @@ import { MatterbridgeEndpoint } from '../matterbridgeEndpoint.js';
3
3
  export const setClusterMatterbridgeEndpointSpy = jest.spyOn(MatterbridgeEndpoint.prototype, 'setCluster');
4
4
  export const setAttributeMatterbridgeEndpointSpy = jest.spyOn(MatterbridgeEndpoint.prototype, 'setAttribute');
5
5
  export const updateAttributeMatterbridgeEndpointSpy = jest.spyOn(MatterbridgeEndpoint.prototype, 'updateAttribute');
6
+ export const subscribeAttributeMatterbridgeEndpointSpy = jest.spyOn(MatterbridgeEndpoint.prototype, 'subscribeAttribute');
6
7
  export const triggerEventMatterbridgeEndpointSpy = jest.spyOn(MatterbridgeEndpoint.prototype, 'triggerEvent');
7
8
  export const triggerSwitchEventMatterbridgeEndpointSpy = jest.spyOn(MatterbridgeEndpoint.prototype, 'triggerSwitchEvent');
@@ -0,0 +1,21 @@
1
+ import { Endpoint, ServerNode } from '@matter/node';
2
+ import { AggregatorEndpoint } from '@matter/node/endpoints';
3
+ import type { DeviceManager } from '../deviceManager.js';
4
+ import type { Frontend } from '../frontend.js';
5
+ import { Matterbridge } from '../matterbridge.js';
6
+ import type { MatterbridgePlatform } from '../matterbridgePlatform.js';
7
+ import type { PluginManager } from '../pluginManager.js';
8
+ export declare let matterbridge: Matterbridge;
9
+ export declare let frontend: Frontend;
10
+ export declare let plugins: PluginManager;
11
+ export declare let devices: DeviceManager;
12
+ export declare function startMatterbridge(bridgeMode?: 'bridge' | 'childbridge' | 'controller' | '', frontendPort?: number, matterPort?: number, passcode?: number, discriminator?: number, pluginSize?: number, devicesSize?: number): Promise<Matterbridge>;
13
+ export declare function stopMatterbridge(cleanupPause?: number, destroyPause?: number, closeMdns?: boolean, closeRuntime?: boolean): Promise<void>;
14
+ export declare function createMatterbridgeEnvironment(): Promise<Matterbridge>;
15
+ export declare function startMatterbridgeEnvironment(port?: number, createOnly?: boolean): Promise<[ServerNode<ServerNode.RootEndpoint>, Endpoint<AggregatorEndpoint>]>;
16
+ export declare function addMatterbridgePlatform(platform: MatterbridgePlatform, name?: string): void;
17
+ export declare function stopMatterbridgeEnvironment(createOnly?: boolean): Promise<void>;
18
+ export declare function destroyMatterbridgeEnvironment(cleanupPause?: number, destroyPause?: number, closeMdns?: boolean, closeRuntime?: boolean): Promise<void>;
19
+ export declare function destroyInstance(matterbridge: Matterbridge, cleanupPause?: number, destroyPause?: number): Promise<void>;
20
+ export declare function closeMdnsInstance(matterbridge: Matterbridge): Promise<void>;
21
+ export declare function closeRuntimeInstance(matterbridge: Matterbridge): Promise<void>;