@camera.ui/browser 0.0.2 → 0.0.3
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/package.json +1 -1
- package/dist/client/node/src/api.js +0 -27
- package/dist/client/node/src/api.js.map +0 -1
- package/dist/client/node/src/client.js +0 -106
- package/dist/client/node/src/client.js.map +0 -1
- package/dist/client/node/src/index.js +0 -19
- package/dist/client/node/src/index.js.map +0 -1
- package/dist/client/node/src/proxy/cameraDevice/cameraDevice.browser.js +0 -176
- package/dist/client/node/src/proxy/cameraDevice/cameraDevice.browser.js.map +0 -1
- package/dist/client/node/src/proxy/cameraDevice/cameraDevice.mock.js +0 -3
- package/dist/client/node/src/proxy/cameraDevice/cameraDevice.mock.js.map +0 -1
- package/dist/client/node/src/proxy/cameraDevice/cameraDevice.node.js +0 -51
- package/dist/client/node/src/proxy/cameraDevice/cameraDevice.node.js.map +0 -1
- package/dist/client/node/src/proxy/cameraDevice/index.js +0 -11
- package/dist/client/node/src/proxy/cameraDevice/index.js.map +0 -1
- package/dist/client/node/src/proxy/deviceManager.js +0 -67
- package/dist/client/node/src/proxy/deviceManager.js.map +0 -1
- package/dist/client/node/src/proxy/index.js +0 -21
- package/dist/client/node/src/proxy/index.js.map +0 -1
- package/dist/client/node/src/proxy/pluginsManager.js +0 -25
- package/dist/client/node/src/proxy/pluginsManager.js.map +0 -1
- package/dist/client/node/src/proxy/systemManager.js +0 -25
- package/dist/client/node/src/proxy/systemManager.js.map +0 -1
- package/dist/client/node/src/socket.js +0 -45
- package/dist/client/node/src/socket.js.map +0 -1
- package/dist/client/node/src/types.js +0 -3
- package/dist/client/node/src/types.js.map +0 -1
- package/dist/package.json +0 -149
- package/dist/shared/common/utils.js +0 -66
- package/dist/shared/common/utils.js.map +0 -1
- package/dist/shared/types/index.js +0 -23
- package/dist/shared/types/index.js.map +0 -1
- package/dist/src/api/database/index.js +0 -203
- package/dist/src/api/database/index.js.map +0 -1
- package/dist/src/api/database/types.js +0 -3
- package/dist/src/api/database/types.js.map +0 -1
- package/dist/src/api/go2rtc/api/application.js +0 -32
- package/dist/src/api/go2rtc/api/application.js.map +0 -1
- package/dist/src/api/go2rtc/api/index.js +0 -33
- package/dist/src/api/go2rtc/api/index.js.map +0 -1
- package/dist/src/api/go2rtc/api/snapshot.js +0 -22
- package/dist/src/api/go2rtc/api/snapshot.js.map +0 -1
- package/dist/src/api/go2rtc/api/streams.js +0 -32
- package/dist/src/api/go2rtc/api/streams.js.map +0 -1
- package/dist/src/api/go2rtc/index.js +0 -13
- package/dist/src/api/go2rtc/index.js.map +0 -1
- package/dist/src/api/go2rtc/types.js +0 -3
- package/dist/src/api/go2rtc/types.js.map +0 -1
- package/dist/src/api/middlewares/socketAuth.middleware.js +0 -90
- package/dist/src/api/middlewares/socketAuth.middleware.js.map +0 -1
- package/dist/src/api/schemas/backup.schema.js +0 -94
- package/dist/src/api/schemas/backup.schema.js.map +0 -1
- package/dist/src/api/schemas/cameras.schema.js +0 -124
- package/dist/src/api/schemas/cameras.schema.js.map +0 -1
- package/dist/src/api/schemas/config.schema.js +0 -94
- package/dist/src/api/schemas/config.schema.js.map +0 -1
- package/dist/src/api/schemas/go2rtc.schema.js +0 -204
- package/dist/src/api/schemas/go2rtc.schema.js.map +0 -1
- package/dist/src/api/schemas/users.schema.js +0 -131
- package/dist/src/api/schemas/users.schema.js.map +0 -1
- package/dist/src/api/services/auth.service.js +0 -104
- package/dist/src/api/services/auth.service.js.map +0 -1
- package/dist/src/api/services/cameras.service.js +0 -535
- package/dist/src/api/services/cameras.service.js.map +0 -1
- package/dist/src/api/services/plugins.service.js +0 -115
- package/dist/src/api/services/plugins.service.js.map +0 -1
- package/dist/src/api/services/users.service.js +0 -54
- package/dist/src/api/services/users.service.js.map +0 -1
- package/dist/src/api/types/index.js +0 -12
- package/dist/src/api/types/index.js.map +0 -1
- package/dist/src/api/utils/cert.js +0 -437
- package/dist/src/api/utils/cert.js.map +0 -1
- package/dist/src/api/ws/index.js +0 -89
- package/dist/src/api/ws/index.js.map +0 -1
- package/dist/src/api/ws/nsp/logs.js +0 -121
- package/dist/src/api/ws/nsp/logs.js.map +0 -1
- package/dist/src/api/ws/nsp/main.js +0 -49
- package/dist/src/api/ws/nsp/main.js.map +0 -1
- package/dist/src/api/ws/nsp/metrics.js +0 -225
- package/dist/src/api/ws/nsp/metrics.js.map +0 -1
- package/dist/src/api/ws/nsp/notifications.js +0 -39
- package/dist/src/api/ws/nsp/notifications.js.map +0 -1
- package/dist/src/api/ws/nsp/plugins.js +0 -33
- package/dist/src/api/ws/nsp/plugins.js.map +0 -1
- package/dist/src/api/ws/nsp/status.js +0 -41
- package/dist/src/api/ws/nsp/status.js.map +0 -1
- package/dist/src/api/ws/nsp/streams.js +0 -140
- package/dist/src/api/ws/nsp/streams.js.map +0 -1
- package/dist/src/api/ws/types.js +0 -3
- package/dist/src/api/ws/types.js.map +0 -1
- package/dist/src/api.js +0 -66
- package/dist/src/api.js.map +0 -1
- package/dist/src/camera/index.js +0 -210
- package/dist/src/camera/index.js.map +0 -1
- package/dist/src/camera/streaming/peer-connection.js +0 -157
- package/dist/src/camera/streaming/peer-connection.js.map +0 -1
- package/dist/src/camera/streaming/streaming-session.js +0 -172
- package/dist/src/camera/streaming/streaming-session.js.map +0 -1
- package/dist/src/camera/streaming/webrtc-connection.js +0 -156
- package/dist/src/camera/streaming/webrtc-connection.js.map +0 -1
- package/dist/src/camera/subscribed.js +0 -14
- package/dist/src/camera/subscribed.js.map +0 -1
- package/dist/src/camera/types.js +0 -3
- package/dist/src/camera/types.js.map +0 -1
- package/dist/src/go2rtc/index.js +0 -220
- package/dist/src/go2rtc/index.js.map +0 -1
- package/dist/src/go2rtc/types.js +0 -76
- package/dist/src/go2rtc/types.js.map +0 -1
- package/dist/src/plugins/base.js +0 -26
- package/dist/src/plugins/base.js.map +0 -1
- package/dist/src/plugins/cameraStorage.js +0 -290
- package/dist/src/plugins/cameraStorage.js.map +0 -1
- package/dist/src/plugins/child.js +0 -140
- package/dist/src/plugins/child.js.map +0 -1
- package/dist/src/plugins/config.js +0 -234
- package/dist/src/plugins/config.js.map +0 -1
- package/dist/src/plugins/index.js +0 -328
- package/dist/src/plugins/index.js.map +0 -1
- package/dist/src/plugins/plugin.js +0 -215
- package/dist/src/plugins/plugin.js.map +0 -1
- package/dist/src/plugins/schema.js +0 -717
- package/dist/src/plugins/schema.js.map +0 -1
- package/dist/src/plugins/storage.js +0 -45
- package/dist/src/plugins/storage.js.map +0 -1
- package/dist/src/plugins/types.js +0 -21
- package/dist/src/plugins/types.js.map +0 -1
- package/dist/src/plugins/worker.js +0 -236
- package/dist/src/plugins/worker.js.map +0 -1
- package/dist/src/proxy/client/cameraDevice.js +0 -171
- package/dist/src/proxy/client/cameraDevice.js.map +0 -1
- package/dist/src/proxy/client/deviceManager.js +0 -239
- package/dist/src/proxy/client/deviceManager.js.map +0 -1
- package/dist/src/proxy/client/index.js +0 -21
- package/dist/src/proxy/client/index.js.map +0 -1
- package/dist/src/proxy/client/pluginsManager.js +0 -237
- package/dist/src/proxy/client/pluginsManager.js.map +0 -1
- package/dist/src/proxy/client/systemManager.js +0 -163
- package/dist/src/proxy/client/systemManager.js.map +0 -1
- package/dist/src/proxy/index.js +0 -98
- package/dist/src/proxy/index.js.map +0 -1
- package/dist/src/proxy/proxies/camera.js +0 -72
- package/dist/src/proxy/proxies/camera.js.map +0 -1
- package/dist/src/proxy/proxies/plugin.js +0 -110
- package/dist/src/proxy/proxies/plugin.js.map +0 -1
- package/dist/src/proxy/proxies/server.js +0 -92
- package/dist/src/proxy/proxies/server.js.map +0 -1
- package/dist/src/proxy/types.js +0 -3
- package/dist/src/proxy/types.js.map +0 -1
- package/dist/src/proxy/utils/generateKeys.js +0 -13
- package/dist/src/proxy/utils/generateKeys.js.map +0 -1
- package/dist/src/proxy/ws/index.js +0 -75
- package/dist/src/proxy/ws/index.js.map +0 -1
- package/dist/src/services/config/index.js +0 -319
- package/dist/src/services/config/index.js.map +0 -1
- package/dist/src/services/config/types.js +0 -13
- package/dist/src/services/config/types.js.map +0 -1
- package/dist/src/services/logger/index.js +0 -181
- package/dist/src/services/logger/index.js.map +0 -1
|
@@ -1,234 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.PluginConfigService = void 0;
|
|
7
|
-
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
8
|
-
const object_path_1 = __importDefault(require("object-path"));
|
|
9
|
-
const lodash_clonedeep_1 = __importDefault(require("lodash.clonedeep"));
|
|
10
|
-
class PluginConfigService {
|
|
11
|
-
config = {};
|
|
12
|
-
configFile;
|
|
13
|
-
constructor(configFile) {
|
|
14
|
-
this.configFile = configFile;
|
|
15
|
-
this.init();
|
|
16
|
-
}
|
|
17
|
-
get(key, defaultValue, validate, refresh, writeIfNotValid) {
|
|
18
|
-
if (refresh) {
|
|
19
|
-
this.read();
|
|
20
|
-
}
|
|
21
|
-
const val = object_path_1.default.get(this.config, key, defaultValue);
|
|
22
|
-
if (validate && defaultValue !== undefined) {
|
|
23
|
-
const isValid = validate(val);
|
|
24
|
-
if (!isValid) {
|
|
25
|
-
this.set(key, defaultValue, writeIfNotValid);
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
return (0, lodash_clonedeep_1.default)(val);
|
|
29
|
-
}
|
|
30
|
-
/**
|
|
31
|
-
* Test key (Path) existence
|
|
32
|
-
*
|
|
33
|
-
* @param key - Key to lookup for
|
|
34
|
-
* @param refresh - Re-Read config.json before lookup for the `key`
|
|
35
|
-
*/
|
|
36
|
-
has(key, refresh) {
|
|
37
|
-
if (refresh) {
|
|
38
|
-
this.read();
|
|
39
|
-
}
|
|
40
|
-
return object_path_1.default.has(this.config, key);
|
|
41
|
-
}
|
|
42
|
-
/**
|
|
43
|
-
* Set a value if it doesn't exist, do nothing if it does
|
|
44
|
-
*
|
|
45
|
-
* @param key - Key whose existence is to be checked
|
|
46
|
-
* @param defaultValue - Default value if `key` not exist
|
|
47
|
-
* @param write - Optional parameter, if true, the changes will be written to the file.
|
|
48
|
-
*/
|
|
49
|
-
ensureExists(key, defaultValue, write) {
|
|
50
|
-
const exists = this.has(key);
|
|
51
|
-
object_path_1.default.ensureExists(this.config, key, defaultValue);
|
|
52
|
-
this.config = this.config;
|
|
53
|
-
if (write && !exists) {
|
|
54
|
-
this.write();
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
/**
|
|
58
|
-
* Set a key (Path) to a value
|
|
59
|
-
*
|
|
60
|
-
* @param key - Key
|
|
61
|
-
* @param value - Value to set for they given `key`
|
|
62
|
-
* @param write - Optional parameter, if true, the changes will be written to the file.
|
|
63
|
-
*/
|
|
64
|
-
set(key, value, write) {
|
|
65
|
-
object_path_1.default.set(this.config, key, value);
|
|
66
|
-
this.config = this.config;
|
|
67
|
-
if (write) {
|
|
68
|
-
this.write();
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
/**
|
|
72
|
-
* Insert an item in an array path
|
|
73
|
-
*
|
|
74
|
-
* @param key - Key to the array
|
|
75
|
-
* @param value - Value to insert in the array
|
|
76
|
-
* @param at - Index
|
|
77
|
-
* @param write - Optional parameter, if true, the changes will be written to the file.
|
|
78
|
-
*/
|
|
79
|
-
insert(key, value, at, write) {
|
|
80
|
-
object_path_1.default.insert(this.config, key, value, at);
|
|
81
|
-
this.config = this.config;
|
|
82
|
-
if (write) {
|
|
83
|
-
this.write();
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
/**
|
|
87
|
-
* Create (if path isn't an array) and push the value to it. Can push unlimited number of values
|
|
88
|
-
*
|
|
89
|
-
* @param key - Key to the array
|
|
90
|
-
* @param write - Optional parameter, if true, the changes will be written to the file.
|
|
91
|
-
* @param items - Values to push in to the array
|
|
92
|
-
*/
|
|
93
|
-
push(key, write, ...items) {
|
|
94
|
-
object_path_1.default.push(this.config, key, items);
|
|
95
|
-
this.config = this.config;
|
|
96
|
-
if (write) {
|
|
97
|
-
this.write();
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
/**
|
|
101
|
-
* Deletes a member from object or array
|
|
102
|
-
*
|
|
103
|
-
* @param key - Key to lookup for
|
|
104
|
-
* @param write - Optional parameter, if true, the changes will be written to the file.
|
|
105
|
-
*/
|
|
106
|
-
delete(key, write) {
|
|
107
|
-
object_path_1.default.del(this.config, key);
|
|
108
|
-
this.config = this.config;
|
|
109
|
-
if (write) {
|
|
110
|
-
this.write();
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
/**
|
|
114
|
-
* @param refresh - Re-Read config.json
|
|
115
|
-
*
|
|
116
|
-
* @returns config.json
|
|
117
|
-
*/
|
|
118
|
-
all(refresh) {
|
|
119
|
-
if (refresh) {
|
|
120
|
-
this.read();
|
|
121
|
-
}
|
|
122
|
-
return (0, lodash_clonedeep_1.default)(this.config);
|
|
123
|
-
}
|
|
124
|
-
/**
|
|
125
|
-
* @param config - New config.json
|
|
126
|
-
* @param write - Optional parameter, if true, the changes will be written to the file.
|
|
127
|
-
*/
|
|
128
|
-
replace(config, write) {
|
|
129
|
-
this.config = config;
|
|
130
|
-
if (write) {
|
|
131
|
-
this.write();
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
/**
|
|
135
|
-
* Updates a specific value in a nested object structure by a given path and key.
|
|
136
|
-
*
|
|
137
|
-
* @param path - The path to the nested object.
|
|
138
|
-
* @param searchKey - The key to search for.
|
|
139
|
-
* @param searchValue - The value to match the searchKey.
|
|
140
|
-
* @param targetKey - The key of the value to be updated.
|
|
141
|
-
* @param newValue - The new value to be set.
|
|
142
|
-
* @param write - Optional parameter, if true, the changes will be written to the file.
|
|
143
|
-
*/
|
|
144
|
-
updateValue(path, searchKey, searchValue, targetKey, newValue, write) {
|
|
145
|
-
const pathSegments = path.split('.');
|
|
146
|
-
const updateRecursive = (obj, index) => {
|
|
147
|
-
if (index === pathSegments.length) {
|
|
148
|
-
if (obj[searchKey] === searchValue) {
|
|
149
|
-
obj[targetKey] = newValue;
|
|
150
|
-
}
|
|
151
|
-
return;
|
|
152
|
-
}
|
|
153
|
-
const currentPath = pathSegments[index];
|
|
154
|
-
if (Array.isArray(obj[currentPath])) {
|
|
155
|
-
obj[currentPath].forEach((element) => updateRecursive(element, index + 1));
|
|
156
|
-
}
|
|
157
|
-
else if (obj[currentPath] !== undefined) {
|
|
158
|
-
updateRecursive(obj[currentPath], index + 1);
|
|
159
|
-
}
|
|
160
|
-
};
|
|
161
|
-
updateRecursive(this.config, 0);
|
|
162
|
-
this.set(pathSegments[0], this.config[pathSegments[0]], write);
|
|
163
|
-
}
|
|
164
|
-
/**
|
|
165
|
-
* Replaces a specific item in a nested object structure by a given path and key.
|
|
166
|
-
* If the item does not exist, it will be added.
|
|
167
|
-
* If the path does not exist, it will be created.
|
|
168
|
-
*
|
|
169
|
-
* @param path - The path to the nested object.
|
|
170
|
-
* @param searchKey - The key to search for.
|
|
171
|
-
* @param searchValue - The value to match the searchKey.
|
|
172
|
-
* @param newItem - The new item to replace the old one. If the item does not exist, it will be added.
|
|
173
|
-
* @param write - Optional parameter, if true, the changes will be written to the file.
|
|
174
|
-
*/
|
|
175
|
-
replaceOrAddItem(path, searchKey, searchValue, newItem, write) {
|
|
176
|
-
const pathSegments = path.split('.');
|
|
177
|
-
const ensurePathExists = (obj, pathSegments, index) => {
|
|
178
|
-
if (index >= pathSegments.length)
|
|
179
|
-
return;
|
|
180
|
-
const currentPath = pathSegments[index];
|
|
181
|
-
if (obj[currentPath] === undefined) {
|
|
182
|
-
obj[currentPath] = index === pathSegments.length - 1 ? [] : {};
|
|
183
|
-
}
|
|
184
|
-
ensurePathExists(obj[currentPath], pathSegments, index + 1);
|
|
185
|
-
};
|
|
186
|
-
const findAndReplaceOrAddRecursive = (obj, pathIndex) => {
|
|
187
|
-
if (Array.isArray(obj)) {
|
|
188
|
-
obj.forEach((subObj) => findAndReplaceOrAddRecursive(subObj, pathIndex));
|
|
189
|
-
}
|
|
190
|
-
else {
|
|
191
|
-
const currentPath = pathSegments[pathIndex];
|
|
192
|
-
if (pathIndex === pathSegments.length - 1) {
|
|
193
|
-
if (Array.isArray(obj[currentPath])) {
|
|
194
|
-
const itemIndex = obj[currentPath].findIndex((item) => item[searchKey] === searchValue);
|
|
195
|
-
if (itemIndex !== -1) {
|
|
196
|
-
obj[currentPath][itemIndex] = newItem;
|
|
197
|
-
}
|
|
198
|
-
else {
|
|
199
|
-
obj[currentPath].push(newItem);
|
|
200
|
-
}
|
|
201
|
-
}
|
|
202
|
-
}
|
|
203
|
-
else if (obj[currentPath] !== undefined) {
|
|
204
|
-
findAndReplaceOrAddRecursive(obj[currentPath], pathIndex + 1);
|
|
205
|
-
}
|
|
206
|
-
}
|
|
207
|
-
};
|
|
208
|
-
ensurePathExists(this.config, pathSegments, 0);
|
|
209
|
-
findAndReplaceOrAddRecursive(this.config, 0);
|
|
210
|
-
this.set(pathSegments[0], this.config[pathSegments[0]], write);
|
|
211
|
-
}
|
|
212
|
-
/**
|
|
213
|
-
* Initialize config.json
|
|
214
|
-
*/
|
|
215
|
-
init() {
|
|
216
|
-
fs_extra_1.default.ensureFileSync(this.configFile);
|
|
217
|
-
this.read();
|
|
218
|
-
}
|
|
219
|
-
/**
|
|
220
|
-
* Read config.json
|
|
221
|
-
*/
|
|
222
|
-
read() {
|
|
223
|
-
const config = fs_extra_1.default.readJsonSync(this.configFile, { throws: false }) || this.config || {};
|
|
224
|
-
this.config = config;
|
|
225
|
-
}
|
|
226
|
-
/**
|
|
227
|
-
* Write config.json
|
|
228
|
-
*/
|
|
229
|
-
write() {
|
|
230
|
-
fs_extra_1.default.writeJsonSync(this.configFile, this.config, { spaces: 2 });
|
|
231
|
-
}
|
|
232
|
-
}
|
|
233
|
-
exports.PluginConfigService = PluginConfigService;
|
|
234
|
-
//# sourceMappingURL=config.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../../../src/plugins/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,328 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
*
|
|
4
|
-
* @url https://github.com/homebridge/homebridge/blob/src/pluginManager.ts
|
|
5
|
-
* (c) Homebridge <https://github.com/homebridge>
|
|
6
|
-
*
|
|
7
|
-
**/
|
|
8
|
-
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
9
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
10
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
11
|
-
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
12
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
13
|
-
};
|
|
14
|
-
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
15
|
-
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
16
|
-
};
|
|
17
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
18
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
19
|
-
};
|
|
20
|
-
var PluginManager_1;
|
|
21
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
|
-
exports.PluginManager = void 0;
|
|
23
|
-
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
24
|
-
const path_1 = __importDefault(require("path"));
|
|
25
|
-
const child_process_1 = require("child_process");
|
|
26
|
-
const tsyringe_1 = require("tsyringe");
|
|
27
|
-
const plugin_1 = require("./plugin");
|
|
28
|
-
const worker_1 = require("./worker");
|
|
29
|
-
const config_1 = require("../services/config");
|
|
30
|
-
const plugins_service_1 = __importDefault(require("../api/services/plugins.service"));
|
|
31
|
-
const types_1 = require("./types");
|
|
32
|
-
let PluginManager = PluginManager_1 = class PluginManager {
|
|
33
|
-
logger;
|
|
34
|
-
plugins = new Map();
|
|
35
|
-
pluginWorkers = new Map();
|
|
36
|
-
searchPaths = new Set();
|
|
37
|
-
api;
|
|
38
|
-
configService;
|
|
39
|
-
currentInitializingPlugin;
|
|
40
|
-
constructor() {
|
|
41
|
-
this.api = tsyringe_1.container.resolve('api');
|
|
42
|
-
this.logger = tsyringe_1.container.resolve('logger');
|
|
43
|
-
this.configService = tsyringe_1.container.resolve('configService');
|
|
44
|
-
this.api.on("registerPlugin" /* INTERNAL_API_EVENT.REGISTER_PLUGIN */, this.handlePluginRegistration.bind(this));
|
|
45
|
-
tsyringe_1.container.register('pluginManager', { useValue: this });
|
|
46
|
-
}
|
|
47
|
-
static isQualifiedPluginIdentifier(pluginName) {
|
|
48
|
-
return types_1.PLUGIN_IDENTIFIER_PATTERN.test(pluginName);
|
|
49
|
-
}
|
|
50
|
-
static extractPluginScope(pluginName) {
|
|
51
|
-
return pluginName.match(types_1.PLUGIN_IDENTIFIER_PATTERN)[2];
|
|
52
|
-
}
|
|
53
|
-
static extractPluginName(pluginName) {
|
|
54
|
-
return pluginName.match(types_1.PLUGIN_IDENTIFIER_PATTERN)[3];
|
|
55
|
-
}
|
|
56
|
-
static transformDisplaName(pluginName) {
|
|
57
|
-
const extractedPkgName = this.extractPluginName(pluginName).replace('camera-ui-', '').replaceAll('-', ' ');
|
|
58
|
-
return extractedPkgName
|
|
59
|
-
.toLowerCase()
|
|
60
|
-
.split(' ')
|
|
61
|
-
.map((word) => word.charAt(0).toUpperCase() + word.slice(1))
|
|
62
|
-
.join(' ');
|
|
63
|
-
}
|
|
64
|
-
static loadPackageJSON(installPath) {
|
|
65
|
-
const packageJsonPath = path_1.default.join(installPath, 'package.json');
|
|
66
|
-
let packageJson;
|
|
67
|
-
if (!fs_extra_1.default.existsSync(packageJsonPath)) {
|
|
68
|
-
throw new Error(`Plugin ${installPath} does not contain a package.json.`);
|
|
69
|
-
}
|
|
70
|
-
try {
|
|
71
|
-
packageJson = JSON.parse(fs_extra_1.default.readFileSync(packageJsonPath, { encoding: 'utf8' }));
|
|
72
|
-
}
|
|
73
|
-
catch (error) {
|
|
74
|
-
throw new Error(`Plugin ${installPath} contains an invalid package.json. Error: ${error}`);
|
|
75
|
-
}
|
|
76
|
-
if (!PluginManager_1.isQualifiedPluginIdentifier(packageJson.name)) {
|
|
77
|
-
throw new Error(`Plugin ${installPath} does not have a package name that begins with 'camera-ui-' or '@scope/camera-ui-.`);
|
|
78
|
-
}
|
|
79
|
-
// verify that it's tagged with the correct keyword
|
|
80
|
-
if (!packageJson.keywords?.includes('camera-ui-plugin')) {
|
|
81
|
-
throw new Error(`Plugin ${installPath}/package.json does not contain the keyword 'camera-ui-plugin'.`);
|
|
82
|
-
}
|
|
83
|
-
return packageJson;
|
|
84
|
-
}
|
|
85
|
-
async initializeInstalledPlugins() {
|
|
86
|
-
this.logger.log('---');
|
|
87
|
-
this.loadDefaultPaths();
|
|
88
|
-
this.logger.debug(`Looking for plugins at: Path: ${Array.from(this.searchPaths).join(', Path: ')}`);
|
|
89
|
-
await this.loadInstalledPlugins();
|
|
90
|
-
await this.removeOrphanedPlugins();
|
|
91
|
-
await Promise.all(Array.from(this.plugins).map(([, plugin]) => this.initializeInstalledPlugin(plugin)));
|
|
92
|
-
}
|
|
93
|
-
async initializeInstalledPlugin(plugin, insertDb) {
|
|
94
|
-
try {
|
|
95
|
-
await plugin.load();
|
|
96
|
-
}
|
|
97
|
-
catch (error) {
|
|
98
|
-
this.logger.error(`Error loading plugin: ${plugin.pluginName}:`, error);
|
|
99
|
-
this.plugins.delete(plugin.pluginName);
|
|
100
|
-
}
|
|
101
|
-
if (this.configService.config.plugins.disabledPlugins?.includes(plugin.pluginName)) {
|
|
102
|
-
plugin.disabled = true;
|
|
103
|
-
plugin.info.disabled = true;
|
|
104
|
-
}
|
|
105
|
-
if (plugin.disabled) {
|
|
106
|
-
this.logger.warn(`Disabled plugin: ${plugin.displayName} (${plugin.pluginName}@${plugin.info.installedVersion})`);
|
|
107
|
-
}
|
|
108
|
-
else {
|
|
109
|
-
this.logger.log(`Initializing plugin: ${plugin.displayName} (${plugin.pluginName}@${plugin.info.installedVersion})`);
|
|
110
|
-
}
|
|
111
|
-
await this.initializePlugin(plugin, plugin.pluginName);
|
|
112
|
-
}
|
|
113
|
-
async initializePlugin(plugin, pluginName) {
|
|
114
|
-
try {
|
|
115
|
-
this.currentInitializingPlugin = plugin;
|
|
116
|
-
await plugin.initialize(this.api);
|
|
117
|
-
}
|
|
118
|
-
catch (error) {
|
|
119
|
-
this.logger.error(`Error initializing plugin: ${plugin.pluginName}:`, error);
|
|
120
|
-
this.plugins.delete(pluginName);
|
|
121
|
-
return;
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
async loadPlugin(absolutePath, pluginId, storagePath) {
|
|
125
|
-
let init = false;
|
|
126
|
-
const packageJson = PluginManager_1.loadPackageJSON(absolutePath);
|
|
127
|
-
const pluginName = packageJson.name;
|
|
128
|
-
const scope = PluginManager_1.extractPluginScope(pluginName);
|
|
129
|
-
const alreadyInstalled = this.plugins.get(pluginName);
|
|
130
|
-
if (alreadyInstalled) {
|
|
131
|
-
throw new Error(`Warning: skipping plugin found at '${absolutePath}' since we already loaded the same plugin from '${alreadyInstalled.installPath}'.`);
|
|
132
|
-
}
|
|
133
|
-
if (!pluginId) {
|
|
134
|
-
init = true;
|
|
135
|
-
const pluginsService = new plugins_service_1.default();
|
|
136
|
-
const { _id } = await pluginsService.insertPluginDb(pluginName);
|
|
137
|
-
pluginId = _id;
|
|
138
|
-
}
|
|
139
|
-
const plugin = new plugin_1.Plugin(pluginName, absolutePath, packageJson, pluginId, scope, storagePath);
|
|
140
|
-
if (init) {
|
|
141
|
-
const db = tsyringe_1.container.resolve('dbs');
|
|
142
|
-
await db.createPluginDatabase(plugin);
|
|
143
|
-
}
|
|
144
|
-
this.plugins.set(pluginName, plugin);
|
|
145
|
-
return plugin;
|
|
146
|
-
}
|
|
147
|
-
async removePlugin(plugin, removeFromDb, removeStorage) {
|
|
148
|
-
const pluginProcess = this.pluginWorkers.get(plugin.pluginName);
|
|
149
|
-
await pluginProcess?.teardown();
|
|
150
|
-
if (removeFromDb) {
|
|
151
|
-
const pluginsService = new plugins_service_1.default();
|
|
152
|
-
await pluginsService.removePluginDbByName(plugin.pluginName);
|
|
153
|
-
}
|
|
154
|
-
if (removeStorage) {
|
|
155
|
-
await fs_extra_1.default.remove(plugin.storagePath);
|
|
156
|
-
}
|
|
157
|
-
this.pluginWorkers.delete(plugin.pluginName);
|
|
158
|
-
this.plugins.delete(plugin.pluginName);
|
|
159
|
-
}
|
|
160
|
-
async startPluginChild(pluginName) {
|
|
161
|
-
let pluginWorker = this.pluginWorkers.get(pluginName);
|
|
162
|
-
const plugin = this.plugins.get(pluginName);
|
|
163
|
-
if (!pluginWorker && plugin) {
|
|
164
|
-
pluginWorker = new worker_1.PluginWorker(plugin);
|
|
165
|
-
this.pluginWorkers.set(pluginName, pluginWorker);
|
|
166
|
-
}
|
|
167
|
-
if (pluginWorker) {
|
|
168
|
-
await pluginWorker.start();
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
|
-
async startPluginChilds() {
|
|
172
|
-
if (this.plugins.size) {
|
|
173
|
-
this.logger.log('---');
|
|
174
|
-
for (const [pluginName, plugin] of this.plugins) {
|
|
175
|
-
const pluginWorker = new worker_1.PluginWorker(plugin);
|
|
176
|
-
this.pluginWorkers.set(pluginName, pluginWorker);
|
|
177
|
-
}
|
|
178
|
-
await Promise.all(Array.from(this.pluginWorkers)
|
|
179
|
-
.filter(([_, pluginWorker]) => !pluginWorker.plugin.disabled)
|
|
180
|
-
.map(([, pluginWorker]) => pluginWorker.start()));
|
|
181
|
-
this.logger.log('---');
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
async loadInstalledPlugins() {
|
|
185
|
-
// search for plugins among all known paths
|
|
186
|
-
for (const searchPath of this.searchPaths) {
|
|
187
|
-
if (!fs_extra_1.default.existsSync(searchPath)) {
|
|
188
|
-
continue;
|
|
189
|
-
}
|
|
190
|
-
if (fs_extra_1.default.existsSync(path_1.default.join(searchPath, 'package.json'))) {
|
|
191
|
-
try {
|
|
192
|
-
await this.loadPlugin(searchPath);
|
|
193
|
-
}
|
|
194
|
-
catch (error) {
|
|
195
|
-
this.logger.warn(error.message);
|
|
196
|
-
continue;
|
|
197
|
-
}
|
|
198
|
-
}
|
|
199
|
-
else {
|
|
200
|
-
// read through each directory in this node_modules folder
|
|
201
|
-
const relativeinstallPaths = fs_extra_1.default.readdirSync(searchPath).filter((relativePath) => {
|
|
202
|
-
// search for directories only
|
|
203
|
-
try {
|
|
204
|
-
return fs_extra_1.default.statSync(path_1.default.resolve(searchPath, relativePath)).isDirectory();
|
|
205
|
-
}
|
|
206
|
-
catch (error) {
|
|
207
|
-
this.logger.debug(`Ignoring path ${path_1.default.resolve(searchPath, relativePath)} - ${error.message}`);
|
|
208
|
-
return;
|
|
209
|
-
}
|
|
210
|
-
});
|
|
211
|
-
// expand out @scoped plugins
|
|
212
|
-
for (const scopeDirectory of [...relativeinstallPaths].filter((path) => path.charAt(0) === '@')) {
|
|
213
|
-
// is it a scope directory?
|
|
214
|
-
const index = relativeinstallPaths.indexOf(scopeDirectory);
|
|
215
|
-
relativeinstallPaths.splice(index, 1);
|
|
216
|
-
const absolutePath = path_1.default.join(searchPath, scopeDirectory);
|
|
217
|
-
for (const name of fs_extra_1.default
|
|
218
|
-
.readdirSync(absolutePath)
|
|
219
|
-
.filter((name) => PluginManager_1.isQualifiedPluginIdentifier(name))
|
|
220
|
-
.filter((name) => {
|
|
221
|
-
try {
|
|
222
|
-
return fs_extra_1.default.statSync(path_1.default.resolve(absolutePath, name)).isDirectory();
|
|
223
|
-
}
|
|
224
|
-
catch (error) {
|
|
225
|
-
this.logger.debug(`Ignoring path ${path_1.default.resolve(absolutePath, name)} - ${error.message}`);
|
|
226
|
-
return false;
|
|
227
|
-
}
|
|
228
|
-
}))
|
|
229
|
-
relativeinstallPaths.push(scopeDirectory + '/' + name);
|
|
230
|
-
}
|
|
231
|
-
for (const pluginIdentifier of relativeinstallPaths.filter((pluginIdentifier) => {
|
|
232
|
-
return PluginManager_1.isQualifiedPluginIdentifier(pluginIdentifier); // needs to be a valid camera.ui plugin name
|
|
233
|
-
})) {
|
|
234
|
-
try {
|
|
235
|
-
const absolutePath = path_1.default.resolve(searchPath, pluginIdentifier);
|
|
236
|
-
await this.loadPlugin(absolutePath);
|
|
237
|
-
}
|
|
238
|
-
catch (error) {
|
|
239
|
-
this.logger.warn(error.message);
|
|
240
|
-
continue;
|
|
241
|
-
}
|
|
242
|
-
}
|
|
243
|
-
}
|
|
244
|
-
}
|
|
245
|
-
if (this.plugins.size === 0) {
|
|
246
|
-
this.logger.warn('No plugins found. See the README for information on installing plugins.');
|
|
247
|
-
}
|
|
248
|
-
return this.plugins;
|
|
249
|
-
}
|
|
250
|
-
loadDefaultPaths() {
|
|
251
|
-
if (this.configService.PLUGINS_INSTALL_PATH) {
|
|
252
|
-
this.searchPaths.add(this.configService.PLUGINS_INSTALL_PATH);
|
|
253
|
-
}
|
|
254
|
-
// if (this.configService.config.plugins?.customPluginPath) {
|
|
255
|
-
// this.searchPaths.add(this.configService.config.plugins.customPluginPath);
|
|
256
|
-
// }
|
|
257
|
-
// if (this.configService.config.plugins?.strictPluginResolution) {
|
|
258
|
-
if (this.configService.PLUGINS_STRICT_RESOLUTION) {
|
|
259
|
-
// if strict plugin resolution is enabled:
|
|
260
|
-
// * only use custom plugin path, if set;
|
|
261
|
-
// * otherwise add the current npm global prefix (eg. /usr/local/lib/node_modules)
|
|
262
|
-
if (this.searchPaths.size === 0) {
|
|
263
|
-
this.addNpmPrefixToSearchPaths();
|
|
264
|
-
}
|
|
265
|
-
return;
|
|
266
|
-
}
|
|
267
|
-
if (require.main) {
|
|
268
|
-
// add the paths used by require()
|
|
269
|
-
require.main.paths.forEach((path) => this.searchPaths.add(path));
|
|
270
|
-
}
|
|
271
|
-
// THIS SECTION FROM: https://github.com/yeoman/environment/blob/master/lib/resolver.js
|
|
272
|
-
// Adding global npm directories
|
|
273
|
-
// We tried using npm to get the global modules path, but it haven't work out
|
|
274
|
-
// because of bugs in the parsable implementation of `ls` command and mostly
|
|
275
|
-
// performance issues. So, we go with our best bet for now.
|
|
276
|
-
if (process.env.NODE_PATH) {
|
|
277
|
-
process.env.NODE_PATH.split(path_1.default.delimiter)
|
|
278
|
-
.filter((path) => !!path)
|
|
279
|
-
.map((path) => this.searchPaths.add(path));
|
|
280
|
-
}
|
|
281
|
-
else {
|
|
282
|
-
// Default paths for non-windows systems
|
|
283
|
-
if (process.platform !== 'win32') {
|
|
284
|
-
this.searchPaths.add('/usr/local/lib/node_modules');
|
|
285
|
-
this.searchPaths.add('/usr/lib/node_modules');
|
|
286
|
-
}
|
|
287
|
-
this.addNpmPrefixToSearchPaths();
|
|
288
|
-
}
|
|
289
|
-
}
|
|
290
|
-
async removeOrphanedPlugins() {
|
|
291
|
-
const pluginsService = new plugins_service_1.default();
|
|
292
|
-
await pluginsService.removeOrphanPluginsDb();
|
|
293
|
-
}
|
|
294
|
-
handlePluginRegistration(constructor, contract) {
|
|
295
|
-
if (!this.currentInitializingPlugin) {
|
|
296
|
-
throw new Error(`Unexpected plugin registration. Plugin "${contract.pluginName}" tried to register outside the initializer function!`);
|
|
297
|
-
}
|
|
298
|
-
if (contract.pluginName !== this.currentInitializingPlugin.pluginName) {
|
|
299
|
-
throw new Error(`Plugin '${this.currentInitializingPlugin.pluginName}' tried to register with an incorrect plugin identifier: '${contract.pluginName}'. Please report this to the developer!`);
|
|
300
|
-
}
|
|
301
|
-
this.currentInitializingPlugin.registerPlugin(constructor, contract);
|
|
302
|
-
}
|
|
303
|
-
addNpmPrefixToSearchPaths() {
|
|
304
|
-
if (process.platform === 'win32') {
|
|
305
|
-
this.searchPaths.add(path_1.default.join(process.env.APPDATA, 'npm/node_modules'));
|
|
306
|
-
}
|
|
307
|
-
else {
|
|
308
|
-
this.searchPaths.add((0, child_process_1.execSync)('/bin/echo -n "$(npm -g prefix)/lib/node_modules"', {
|
|
309
|
-
env: Object.assign({
|
|
310
|
-
npm_config_loglevel: 'silent',
|
|
311
|
-
npm_update_notifier: 'false',
|
|
312
|
-
}, process.env),
|
|
313
|
-
}).toString('utf8'));
|
|
314
|
-
}
|
|
315
|
-
}
|
|
316
|
-
};
|
|
317
|
-
exports.PluginManager = PluginManager;
|
|
318
|
-
exports.PluginManager = PluginManager = PluginManager_1 = __decorate([
|
|
319
|
-
(0, tsyringe_1.registry)([
|
|
320
|
-
{
|
|
321
|
-
token: 'configService',
|
|
322
|
-
useValue: (0, tsyringe_1.delay)(() => config_1.ConfigService),
|
|
323
|
-
},
|
|
324
|
-
]),
|
|
325
|
-
(0, tsyringe_1.scoped)(tsyringe_1.Lifecycle.ContainerScoped),
|
|
326
|
-
__metadata("design:paramtypes", [])
|
|
327
|
-
], PluginManager);
|
|
328
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/plugins/index.ts"],"names":[],"mappings":"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"}
|