@matterbridge/core 3.7.5-dev-20260420-1c36532 → 3.7.5-dev-20260422-2a34593
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/frontend.d.ts +1 -0
- package/dist/frontend.js +6 -1
- package/dist/jestutils/jestMatterbridgeEndpointSpy.d.ts +5 -0
- package/dist/jestutils/jestMatterbridgeEndpointSpy.js +1 -0
- package/dist/jestutils/jestMatterbridgeTest.d.ts +3 -2
- package/dist/jestutils/jestMatterbridgeTest.js +18 -6
- package/package.json +5 -5
package/dist/frontend.d.ts
CHANGED
|
@@ -17,6 +17,7 @@ export declare class Frontend extends EventEmitter<FrontendEvents> {
|
|
|
17
17
|
private listening;
|
|
18
18
|
storedPassword: string | undefined;
|
|
19
19
|
authClients: Set<string>;
|
|
20
|
+
authClientsTimeout: NodeJS.Timeout | undefined;
|
|
20
21
|
private expressApp;
|
|
21
22
|
private httpServer;
|
|
22
23
|
private httpsServer;
|
package/dist/frontend.js
CHANGED
|
@@ -27,6 +27,7 @@ export class Frontend extends EventEmitter {
|
|
|
27
27
|
listening = false;
|
|
28
28
|
storedPassword = undefined;
|
|
29
29
|
authClients = new Set();
|
|
30
|
+
authClientsTimeout = undefined;
|
|
30
31
|
expressApp;
|
|
31
32
|
httpServer;
|
|
32
33
|
httpsServer;
|
|
@@ -55,6 +56,8 @@ export class Frontend extends EventEmitter {
|
|
|
55
56
|
this.server.on('broadcast_message', this.broadcastMsgHandler.bind(this));
|
|
56
57
|
}
|
|
57
58
|
destroy() {
|
|
59
|
+
clearTimeout(this.authClientsTimeout);
|
|
60
|
+
this.authClientsTimeout = undefined;
|
|
58
61
|
this.server.off('broadcast_message', this.broadcastMsgHandler.bind(this));
|
|
59
62
|
this.server.close();
|
|
60
63
|
}
|
|
@@ -221,7 +224,9 @@ export class Frontend extends EventEmitter {
|
|
|
221
224
|
if (this.webSocketServer?.clients.size === 0) {
|
|
222
225
|
AnsiLogger.setGlobalCallback(undefined);
|
|
223
226
|
this.log.debug('All WebSocket clients disconnected. WebSocketServer logger global callback removed');
|
|
224
|
-
|
|
227
|
+
clearTimeout(this.authClientsTimeout);
|
|
228
|
+
this.authClientsTimeout = setTimeout(() => {
|
|
229
|
+
this.authClientsTimeout = undefined;
|
|
225
230
|
this.log.debug('All WebSocket clients disconnected. Auth clients list cleared');
|
|
226
231
|
if (this.webSocketServer?.clients.size === 0)
|
|
227
232
|
this.authClients.clear();
|
|
@@ -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');
|
|
@@ -10,11 +10,12 @@ export declare let frontend: Frontend;
|
|
|
10
10
|
export declare let plugins: PluginManager;
|
|
11
11
|
export declare let devices: DeviceManager;
|
|
12
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): Promise<void>;
|
|
13
|
+
export declare function stopMatterbridge(cleanupPause?: number, destroyPause?: number, closeMdns?: boolean, closeRuntime?: boolean): Promise<void>;
|
|
14
14
|
export declare function createMatterbridgeEnvironment(): Promise<Matterbridge>;
|
|
15
15
|
export declare function startMatterbridgeEnvironment(port?: number, createOnly?: boolean): Promise<[ServerNode<ServerNode.RootEndpoint>, Endpoint<AggregatorEndpoint>]>;
|
|
16
16
|
export declare function addMatterbridgePlatform(platform: MatterbridgePlatform, name?: string): void;
|
|
17
17
|
export declare function stopMatterbridgeEnvironment(createOnly?: boolean): Promise<void>;
|
|
18
|
-
export declare function destroyMatterbridgeEnvironment(cleanupPause?: number, destroyPause?: number, closeMdns?: boolean): Promise<void>;
|
|
18
|
+
export declare function destroyMatterbridgeEnvironment(cleanupPause?: number, destroyPause?: number, closeMdns?: boolean, closeRuntime?: boolean): Promise<void>;
|
|
19
19
|
export declare function destroyInstance(matterbridge: Matterbridge, cleanupPause?: number, destroyPause?: number): Promise<void>;
|
|
20
20
|
export declare function closeMdnsInstance(matterbridge: Matterbridge): Promise<void>;
|
|
21
|
+
export declare function closeRuntimeInstance(matterbridge: Matterbridge): Promise<void>;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import path from 'node:path';
|
|
2
|
-
import { Environment } from '@matter/general';
|
|
2
|
+
import { Environment, RuntimeService } from '@matter/general';
|
|
3
3
|
import { MdnsService } from '@matter/protocol';
|
|
4
4
|
import { MATTER_STORAGE_DIR, NODE_STORAGE_DIR } from '@matterbridge/types';
|
|
5
5
|
import { rs, UNDERLINE, UNDERLINEOFF } from 'node-ansi-logger';
|
|
@@ -103,8 +103,8 @@ export async function startMatterbridge(bridgeMode = 'bridge', frontendPort = 82
|
|
|
103
103
|
}
|
|
104
104
|
return matterbridge;
|
|
105
105
|
}
|
|
106
|
-
export async function stopMatterbridge(cleanupPause = 10, destroyPause = 250, closeMdns =
|
|
107
|
-
await destroyMatterbridgeEnvironment(cleanupPause, destroyPause, closeMdns);
|
|
106
|
+
export async function stopMatterbridge(cleanupPause = 10, destroyPause = 250, closeMdns = false, closeRuntime = false) {
|
|
107
|
+
await destroyMatterbridgeEnvironment(cleanupPause, destroyPause, closeMdns, closeRuntime);
|
|
108
108
|
}
|
|
109
109
|
export async function createMatterbridgeEnvironment() {
|
|
110
110
|
matterbridge = await Matterbridge.loadInstance(false);
|
|
@@ -222,19 +222,31 @@ export async function stopMatterbridgeEnvironment(createOnly = false) {
|
|
|
222
222
|
matterbridge.nodeStorage = undefined;
|
|
223
223
|
await flushAsync();
|
|
224
224
|
}
|
|
225
|
-
export async function destroyMatterbridgeEnvironment(cleanupPause = 10, destroyPause =
|
|
225
|
+
export async function destroyMatterbridgeEnvironment(cleanupPause = 10, destroyPause = 100, closeMdns = false, closeRuntime = false) {
|
|
226
226
|
await destroyInstance(matterbridge, cleanupPause, destroyPause);
|
|
227
227
|
if (closeMdns) {
|
|
228
228
|
await closeMdnsInstance(matterbridge);
|
|
229
229
|
}
|
|
230
|
+
if (closeRuntime) {
|
|
231
|
+
await closeRuntimeInstance(matterbridge);
|
|
232
|
+
}
|
|
230
233
|
Matterbridge.instance = undefined;
|
|
231
234
|
}
|
|
232
|
-
export async function destroyInstance(matterbridge, cleanupPause = 10, destroyPause =
|
|
235
|
+
export async function destroyInstance(matterbridge, cleanupPause = 10, destroyPause = 10) {
|
|
233
236
|
await matterbridge.cleanup('destroying instance...', false, cleanupPause);
|
|
234
237
|
if (destroyPause > 0)
|
|
235
238
|
await flushAsync(undefined, undefined, destroyPause);
|
|
236
239
|
}
|
|
237
240
|
export async function closeMdnsInstance(matterbridge) {
|
|
238
|
-
const
|
|
241
|
+
const environment = matterbridge.environment;
|
|
242
|
+
const mdns = environment.maybeGet(MdnsService);
|
|
243
|
+
if (!mdns)
|
|
244
|
+
return;
|
|
239
245
|
await mdns.close();
|
|
246
|
+
environment.delete(MdnsService, mdns);
|
|
247
|
+
}
|
|
248
|
+
export async function closeRuntimeInstance(matterbridge) {
|
|
249
|
+
const environment = matterbridge.environment;
|
|
250
|
+
const runtime = environment.maybeGet(RuntimeService);
|
|
251
|
+
await runtime?.close();
|
|
240
252
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@matterbridge/core",
|
|
3
|
-
"version": "3.7.5-dev-
|
|
3
|
+
"version": "3.7.5-dev-20260422-2a34593",
|
|
4
4
|
"description": "Matterbridge core library",
|
|
5
5
|
"author": "https://github.com/Luligu",
|
|
6
6
|
"homepage": "https://matterbridge.io/",
|
|
@@ -130,10 +130,10 @@
|
|
|
130
130
|
],
|
|
131
131
|
"dependencies": {
|
|
132
132
|
"@matter/main": "0.16.11",
|
|
133
|
-
"@matterbridge/dgram": "3.7.5-dev-
|
|
134
|
-
"@matterbridge/thread": "3.7.5-dev-
|
|
135
|
-
"@matterbridge/types": "3.7.5-dev-
|
|
136
|
-
"@matterbridge/utils": "3.7.5-dev-
|
|
133
|
+
"@matterbridge/dgram": "3.7.5-dev-20260422-2a34593",
|
|
134
|
+
"@matterbridge/thread": "3.7.5-dev-20260422-2a34593",
|
|
135
|
+
"@matterbridge/types": "3.7.5-dev-20260422-2a34593",
|
|
136
|
+
"@matterbridge/utils": "3.7.5-dev-20260422-2a34593",
|
|
137
137
|
"escape-html": "1.0.3",
|
|
138
138
|
"express": "5.2.1",
|
|
139
139
|
"express-rate-limit": "8.3.2",
|