@scrypted/server 0.0.71 → 0.0.78
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.
Potentially problematic release.
This version of @scrypted/server might be problematic. Click here for more details.
- package/.vscode/settings.json +2 -1
- package/dist/cert.js +75 -0
- package/dist/cert.js.map +1 -0
- package/dist/plugin/media.js +50 -14
- package/dist/plugin/media.js.map +1 -1
- package/dist/plugin/plugin-device.js +11 -1
- package/dist/plugin/plugin-device.js.map +1 -1
- package/dist/plugin/plugin-host-api.js +7 -3
- package/dist/plugin/plugin-host-api.js.map +1 -1
- package/dist/plugin/plugin-host.js +66 -45
- package/dist/plugin/plugin-host.js.map +1 -1
- package/dist/plugin/plugin-npm-dependencies.js +53 -0
- package/dist/plugin/plugin-npm-dependencies.js.map +1 -0
- package/dist/plugin/plugin-remote.js +5 -5
- package/dist/plugin/plugin-remote.js.map +1 -1
- package/dist/plugin/plugin-volume.js +20 -0
- package/dist/plugin/plugin-volume.js.map +1 -0
- package/dist/plugin/system.js +9 -3
- package/dist/plugin/system.js.map +1 -1
- package/dist/rpc.js +32 -12
- package/dist/rpc.js.map +1 -1
- package/dist/runtime.js +20 -27
- package/dist/runtime.js.map +1 -1
- package/dist/scrypted-main.js +4 -19
- package/dist/scrypted-main.js.map +1 -1
- package/package.json +4 -3
- package/python/media.py +40 -0
- package/python/plugin-remote.py +67 -30
- package/python/rpc.py +24 -81
- package/src/cert.ts +74 -0
- package/src/plugin/media.ts +53 -14
- package/src/plugin/plugin-api.ts +0 -1
- package/src/plugin/plugin-device.ts +13 -2
- package/src/plugin/plugin-host-api.ts +15 -3
- package/src/plugin/plugin-host.ts +69 -49
- package/src/plugin/plugin-npm-dependencies.ts +55 -0
- package/src/plugin/plugin-remote.ts +8 -7
- package/src/plugin/plugin-volume.ts +13 -0
- package/src/plugin/system.ts +11 -3
- package/src/rpc.ts +35 -12
- package/src/runtime.ts +24 -30
- package/src/scrypted-main.ts +5 -24
package/.vscode/settings.json
CHANGED
package/dist/cert.js
ADDED
|
@@ -0,0 +1,75 @@
|
|
|
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.createSelfSignedCertificate = exports.CURRENT_SELF_SIGNED_CERTIFICATE_VERSION = void 0;
|
|
7
|
+
// import libraries
|
|
8
|
+
const node_forge_1 = __importDefault(require("node-forge"));
|
|
9
|
+
const crypto_1 = __importDefault(require("crypto"));
|
|
10
|
+
const { pki } = node_forge_1.default;
|
|
11
|
+
exports.CURRENT_SELF_SIGNED_CERTIFICATE_VERSION = 'v2';
|
|
12
|
+
function createSelfSignedCertificate() {
|
|
13
|
+
// generate a keypair and create an X.509v3 certificate
|
|
14
|
+
const keys = pki.rsa.generateKeyPair(2048);
|
|
15
|
+
const cert = pki.createCertificate();
|
|
16
|
+
cert.publicKey = keys.publicKey;
|
|
17
|
+
// NOTE: serialNumber is the hex encoded value of an ASN.1 INTEGER.
|
|
18
|
+
// Conforming CAs should ensure serialNumber is:
|
|
19
|
+
// - no more than 20 octets
|
|
20
|
+
// - non-negative (prefix a '00' if your value starts with a '1' bit)
|
|
21
|
+
cert.serialNumber = '01' + crypto_1.default.randomBytes(19).toString("hex"); // 1 octet = 8 bits = 1 byte = 2 hex chars
|
|
22
|
+
cert.validity.notBefore = new Date();
|
|
23
|
+
cert.validity.notAfter = new Date();
|
|
24
|
+
cert.validity.notAfter.setFullYear(cert.validity.notBefore.getFullYear() + 1); // adding 1 year of validity from now
|
|
25
|
+
const attrs = [{
|
|
26
|
+
name: 'commonName',
|
|
27
|
+
value: 'localhost'
|
|
28
|
+
}];
|
|
29
|
+
cert.setSubject(attrs);
|
|
30
|
+
cert.setIssuer(attrs);
|
|
31
|
+
cert.setExtensions([{
|
|
32
|
+
name: 'basicConstraints',
|
|
33
|
+
cA: true
|
|
34
|
+
}, {
|
|
35
|
+
name: 'keyUsage',
|
|
36
|
+
keyCertSign: true,
|
|
37
|
+
digitalSignature: true,
|
|
38
|
+
nonRepudiation: true,
|
|
39
|
+
keyEncipherment: true,
|
|
40
|
+
dataEncipherment: true
|
|
41
|
+
}, {
|
|
42
|
+
name: 'extKeyUsage',
|
|
43
|
+
serverAuth: true,
|
|
44
|
+
clientAuth: true,
|
|
45
|
+
codeSigning: true,
|
|
46
|
+
emailProtection: true,
|
|
47
|
+
timeStamping: true
|
|
48
|
+
}, {
|
|
49
|
+
name: 'nsCertType',
|
|
50
|
+
client: true,
|
|
51
|
+
server: true,
|
|
52
|
+
email: true,
|
|
53
|
+
objsign: true,
|
|
54
|
+
sslCA: true,
|
|
55
|
+
emailCA: true,
|
|
56
|
+
objCA: true
|
|
57
|
+
}, {
|
|
58
|
+
name: 'subjectAltName',
|
|
59
|
+
altNames: [{
|
|
60
|
+
type: 7,
|
|
61
|
+
ip: '127.0.0.1'
|
|
62
|
+
}]
|
|
63
|
+
}, {
|
|
64
|
+
name: 'subjectKeyIdentifier'
|
|
65
|
+
}]);
|
|
66
|
+
// self-sign certificate
|
|
67
|
+
cert.sign(keys.privateKey);
|
|
68
|
+
return {
|
|
69
|
+
serviceKey: pki.privateKeyToPem(keys.privateKey),
|
|
70
|
+
certificate: pki.certificateToPem(cert),
|
|
71
|
+
version: exports.CURRENT_SELF_SIGNED_CERTIFICATE_VERSION,
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
exports.createSelfSignedCertificate = createSelfSignedCertificate;
|
|
75
|
+
//# sourceMappingURL=cert.js.map
|
package/dist/cert.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cert.js","sourceRoot":"","sources":["../src/cert.ts"],"names":[],"mappings":";;;;;;AAAA,mBAAmB;AACnB,4DAA+B;AAC/B,oDAA4B;AAE5B,MAAM,EAAE,GAAG,EAAE,GAAG,oBAAK,CAAC;AAGT,QAAA,uCAAuC,GAAG,IAAI,CAAC;AAE5D,SAAgB,2BAA2B;IAEvC,uDAAuD;IACvD,MAAM,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;IAC3C,MAAM,IAAI,GAAG,GAAG,CAAC,iBAAiB,EAAE,CAAC;IACrC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;IAEhC,mEAAmE;IACnE,gDAAgD;IAChD,2BAA2B;IAC3B,qEAAqE;IACrE,IAAI,CAAC,YAAY,GAAG,IAAI,GAAG,gBAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,0CAA0C;IAC7G,IAAI,CAAC,QAAQ,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC;IACrC,IAAI,CAAC,QAAQ,CAAC,QAAQ,GAAG,IAAI,IAAI,EAAE,CAAC;IACpC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,qCAAqC;IACpH,MAAM,KAAK,GAAG,CAAC;YACX,IAAI,EAAE,YAAY;YAClB,KAAK,EAAE,WAAW;SACrB,CAAC,CAAC;IACH,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IACvB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACtB,IAAI,CAAC,aAAa,CAAC,CAAC;YAChB,IAAI,EAAE,kBAAkB;YACxB,EAAE,EAAE,IAAI;SACX,EAAE;YACC,IAAI,EAAE,UAAU;YAChB,WAAW,EAAE,IAAI;YACjB,gBAAgB,EAAE,IAAI;YACtB,cAAc,EAAE,IAAI;YACpB,eAAe,EAAE,IAAI;YACrB,gBAAgB,EAAE,IAAI;SACzB,EAAE;YACC,IAAI,EAAE,aAAa;YACnB,UAAU,EAAE,IAAI;YAChB,UAAU,EAAE,IAAI;YAChB,WAAW,EAAE,IAAI;YACjB,eAAe,EAAE,IAAI;YACrB,YAAY,EAAE,IAAI;SACrB,EAAE;YACC,IAAI,EAAE,YAAY;YAClB,MAAM,EAAE,IAAI;YACZ,MAAM,EAAE,IAAI;YACZ,KAAK,EAAE,IAAI;YACX,OAAO,EAAE,IAAI;YACb,KAAK,EAAE,IAAI;YACX,OAAO,EAAE,IAAI;YACb,KAAK,EAAE,IAAI;SACd,EAAE;YACC,IAAI,EAAE,gBAAgB;YACtB,QAAQ,EAAE,CAAC;oBACP,IAAI,EAAE,CAAC;oBACP,EAAE,EAAE,WAAW;iBAClB,CAAC;SACL,EAAE;YACC,IAAI,EAAE,sBAAsB;SAC/B,CAAC,CAAC,CAAC;IAEJ,wBAAwB;IACxB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC3B,OAAO;QACH,UAAU,EAAE,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC;QAChD,WAAW,EAAE,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC;QACvC,OAAO,EAAE,+CAAuC;KACnD,CAAC;AACN,CAAC;AAhED,kEAgEC"}
|
package/dist/plugin/media.js
CHANGED
|
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.MediaManagerImpl = void 0;
|
|
6
|
+
exports.MediaManagerHostImpl = exports.MediaManagerImpl = exports.MediaManagerBase = void 0;
|
|
7
7
|
const types_1 = require("@scrypted/sdk/types");
|
|
8
8
|
const convert_1 = require("../convert");
|
|
9
9
|
const mime_1 = __importDefault(require("mime"));
|
|
@@ -19,12 +19,24 @@ function addBuiltins(console, mediaManager) {
|
|
|
19
19
|
fromMimeType: types_1.ScryptedMimeTypes.Url + ';' + types_1.ScryptedMimeTypes.AcceptUrlParameter,
|
|
20
20
|
toMimeType: types_1.ScryptedMimeTypes.FFmpegInput,
|
|
21
21
|
async convert(data, fromMimeType) {
|
|
22
|
+
const url = data.toString();
|
|
22
23
|
const args = {
|
|
23
|
-
|
|
24
|
+
url,
|
|
25
|
+
inputArguments: [
|
|
26
|
+
'-i',
|
|
27
|
+
url,
|
|
28
|
+
],
|
|
24
29
|
};
|
|
25
30
|
return Buffer.from(JSON.stringify(args));
|
|
26
31
|
}
|
|
27
32
|
});
|
|
33
|
+
mediaManager.builtinConverters.push({
|
|
34
|
+
fromMimeType: types_1.ScryptedMimeTypes.FFmpegInput,
|
|
35
|
+
toMimeType: types_1.ScryptedMimeTypes.MediaStreamUrl,
|
|
36
|
+
async convert(data, fromMimeType) {
|
|
37
|
+
return data;
|
|
38
|
+
}
|
|
39
|
+
});
|
|
28
40
|
mediaManager.builtinConverters.push({
|
|
29
41
|
fromMimeType: types_1.ScryptedMimeTypes.MediaStreamUrl,
|
|
30
42
|
toMimeType: types_1.ScryptedMimeTypes.FFmpegInput,
|
|
@@ -46,10 +58,9 @@ function addBuiltins(console, mediaManager) {
|
|
|
46
58
|
// 10 second delay
|
|
47
59
|
"10000000");
|
|
48
60
|
}
|
|
49
|
-
const ret = {
|
|
61
|
+
const ret = Object.assign({
|
|
50
62
|
inputArguments,
|
|
51
|
-
|
|
52
|
-
};
|
|
63
|
+
}, mediaUrl);
|
|
53
64
|
return Buffer.from(JSON.stringify(ret));
|
|
54
65
|
}
|
|
55
66
|
});
|
|
@@ -75,13 +86,11 @@ function addBuiltins(console, mediaManager) {
|
|
|
75
86
|
}
|
|
76
87
|
});
|
|
77
88
|
}
|
|
78
|
-
class
|
|
89
|
+
class MediaManagerBase {
|
|
79
90
|
console;
|
|
80
|
-
systemManager;
|
|
81
91
|
builtinConverters = [];
|
|
82
|
-
constructor(
|
|
92
|
+
constructor(console) {
|
|
83
93
|
this.console = console;
|
|
84
|
-
this.systemManager = systemManager;
|
|
85
94
|
addBuiltins(this.console, this);
|
|
86
95
|
}
|
|
87
96
|
async getFFmpegPath() {
|
|
@@ -104,9 +113,9 @@ class MediaManagerImpl {
|
|
|
104
113
|
return ffmpeg_for_homebridge_1.default || defaultPath;
|
|
105
114
|
}
|
|
106
115
|
getConverters() {
|
|
107
|
-
const
|
|
108
|
-
|
|
109
|
-
.map(
|
|
116
|
+
const converters = Object.entries(this.getSystemState())
|
|
117
|
+
.filter(([id, state]) => state[types_1.ScryptedInterfaceProperty.interfaces]?.value?.includes(types_1.ScryptedInterface.BufferConverter))
|
|
118
|
+
.map(([id]) => this.getDeviceById(id));
|
|
110
119
|
converters.push(...this.builtinConverters);
|
|
111
120
|
return converters;
|
|
112
121
|
}
|
|
@@ -162,10 +171,10 @@ class MediaManagerImpl {
|
|
|
162
171
|
const path = url.pathname.split('/')[1];
|
|
163
172
|
let mo;
|
|
164
173
|
if (path === types_1.ScryptedInterface.VideoCamera) {
|
|
165
|
-
mo = await this.
|
|
174
|
+
mo = await this.getDeviceById(id).getVideoStream();
|
|
166
175
|
}
|
|
167
176
|
else if (path === types_1.ScryptedInterface.Camera) {
|
|
168
|
-
mo = await this.
|
|
177
|
+
mo = await this.getDeviceById(id).takePicture();
|
|
169
178
|
}
|
|
170
179
|
else {
|
|
171
180
|
throw new Error('Unrecognized Scrypted Media interface.');
|
|
@@ -173,5 +182,32 @@ class MediaManagerImpl {
|
|
|
173
182
|
return mo;
|
|
174
183
|
}
|
|
175
184
|
}
|
|
185
|
+
exports.MediaManagerBase = MediaManagerBase;
|
|
186
|
+
class MediaManagerImpl extends MediaManagerBase {
|
|
187
|
+
systemManager;
|
|
188
|
+
constructor(systemManager, console) {
|
|
189
|
+
super(console);
|
|
190
|
+
this.systemManager = systemManager;
|
|
191
|
+
}
|
|
192
|
+
getSystemState() {
|
|
193
|
+
return this.systemManager.getSystemState();
|
|
194
|
+
}
|
|
195
|
+
getDeviceById(id) {
|
|
196
|
+
return this.systemManager.getDeviceById(id);
|
|
197
|
+
}
|
|
198
|
+
}
|
|
176
199
|
exports.MediaManagerImpl = MediaManagerImpl;
|
|
200
|
+
class MediaManagerHostImpl extends MediaManagerBase {
|
|
201
|
+
systemState;
|
|
202
|
+
getDeviceById;
|
|
203
|
+
constructor(systemState, getDeviceById, console) {
|
|
204
|
+
super(console);
|
|
205
|
+
this.systemState = systemState;
|
|
206
|
+
this.getDeviceById = getDeviceById;
|
|
207
|
+
}
|
|
208
|
+
getSystemState() {
|
|
209
|
+
return this.systemState;
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
exports.MediaManagerHostImpl = MediaManagerHostImpl;
|
|
177
213
|
//# sourceMappingURL=media.js.map
|
package/dist/plugin/media.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"media.js","sourceRoot":"","sources":["../../src/plugin/media.ts"],"names":[],"mappings":";;;;;;AAAA,+
|
|
1
|
+
{"version":3,"file":"media.js","sourceRoot":"","sources":["../../src/plugin/media.ts"],"names":[],"mappings":"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"}
|
|
@@ -30,6 +30,7 @@ class PluginDeviceProxyHandler {
|
|
|
30
30
|
})().catch(() => { });
|
|
31
31
|
;
|
|
32
32
|
}
|
|
33
|
+
// this must not be async, because it potentially changes execution order.
|
|
33
34
|
ensureProxy() {
|
|
34
35
|
const pluginDevice = this.scrypted.findPluginDeviceById(this.id);
|
|
35
36
|
if (!pluginDevice)
|
|
@@ -93,7 +94,7 @@ class PluginDeviceProxyHandler {
|
|
|
93
94
|
this.scrypted.stateManager.setPluginDeviceState(pluginDevice, types_1.ScryptedInterfaceProperty.interfaces, mixinInterfaces);
|
|
94
95
|
return mixinTable;
|
|
95
96
|
})();
|
|
96
|
-
return this.mixinTable.then(
|
|
97
|
+
return this.mixinTable.then(_ => pluginDevice);
|
|
97
98
|
}
|
|
98
99
|
get(target, p, receiver) {
|
|
99
100
|
if (p === 'constructor')
|
|
@@ -134,6 +135,15 @@ class PluginDeviceProxyHandler {
|
|
|
134
135
|
this.scrypted.stateManager.setPluginDeviceState(device, types_1.ScryptedInterfaceProperty.type, type);
|
|
135
136
|
this.scrypted.stateManager.updateDescriptor(device);
|
|
136
137
|
}
|
|
138
|
+
async probe() {
|
|
139
|
+
try {
|
|
140
|
+
await this.ensureProxy();
|
|
141
|
+
return true;
|
|
142
|
+
}
|
|
143
|
+
catch (e) {
|
|
144
|
+
return false;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
137
147
|
async applyMixin(method, argArray) {
|
|
138
148
|
const iface = descriptor_1.methodInterfaces[method];
|
|
139
149
|
if (!iface)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin-device.js","sourceRoot":"","sources":["../../src/plugin/plugin-device.ts"],"names":[],"mappings":";;;AAAA,+CAAgO;AAIhO,
|
|
1
|
+
{"version":3,"file":"plugin-device.js","sourceRoot":"","sources":["../../src/plugin/plugin-device.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,10 +9,13 @@ const db_types_1 = require("../db-types");
|
|
|
9
9
|
const plugin_api_1 = require("./plugin-api");
|
|
10
10
|
const state_1 = require("../state");
|
|
11
11
|
const debounce_1 = __importDefault(require("lodash/debounce"));
|
|
12
|
+
const rpc_1 = require("../rpc");
|
|
12
13
|
class PluginHostAPI extends plugin_api_1.PluginAPIManagedListeners {
|
|
13
14
|
scrypted;
|
|
14
15
|
pluginHost;
|
|
16
|
+
mediaManager;
|
|
15
17
|
pluginId;
|
|
18
|
+
[rpc_1.PROPERTY_PROXY_ONEWAY_METHODS];
|
|
16
19
|
restartDebounced = (0, debounce_1.default)(async () => {
|
|
17
20
|
const host = this.scrypted.plugins[this.pluginId];
|
|
18
21
|
const logger = await this.getLogger(undefined);
|
|
@@ -23,10 +26,11 @@ class PluginHostAPI extends plugin_api_1.PluginAPIManagedListeners {
|
|
|
23
26
|
const plugin = await this.scrypted.datastore.tryGet(db_types_1.Plugin, this.pluginId);
|
|
24
27
|
this.scrypted.runPlugin(plugin);
|
|
25
28
|
}, 15000);
|
|
26
|
-
constructor(scrypted, plugin, pluginHost) {
|
|
29
|
+
constructor(scrypted, plugin, pluginHost, mediaManager) {
|
|
27
30
|
super();
|
|
28
31
|
this.scrypted = scrypted;
|
|
29
32
|
this.pluginHost = pluginHost;
|
|
33
|
+
this.mediaManager = mediaManager;
|
|
30
34
|
this.pluginId = plugin._id;
|
|
31
35
|
}
|
|
32
36
|
async onMixinEvent(id, nativeId, eventInterface, eventData) {
|
|
@@ -40,8 +44,8 @@ class PluginHostAPI extends plugin_api_1.PluginAPIManagedListeners {
|
|
|
40
44
|
throw new Error(`${mixinProvider._id} does not mixin ${eventInterface} for ${id}`);
|
|
41
45
|
this.scrypted.stateManager.notifyInterfaceEvent(device, eventInterface, eventData);
|
|
42
46
|
}
|
|
43
|
-
getMediaManager() {
|
|
44
|
-
return
|
|
47
|
+
async getMediaManager() {
|
|
48
|
+
return this.mediaManager;
|
|
45
49
|
}
|
|
46
50
|
async deliverPush(endpoint, httpRequest) {
|
|
47
51
|
return this.scrypted.deliverPush(endpoint, httpRequest);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin-host-api.js","sourceRoot":"","sources":["../../src/plugin/plugin-host-api.ts"],"names":[],"mappings":";;;;;;AAAA,+CAA+M;AAE/M,0CAAqC;AACrC,6CAAoE;AAEpE,oCAAoC;AAEpC,+DAAuC;
|
|
1
|
+
{"version":3,"file":"plugin-host-api.js","sourceRoot":"","sources":["../../src/plugin/plugin-host-api.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.startPluginClusterWorker = exports.PluginHost =
|
|
6
|
+
exports.startPluginClusterWorker = exports.PluginHost = void 0;
|
|
7
7
|
const rpc_1 = require("../rpc");
|
|
8
8
|
const adm_zip_1 = __importDefault(require("adm-zip"));
|
|
9
9
|
const types_1 = require("@scrypted/sdk/types");
|
|
@@ -20,23 +20,13 @@ const stream_1 = require("stream");
|
|
|
20
20
|
const console_1 = require("console");
|
|
21
21
|
const sleep_1 = require("../sleep");
|
|
22
22
|
const plugin_host_api_1 = require("./plugin-host-api");
|
|
23
|
-
const mkdirp_1 = __importDefault(require("mkdirp"));
|
|
24
23
|
const path_1 = __importDefault(require("path"));
|
|
25
24
|
const source_map_support_1 = require("source-map-support");
|
|
26
25
|
const net_2 = __importDefault(require("net"));
|
|
27
26
|
const child_process_1 = __importDefault(require("child_process"));
|
|
28
27
|
const readline_1 = __importDefault(require("readline"));
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
const pluginVolume = path_1.default.join(volume, 'plugins', pluginId);
|
|
32
|
-
try {
|
|
33
|
-
mkdirp_1.default.sync(pluginVolume);
|
|
34
|
-
}
|
|
35
|
-
catch (e) {
|
|
36
|
-
}
|
|
37
|
-
return pluginVolume;
|
|
38
|
-
}
|
|
39
|
-
exports.ensurePluginVolume = ensurePluginVolume;
|
|
28
|
+
const plugin_volume_1 = require("./plugin-volume");
|
|
29
|
+
const plugin_npm_dependencies_1 = require("./plugin-npm-dependencies");
|
|
40
30
|
class PluginHost {
|
|
41
31
|
pluginDebug;
|
|
42
32
|
worker;
|
|
@@ -55,7 +45,9 @@ class PluginHost {
|
|
|
55
45
|
packageJson;
|
|
56
46
|
listener;
|
|
57
47
|
stats;
|
|
48
|
+
killed = false;
|
|
58
49
|
kill() {
|
|
50
|
+
this.killed = true;
|
|
59
51
|
this.listener.removeListener();
|
|
60
52
|
this.api.removeListeners();
|
|
61
53
|
this.worker.kill();
|
|
@@ -93,7 +85,7 @@ class PluginHost {
|
|
|
93
85
|
this.packageJson = plugin.packageJson;
|
|
94
86
|
const logger = scrypted.getDeviceLogger(scrypted.findPluginDevice(plugin._id));
|
|
95
87
|
const volume = path_1.default.join(process.cwd(), 'volume');
|
|
96
|
-
const cwd = ensurePluginVolume(this.pluginId);
|
|
88
|
+
const cwd = (0, plugin_volume_1.ensurePluginVolume)(this.pluginId);
|
|
97
89
|
this.startPluginClusterHost(logger, {
|
|
98
90
|
NODE_PATH: path_1.default.join(cwd, 'node_modules'),
|
|
99
91
|
SCRYPTED_PLUGIN_VOLUME: cwd,
|
|
@@ -116,7 +108,11 @@ class PluginHost {
|
|
|
116
108
|
}
|
|
117
109
|
});
|
|
118
110
|
const self = this;
|
|
119
|
-
|
|
111
|
+
const { runtime } = this.packageJson.scrypted;
|
|
112
|
+
const mediaManager = runtime === 'python'
|
|
113
|
+
? new media_1.MediaManagerHostImpl(scrypted.stateManager.getSystemState(), id => scrypted.getDevice(id), console)
|
|
114
|
+
: undefined;
|
|
115
|
+
this.api = new plugin_host_api_1.PluginHostAPI(scrypted, plugin, this, mediaManager);
|
|
120
116
|
const zipBuffer = Buffer.from(plugin.zip, 'base64');
|
|
121
117
|
this.zip = new adm_zip_1.default(zipBuffer);
|
|
122
118
|
logger.log('i', `loading ${this.pluginName}`);
|
|
@@ -140,7 +136,6 @@ class PluginHost {
|
|
|
140
136
|
console.error('debugger failed', e);
|
|
141
137
|
}
|
|
142
138
|
}
|
|
143
|
-
const { runtime } = this.packageJson.scrypted;
|
|
144
139
|
const fail = 'Plugin failed to load. Console for more information.';
|
|
145
140
|
try {
|
|
146
141
|
const loadZipOptions = {
|
|
@@ -166,7 +161,6 @@ class PluginHost {
|
|
|
166
161
|
throw e;
|
|
167
162
|
}
|
|
168
163
|
})();
|
|
169
|
-
init.catch(e => console.error('plugin failed to load', e));
|
|
170
164
|
this.module = init.then(({ module }) => module);
|
|
171
165
|
this.remote = new LazyRemote(remotePromise, init.then(({ remote }) => remote));
|
|
172
166
|
this.listener = scrypted.stateManager.listen((id, eventDetails, eventData) => {
|
|
@@ -178,11 +172,17 @@ class PluginHost {
|
|
|
178
172
|
this.remote.notify(id, eventDetails.eventTime, eventDetails.eventInterface, eventDetails.property, eventData, eventDetails.changed);
|
|
179
173
|
}
|
|
180
174
|
});
|
|
175
|
+
init.catch(e => {
|
|
176
|
+
console.error('plugin failed to load', e);
|
|
177
|
+
this.listener.removeListener();
|
|
178
|
+
});
|
|
181
179
|
}
|
|
182
180
|
startPluginClusterHost(logger, env, runtime) {
|
|
183
181
|
let connected = true;
|
|
184
182
|
if (runtime === 'python') {
|
|
185
|
-
const args = [
|
|
183
|
+
const args = [
|
|
184
|
+
'-u',
|
|
185
|
+
];
|
|
186
186
|
if (this.pluginDebug) {
|
|
187
187
|
args.push('-m', 'debugpy', '--listen', `0.0.0.0:${this.pluginDebug.inspectPort}`, '--wait-for-client');
|
|
188
188
|
}
|
|
@@ -194,6 +194,8 @@ class PluginHost {
|
|
|
194
194
|
});
|
|
195
195
|
const peerin = this.worker.stdio[3];
|
|
196
196
|
const peerout = this.worker.stdio[4];
|
|
197
|
+
peerin.on('error', e => connected = false);
|
|
198
|
+
peerout.on('error', e => connected = false);
|
|
197
199
|
this.peer = new rpc_1.RpcPeer('host', this.pluginId, (message, reject) => {
|
|
198
200
|
if (connected) {
|
|
199
201
|
peerin.write(JSON.stringify(message) + '\n', e => e && reject?.(e));
|
|
@@ -235,10 +237,8 @@ class PluginHost {
|
|
|
235
237
|
this.peer.transportSafeArgumentTypes.add(Buffer.name);
|
|
236
238
|
this.worker.on('message', message => this.peer.handleMessage(message));
|
|
237
239
|
}
|
|
238
|
-
this.worker.stdout.on('data', data =>
|
|
239
|
-
|
|
240
|
-
});
|
|
241
|
-
this.worker.stderr.on('data', data => process.stderr.write(data));
|
|
240
|
+
this.worker.stdout.on('data', data => console.log(data.toString()));
|
|
241
|
+
this.worker.stderr.on('data', data => console.error(data.toString()));
|
|
242
242
|
this.worker.on('disconnect', () => {
|
|
243
243
|
connected = false;
|
|
244
244
|
logger.log('e', `${this.pluginName} disconnected`);
|
|
@@ -394,25 +394,6 @@ function startPluginClusterWorker() {
|
|
|
394
394
|
peer.transportSafeArgumentTypes.add(Buffer.name);
|
|
395
395
|
process.on('message', message => peer.handleMessage(message));
|
|
396
396
|
const events = new ws_1.EventEmitter();
|
|
397
|
-
events.once('zip', (zip, pluginId) => {
|
|
398
|
-
peer.selfName = pluginId;
|
|
399
|
-
(0, source_map_support_1.install)({
|
|
400
|
-
environment: 'node',
|
|
401
|
-
retrieveSourceMap(source) {
|
|
402
|
-
if (source === '/plugin/main.nodejs.js' || source === `/${pluginId}/main.nodejs.js`) {
|
|
403
|
-
const entry = zip.getEntry('main.nodejs.js.map');
|
|
404
|
-
const map = entry?.getData().toString();
|
|
405
|
-
if (!map)
|
|
406
|
-
return null;
|
|
407
|
-
return {
|
|
408
|
-
url: '/plugin/main.nodejs.js',
|
|
409
|
-
map,
|
|
410
|
-
};
|
|
411
|
-
}
|
|
412
|
-
return null;
|
|
413
|
-
}
|
|
414
|
-
});
|
|
415
|
-
});
|
|
416
397
|
let systemManager;
|
|
417
398
|
let deviceManager;
|
|
418
399
|
function idForNativeId(nativeId) {
|
|
@@ -526,6 +507,36 @@ function startPluginClusterWorker() {
|
|
|
526
507
|
if (name === 'console-writer')
|
|
527
508
|
return (await consolePorts)[1];
|
|
528
509
|
throw new Error(`unknown service ${name}`);
|
|
510
|
+
},
|
|
511
|
+
async beforeLoadZip(zip, packageJson) {
|
|
512
|
+
const pluginId = packageJson.name;
|
|
513
|
+
peer.selfName = pluginId;
|
|
514
|
+
(0, source_map_support_1.install)({
|
|
515
|
+
environment: 'node',
|
|
516
|
+
retrieveSourceMap(source) {
|
|
517
|
+
if (source === '/plugin/main.nodejs.js' || source === `/${pluginId}/main.nodejs.js`) {
|
|
518
|
+
const entry = zip.getEntry('main.nodejs.js.map');
|
|
519
|
+
const map = entry?.getData().toString();
|
|
520
|
+
if (!map)
|
|
521
|
+
return null;
|
|
522
|
+
return {
|
|
523
|
+
url: '/plugin/main.nodejs.js',
|
|
524
|
+
map,
|
|
525
|
+
};
|
|
526
|
+
}
|
|
527
|
+
return null;
|
|
528
|
+
}
|
|
529
|
+
});
|
|
530
|
+
const cp = await consolePorts;
|
|
531
|
+
const writer = cp[1];
|
|
532
|
+
const socket = net_2.default.connect(writer);
|
|
533
|
+
await (0, events_1.once)(socket, 'connect');
|
|
534
|
+
try {
|
|
535
|
+
await (0, plugin_npm_dependencies_1.installOptionalDependencies)(pluginConsole, socket, packageJson);
|
|
536
|
+
}
|
|
537
|
+
finally {
|
|
538
|
+
socket.destroy();
|
|
539
|
+
}
|
|
529
540
|
}
|
|
530
541
|
}).then(scrypted => {
|
|
531
542
|
systemManager = scrypted.systemManager;
|
|
@@ -554,6 +565,16 @@ class LazyRemote {
|
|
|
554
565
|
return this.remote;
|
|
555
566
|
})();
|
|
556
567
|
}
|
|
568
|
+
async ensureRemote() {
|
|
569
|
+
try {
|
|
570
|
+
if (!this.remote)
|
|
571
|
+
await this.remoteReadyPromise;
|
|
572
|
+
}
|
|
573
|
+
catch (e) {
|
|
574
|
+
return;
|
|
575
|
+
}
|
|
576
|
+
return true;
|
|
577
|
+
}
|
|
557
578
|
async loadZip(packageJson, zipData, options) {
|
|
558
579
|
if (!this.remote)
|
|
559
580
|
await this.remoteReadyPromise;
|
|
@@ -570,13 +591,13 @@ class LazyRemote {
|
|
|
570
591
|
return this.remote.setNativeId(nativeId, id, storage);
|
|
571
592
|
}
|
|
572
593
|
async updateDeviceState(id, state) {
|
|
573
|
-
if (!this.
|
|
574
|
-
|
|
594
|
+
if (!await this.ensureRemote())
|
|
595
|
+
return;
|
|
575
596
|
return this.remote.updateDeviceState(id, state);
|
|
576
597
|
}
|
|
577
598
|
async notify(id, eventTime, eventInterface, property, propertyState, changed) {
|
|
578
|
-
if (!this.
|
|
579
|
-
|
|
599
|
+
if (!await this.ensureRemote())
|
|
600
|
+
return;
|
|
580
601
|
return this.remote.notify(id, eventTime, eventInterface, property, propertyState, changed);
|
|
581
602
|
}
|
|
582
603
|
async ioEvent(id, event, message) {
|