@scrypted/server 0.0.88 → 0.0.89
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/dist/event-registry.js +8 -2
- package/dist/event-registry.js.map +1 -1
- package/dist/plugin/plugin-console.js +44 -30
- package/dist/plugin/plugin-console.js.map +1 -1
- package/dist/plugin/plugin-device.js +159 -69
- package/dist/plugin/plugin-device.js.map +1 -1
- package/dist/plugin/plugin-host-api.js +3 -2
- package/dist/plugin/plugin-host-api.js.map +1 -1
- package/dist/plugin/plugin-host.js +11 -3
- package/dist/plugin/plugin-host.js.map +1 -1
- package/dist/plugin/plugin-remote.js +0 -1
- package/dist/plugin/plugin-remote.js.map +1 -1
- package/dist/runtime.js +8 -0
- package/dist/runtime.js.map +1 -1
- package/dist/services/plugin.js +1 -1
- package/dist/services/plugin.js.map +1 -1
- package/package.json +1 -1
- package/src/event-registry.ts +7 -2
- package/src/plugin/plugin-console.ts +59 -34
- package/src/plugin/plugin-device.ts +187 -79
- package/src/plugin/plugin-host-api.ts +3 -2
- package/src/plugin/plugin-host.ts +14 -4
- package/src/plugin/plugin-remote.ts +1 -2
- package/src/runtime.ts +9 -0
- package/src/services/plugin.ts +1 -1
package/dist/event-registry.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.EventRegistry = exports.EventListenerRegisterImpl = void 0;
|
|
4
|
+
const types_1 = require("@scrypted/sdk/types");
|
|
4
5
|
class EventListenerRegisterImpl {
|
|
5
6
|
removeListener;
|
|
6
7
|
constructor(removeListener) {
|
|
@@ -48,8 +49,13 @@ class EventRegistry {
|
|
|
48
49
|
eventTime,
|
|
49
50
|
property,
|
|
50
51
|
};
|
|
51
|
-
|
|
52
|
-
|
|
52
|
+
// system listeners only get state changes.
|
|
53
|
+
// there are many potentially noisy stateless events, like
|
|
54
|
+
// object detection and settings changes.
|
|
55
|
+
if (property || eventInterface === types_1.ScryptedInterface.ScryptedDevice) {
|
|
56
|
+
for (const event of this.systemListeners) {
|
|
57
|
+
event(id, eventDetails, value);
|
|
58
|
+
}
|
|
53
59
|
}
|
|
54
60
|
const events = this.listeners[`${id}#${eventInterface}`];
|
|
55
61
|
if (events) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"event-registry.js","sourceRoot":"","sources":["../src/event-registry.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"event-registry.js","sourceRoot":"","sources":["../src/event-registry.ts"],"names":[],"mappings":";;;AAAA,+CAAsI;AAEtI,MAAa,yBAAyB;IAClC,cAAc,CAAa;IAE3B,YAAY,cAA0B;QAClC,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;IACzC,CAAC;CACJ;AAND,8DAMC;AAED,MAAa,aAAa;IACtB,eAAe,GAAG,IAAI,GAAG,EAAuE,CAAC;IACjG,SAAS,GAAsF,EAAE,CAAC;IAElG,MAAM,CAAC,aAAkF;QACrF,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC;QACpC,IAAI,EAAE,GAAG,aAAa,CAAC;QACvB,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACf,OAAO,IAAI,yBAAyB,CAAC,GAAG,EAAE;YACtC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAClB,EAAE,GAAG,SAAS,CAAC;QACnB,CAAC,CAAC,CAAC;IACP,CAAC;IAED,YAAY,CAAC,EAAU,EAAE,OAAsC,EAAE,QAAiE;QAC9H,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,IAAI,EAAE,CAAyB,CAAC;QACxD,IAAI,CAAC,KAAK,IAAI,OAAO,OAAO,KAAK,QAAQ;YACrC,KAAK,GAAG,OAAiB,CAAC;QAC9B,IAAI,CAAC,KAAK;YACN,KAAK,GAAG,SAAS,CAAC;QACtB,MAAM,KAAK,GAAG,GAAG,EAAE,IAAI,KAAK,EAAE,CAAC;QAC/B,IAAI,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACnC,IAAI,CAAC,MAAM,EAAE;YACT,MAAM,GAAG,IAAI,GAAG,EAAE,CAAC;YACnB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC;SAClC;QAED,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACrB,OAAO,IAAI,yBAAyB,CAAC,GAAG,EAAE;YACtC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YACxB,QAAQ,GAAG,SAAS,CAAC;QACzB,CAAC,CAAC,CAAC;IACP,CAAC;IAED,MAAM,CAAC,EAAoB,EAAE,SAAiB,EAAE,cAAsB,EAAE,QAA0B,EAAE,KAAU,EAAE,OAAiB;QAC7H,+BAA+B;QAC/B,IAAI,QAAQ,IAAI,CAAC,OAAO;YACpB,OAAO,KAAK,CAAC;QAEjB,MAAM,YAAY,GAAG;YACjB,OAAO;YACP,cAAc;YACd,SAAS;YACT,QAAQ;SACX,CAAC;QAEF,2CAA2C;QAC3C,0DAA0D;QAC1D,yCAAyC;QACzC,IAAI,QAAQ,IAAI,cAAc,KAAK,yBAAiB,CAAC,cAAc,EAAE;YACjE,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,eAAe,EAAE;gBACtC,KAAK,CAAC,EAAE,EAAE,YAAY,EAAE,KAAK,CAAC,CAAC;aAClC;SACJ;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,cAAc,EAAE,CAAC,CAAC;QACzD,IAAI,MAAM,EAAE;YACR,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;gBACxB,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;aAC9B;SACJ;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,SAAS,EAAE,CAAC,CAAC;QACvD,IAAI,SAAS,EAAE;YACX,KAAK,MAAM,KAAK,IAAI,SAAS,EAAE;gBAC3B,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;aAC9B;SACJ;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ;AAvED,sCAuEC"}
|
|
@@ -1,54 +1,67 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.createConsoleServer = void 0;
|
|
4
|
-
const ws_1 = require("ws");
|
|
5
4
|
const listen_zero_1 = require("./listen-zero");
|
|
6
5
|
const net_1 = require("net");
|
|
7
6
|
const events_1 = require("events");
|
|
8
|
-
|
|
7
|
+
const stream_1 = require("stream");
|
|
8
|
+
const console_1 = require("console");
|
|
9
|
+
async function createConsoleServer(remoteStdout, remoteStderr) {
|
|
9
10
|
const outputs = new Map();
|
|
10
|
-
const
|
|
11
|
+
const getPassthroughs = (nativeId) => {
|
|
11
12
|
if (!nativeId)
|
|
12
13
|
nativeId = undefined;
|
|
13
|
-
let
|
|
14
|
-
if (!
|
|
15
|
-
|
|
16
|
-
|
|
14
|
+
let pts = outputs.get(nativeId);
|
|
15
|
+
if (!pts) {
|
|
16
|
+
const stdout = new stream_1.PassThrough();
|
|
17
|
+
const stderr = new stream_1.PassThrough();
|
|
18
|
+
pts = {
|
|
19
|
+
stdout,
|
|
20
|
+
stderr,
|
|
21
|
+
buffers: [],
|
|
22
|
+
};
|
|
23
|
+
outputs.set(nativeId, pts);
|
|
24
|
+
const appendOutput = (data) => {
|
|
25
|
+
const { buffers } = pts;
|
|
26
|
+
buffers.push(data);
|
|
27
|
+
// when we're over 4000 lines or whatever these buffer are,
|
|
28
|
+
// truncate down to 2000.
|
|
29
|
+
if (buffers.length > 4000)
|
|
30
|
+
pts.buffers = buffers.slice(buffers.length - 2000);
|
|
31
|
+
};
|
|
32
|
+
stdout.on('data', appendOutput);
|
|
33
|
+
stderr.on('data', appendOutput);
|
|
17
34
|
}
|
|
18
|
-
|
|
19
|
-
// when we're over 4000 lines or whatever these buffer are,
|
|
20
|
-
// truncate down to 2000.
|
|
21
|
-
if (buffers.length > 4000)
|
|
22
|
-
outputs.set(nativeId, buffers.slice(buffers.length - 2000));
|
|
35
|
+
return pts;
|
|
23
36
|
};
|
|
37
|
+
let pluginConsole;
|
|
38
|
+
{
|
|
39
|
+
const { stdout, stderr } = getPassthroughs();
|
|
40
|
+
remoteStdout.pipe(stdout);
|
|
41
|
+
remoteStderr.pipe(stderr);
|
|
42
|
+
pluginConsole = new console_1.Console(stdout, stderr);
|
|
43
|
+
}
|
|
24
44
|
const sockets = new Set();
|
|
25
|
-
const events = new ws_1.EventEmitter();
|
|
26
|
-
events.on('stdout', appendOutput);
|
|
27
|
-
events.on('stderr', appendOutput);
|
|
28
|
-
stdout.on('data', data => events.emit('stdout', data));
|
|
29
|
-
stderr.on('data', data => events.emit('stderr', data));
|
|
30
45
|
const readServer = new net_1.Server(async (socket) => {
|
|
31
46
|
sockets.add(socket);
|
|
32
47
|
let [filter] = await (0, events_1.once)(socket, 'data');
|
|
33
48
|
filter = filter.toString().trim();
|
|
34
49
|
if (filter === 'undefined')
|
|
35
50
|
filter = undefined;
|
|
36
|
-
const
|
|
51
|
+
const pts = outputs.get(filter);
|
|
52
|
+
const buffers = pts?.buffers;
|
|
37
53
|
if (buffers) {
|
|
38
54
|
const concat = Buffer.concat(buffers);
|
|
39
|
-
|
|
55
|
+
pts.buffers = [concat];
|
|
40
56
|
socket.write(concat);
|
|
41
57
|
}
|
|
42
|
-
const cb = (data
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
};
|
|
47
|
-
events.on('stdout', cb);
|
|
48
|
-
events.on('stderr', cb);
|
|
58
|
+
const cb = (data) => socket.write(data);
|
|
59
|
+
const { stdout, stderr } = getPassthroughs(filter);
|
|
60
|
+
stdout.on('data', cb);
|
|
61
|
+
stderr.on('data', cb);
|
|
49
62
|
const cleanup = () => {
|
|
50
|
-
|
|
51
|
-
|
|
63
|
+
stdout.removeListener('data', cb);
|
|
64
|
+
stderr.removeListener('data', cb);
|
|
52
65
|
socket.destroy();
|
|
53
66
|
socket.removeAllListeners();
|
|
54
67
|
sockets.delete(socket);
|
|
@@ -68,8 +81,8 @@ async function createConsoleServer(stdout, stderr) {
|
|
|
68
81
|
filter = filter.substring(0, newline);
|
|
69
82
|
if (filter === 'undefined')
|
|
70
83
|
filter = undefined;
|
|
71
|
-
const
|
|
72
|
-
socket.
|
|
84
|
+
const { stdout } = getPassthroughs(filter);
|
|
85
|
+
socket.pipe(stdout, { end: false });
|
|
73
86
|
const cleanup = () => {
|
|
74
87
|
socket.destroy();
|
|
75
88
|
socket.removeAllListeners();
|
|
@@ -82,6 +95,7 @@ async function createConsoleServer(stdout, stderr) {
|
|
|
82
95
|
const readPort = await (0, listen_zero_1.listenZero)(readServer);
|
|
83
96
|
const writePort = await (0, listen_zero_1.listenZero)(writeServer);
|
|
84
97
|
return {
|
|
98
|
+
pluginConsole,
|
|
85
99
|
readPort,
|
|
86
100
|
writePort,
|
|
87
101
|
readServer,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin-console.js","sourceRoot":"","sources":["../../src/plugin/plugin-console.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"plugin-console.js","sourceRoot":"","sources":["../../src/plugin/plugin-console.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,87 +14,174 @@ class PluginDeviceProxyHandler {
|
|
|
14
14
|
this.scrypted = scrypted;
|
|
15
15
|
this.id = id;
|
|
16
16
|
}
|
|
17
|
+
invalidateEntry(mixinEntry) {
|
|
18
|
+
if (!mixinEntry.mixinProviderId)
|
|
19
|
+
return;
|
|
20
|
+
(async () => {
|
|
21
|
+
const mixinProvider = this.scrypted.getDevice(mixinEntry.mixinProviderId);
|
|
22
|
+
const { proxy } = await mixinEntry.entry;
|
|
23
|
+
mixinProvider?.releaseMixin(this.id, proxy);
|
|
24
|
+
})().catch(() => { });
|
|
25
|
+
}
|
|
17
26
|
// should this be async?
|
|
18
27
|
invalidate() {
|
|
19
28
|
const mixinTable = this.mixinTable;
|
|
20
29
|
this.mixinTable = undefined;
|
|
21
|
-
(
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
30
|
+
for (const mixinEntry of (mixinTable || [])) {
|
|
31
|
+
this.invalidateEntry(mixinEntry);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
invalidateMixinTable() {
|
|
35
|
+
if (!this.mixinTable)
|
|
36
|
+
return this.invalidate();
|
|
37
|
+
let previousMixinIds = this.mixinTable?.map(entry => entry.mixinProviderId) || [];
|
|
38
|
+
previousMixinIds.pop();
|
|
39
|
+
previousMixinIds = previousMixinIds.reverse();
|
|
40
|
+
const pluginDevice = this.scrypted.findPluginDeviceById(this.id);
|
|
41
|
+
if (!pluginDevice)
|
|
42
|
+
return this.invalidate();
|
|
43
|
+
const mixins = (0, state_1.getState)(pluginDevice, types_1.ScryptedInterfaceProperty.mixins) || [];
|
|
44
|
+
// iterate the new mixin table to find the last good mixin,
|
|
45
|
+
// and resume creation from there.
|
|
46
|
+
let lastValidMixinId;
|
|
47
|
+
for (const mixinId of mixins) {
|
|
48
|
+
if (!previousMixinIds.length) {
|
|
49
|
+
// reached of the previous mixin table, meaning
|
|
50
|
+
// mixins were added.
|
|
51
|
+
break;
|
|
29
52
|
}
|
|
30
|
-
|
|
31
|
-
|
|
53
|
+
const check = previousMixinIds.shift();
|
|
54
|
+
if (check !== mixinId)
|
|
55
|
+
break;
|
|
56
|
+
lastValidMixinId = mixinId;
|
|
57
|
+
}
|
|
58
|
+
if (!lastValidMixinId)
|
|
59
|
+
return this.invalidate();
|
|
60
|
+
// invalidate and remove everything up to lastValidMixinId
|
|
61
|
+
while (true) {
|
|
62
|
+
const entry = this.mixinTable[0];
|
|
63
|
+
if (entry.mixinProviderId === lastValidMixinId)
|
|
64
|
+
break;
|
|
65
|
+
this.mixinTable.shift();
|
|
66
|
+
this.invalidateEntry(entry);
|
|
67
|
+
}
|
|
68
|
+
this.ensureProxy(lastValidMixinId);
|
|
32
69
|
}
|
|
33
70
|
// this must not be async, because it potentially changes execution order.
|
|
34
|
-
ensureProxy() {
|
|
71
|
+
ensureProxy(lastValidMixinId) {
|
|
35
72
|
const pluginDevice = this.scrypted.findPluginDeviceById(this.id);
|
|
36
73
|
if (!pluginDevice)
|
|
37
74
|
throw new Error(`device ${this.id} does not exist`);
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
proxy
|
|
45
|
-
}
|
|
46
|
-
else {
|
|
47
|
-
const providerId = (0, state_1.getState)(pluginDevice, types_1.ScryptedInterfaceProperty.providerId);
|
|
48
|
-
const provider = this.scrypted.getDevice(providerId);
|
|
49
|
-
proxy = await provider.getDevice(pluginDevice.nativeId);
|
|
50
|
-
}
|
|
51
|
-
if (!proxy)
|
|
52
|
-
console.error('null proxy', this.id);
|
|
53
|
-
// after creating an actual device, apply all the mixins
|
|
54
|
-
const type = (0, infer_defaults_1.getDisplayType)(pluginDevice);
|
|
55
|
-
const allInterfaces = (0, state_1.getState)(pluginDevice, types_1.ScryptedInterfaceProperty.providedInterfaces) || [];
|
|
56
|
-
const mixinTable = [];
|
|
57
|
-
mixinTable.unshift({
|
|
58
|
-
mixinProviderId: undefined,
|
|
59
|
-
interfaces: allInterfaces.slice(),
|
|
60
|
-
proxy,
|
|
61
|
-
});
|
|
62
|
-
for (const mixinId of (0, state_1.getState)(pluginDevice, types_1.ScryptedInterfaceProperty.mixins) || []) {
|
|
63
|
-
const mixinProvider = this.scrypted.getDevice(mixinId);
|
|
75
|
+
let previousEntry;
|
|
76
|
+
if (!lastValidMixinId) {
|
|
77
|
+
if (this.mixinTable)
|
|
78
|
+
return Promise.resolve(pluginDevice);
|
|
79
|
+
this.mixinTable = [];
|
|
80
|
+
previousEntry = (async () => {
|
|
81
|
+
let proxy;
|
|
64
82
|
try {
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
83
|
+
if (!pluginDevice.nativeId) {
|
|
84
|
+
const plugin = this.scrypted.plugins[pluginDevice.pluginId];
|
|
85
|
+
proxy = await plugin.module;
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
const providerId = (0, state_1.getState)(pluginDevice, types_1.ScryptedInterfaceProperty.providerId);
|
|
89
|
+
const provider = this.scrypted.getDevice(providerId);
|
|
90
|
+
proxy = await provider.getDevice(pluginDevice.nativeId);
|
|
72
91
|
}
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
const wrappedProxy = new Proxy(wrappedHandler, wrappedHandler);
|
|
76
|
-
const host = this.scrypted.getPluginHostForDeviceId(mixinId);
|
|
77
|
-
const deviceState = await host.remote.createDeviceState(this.id, async (property, value) => this.scrypted.stateManager.setPluginDeviceState(pluginDevice, property, value));
|
|
78
|
-
const mixinProxy = await mixinProvider.getMixin(wrappedProxy, allInterfaces, deviceState);
|
|
79
|
-
if (!mixinProxy)
|
|
80
|
-
throw new Error(`mixin provider ${mixinId} did not return mixin for ${this.id}`);
|
|
81
|
-
allInterfaces.push(...interfaces);
|
|
82
|
-
proxy = mixinProxy;
|
|
83
|
-
mixinTable.unshift({
|
|
84
|
-
mixinProviderId: mixinId,
|
|
85
|
-
interfaces,
|
|
86
|
-
proxy,
|
|
87
|
-
});
|
|
92
|
+
if (!proxy)
|
|
93
|
+
console.warn('no device was returned by the plugin', this.id);
|
|
88
94
|
}
|
|
89
95
|
catch (e) {
|
|
90
|
-
console.warn(
|
|
96
|
+
console.warn('error occured retrieving device from plugin');
|
|
91
97
|
}
|
|
98
|
+
const interfaces = (0, state_1.getState)(pluginDevice, types_1.ScryptedInterfaceProperty.providedInterfaces) || [];
|
|
99
|
+
return {
|
|
100
|
+
proxy,
|
|
101
|
+
interfaces: new Set(interfaces),
|
|
102
|
+
allInterfaces: interfaces,
|
|
103
|
+
};
|
|
104
|
+
})();
|
|
105
|
+
this.mixinTable.unshift({
|
|
106
|
+
mixinProviderId: undefined,
|
|
107
|
+
entry: previousEntry,
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
else {
|
|
111
|
+
if (!this.mixinTable)
|
|
112
|
+
throw new Error('mixin table partial invalidation was called with empty mixin table');
|
|
113
|
+
const prevTable = this.mixinTable.find(table => table.mixinProviderId === lastValidMixinId);
|
|
114
|
+
if (!prevTable)
|
|
115
|
+
throw new Error('mixin table partial invalidation was called with invalid lastValidMixinId');
|
|
116
|
+
previousEntry = prevTable.entry;
|
|
117
|
+
}
|
|
118
|
+
const type = (0, infer_defaults_1.getDisplayType)(pluginDevice);
|
|
119
|
+
for (const mixinId of (0, state_1.getState)(pluginDevice, types_1.ScryptedInterfaceProperty.mixins) || []) {
|
|
120
|
+
if (lastValidMixinId) {
|
|
121
|
+
if (mixinId === lastValidMixinId)
|
|
122
|
+
lastValidMixinId = undefined;
|
|
123
|
+
continue;
|
|
92
124
|
}
|
|
93
|
-
const
|
|
94
|
-
this.
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
125
|
+
const wrappedMixinTable = this.mixinTable.slice();
|
|
126
|
+
this.mixinTable.unshift({
|
|
127
|
+
mixinProviderId: mixinId,
|
|
128
|
+
entry: (async () => {
|
|
129
|
+
let { allInterfaces } = await previousEntry;
|
|
130
|
+
try {
|
|
131
|
+
const mixinProvider = this.scrypted.getDevice(mixinId);
|
|
132
|
+
const interfaces = await mixinProvider?.canMixin(type, allInterfaces);
|
|
133
|
+
if (!interfaces) {
|
|
134
|
+
// this is not an error
|
|
135
|
+
// do not advertise interfaces so it is skipped during
|
|
136
|
+
// vtable lookup.
|
|
137
|
+
console.log(`mixin provider ${mixinId} can no longer mixin ${this.id}`);
|
|
138
|
+
const mixins = (0, state_1.getState)(pluginDevice, types_1.ScryptedInterfaceProperty.mixins) || [];
|
|
139
|
+
this.scrypted.stateManager.setPluginDeviceState(pluginDevice, types_1.ScryptedInterfaceProperty.mixins, mixins.filter(mid => mid !== mixinId));
|
|
140
|
+
this.scrypted.datastore.upsert(pluginDevice);
|
|
141
|
+
return {
|
|
142
|
+
allInterfaces,
|
|
143
|
+
interfaces: new Set(),
|
|
144
|
+
proxy: undefined,
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
allInterfaces = allInterfaces.slice();
|
|
148
|
+
allInterfaces.push(...interfaces);
|
|
149
|
+
const combinedInterfaces = [...new Set(allInterfaces)];
|
|
150
|
+
const wrappedHandler = new PluginDeviceProxyHandler(this.scrypted, this.id);
|
|
151
|
+
wrappedHandler.mixinTable = wrappedMixinTable;
|
|
152
|
+
const wrappedProxy = new Proxy(wrappedHandler, wrappedHandler);
|
|
153
|
+
const host = this.scrypted.getPluginHostForDeviceId(mixinId);
|
|
154
|
+
const deviceState = await host.remote.createDeviceState(this.id, async (property, value) => this.scrypted.stateManager.setPluginDeviceState(pluginDevice, property, value));
|
|
155
|
+
const mixinProxy = await mixinProvider.getMixin(wrappedProxy, allInterfaces, deviceState);
|
|
156
|
+
if (!mixinProxy)
|
|
157
|
+
throw new Error(`mixin provider ${mixinId} did not return mixin for ${this.id}`);
|
|
158
|
+
return {
|
|
159
|
+
interfaces: new Set(interfaces),
|
|
160
|
+
allInterfaces: combinedInterfaces,
|
|
161
|
+
proxy: mixinProxy,
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
catch (e) {
|
|
165
|
+
// on any error, do not advertise interfaces
|
|
166
|
+
// on this mixin, so as to prevent total failure?
|
|
167
|
+
// this has been the behavior for a while,
|
|
168
|
+
// but maybe interfaces implemented by that mixin
|
|
169
|
+
// should rethrow the error caught here in applyMixin.
|
|
170
|
+
console.warn(e);
|
|
171
|
+
return {
|
|
172
|
+
allInterfaces,
|
|
173
|
+
interfaces: new Set(),
|
|
174
|
+
error: e,
|
|
175
|
+
proxy: undefined,
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
})(),
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
return this.mixinTable[0].entry.then(entry => {
|
|
182
|
+
this.scrypted.stateManager.setPluginDeviceState(pluginDevice, types_1.ScryptedInterfaceProperty.interfaces, entry.allInterfaces);
|
|
183
|
+
return pluginDevice;
|
|
184
|
+
});
|
|
98
185
|
}
|
|
99
186
|
get(target, p, receiver) {
|
|
100
187
|
if (p === 'constructor')
|
|
@@ -148,11 +235,14 @@ class PluginDeviceProxyHandler {
|
|
|
148
235
|
const iface = descriptor_1.methodInterfaces[method];
|
|
149
236
|
if (!iface)
|
|
150
237
|
throw new Error(`unknown method ${method}`);
|
|
151
|
-
const
|
|
152
|
-
|
|
238
|
+
for (const mixin of this.mixinTable) {
|
|
239
|
+
const { interfaces, proxy } = await mixin.entry;
|
|
153
240
|
// this could be null?
|
|
154
|
-
if (
|
|
155
|
-
|
|
241
|
+
if (interfaces.has(iface)) {
|
|
242
|
+
if (!proxy)
|
|
243
|
+
throw new Error(`device is unavailable ${this.id} (mixin ${mixin.mixinProviderId})`);
|
|
244
|
+
return proxy[method](...argArray);
|
|
245
|
+
}
|
|
156
246
|
}
|
|
157
247
|
throw new Error(`${method} not implemented`);
|
|
158
248
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin-device.js","sourceRoot":"","sources":["../../src/plugin/plugin-device.ts"],"names":[],"mappings":";;;AAAA,+CAAgO;AAIhO,gCAAmD;AACnD,oCAAoC;AACpC,sDAAmD;AACnD,6CAAgG;
|
|
1
|
+
{"version":3,"file":"plugin-device.js","sourceRoot":"","sources":["../../src/plugin/plugin-device.ts"],"names":[],"mappings":"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"}
|
|
@@ -49,8 +49,9 @@ class PluginHostAPI extends plugin_api_1.PluginAPIManagedListeners {
|
|
|
49
49
|
const mixins = (0, state_1.getState)(device, types_1.ScryptedInterfaceProperty.mixins) || [];
|
|
50
50
|
if (!mixins.includes(mixinProvider._id))
|
|
51
51
|
throw new Error(`${mixinProvider._id} is not a mixin provider for ${id}`);
|
|
52
|
-
const tableEntry =
|
|
53
|
-
|
|
52
|
+
const tableEntry = this.scrypted.devices[device._id].handler.mixinTable.find(entry => entry.mixinProviderId === mixinProvider._id);
|
|
53
|
+
const { interfaces } = await tableEntry.entry;
|
|
54
|
+
if (!interfaces.has(eventInterface))
|
|
54
55
|
throw new Error(`${mixinProvider._id} does not mixin ${eventInterface} for ${id}`);
|
|
55
56
|
this.scrypted.stateManager.notifyInterfaceEvent(device, eventInterface, eventData);
|
|
56
57
|
}
|
|
@@ -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;AACvC,gCAAuD;AAGvD,MAAa,aAAc,SAAQ,sCAAyB;IA2BrC;IAAkD;IAA+B;IA1BpG,QAAQ,CAAS;IAEjB,CAAC,mCAA6B,CAAC,GAAG;QAC9B,cAAc;QACd,eAAe;QACf,YAAY;QACZ,QAAQ;QACR,SAAS;QACT,mBAAmB;QACnB,aAAa;QACb,gBAAgB;QAChB,UAAU;KACb,CAAC;IAEF,gBAAgB,GAAG,IAAA,kBAAQ,EAAC,KAAK,IAAI,EAAE;QACnC,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAClD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QAC/C,IAAI,IAAI,CAAC,GAAG,KAAK,IAAI,EAAE;YACnB,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,sFAAsF,CAAC,CAAC;YACxG,OAAO;SACV;QAED,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,iBAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC3E,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IACpC,CAAC,EAAE,KAAK,CAAC,CAAC;IAEV,YAAmB,QAAyB,EAAE,MAAc,EAAS,UAAsB,EAAS,YAA0B;QAC1H,KAAK,EAAE,CAAC;QADO,aAAQ,GAAR,QAAQ,CAAiB;QAAyB,eAAU,GAAV,UAAU,CAAY;QAAS,iBAAY,GAAZ,YAAY,CAAc;QAE1H,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC;IAC/B,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,EAAU,EAAE,QAA0B,EAAE,cAAmB,EAAE,SAAe;QAC3F,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC;QACtD,MAAM,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC9E,MAAM,MAAM,GAAa,IAAA,gBAAQ,EAAC,MAAM,EAAE,iCAAyB,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QAClF,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC;YACnC,MAAM,IAAI,KAAK,CAAC,GAAG,aAAa,CAAC,GAAG,gCAAgC,EAAE,EAAE,CAAC,CAAC;QAC9E,MAAM,UAAU,GAAG,
|
|
1
|
+
{"version":3,"file":"plugin-host-api.js","sourceRoot":"","sources":["../../src/plugin/plugin-host-api.ts"],"names":[],"mappings":"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"}
|
|
@@ -246,6 +246,10 @@ class PluginHost {
|
|
|
246
246
|
this.worker.stdout.on('data', data => console.log(data.toString()));
|
|
247
247
|
this.worker.stderr.on('data', data => console.error(data.toString()));
|
|
248
248
|
this.consoleServer = (0, plugin_console_1.createConsoleServer)(this.worker.stdout, this.worker.stderr);
|
|
249
|
+
this.consoleServer.then(cs => {
|
|
250
|
+
const { pluginConsole } = cs;
|
|
251
|
+
pluginConsole.log('starting plugin', this.pluginId, this.packageJson.version);
|
|
252
|
+
});
|
|
249
253
|
this.worker.on('disconnect', () => {
|
|
250
254
|
connected = false;
|
|
251
255
|
logger.log('e', `${this.pluginName} disconnected`);
|
|
@@ -321,6 +325,10 @@ function startPluginRemote() {
|
|
|
321
325
|
return ret;
|
|
322
326
|
};
|
|
323
327
|
const getDeviceConsole = (nativeId) => {
|
|
328
|
+
// the the plugin console is simply the default console
|
|
329
|
+
// and gets read from stderr/stdout.
|
|
330
|
+
if (!nativeId)
|
|
331
|
+
return console;
|
|
324
332
|
return getConsole(async (stdout, stderr) => {
|
|
325
333
|
const plugins = await api.getComponent('plugins');
|
|
326
334
|
const connect = async () => {
|
|
@@ -392,9 +400,9 @@ function startPluginRemote() {
|
|
|
392
400
|
let replPort;
|
|
393
401
|
let _pluginConsole;
|
|
394
402
|
const getPluginConsole = () => {
|
|
395
|
-
if (_pluginConsole)
|
|
396
|
-
|
|
397
|
-
_pluginConsole
|
|
403
|
+
if (!_pluginConsole)
|
|
404
|
+
_pluginConsole = getDeviceConsole(undefined);
|
|
405
|
+
return _pluginConsole;
|
|
398
406
|
};
|
|
399
407
|
(0, plugin_remote_1.attachPluginRemote)(peer, {
|
|
400
408
|
createMediaManager: async (sm) => {
|