matterbridge 2.1.5-dev.7 → 2.1.5
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/CHANGELOG.md +4 -2
- package/README-DOCKER.md +6 -0
- package/dist/cli.d.ts +25 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +26 -0
- package/dist/cli.js.map +1 -0
- package/dist/cluster/export.d.ts +2 -0
- package/dist/cluster/export.d.ts.map +1 -0
- package/dist/cluster/export.js +2 -0
- package/dist/cluster/export.js.map +1 -0
- package/dist/defaultConfigSchema.d.ts +27 -0
- package/dist/defaultConfigSchema.d.ts.map +1 -0
- package/dist/defaultConfigSchema.js +23 -0
- package/dist/defaultConfigSchema.js.map +1 -0
- package/dist/deviceManager.d.ts +114 -0
- package/dist/deviceManager.d.ts.map +1 -0
- package/dist/deviceManager.js +94 -1
- package/dist/deviceManager.js.map +1 -0
- package/dist/frontend.d.ts +143 -0
- package/dist/frontend.d.ts.map +1 -0
- package/dist/frontend.js +270 -24
- package/dist/frontend.js.map +1 -0
- package/dist/index.d.ts +35 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +28 -0
- package/dist/index.js.map +1 -0
- package/dist/logger/export.d.ts +2 -0
- package/dist/logger/export.d.ts.map +1 -0
- package/dist/logger/export.js +1 -0
- package/dist/logger/export.js.map +1 -0
- package/dist/matter/behaviors.d.ts +2 -0
- package/dist/matter/behaviors.d.ts.map +1 -0
- package/dist/matter/behaviors.js +2 -0
- package/dist/matter/behaviors.js.map +1 -0
- package/dist/matter/clusters.d.ts +2 -0
- package/dist/matter/clusters.d.ts.map +1 -0
- package/dist/matter/clusters.js +2 -0
- package/dist/matter/clusters.js.map +1 -0
- package/dist/matter/devices.d.ts +2 -0
- package/dist/matter/devices.d.ts.map +1 -0
- package/dist/matter/devices.js +2 -0
- package/dist/matter/devices.js.map +1 -0
- package/dist/matter/endpoints.d.ts +2 -0
- package/dist/matter/endpoints.d.ts.map +1 -0
- package/dist/matter/endpoints.js +2 -0
- package/dist/matter/endpoints.js.map +1 -0
- package/dist/matter/export.d.ts +5 -0
- package/dist/matter/export.d.ts.map +1 -0
- package/dist/matter/export.js +2 -0
- package/dist/matter/export.js.map +1 -0
- package/dist/matter/types.d.ts +3 -0
- package/dist/matter/types.d.ts.map +1 -0
- package/dist/matter/types.js +2 -0
- package/dist/matter/types.js.map +1 -0
- package/dist/matterbridge.d.ts +409 -0
- package/dist/matterbridge.d.ts.map +1 -0
- package/dist/matterbridge.js +750 -41
- package/dist/matterbridge.js.map +1 -0
- package/dist/matterbridgeAccessoryPlatform.d.ts +39 -0
- package/dist/matterbridgeAccessoryPlatform.d.ts.map +1 -0
- package/dist/matterbridgeAccessoryPlatform.js +33 -0
- package/dist/matterbridgeAccessoryPlatform.js.map +1 -0
- package/dist/matterbridgeBehaviors.d.ts +1056 -0
- package/dist/matterbridgeBehaviors.d.ts.map +1 -0
- package/dist/matterbridgeBehaviors.js +32 -1
- package/dist/matterbridgeBehaviors.js.map +1 -0
- package/dist/matterbridgeDeviceTypes.d.ts +177 -0
- package/dist/matterbridgeDeviceTypes.d.ts.map +1 -0
- package/dist/matterbridgeDeviceTypes.js +112 -11
- package/dist/matterbridgeDeviceTypes.js.map +1 -0
- package/dist/matterbridgeDynamicPlatform.d.ts +39 -0
- package/dist/matterbridgeDynamicPlatform.d.ts.map +1 -0
- package/dist/matterbridgeDynamicPlatform.js +33 -0
- package/dist/matterbridgeDynamicPlatform.js.map +1 -0
- package/dist/matterbridgeEndpoint.d.ts +835 -0
- package/dist/matterbridgeEndpoint.d.ts.map +1 -0
- package/dist/matterbridgeEndpoint.js +690 -6
- package/dist/matterbridgeEndpoint.js.map +1 -0
- package/dist/matterbridgeEndpointHelpers.d.ts +2275 -0
- package/dist/matterbridgeEndpointHelpers.d.ts.map +1 -0
- package/dist/matterbridgeEndpointHelpers.js +117 -9
- package/dist/matterbridgeEndpointHelpers.js.map +1 -0
- package/dist/matterbridgePlatform.d.ts +159 -0
- package/dist/matterbridgePlatform.d.ts.map +1 -0
- package/dist/matterbridgePlatform.js +121 -5
- package/dist/matterbridgePlatform.js.map +1 -0
- package/dist/matterbridgeTypes.d.ts +169 -0
- package/dist/matterbridgeTypes.d.ts.map +1 -0
- package/dist/matterbridgeTypes.js +24 -0
- package/dist/matterbridgeTypes.js.map +1 -0
- package/dist/pluginManager.d.ts +236 -0
- package/dist/pluginManager.d.ts.map +1 -0
- package/dist/pluginManager.js +231 -4
- package/dist/pluginManager.js.map +1 -0
- package/dist/storage/export.d.ts +2 -0
- package/dist/storage/export.d.ts.map +1 -0
- package/dist/storage/export.js +1 -0
- package/dist/storage/export.js.map +1 -0
- package/dist/utils/colorUtils.d.ts +61 -0
- package/dist/utils/colorUtils.d.ts.map +1 -0
- package/dist/utils/colorUtils.js +205 -2
- package/dist/utils/colorUtils.js.map +1 -0
- package/dist/utils/export.d.ts +3 -0
- package/dist/utils/export.d.ts.map +1 -0
- package/dist/utils/export.js +1 -0
- package/dist/utils/export.js.map +1 -0
- package/dist/utils/utils.d.ts +231 -0
- package/dist/utils/utils.d.ts.map +1 -0
- package/dist/utils/utils.js +264 -10
- package/dist/utils/utils.js.map +1 -0
- package/npm-shrinkwrap.json +2 -2
- package/package.json +2 -1
package/dist/pluginManager.js
CHANGED
|
@@ -1,4 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This file contains the Plugins class.
|
|
3
|
+
*
|
|
4
|
+
* @file plugins.ts
|
|
5
|
+
* @author Luca Liguori
|
|
6
|
+
* @date 2024-07-14
|
|
7
|
+
* @version 1.1.0
|
|
8
|
+
*
|
|
9
|
+
* Copyright 2024, 2025, 2026 Luca Liguori.
|
|
10
|
+
*
|
|
11
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
12
|
+
* you may not use this file except in compliance with the License.
|
|
13
|
+
* You may obtain a copy of the License at
|
|
14
|
+
*
|
|
15
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
16
|
+
*
|
|
17
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
18
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
19
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
20
|
+
* See the License for the specific language governing permissions and
|
|
21
|
+
* limitations under the License. *
|
|
22
|
+
*/
|
|
23
|
+
// NodeStorage and AnsiLogger modules
|
|
1
24
|
import { AnsiLogger, BLUE, db, er, nf, nt, rs, UNDERLINE, UNDERLINEOFF, wr } from './logger/export.js';
|
|
25
|
+
// Node.js modules
|
|
2
26
|
import path from 'path';
|
|
3
27
|
import { promises as fs } from 'fs';
|
|
4
28
|
import { pathToFileURL } from 'url';
|
|
@@ -12,8 +36,9 @@ export class PluginManager {
|
|
|
12
36
|
log;
|
|
13
37
|
constructor(matterbridge) {
|
|
14
38
|
this.matterbridge = matterbridge;
|
|
39
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
15
40
|
this.nodeContext = matterbridge.nodeContext;
|
|
16
|
-
this.log = new AnsiLogger({ logName: 'PluginManager', logTimestampFormat: 4
|
|
41
|
+
this.log = new AnsiLogger({ logName: 'PluginManager', logTimestampFormat: 4 /* TimestampFormat.TIME_MILLIS */, logLevel: matterbridge.log.logLevel });
|
|
17
42
|
this.log.debug('Matterbridge plugin manager starting...');
|
|
18
43
|
}
|
|
19
44
|
get length() {
|
|
@@ -50,6 +75,7 @@ export class PluginManager {
|
|
|
50
75
|
}
|
|
51
76
|
catch (error) {
|
|
52
77
|
this.log.error(`Error processing forEach plugin ${plg}${plugin.name}${er}:`, error);
|
|
78
|
+
// throw error;
|
|
53
79
|
}
|
|
54
80
|
});
|
|
55
81
|
await Promise.all(tasks);
|
|
@@ -57,13 +83,31 @@ export class PluginManager {
|
|
|
57
83
|
set logLevel(logLevel) {
|
|
58
84
|
this.log.logLevel = logLevel;
|
|
59
85
|
}
|
|
86
|
+
/**
|
|
87
|
+
* Loads registered plugins from storage.
|
|
88
|
+
*
|
|
89
|
+
* This method retrieves an array of registered plugins from the storage and converts it
|
|
90
|
+
* into a map where the plugin names are the keys and the plugin objects are the values.
|
|
91
|
+
*
|
|
92
|
+
* @returns {Promise<RegisteredPlugin[]>} A promise that resolves to an array of registered plugins.
|
|
93
|
+
*/
|
|
60
94
|
async loadFromStorage() {
|
|
95
|
+
// Load the array from storage and convert it to a map
|
|
61
96
|
const pluginsArray = await this.nodeContext.get('plugins', []);
|
|
62
97
|
for (const plugin of pluginsArray)
|
|
63
98
|
this._plugins.set(plugin.name, plugin);
|
|
64
99
|
return pluginsArray;
|
|
65
100
|
}
|
|
101
|
+
/**
|
|
102
|
+
* Loads registered plugins from storage.
|
|
103
|
+
*
|
|
104
|
+
* This method retrieves an array of registered plugins from the storage and converts it
|
|
105
|
+
* into a map where the plugin names are the keys and the plugin objects are the values.
|
|
106
|
+
*
|
|
107
|
+
* @returns {Promise<RegisteredPlugin[]>} A promise that resolves to an array of registered plugins.
|
|
108
|
+
*/
|
|
66
109
|
async saveToStorage() {
|
|
110
|
+
// Convert the map to an array
|
|
67
111
|
const plugins = [];
|
|
68
112
|
const pluginArrayFromMap = Array.from(this._plugins.values());
|
|
69
113
|
for (const plugin of pluginArrayFromMap) {
|
|
@@ -83,11 +127,18 @@ export class PluginManager {
|
|
|
83
127
|
this.log.debug(`Saved ${BLUE}${plugins.length}${db} plugins to storage`);
|
|
84
128
|
return plugins.length;
|
|
85
129
|
}
|
|
130
|
+
/**
|
|
131
|
+
* Resolves the name of a plugin by loading and parsing its package.json file.
|
|
132
|
+
* @param pluginPath - The path to the plugin or the path to the plugin's package.json file.
|
|
133
|
+
* @returns The path to the resolved package.json file, or null if the package.json file is not found or does not contain a name.
|
|
134
|
+
*/
|
|
86
135
|
async resolve(pluginPath) {
|
|
87
136
|
if (!pluginPath.endsWith('package.json'))
|
|
88
137
|
pluginPath = path.join(pluginPath, 'package.json');
|
|
138
|
+
// Resolve the package.json of the plugin
|
|
89
139
|
let packageJsonPath = path.resolve(pluginPath);
|
|
90
140
|
this.log.debug(`Resolving plugin path ${plg}${packageJsonPath}${db}`);
|
|
141
|
+
// Check if the package.json file exists
|
|
91
142
|
try {
|
|
92
143
|
await fs.access(packageJsonPath);
|
|
93
144
|
}
|
|
@@ -97,11 +148,13 @@ export class PluginManager {
|
|
|
97
148
|
this.log.debug(`Trying at ${plg}${packageJsonPath}${db}`);
|
|
98
149
|
}
|
|
99
150
|
try {
|
|
151
|
+
// Load the package.json of the plugin
|
|
100
152
|
const packageJson = JSON.parse(await fs.readFile(packageJsonPath, 'utf8'));
|
|
101
153
|
if (!packageJson.name) {
|
|
102
154
|
this.log.error(`Package.json name not found at ${packageJsonPath}`);
|
|
103
155
|
return null;
|
|
104
156
|
}
|
|
157
|
+
// Check for main issues
|
|
105
158
|
if (!packageJson.type || packageJson.type !== 'module') {
|
|
106
159
|
this.log.error(`Plugin at ${packageJsonPath} is not a module`);
|
|
107
160
|
return null;
|
|
@@ -110,6 +163,7 @@ export class PluginManager {
|
|
|
110
163
|
this.log.error(`Plugin at ${packageJsonPath} has no main entrypoint in package.json`);
|
|
111
164
|
return null;
|
|
112
165
|
}
|
|
166
|
+
// Check for @project-chip and @matter packages in dependencies and devDependencies
|
|
113
167
|
const checkForProjectChipPackages = (dependencies) => {
|
|
114
168
|
return Object.keys(dependencies).filter((pkg) => pkg.startsWith('@project-chip') || pkg.startsWith('@matter'));
|
|
115
169
|
};
|
|
@@ -131,6 +185,7 @@ export class PluginManager {
|
|
|
131
185
|
this.log.error(`Please open an issue on the plugin repository to remove them.`);
|
|
132
186
|
return null;
|
|
133
187
|
}
|
|
188
|
+
// Check for matterbridge package in dependencies and devDependencies
|
|
134
189
|
const checkForMatterbridgePackage = (dependencies) => {
|
|
135
190
|
return Object.keys(dependencies).filter((pkg) => pkg === 'matterbridge');
|
|
136
191
|
};
|
|
@@ -160,6 +215,11 @@ export class PluginManager {
|
|
|
160
215
|
return null;
|
|
161
216
|
}
|
|
162
217
|
}
|
|
218
|
+
/**
|
|
219
|
+
* Loads and parse the plugin package.json and returns it.
|
|
220
|
+
* @param plugin - The plugin to load the package from.
|
|
221
|
+
* @returns A Promise that resolves to the package.json object or undefined if the package.json could not be loaded.
|
|
222
|
+
*/
|
|
163
223
|
async parse(plugin) {
|
|
164
224
|
this.log.debug(`Parsing package.json of plugin ${plg}${plugin.name}${db}`);
|
|
165
225
|
try {
|
|
@@ -184,6 +244,7 @@ export class PluginManager {
|
|
|
184
244
|
this.log.warn(`Plugin ${plg}${plugin.name}${wr} has no path`);
|
|
185
245
|
if (!plugin.type)
|
|
186
246
|
this.log.warn(`Plugin ${plg}${plugin.name}${wr} has no type`);
|
|
247
|
+
// Check for @project-chip and @matter packages in dependencies and devDependencies
|
|
187
248
|
const checkForProjectChipPackages = (dependencies) => {
|
|
188
249
|
return Object.keys(dependencies).filter((pkg) => pkg.startsWith('@project-chip') || pkg.startsWith('@matter'));
|
|
189
250
|
};
|
|
@@ -205,6 +266,7 @@ export class PluginManager {
|
|
|
205
266
|
this.log.error(`Please open an issue on the plugin repository to remove them.`);
|
|
206
267
|
return null;
|
|
207
268
|
}
|
|
269
|
+
// Check for matterbridge package in dependencies and devDependencies
|
|
208
270
|
const checkForMatterbridgePackage = (dependencies) => {
|
|
209
271
|
return Object.keys(dependencies).filter((pkg) => pkg === 'matterbridge');
|
|
210
272
|
};
|
|
@@ -226,6 +288,7 @@ export class PluginManager {
|
|
|
226
288
|
this.log.error(`Please open an issue on the plugin repository to remove them.`);
|
|
227
289
|
return null;
|
|
228
290
|
}
|
|
291
|
+
// await this.saveToStorage(); // No need to save the plugin to storage
|
|
229
292
|
return packageJson;
|
|
230
293
|
}
|
|
231
294
|
catch (err) {
|
|
@@ -234,6 +297,16 @@ export class PluginManager {
|
|
|
234
297
|
return null;
|
|
235
298
|
}
|
|
236
299
|
}
|
|
300
|
+
/**
|
|
301
|
+
* Enables a plugin by its name or path.
|
|
302
|
+
*
|
|
303
|
+
* This method enables a plugin by setting its `enabled` property to `true` and saving the updated
|
|
304
|
+
* plugin information to storage. It first checks if the plugin is already registered in the `_plugins` map.
|
|
305
|
+
* If not, it attempts to resolve the plugin's `package.json` file to retrieve its name and enable it.
|
|
306
|
+
*
|
|
307
|
+
* @param {string} nameOrPath - The name or path of the plugin to enable.
|
|
308
|
+
* @returns {Promise<RegisteredPlugin | null>} A promise that resolves to the enabled plugin object, or null if the plugin could not be enabled.
|
|
309
|
+
*/
|
|
237
310
|
async enable(nameOrPath) {
|
|
238
311
|
if (!nameOrPath || nameOrPath === '')
|
|
239
312
|
return null;
|
|
@@ -266,6 +339,16 @@ export class PluginManager {
|
|
|
266
339
|
return null;
|
|
267
340
|
}
|
|
268
341
|
}
|
|
342
|
+
/**
|
|
343
|
+
* Enables a plugin by its name or path.
|
|
344
|
+
*
|
|
345
|
+
* This method enables a plugin by setting its `enabled` property to `true` and saving the updated
|
|
346
|
+
* plugin information to storage. It first checks if the plugin is already registered in the `_plugins` map.
|
|
347
|
+
* If not, it attempts to resolve the plugin's `package.json` file to retrieve its name and enable it.
|
|
348
|
+
*
|
|
349
|
+
* @param {string} nameOrPath - The name or path of the plugin to enable.
|
|
350
|
+
* @returns {Promise<RegisteredPlugin | null>} A promise that resolves to the enabled plugin object, or null if the plugin could not be enabled.
|
|
351
|
+
*/
|
|
269
352
|
async disable(nameOrPath) {
|
|
270
353
|
if (!nameOrPath || nameOrPath === '')
|
|
271
354
|
return null;
|
|
@@ -298,6 +381,16 @@ export class PluginManager {
|
|
|
298
381
|
return null;
|
|
299
382
|
}
|
|
300
383
|
}
|
|
384
|
+
/**
|
|
385
|
+
* Removes a plugin by its name or path.
|
|
386
|
+
*
|
|
387
|
+
* This method removes a plugin from the `_plugins` map and saves the updated plugin information to storage.
|
|
388
|
+
* It first checks if the plugin is already registered in the `_plugins` map. If not, it attempts to resolve
|
|
389
|
+
* the plugin's `package.json` file to retrieve its name and remove it.
|
|
390
|
+
*
|
|
391
|
+
* @param {string} nameOrPath - The name or path of the plugin to remove.
|
|
392
|
+
* @returns {Promise<RegisteredPlugin | null>} A promise that resolves to the removed plugin object, or null if the plugin could not be removed.
|
|
393
|
+
*/
|
|
301
394
|
async remove(nameOrPath) {
|
|
302
395
|
if (!nameOrPath || nameOrPath === '')
|
|
303
396
|
return null;
|
|
@@ -330,6 +423,17 @@ export class PluginManager {
|
|
|
330
423
|
return null;
|
|
331
424
|
}
|
|
332
425
|
}
|
|
426
|
+
/**
|
|
427
|
+
* Adds a plugin by its name or path.
|
|
428
|
+
*
|
|
429
|
+
* This method adds a plugin to the `_plugins` map and saves the updated plugin information to storage.
|
|
430
|
+
* It first resolves the plugin's `package.json` file to retrieve its details. If the plugin is already
|
|
431
|
+
* registered, it logs an info message and returns null. Otherwise, it registers the plugin, enables it,
|
|
432
|
+
* and saves the updated plugin information to storage.
|
|
433
|
+
*
|
|
434
|
+
* @param {string} nameOrPath - The name or path of the plugin to add.
|
|
435
|
+
* @returns {Promise<RegisteredPlugin | null>} A promise that resolves to the added plugin object, or null if the plugin could not be added.
|
|
436
|
+
*/
|
|
333
437
|
async add(nameOrPath) {
|
|
334
438
|
if (!nameOrPath || nameOrPath === '')
|
|
335
439
|
return null;
|
|
@@ -355,9 +459,19 @@ export class PluginManager {
|
|
|
355
459
|
return null;
|
|
356
460
|
}
|
|
357
461
|
}
|
|
462
|
+
/**
|
|
463
|
+
* Installs a plugin by its name.
|
|
464
|
+
*
|
|
465
|
+
* This method first uninstalls any existing version of the plugin, then installs the plugin globally using npm.
|
|
466
|
+
* It logs the installation process and retrieves the installed version of the plugin.
|
|
467
|
+
*
|
|
468
|
+
* @param {string} name - The name of the plugin to install.
|
|
469
|
+
* @returns {Promise<string | undefined>} A promise that resolves to the installed version of the plugin, or undefined if the installation failed.
|
|
470
|
+
*/
|
|
358
471
|
async install(name) {
|
|
359
472
|
await this.uninstall(name);
|
|
360
473
|
this.log.info(`Installing plugin ${plg}${name}${nf}`);
|
|
474
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
361
475
|
return new Promise((resolve, reject) => {
|
|
362
476
|
exec(`npm install -g ${name} --omit=dev --force`, (error, stdout, stderr) => {
|
|
363
477
|
if (error) {
|
|
@@ -368,11 +482,14 @@ export class PluginManager {
|
|
|
368
482
|
else {
|
|
369
483
|
this.log.info(`Installed plugin ${plg}${name}${nf}`);
|
|
370
484
|
this.log.debug(`Installed plugin ${plg}${name}${db}: ${stdout}`);
|
|
485
|
+
// Get the installed version
|
|
486
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
371
487
|
exec(`npm list -g ${name} --depth=0`, (listError, listStdout, listStderr) => {
|
|
372
488
|
if (listError) {
|
|
373
489
|
this.log.error(`List error: ${listError}`);
|
|
374
490
|
resolve(undefined);
|
|
375
491
|
}
|
|
492
|
+
// Clean the output to get only the package name and version
|
|
376
493
|
const lines = listStdout.split('\n');
|
|
377
494
|
const versionLine = lines.find((line) => line.includes(`${name}@`));
|
|
378
495
|
if (versionLine) {
|
|
@@ -388,8 +505,18 @@ export class PluginManager {
|
|
|
388
505
|
});
|
|
389
506
|
});
|
|
390
507
|
}
|
|
508
|
+
/**
|
|
509
|
+
* Uninstalls a plugin by its name.
|
|
510
|
+
*
|
|
511
|
+
* This method uninstalls a globally installed plugin using npm. It logs the uninstallation process
|
|
512
|
+
* and returns the name of the uninstalled plugin if successful, or undefined if the uninstallation failed.
|
|
513
|
+
*
|
|
514
|
+
* @param {string} name - The name of the plugin to uninstall.
|
|
515
|
+
* @returns {Promise<string | undefined>} A promise that resolves to the name of the uninstalled plugin, or undefined if the uninstallation failed.
|
|
516
|
+
*/
|
|
391
517
|
async uninstall(name) {
|
|
392
518
|
this.log.info(`Uninstalling plugin ${plg}${name}${nf}`);
|
|
519
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
393
520
|
return new Promise((resolve, reject) => {
|
|
394
521
|
exec(`npm uninstall -g ${name} --force`, (error, stdout, stderr) => {
|
|
395
522
|
if (error) {
|
|
@@ -405,6 +532,14 @@ export class PluginManager {
|
|
|
405
532
|
});
|
|
406
533
|
});
|
|
407
534
|
}
|
|
535
|
+
/**
|
|
536
|
+
* Loads a plugin and returns the corresponding MatterbridgePlatform instance.
|
|
537
|
+
* @param plugin - The plugin to load.
|
|
538
|
+
* @param start - Optional flag indicating whether to start the plugin after loading. Default is false.
|
|
539
|
+
* @param message - Optional message to pass to the plugin when starting.
|
|
540
|
+
* @returns A Promise that resolves to the loaded MatterbridgePlatform instance.
|
|
541
|
+
* @throws An error if the plugin is not enabled, already loaded, or fails to load.
|
|
542
|
+
*/
|
|
408
543
|
async load(plugin, start = false, message = '', configure = false) {
|
|
409
544
|
if (!plugin.enabled) {
|
|
410
545
|
this.log.error(`Plugin ${plg}${plugin.name}${er} not enabled`);
|
|
@@ -416,14 +551,19 @@ export class PluginManager {
|
|
|
416
551
|
}
|
|
417
552
|
this.log.info(`Loading plugin ${plg}${plugin.name}${nf} type ${typ}${plugin.type}${nf}`);
|
|
418
553
|
try {
|
|
554
|
+
// Load the package.json of the plugin
|
|
419
555
|
const packageJson = JSON.parse(await fs.readFile(plugin.path, 'utf8'));
|
|
556
|
+
// Resolve the main module path relative to package.json
|
|
420
557
|
const pluginEntry = path.resolve(path.dirname(plugin.path), packageJson.main);
|
|
558
|
+
// Dynamically import the plugin
|
|
421
559
|
const pluginUrl = pathToFileURL(pluginEntry);
|
|
422
560
|
this.log.debug(`Importing plugin ${plg}${plugin.name}${db} from ${pluginUrl.href}`);
|
|
423
561
|
const pluginInstance = await import(pluginUrl.href);
|
|
424
562
|
this.log.debug(`Imported plugin ${plg}${plugin.name}${db} from ${pluginUrl.href}`);
|
|
563
|
+
// Call the default export function of the plugin, passing this MatterBridge instance, the log and the config
|
|
425
564
|
if (pluginInstance.default) {
|
|
426
565
|
const config = await this.loadConfig(plugin);
|
|
566
|
+
// Preset the plugin properties here in case the plugin throws an error during loading. In this case the user can change the config and restart the plugin.
|
|
427
567
|
plugin.name = packageJson.name;
|
|
428
568
|
plugin.description = packageJson.description ?? 'No description';
|
|
429
569
|
plugin.version = packageJson.version;
|
|
@@ -432,7 +572,7 @@ export class PluginManager {
|
|
|
432
572
|
plugin.schemaJson = await this.loadSchema(plugin);
|
|
433
573
|
config.name = plugin.name;
|
|
434
574
|
config.version = packageJson.version;
|
|
435
|
-
const log = new AnsiLogger({ logName: plugin.description ?? 'No description', logTimestampFormat: 4
|
|
575
|
+
const log = new AnsiLogger({ logName: plugin.description ?? 'No description', logTimestampFormat: 4 /* TimestampFormat.TIME_MILLIS */, logLevel: config.debug ? "debug" /* LogLevel.DEBUG */ : this.matterbridge.log.logLevel });
|
|
436
576
|
const platform = pluginInstance.default(this.matterbridge, log, config);
|
|
437
577
|
config.type = platform.type;
|
|
438
578
|
platform.name = packageJson.name;
|
|
@@ -449,8 +589,8 @@ export class PluginManager {
|
|
|
449
589
|
plugin.addedDevices = 0;
|
|
450
590
|
plugin.configJson = config;
|
|
451
591
|
plugin.schemaJson = await this.loadSchema(plugin);
|
|
452
|
-
await this.saveToStorage();
|
|
453
|
-
this.log.notice(`Loaded plugin ${plg}${plugin.name}${
|
|
592
|
+
await this.saveToStorage(); // Save the plugin to storage
|
|
593
|
+
this.log.notice(`Loaded plugin ${plg}${plugin.name}${nt} type ${typ}${platform.type}${nt} (entrypoint ${UNDERLINE}${pluginEntry}${UNDERLINEOFF})`);
|
|
454
594
|
if (start)
|
|
455
595
|
await this.start(plugin, message, false);
|
|
456
596
|
if (configure)
|
|
@@ -468,6 +608,14 @@ export class PluginManager {
|
|
|
468
608
|
}
|
|
469
609
|
return undefined;
|
|
470
610
|
}
|
|
611
|
+
/**
|
|
612
|
+
* Starts a plugin.
|
|
613
|
+
*
|
|
614
|
+
* @param {RegisteredPlugin} plugin - The plugin to start.
|
|
615
|
+
* @param {string} [message] - Optional message to pass to the plugin's onStart method.
|
|
616
|
+
* @param {boolean} [configure] - Indicates whether to configure the plugin after starting (default false).
|
|
617
|
+
* @returns {Promise<RegisteredPlugin | undefined>} A promise that resolves when the plugin is started successfully, or rejects with an error if starting the plugin fails.
|
|
618
|
+
*/
|
|
471
619
|
async start(plugin, message, configure = false) {
|
|
472
620
|
if (!plugin.loaded) {
|
|
473
621
|
this.log.error(`Plugin ${plg}${plugin.name}${er} not loaded`);
|
|
@@ -497,6 +645,12 @@ export class PluginManager {
|
|
|
497
645
|
}
|
|
498
646
|
return undefined;
|
|
499
647
|
}
|
|
648
|
+
/**
|
|
649
|
+
* Configures a plugin.
|
|
650
|
+
*
|
|
651
|
+
* @param {RegisteredPlugin} plugin - The plugin to configure.
|
|
652
|
+
* @returns {Promise<void>} A promise that resolves when the plugin is configured successfully, or rejects with an error if configuration fails.
|
|
653
|
+
*/
|
|
500
654
|
async configure(plugin) {
|
|
501
655
|
if (!plugin.loaded) {
|
|
502
656
|
this.log.error(`Plugin ${plg}${plugin.name}${er} not loaded`);
|
|
@@ -527,6 +681,18 @@ export class PluginManager {
|
|
|
527
681
|
}
|
|
528
682
|
return undefined;
|
|
529
683
|
}
|
|
684
|
+
/**
|
|
685
|
+
* Shuts down a plugin.
|
|
686
|
+
*
|
|
687
|
+
* This method shuts down a plugin by calling its `onShutdown` method and resetting its state.
|
|
688
|
+
* It logs the shutdown process and optionally removes all devices associated with the plugin.
|
|
689
|
+
*
|
|
690
|
+
* @param {RegisteredPlugin} plugin - The plugin to shut down.
|
|
691
|
+
* @param {string} [reason] - The reason for shutting down the plugin.
|
|
692
|
+
* @param {boolean} [removeAllDevices=false] - Whether to remove all devices associated with the plugin.
|
|
693
|
+
* @param {boolean} [force=false] - Whether to force the shutdown even if the plugin is not loaded or started.
|
|
694
|
+
* @returns {Promise<RegisteredPlugin | undefined>} A promise that resolves to the shut down plugin object, or undefined if the shutdown failed.
|
|
695
|
+
*/
|
|
530
696
|
async shutdown(plugin, reason, removeAllDevices = false, force = false) {
|
|
531
697
|
this.log.debug(`Shutting down plugin ${plg}${plugin.name}${db}`);
|
|
532
698
|
if (!plugin.loaded) {
|
|
@@ -569,6 +735,15 @@ export class PluginManager {
|
|
|
569
735
|
}
|
|
570
736
|
return undefined;
|
|
571
737
|
}
|
|
738
|
+
/**
|
|
739
|
+
* Loads the configuration for a plugin.
|
|
740
|
+
* If the configuration file exists, it reads the file and returns the parsed JSON data.
|
|
741
|
+
* If the configuration file does not exist, it creates a new file with default configuration and returns it.
|
|
742
|
+
* If any error occurs during file access or creation, it logs an error and return un empty config.
|
|
743
|
+
*
|
|
744
|
+
* @param plugin - The plugin for which to load the configuration.
|
|
745
|
+
* @returns A promise that resolves to the loaded or created configuration.
|
|
746
|
+
*/
|
|
572
747
|
async loadConfig(plugin) {
|
|
573
748
|
const configFile = path.join(this.matterbridge.matterbridgeDirectory, `${plugin.name}.config.json`);
|
|
574
749
|
try {
|
|
@@ -576,6 +751,8 @@ export class PluginManager {
|
|
|
576
751
|
const data = await fs.readFile(configFile, 'utf8');
|
|
577
752
|
const config = JSON.parse(data);
|
|
578
753
|
this.log.debug(`Loaded config file ${configFile} for plugin ${plg}${plugin.name}${db}.`);
|
|
754
|
+
// this.log.debug(`Loaded config file ${configFile} for plugin ${plg}${plugin.name}${db}.\nConfig:${rs}\n`, config);
|
|
755
|
+
// The first time a plugin is added to the system, the config file is created with the plugin name and type "AnyPlatform".
|
|
579
756
|
config.name = plugin.name;
|
|
580
757
|
config.type = plugin.type;
|
|
581
758
|
if (config.debug === undefined)
|
|
@@ -600,6 +777,7 @@ export class PluginManager {
|
|
|
600
777
|
try {
|
|
601
778
|
await fs.writeFile(configFile, JSON.stringify(config, null, 2), 'utf8');
|
|
602
779
|
this.log.debug(`Created config file ${configFile} for plugin ${plg}${plugin.name}${db}.`);
|
|
780
|
+
// this.log.debug(`Created config file ${configFile} for plugin ${plg}${plugin.name}${db}.\nConfig:${rs}\n`, config);
|
|
603
781
|
return config;
|
|
604
782
|
}
|
|
605
783
|
catch (err) {
|
|
@@ -616,6 +794,18 @@ export class PluginManager {
|
|
|
616
794
|
return { name: plugin.name, type: plugin.type, debug: false, unregisterOnShutdown: false };
|
|
617
795
|
}
|
|
618
796
|
}
|
|
797
|
+
/**
|
|
798
|
+
* Saves the configuration of a plugin to a file.
|
|
799
|
+
*
|
|
800
|
+
* This method saves the configuration of the specified plugin to a JSON file in the matterbridge directory.
|
|
801
|
+
* If the plugin's configuration is not found, it logs an error and rejects the promise. If the configuration
|
|
802
|
+
* is successfully saved, it logs a debug message. If an error occurs during the file write operation, it logs
|
|
803
|
+
* the error and rejects the promise.
|
|
804
|
+
*
|
|
805
|
+
* @param {RegisteredPlugin} plugin - The plugin whose configuration is to be saved.
|
|
806
|
+
* @returns {Promise<void>} A promise that resolves when the configuration is successfully saved, or rejects if an error occurs.
|
|
807
|
+
* @throws {Error} If the plugin's configuration is not found.
|
|
808
|
+
*/
|
|
619
809
|
async saveConfigFromPlugin(plugin) {
|
|
620
810
|
if (!plugin.platform?.config) {
|
|
621
811
|
this.log.error(`Error saving config file for plugin ${plg}${plugin.name}${er}: config not found`);
|
|
@@ -625,6 +815,7 @@ export class PluginManager {
|
|
|
625
815
|
try {
|
|
626
816
|
await fs.writeFile(configFile, JSON.stringify(plugin.platform.config, null, 2), 'utf8');
|
|
627
817
|
this.log.debug(`Saved config file ${configFile} for plugin ${plg}${plugin.name}${db}`);
|
|
818
|
+
// this.log.debug(`Saved config file ${configFile} for plugin ${plg}${plugin.name}${db}.\nConfig:${rs}\n`, plugin.platform.config);
|
|
628
819
|
return Promise.resolve();
|
|
629
820
|
}
|
|
630
821
|
catch (err) {
|
|
@@ -632,6 +823,19 @@ export class PluginManager {
|
|
|
632
823
|
return Promise.reject(err);
|
|
633
824
|
}
|
|
634
825
|
}
|
|
826
|
+
/**
|
|
827
|
+
* Saves the configuration of a plugin from a JSON object to a file.
|
|
828
|
+
*
|
|
829
|
+
* This method saves the provided configuration of the specified plugin to a JSON file in the matterbridge directory.
|
|
830
|
+
* It first checks if the configuration data is valid by ensuring it contains the correct name and type, and matches
|
|
831
|
+
* the plugin's name. If the configuration data is invalid, it logs an error and returns. If the configuration is
|
|
832
|
+
* successfully saved, it updates the plugin's `configJson` property and logs a debug message. If an error occurs
|
|
833
|
+
* during the file write operation, it logs the error and returns.
|
|
834
|
+
*
|
|
835
|
+
* @param {RegisteredPlugin} plugin - The plugin whose configuration is to be saved.
|
|
836
|
+
* @param {PlatformConfig} config - The configuration data to be saved.
|
|
837
|
+
* @returns {Promise<void>} A promise that resolves when the configuration is successfully saved, or returns if an error occurs.
|
|
838
|
+
*/
|
|
635
839
|
async saveConfigFromJson(plugin, config) {
|
|
636
840
|
if (!config.name || !config.type || config.name !== plugin.name) {
|
|
637
841
|
this.log.error(`Error saving config file for plugin ${plg}${plugin.name}${er}. Wrong config data content:${rs}\n`, config);
|
|
@@ -642,12 +846,23 @@ export class PluginManager {
|
|
|
642
846
|
await fs.writeFile(configFile, JSON.stringify(config, null, 2), 'utf8');
|
|
643
847
|
plugin.configJson = config;
|
|
644
848
|
this.log.debug(`Saved config file ${configFile} for plugin ${plg}${plugin.name}${db}`);
|
|
849
|
+
// this.log.debug(`Saved config file ${configFile} for plugin ${plg}${plugin.name}${db}.\nConfig:${rs}\n`, config);
|
|
645
850
|
}
|
|
646
851
|
catch (err) {
|
|
647
852
|
this.log.error(`Error saving config file ${configFile} for plugin ${plg}${plugin.name}${er}: ${err}`);
|
|
648
853
|
return;
|
|
649
854
|
}
|
|
650
855
|
}
|
|
856
|
+
/**
|
|
857
|
+
* Loads the schema for a plugin.
|
|
858
|
+
*
|
|
859
|
+
* This method attempts to load the schema file for the specified plugin. If the schema file is found,
|
|
860
|
+
* it reads and parses the file, updates the schema's title and description, and logs the process.
|
|
861
|
+
* If the schema file is not found, it logs the event and loads a default schema for the plugin.
|
|
862
|
+
*
|
|
863
|
+
* @param {RegisteredPlugin} plugin - The plugin whose schema is to be loaded.
|
|
864
|
+
* @returns {Promise<PlatformSchema>} A promise that resolves to the loaded schema object, or the default schema if the schema file is not found.
|
|
865
|
+
*/
|
|
651
866
|
async loadSchema(plugin) {
|
|
652
867
|
const schemaFile = plugin.path.replace('package.json', `${plugin.name}.schema.json`);
|
|
653
868
|
try {
|
|
@@ -657,6 +872,7 @@ export class PluginManager {
|
|
|
657
872
|
schema.title = plugin.description;
|
|
658
873
|
schema.description = plugin.name + ' v. ' + plugin.version + ' by ' + plugin.author;
|
|
659
874
|
this.log.debug(`Loaded schema file ${schemaFile} for plugin ${plg}${plugin.name}${db}.`);
|
|
875
|
+
// this.log.debug(`Loaded schema file ${schemaFile} for plugin ${plg}${plugin.name}${db}.\nSchema:${rs}\n`, schema);
|
|
660
876
|
return schema;
|
|
661
877
|
}
|
|
662
878
|
catch (error) {
|
|
@@ -664,6 +880,16 @@ export class PluginManager {
|
|
|
664
880
|
return this.getDefaultSchema(plugin);
|
|
665
881
|
}
|
|
666
882
|
}
|
|
883
|
+
/**
|
|
884
|
+
* Returns the default schema for a plugin.
|
|
885
|
+
*
|
|
886
|
+
* This method generates a default schema object for the specified plugin. The schema includes
|
|
887
|
+
* metadata such as the plugin's title, description, version, and author. It also defines the
|
|
888
|
+
* properties of the schema, including the plugin's name, type, debug flag, and unregisterOnShutdown flag.
|
|
889
|
+
*
|
|
890
|
+
* @param {RegisteredPlugin} plugin - The plugin for which the default schema is to be generated.
|
|
891
|
+
* @returns {PlatformSchema} The default schema object for the plugin.
|
|
892
|
+
*/
|
|
667
893
|
getDefaultSchema(plugin) {
|
|
668
894
|
return {
|
|
669
895
|
title: plugin.description,
|
|
@@ -694,3 +920,4 @@ export class PluginManager {
|
|
|
694
920
|
};
|
|
695
921
|
}
|
|
696
922
|
}
|
|
923
|
+
//# sourceMappingURL=pluginManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pluginManager.js","sourceRoot":"","sources":["../src/pluginManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"export.d.ts","sourceRoot":"","sources":["../../src/storage/export.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC"}
|
package/dist/storage/export.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"export.js","sourceRoot":"","sources":["../../src/storage/export.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This file contains the color utilities.
|
|
3
|
+
*
|
|
4
|
+
* @file colorUtils.ts
|
|
5
|
+
* @author Luca Liguori
|
|
6
|
+
* @date 2023-10-05
|
|
7
|
+
* @version 1.3.0
|
|
8
|
+
*
|
|
9
|
+
* Copyright 2023, 2024, 2025 Luca Liguori.
|
|
10
|
+
*
|
|
11
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
12
|
+
* you may not use this file except in compliance with the License.
|
|
13
|
+
* You may obtain a copy of the License at
|
|
14
|
+
*
|
|
15
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
16
|
+
*
|
|
17
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
18
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
19
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
20
|
+
* See the License for the specific language governing permissions and
|
|
21
|
+
* limitations under the License. *
|
|
22
|
+
*/
|
|
23
|
+
export interface RGB {
|
|
24
|
+
r: number;
|
|
25
|
+
g: number;
|
|
26
|
+
b: number;
|
|
27
|
+
}
|
|
28
|
+
export interface XY {
|
|
29
|
+
x: number;
|
|
30
|
+
y: number;
|
|
31
|
+
}
|
|
32
|
+
export interface HSL {
|
|
33
|
+
h: number;
|
|
34
|
+
s: number;
|
|
35
|
+
l: number;
|
|
36
|
+
}
|
|
37
|
+
export declare function hslColorToRgbColor(hue: number, saturation: number, luminance: number): RGB;
|
|
38
|
+
export declare function rgbColorToXYColor(rgb: RGB): XY;
|
|
39
|
+
export declare function xyColorToRgbColor(x: number, y: number, brightness?: number): RGB;
|
|
40
|
+
export declare function rgbColorToHslColor(rgb: RGB): HSL;
|
|
41
|
+
export declare function xyToHsl(x: number, y: number): HSL;
|
|
42
|
+
export declare function miredToKelvin(mired: number): number;
|
|
43
|
+
export declare function kelvinToMired(kelvin: number): number;
|
|
44
|
+
export declare function kelvinToRGB(kelvin: number): RGB;
|
|
45
|
+
/**
|
|
46
|
+
* Converts CIE color space to RGB color space
|
|
47
|
+
* @param {Number} x
|
|
48
|
+
* @param {Number} y
|
|
49
|
+
* @param {Number} brightness - Ranges from 1 to 254
|
|
50
|
+
* @return {Array} Array that contains the color values for red, green and blue
|
|
51
|
+
* From: https://github.com/usolved/cie-rgb-converter/blob/master/cie_rgb_converter.js
|
|
52
|
+
*/
|
|
53
|
+
/**
|
|
54
|
+
* Converts RGB color space to CIE color space
|
|
55
|
+
* @param {Number} red
|
|
56
|
+
* @param {Number} green
|
|
57
|
+
* @param {Number} blue
|
|
58
|
+
* @return {Array} Array that contains the CIE color values for x and y
|
|
59
|
+
* From: https://github.com/usolved/cie-rgb-converter/blob/master/cie_rgb_converter.js
|
|
60
|
+
*/
|
|
61
|
+
//# sourceMappingURL=colorUtils.d.ts.map
|