@scrypted/server 0.0.85 → 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.
- 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/python/plugin-remote.py +25 -10
- 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) => {
|