@scrypted/server 0.7.93 → 0.7.95

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.

Files changed (185) hide show
  1. package/dist/asynciterable-utils.d.ts +2 -0
  2. package/dist/asynciterable-utils.js +24 -0
  3. package/dist/asynciterable-utils.js.map +1 -0
  4. package/dist/cert.d.ts +6 -0
  5. package/dist/cert.js +75 -0
  6. package/dist/cert.js.map +1 -0
  7. package/dist/collection.d.ts +1 -0
  8. package/dist/collection.js +16 -0
  9. package/dist/collection.js.map +1 -0
  10. package/dist/db-types.d.ts +38 -0
  11. package/dist/db-types.js +45 -0
  12. package/dist/db-types.js.map +1 -0
  13. package/dist/event-registry.d.ts +19 -0
  14. package/dist/event-registry.js +92 -0
  15. package/dist/event-registry.js.map +1 -0
  16. package/dist/http-interfaces.d.ts +3 -0
  17. package/dist/http-interfaces.js +73 -0
  18. package/dist/http-interfaces.js.map +1 -0
  19. package/dist/infer-defaults.d.ts +11 -0
  20. package/dist/infer-defaults.js +119 -0
  21. package/dist/infer-defaults.js.map +1 -0
  22. package/dist/io.d.ts +22 -0
  23. package/dist/io.js +3 -0
  24. package/dist/io.js.map +1 -0
  25. package/dist/level.d.ts +110 -0
  26. package/dist/level.js +135 -0
  27. package/dist/level.js.map +1 -0
  28. package/dist/listen-zero.d.ts +13 -0
  29. package/dist/listen-zero.js +48 -0
  30. package/dist/listen-zero.js.map +1 -0
  31. package/dist/logger.d.ts +29 -0
  32. package/dist/logger.js +78 -0
  33. package/dist/logger.js.map +1 -0
  34. package/dist/media-helpers.d.ts +5 -0
  35. package/dist/media-helpers.js +89 -0
  36. package/dist/media-helpers.js.map +1 -0
  37. package/dist/mixin/mixin-cycle.d.ts +3 -0
  38. package/dist/mixin/mixin-cycle.js +32 -0
  39. package/dist/mixin/mixin-cycle.js.map +1 -0
  40. package/dist/plugin/acl.d.ts +16 -0
  41. package/dist/plugin/acl.js +83 -0
  42. package/dist/plugin/acl.js.map +1 -0
  43. package/dist/plugin/descriptor.d.ts +22 -0
  44. package/dist/plugin/descriptor.js +35 -0
  45. package/dist/plugin/descriptor.js.map +1 -0
  46. package/dist/plugin/media.d.ts +71 -0
  47. package/dist/plugin/media.js +420 -0
  48. package/dist/plugin/media.js.map +1 -0
  49. package/dist/plugin/mediaobject.d.ts +10 -0
  50. package/dist/plugin/mediaobject.js +26 -0
  51. package/dist/plugin/mediaobject.js.map +1 -0
  52. package/dist/plugin/plugin-api.d.ts +106 -0
  53. package/dist/plugin/plugin-api.js +120 -0
  54. package/dist/plugin/plugin-api.js.map +1 -0
  55. package/dist/plugin/plugin-console.d.ts +28 -0
  56. package/dist/plugin/plugin-console.js +291 -0
  57. package/dist/plugin/plugin-console.js.map +1 -0
  58. package/dist/plugin/plugin-debug.d.ts +4 -0
  59. package/dist/plugin/plugin-debug.js +3 -0
  60. package/dist/plugin/plugin-debug.js.map +1 -0
  61. package/dist/plugin/plugin-device.d.ts +54 -0
  62. package/dist/plugin/plugin-device.js +413 -0
  63. package/dist/plugin/plugin-device.js.map +1 -0
  64. package/dist/plugin/plugin-error.d.ts +2 -0
  65. package/dist/plugin/plugin-error.js +7 -0
  66. package/dist/plugin/plugin-error.js.map +1 -0
  67. package/dist/plugin/plugin-host-api.d.ts +43 -0
  68. package/dist/plugin/plugin-host-api.js +179 -0
  69. package/dist/plugin/plugin-host-api.js.map +1 -0
  70. package/dist/plugin/plugin-host.d.ts +45 -0
  71. package/dist/plugin/plugin-host.js +398 -0
  72. package/dist/plugin/plugin-host.js.map +1 -0
  73. package/dist/plugin/plugin-http.d.ts +18 -0
  74. package/dist/plugin/plugin-http.js +120 -0
  75. package/dist/plugin/plugin-http.js.map +1 -0
  76. package/dist/plugin/plugin-lazy-remote.d.ts +31 -0
  77. package/dist/plugin/plugin-lazy-remote.js +75 -0
  78. package/dist/plugin/plugin-lazy-remote.js.map +1 -0
  79. package/dist/plugin/plugin-npm-dependencies.d.ts +8 -0
  80. package/dist/plugin/plugin-npm-dependencies.js +103 -0
  81. package/dist/plugin/plugin-npm-dependencies.js.map +1 -0
  82. package/dist/plugin/plugin-remote-stats.d.ts +8 -0
  83. package/dist/plugin/plugin-remote-stats.js +30 -0
  84. package/dist/plugin/plugin-remote-stats.js.map +1 -0
  85. package/dist/plugin/plugin-remote-websocket.d.ts +29 -0
  86. package/dist/plugin/plugin-remote-websocket.js +152 -0
  87. package/dist/plugin/plugin-remote-websocket.js.map +1 -0
  88. package/dist/plugin/plugin-remote-worker.d.ts +5 -0
  89. package/dist/plugin/plugin-remote-worker.js +348 -0
  90. package/dist/plugin/plugin-remote-worker.js.map +1 -0
  91. package/dist/plugin/plugin-remote.d.ts +75 -0
  92. package/dist/plugin/plugin-remote.js +598 -0
  93. package/dist/plugin/plugin-remote.js.map +1 -0
  94. package/dist/plugin/plugin-repl.d.ts +2 -0
  95. package/dist/plugin/plugin-repl.js +74 -0
  96. package/dist/plugin/plugin-repl.js.map +1 -0
  97. package/dist/plugin/plugin-state-check.d.ts +1 -0
  98. package/dist/plugin/plugin-state-check.js +27 -0
  99. package/dist/plugin/plugin-state-check.js.map +1 -0
  100. package/dist/plugin/plugin-volume.d.ts +3 -0
  101. package/dist/plugin/plugin-volume.js +31 -0
  102. package/dist/plugin/plugin-volume.js.map +1 -0
  103. package/dist/plugin/runtime/child-process-worker.d.ts +20 -0
  104. package/dist/plugin/runtime/child-process-worker.js +42 -0
  105. package/dist/plugin/runtime/child-process-worker.js.map +1 -0
  106. package/dist/plugin/runtime/node-fork-worker.d.ts +9 -0
  107. package/dist/plugin/runtime/node-fork-worker.js +67 -0
  108. package/dist/plugin/runtime/node-fork-worker.js.map +1 -0
  109. package/dist/plugin/runtime/node-thread-worker.d.ts +20 -0
  110. package/dist/plugin/runtime/node-thread-worker.js +73 -0
  111. package/dist/plugin/runtime/node-thread-worker.js.map +1 -0
  112. package/dist/plugin/runtime/python-worker.d.ts +10 -0
  113. package/dist/plugin/runtime/python-worker.js +91 -0
  114. package/dist/plugin/runtime/python-worker.js.map +1 -0
  115. package/dist/plugin/runtime/runtime-worker.d.ts +26 -0
  116. package/dist/plugin/runtime/runtime-worker.js +3 -0
  117. package/dist/plugin/runtime/runtime-worker.js.map +1 -0
  118. package/dist/plugin/socket-serializer.d.ts +5 -0
  119. package/dist/plugin/socket-serializer.js +17 -0
  120. package/dist/plugin/socket-serializer.js.map +1 -0
  121. package/dist/plugin/system.d.ts +39 -0
  122. package/dist/plugin/system.js +216 -0
  123. package/dist/plugin/system.js.map +1 -0
  124. package/dist/rpc-buffer-serializer.d.ts +11 -0
  125. package/dist/rpc-buffer-serializer.js +30 -0
  126. package/dist/rpc-buffer-serializer.js.map +1 -0
  127. package/dist/rpc-serializer.d.ts +24 -0
  128. package/dist/rpc-serializer.js +144 -0
  129. package/dist/rpc-serializer.js.map +1 -0
  130. package/dist/rpc.d.ts +147 -0
  131. package/dist/rpc.js +689 -0
  132. package/dist/rpc.js.map +1 -0
  133. package/dist/runtime.d.ts +103 -0
  134. package/dist/runtime.js +815 -0
  135. package/dist/runtime.js.map +1 -0
  136. package/dist/scrypted-main-exports.d.ts +6 -0
  137. package/dist/scrypted-main-exports.js +57 -0
  138. package/dist/scrypted-main-exports.js.map +1 -0
  139. package/dist/scrypted-main.d.ts +1 -0
  140. package/dist/scrypted-main.js +8 -0
  141. package/dist/scrypted-main.js.map +1 -0
  142. package/dist/scrypted-plugin-main.d.ts +2 -0
  143. package/dist/scrypted-plugin-main.js +43 -0
  144. package/dist/scrypted-plugin-main.js.map +1 -0
  145. package/dist/scrypted-server-main.d.ts +6 -0
  146. package/dist/scrypted-server-main.js +559 -0
  147. package/dist/scrypted-server-main.js.map +1 -0
  148. package/dist/server-settings.d.ts +5 -0
  149. package/dist/server-settings.js +91 -0
  150. package/dist/server-settings.js.map +1 -0
  151. package/dist/services/addresses.d.ts +7 -0
  152. package/dist/services/addresses.js +43 -0
  153. package/dist/services/addresses.js.map +1 -0
  154. package/dist/services/alerts.d.ts +9 -0
  155. package/dist/services/alerts.js +27 -0
  156. package/dist/services/alerts.js.map +1 -0
  157. package/dist/services/cors.d.ts +18 -0
  158. package/dist/services/cors.js +18 -0
  159. package/dist/services/cors.js.map +1 -0
  160. package/dist/services/info.d.ts +5 -0
  161. package/dist/services/info.js +18 -0
  162. package/dist/services/info.js.map +1 -0
  163. package/dist/services/plugin.d.ts +46 -0
  164. package/dist/services/plugin.js +172 -0
  165. package/dist/services/plugin.js.map +1 -0
  166. package/dist/services/service-control.d.ts +8 -0
  167. package/dist/services/service-control.js +39 -0
  168. package/dist/services/service-control.js.map +1 -0
  169. package/dist/services/users.d.ts +19 -0
  170. package/dist/services/users.js +75 -0
  171. package/dist/services/users.js.map +1 -0
  172. package/dist/sleep.d.ts +1 -0
  173. package/dist/sleep.js +8 -0
  174. package/dist/sleep.js.map +1 -0
  175. package/dist/state.d.ts +39 -0
  176. package/dist/state.js +247 -0
  177. package/dist/state.js.map +1 -0
  178. package/dist/threading.d.ts +3 -0
  179. package/dist/threading.js +93 -0
  180. package/dist/threading.js.map +1 -0
  181. package/dist/usertoken.d.ts +11 -0
  182. package/dist/usertoken.js +52 -0
  183. package/dist/usertoken.js.map +1 -0
  184. package/package.json +2 -2
  185. package/src/plugin/plugin-host-api.ts +3 -1
@@ -0,0 +1,598 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.attachPluginRemote = exports.setupPluginRemote = exports.DeviceManagerImpl = void 0;
4
+ const types_1 = require("@scrypted/types");
5
+ const rpc_1 = require("../rpc");
6
+ const rpc_buffer_serializer_1 = require("../rpc-buffer-serializer");
7
+ const plugin_remote_websocket_1 = require("./plugin-remote-websocket");
8
+ const plugin_state_check_1 = require("./plugin-state-check");
9
+ const system_1 = require("./system");
10
+ class DeviceLogger {
11
+ console;
12
+ nativeId;
13
+ api;
14
+ logger;
15
+ constructor(api, nativeId, console) {
16
+ this.console = console;
17
+ this.api = api;
18
+ this.nativeId = nativeId;
19
+ }
20
+ async ensureLogger() {
21
+ if (!this.logger)
22
+ this.logger = this.api.getLogger(this.nativeId);
23
+ return await this.logger;
24
+ }
25
+ async log(level, message) {
26
+ (await this.ensureLogger()).log(level, message);
27
+ }
28
+ a(msg) {
29
+ this.log('a', msg);
30
+ }
31
+ async clear() {
32
+ (await this.ensureLogger()).clear();
33
+ }
34
+ async clearAlert(msg) {
35
+ (await this.ensureLogger()).clearAlert(msg);
36
+ }
37
+ async clearAlerts() {
38
+ (await this.ensureLogger()).clearAlerts();
39
+ }
40
+ d(msg) {
41
+ this.log('d', msg);
42
+ }
43
+ e(msg) {
44
+ this.log('e', msg);
45
+ }
46
+ i(msg) {
47
+ this.log('i', msg);
48
+ }
49
+ v(msg) {
50
+ this.log('v', msg);
51
+ }
52
+ w(msg) {
53
+ this.log('w', msg);
54
+ }
55
+ }
56
+ class EndpointManagerImpl {
57
+ deviceManager;
58
+ api;
59
+ pluginId;
60
+ mediaManager;
61
+ getEndpoint(nativeId) {
62
+ if (!nativeId)
63
+ return this.pluginId;
64
+ const id = this.deviceManager.nativeIds.get(nativeId)?.id;
65
+ if (!id)
66
+ throw new Error('invalid nativeId ' + nativeId);
67
+ if (!nativeId)
68
+ return this.pluginId;
69
+ return id;
70
+ }
71
+ async getUrlSafeIp() {
72
+ // ipv6 addresses have colons and need to be bracketed for url safety
73
+ const ip = await this.api.getComponent('SCRYPTED_IP_ADDRESS');
74
+ return ip?.includes(':') ? `[${ip}]` : ip;
75
+ }
76
+ /**
77
+ * @deprecated
78
+ */
79
+ async getAuthenticatedPath(nativeId) {
80
+ return this.getPath(nativeId);
81
+ }
82
+ /**
83
+ * @deprecated
84
+ */
85
+ async getInsecurePublicLocalEndpoint(nativeId) {
86
+ return this.getLocalEndpoint(nativeId, {
87
+ insecure: true,
88
+ public: true,
89
+ });
90
+ }
91
+ /**
92
+ * @deprecated
93
+ */
94
+ async getPublicCloudEndpoint(nativeId) {
95
+ return this.getCloudEndpoint(nativeId, {
96
+ public: true,
97
+ });
98
+ }
99
+ /**
100
+ * @deprecated
101
+ */
102
+ async getPublicLocalEndpoint(nativeId) {
103
+ return this.getLocalEndpoint(nativeId, {
104
+ public: true,
105
+ });
106
+ }
107
+ /**
108
+ * @deprecated
109
+ */
110
+ async getPublicPushEndpoint(nativeId) {
111
+ const mo = await this.mediaManager.createMediaObject(Buffer.from(this.getEndpoint(nativeId)), types_1.ScryptedMimeTypes.PushEndpoint);
112
+ return this.mediaManager.convertMediaObjectToUrl(mo, types_1.ScryptedMimeTypes.PushEndpoint);
113
+ }
114
+ async getPath(nativeId, options) {
115
+ return `/endpoint/${this.getEndpoint(nativeId)}/${options?.public ? 'public/' : ''}`;
116
+ }
117
+ async getLocalEndpoint(nativeId, options) {
118
+ const protocol = options?.insecure ? 'http' : 'https';
119
+ const port = await this.api.getComponent(options?.insecure ? 'SCRYPTED_INSECURE_PORT' : 'SCRYPTED_SECURE_PORT');
120
+ const path = await this.getPath(nativeId, options);
121
+ const url = `${protocol}://${await this.getUrlSafeIp()}:${port}${path}`;
122
+ return url;
123
+ }
124
+ async getCloudEndpoint(nativeId, options) {
125
+ const local = await this.getLocalEndpoint(nativeId, options);
126
+ const mo = await this.mediaManager.createMediaObject(Buffer.from(local), types_1.ScryptedMimeTypes.LocalUrl);
127
+ return this.mediaManager.convertMediaObjectToUrl(mo, types_1.ScryptedMimeTypes.LocalUrl);
128
+ }
129
+ async getCloudPushEndpoint(nativeId) {
130
+ const mo = await this.mediaManager.createMediaObject(Buffer.from(this.getEndpoint(nativeId)), types_1.ScryptedMimeTypes.PushEndpoint);
131
+ return this.mediaManager.convertMediaObjectToUrl(mo, types_1.ScryptedMimeTypes.PushEndpoint);
132
+ }
133
+ async setLocalAddresses(addresses) {
134
+ const addressSettings = await this.api.getComponent('addresses');
135
+ return addressSettings.setLocalAddresses(addresses);
136
+ }
137
+ async getLocalAddresses() {
138
+ const addressSettings = await this.api.getComponent('addresses');
139
+ return await addressSettings.getLocalAddresses();
140
+ }
141
+ async setAccessControlAllowOrigin(options) {
142
+ const self = this;
143
+ const setAccessControlAllowOrigin = await this.deviceManager.systemManager.getComponent('setAccessControlAllowOrigin');
144
+ return setAccessControlAllowOrigin(options);
145
+ }
146
+ }
147
+ class DeviceStateProxyHandler {
148
+ deviceManager;
149
+ id;
150
+ setState;
151
+ constructor(deviceManager, id, setState) {
152
+ this.deviceManager = deviceManager;
153
+ this.id = id;
154
+ this.setState = setState;
155
+ }
156
+ get(target, p, receiver) {
157
+ if (p === 'id')
158
+ return this.id;
159
+ if (p === rpc_1.RpcPeer.PROPERTY_PROXY_PROPERTIES)
160
+ return { id: this.id };
161
+ if (p === 'setState')
162
+ return this.setState;
163
+ return this.deviceManager.systemManager.state[this.id][p]?.value;
164
+ }
165
+ set(target, p, value, receiver) {
166
+ (0, plugin_state_check_1.checkProperty)(p.toString(), value);
167
+ const now = Date.now();
168
+ this.deviceManager.systemManager.state[this.id][p] = {
169
+ value,
170
+ };
171
+ this.setState(p.toString(), value);
172
+ return true;
173
+ }
174
+ }
175
+ class DeviceManagerImpl {
176
+ systemManager;
177
+ getDeviceConsole;
178
+ getMixinConsole;
179
+ api;
180
+ nativeIds = new Map();
181
+ deviceStorage = new Map();
182
+ mixinStorage = new Map();
183
+ constructor(systemManager, getDeviceConsole, getMixinConsole) {
184
+ this.systemManager = systemManager;
185
+ this.getDeviceConsole = getDeviceConsole;
186
+ this.getMixinConsole = getMixinConsole;
187
+ }
188
+ async requestRestart() {
189
+ return this.api.requestRestart();
190
+ }
191
+ getDeviceLogger(nativeId) {
192
+ return new DeviceLogger(this.api, nativeId, this.getDeviceConsole?.(nativeId) || console);
193
+ }
194
+ getDeviceState(nativeId) {
195
+ const handler = new DeviceStateProxyHandler(this, this.nativeIds.get(nativeId).id, (property, value) => this.api.setState(nativeId, property, value));
196
+ return new Proxy(handler, handler);
197
+ }
198
+ createDeviceState(id, setState) {
199
+ const handler = new DeviceStateProxyHandler(this, id, setState);
200
+ return new Proxy(handler, handler);
201
+ }
202
+ getDeviceStorage(nativeId) {
203
+ let ret = this.deviceStorage.get(nativeId);
204
+ if (!ret) {
205
+ ret = new StorageImpl(this, nativeId);
206
+ this.deviceStorage.set(nativeId, ret);
207
+ }
208
+ return ret;
209
+ }
210
+ getMixinStorage(id, nativeId) {
211
+ let ms = this.mixinStorage.get(nativeId);
212
+ if (!ms) {
213
+ ms = new Map();
214
+ this.mixinStorage.set(nativeId, ms);
215
+ }
216
+ let ret = ms.get(id);
217
+ if (!ret) {
218
+ ret = new StorageImpl(this, nativeId, `mixin:${id}:`);
219
+ ms.set(id, ret);
220
+ }
221
+ return ret;
222
+ }
223
+ pruneMixinStorage() {
224
+ for (const nativeId of this.nativeIds.keys()) {
225
+ const storage = this.nativeIds.get(nativeId).storage;
226
+ for (const key of Object.keys(storage)) {
227
+ if (!key.startsWith('mixin:'))
228
+ continue;
229
+ const [, id,] = key.split(':');
230
+ // there's no rush to persist this, it will happen automatically on the plugin
231
+ // persisting something at some point.
232
+ // the key itself is unreachable due to the device no longer existing.
233
+ if (id && !this.systemManager.state[id])
234
+ delete storage[key];
235
+ }
236
+ }
237
+ }
238
+ async onMixinEvent(id, nativeId, eventInterface, eventData) {
239
+ return this.api.onMixinEvent(id, nativeId, eventInterface, eventData);
240
+ }
241
+ getNativeIds() {
242
+ return Array.from(this.nativeIds.keys());
243
+ }
244
+ async onDeviceDiscovered(device) {
245
+ return this.api.onDeviceDiscovered(device);
246
+ }
247
+ async onDeviceRemoved(nativeId) {
248
+ return this.api.onDeviceRemoved(nativeId);
249
+ }
250
+ async onDeviceEvent(nativeId, eventInterface, eventData) {
251
+ return this.api.onDeviceEvent(nativeId, eventInterface, eventData);
252
+ }
253
+ async onDevicesChanged(devices) {
254
+ return this.api.onDevicesChanged(devices);
255
+ }
256
+ }
257
+ exports.DeviceManagerImpl = DeviceManagerImpl;
258
+ function toStorageString(value) {
259
+ if (value === null)
260
+ return 'null';
261
+ if (value === undefined)
262
+ return 'undefined';
263
+ return value.toString();
264
+ }
265
+ class StorageImpl {
266
+ deviceManager;
267
+ nativeId;
268
+ prefix;
269
+ api;
270
+ static allowedMethods = [
271
+ 'length',
272
+ 'clear',
273
+ 'getItem',
274
+ 'setItem',
275
+ 'key',
276
+ 'removeItem',
277
+ ];
278
+ static indexedHandler = {
279
+ get(target, property) {
280
+ const keyString = property.toString();
281
+ if (StorageImpl.allowedMethods.includes(keyString)) {
282
+ const f = target[keyString];
283
+ if (keyString === 'length')
284
+ return f;
285
+ return f.bind(target);
286
+ }
287
+ return target.getItem(toStorageString(property));
288
+ },
289
+ set(target, property, value) {
290
+ target.setItem(toStorageString(property), value);
291
+ return true;
292
+ }
293
+ };
294
+ constructor(deviceManager, nativeId, prefix) {
295
+ this.deviceManager = deviceManager;
296
+ this.nativeId = nativeId;
297
+ this.prefix = prefix;
298
+ this.deviceManager = deviceManager;
299
+ this.api = deviceManager.api;
300
+ this.nativeId = nativeId;
301
+ if (!this.prefix)
302
+ this.prefix = '';
303
+ return new Proxy(this, StorageImpl.indexedHandler);
304
+ }
305
+ get storage() {
306
+ return this.deviceManager.nativeIds.get(this.nativeId).storage;
307
+ }
308
+ get length() {
309
+ return Object.keys(this.storage).filter(key => key.startsWith(this.prefix)).length;
310
+ }
311
+ clear() {
312
+ if (!this.prefix) {
313
+ this.deviceManager.nativeIds.get(this.nativeId).storage = {};
314
+ }
315
+ else {
316
+ const storage = this.storage;
317
+ Object.keys(this.storage).filter(key => key.startsWith(this.prefix)).forEach(key => delete storage[key]);
318
+ }
319
+ this.api.setStorage(this.nativeId, this.storage);
320
+ }
321
+ getItem(key) {
322
+ return this.storage[this.prefix + key];
323
+ }
324
+ key(index) {
325
+ if (!this.prefix) {
326
+ return Object.keys(this.storage)[index];
327
+ }
328
+ return Object.keys(this.storage).filter(key => key.startsWith(this.prefix))[index].substring(this.prefix.length);
329
+ }
330
+ removeItem(key) {
331
+ delete this.storage[this.prefix + key];
332
+ this.api.setStorage(this.nativeId, this.storage);
333
+ }
334
+ setItem(key, value) {
335
+ key = toStorageString(key);
336
+ value = toStorageString(value);
337
+ if (this.storage[this.prefix + key] === value)
338
+ return;
339
+ this.storage[this.prefix + key] = value;
340
+ this.api.setStorage(this.nativeId, this.storage);
341
+ }
342
+ }
343
+ async function setupPluginRemote(peer, api, pluginId, hostInfo, getSystemState) {
344
+ try {
345
+ // the host/remote connection can be from server to plugin (node to node),
346
+ // core plugin to web (node to browser).
347
+ // always add the BufferSerializer, so serialization is gauranteed to work.
348
+ // but in plugin-host, mark Buffer as transport safe.
349
+ if (!peer.constructorSerializerMap.get(Buffer))
350
+ peer.addSerializer(Buffer, 'Buffer', new rpc_buffer_serializer_1.BufferSerializer());
351
+ const getRemote = await peer.getParam('getRemote');
352
+ const remote = await getRemote(api, pluginId, hostInfo);
353
+ const accessControls = peer.tags.acl;
354
+ const getAccessControlDeviceState = (id, state) => {
355
+ state = state || getSystemState()[id];
356
+ if (accessControls && state) {
357
+ state = Object.assign({}, state);
358
+ for (const property of Object.keys(state)) {
359
+ if (accessControls.shouldRejectProperty(id, property))
360
+ delete state[property];
361
+ }
362
+ let interfaces = state.interfaces?.value;
363
+ if (interfaces) {
364
+ interfaces = interfaces.filter(scryptedInterface => !accessControls.shouldRejectInterface(id, scryptedInterface));
365
+ state.interfaces = {
366
+ value: interfaces,
367
+ };
368
+ }
369
+ }
370
+ return state;
371
+ };
372
+ const getAccessControlSystemState = () => {
373
+ let state = getSystemState();
374
+ if (accessControls) {
375
+ state = Object.assign({}, state);
376
+ for (const id of Object.keys(state)) {
377
+ if (accessControls.shouldRejectDevice(id)) {
378
+ delete state[id];
379
+ continue;
380
+ }
381
+ state[id] = getAccessControlDeviceState(id, state[id]);
382
+ }
383
+ }
384
+ return state;
385
+ };
386
+ await remote.setSystemState(getAccessControlSystemState());
387
+ api.listen((id, eventDetails, eventData) => {
388
+ if (accessControls?.shouldRejectEvent(eventDetails.property === types_1.ScryptedInterfaceProperty.id ? eventData : id, eventDetails))
389
+ return;
390
+ // ScryptedDevice events will be handled specially and repropagated by the remote.
391
+ if (eventDetails.eventInterface === types_1.ScryptedInterface.ScryptedDevice) {
392
+ if (eventDetails.property === types_1.ScryptedInterfaceProperty.id) {
393
+ // a change on the id property means device was deleted
394
+ remote.updateDeviceState(eventData, undefined);
395
+ }
396
+ else {
397
+ // a change on anything else is a descriptor update
398
+ remote.updateDeviceState(id, getAccessControlDeviceState(id));
399
+ }
400
+ return;
401
+ }
402
+ if (eventDetails.property && !eventDetails.mixinId) {
403
+ remote.notify(id, eventDetails, getSystemState()[id]?.[eventDetails.property]).catch(() => { });
404
+ }
405
+ else {
406
+ remote.notify(id, eventDetails, eventData).catch(() => { });
407
+ }
408
+ });
409
+ return remote;
410
+ }
411
+ catch (e) {
412
+ throw new rpc_1.RPCResultError(peer, 'error while retrieving PluginRemote', e);
413
+ }
414
+ }
415
+ exports.setupPluginRemote = setupPluginRemote;
416
+ function attachPluginRemote(peer, options) {
417
+ const { createMediaManager, getServicePort, getDeviceConsole, getMixinConsole } = options || {};
418
+ if (!peer.constructorSerializerMap.get(Buffer))
419
+ peer.addSerializer(Buffer, 'Buffer', new rpc_buffer_serializer_1.BufferSerializer());
420
+ const ioSockets = {};
421
+ const websocketSerializer = new plugin_remote_websocket_1.WebSocketSerializer();
422
+ peer.addSerializer(plugin_remote_websocket_1.WebSocketConnection, plugin_remote_websocket_1.WebSocketConnection.name, websocketSerializer);
423
+ let done;
424
+ const retPromise = new Promise(resolve => done = resolve);
425
+ peer.params.getRemote = async (api, pluginId, hostInfo) => {
426
+ websocketSerializer.WebSocket = (0, plugin_remote_websocket_1.createWebSocketClass)((connection, callbacks) => {
427
+ const { url } = connection;
428
+ if (url.startsWith('io://') || url.startsWith('ws://')) {
429
+ const id = url.substring('xx://'.length);
430
+ ioSockets[id] = callbacks;
431
+ callbacks.connect(undefined, {
432
+ close: (message) => connection.close(message),
433
+ send: (message) => connection.send(message),
434
+ });
435
+ }
436
+ else {
437
+ throw new Error('unsupported websocket');
438
+ }
439
+ });
440
+ await options?.onGetRemote?.(api, pluginId);
441
+ const systemManager = new system_1.SystemManagerImpl();
442
+ const deviceManager = new DeviceManagerImpl(systemManager, getDeviceConsole, getMixinConsole);
443
+ const endpointManager = new EndpointManagerImpl();
444
+ const hostMediaManager = await api.getMediaManager();
445
+ if (!hostMediaManager) {
446
+ peer.params['createMediaManager'] = async () => createMediaManager(systemManager, deviceManager);
447
+ }
448
+ const mediaManager = hostMediaManager || await createMediaManager(systemManager, deviceManager);
449
+ peer.params['mediaManager'] = mediaManager;
450
+ systemManager.api = api;
451
+ deviceManager.api = api;
452
+ const log = deviceManager.getDeviceLogger(undefined);
453
+ systemManager.log = log;
454
+ const ret = {
455
+ systemManager,
456
+ deviceManager,
457
+ endpointManager,
458
+ mediaManager,
459
+ log,
460
+ pluginHostAPI: api,
461
+ pluginRemoteAPI: undefined,
462
+ serverVersion: hostInfo?.serverVersion,
463
+ };
464
+ delete peer.params.getRemote;
465
+ endpointManager.api = api;
466
+ endpointManager.deviceManager = deviceManager;
467
+ endpointManager.mediaManager = mediaManager;
468
+ endpointManager.pluginId = pluginId;
469
+ const localStorage = new StorageImpl(deviceManager, undefined);
470
+ const remote = {
471
+ [rpc_1.RpcPeer.PROPERTY_JSON_DISABLE_SERIALIZATION]: true,
472
+ [rpc_1.RpcPeer.PROPERTY_PROXY_ONEWAY_METHODS]: [
473
+ 'notify',
474
+ 'updateDeviceState',
475
+ 'setSystemState',
476
+ 'ioEvent',
477
+ 'setNativeId',
478
+ ],
479
+ getServicePort,
480
+ async createDeviceState(id, setState) {
481
+ return deviceManager.createDeviceState(id, setState);
482
+ },
483
+ async ioEvent(id, event, message) {
484
+ // console.log(id, event, message);
485
+ const io = ioSockets[id];
486
+ if (!io)
487
+ return;
488
+ switch (event) {
489
+ case 'message':
490
+ io.data(message);
491
+ break;
492
+ case 'close':
493
+ io.end();
494
+ delete ioSockets[id];
495
+ break;
496
+ }
497
+ },
498
+ async setNativeId(nativeId, id, storage) {
499
+ // JSON stringify over rpc turns undefined into null.
500
+ if (nativeId === null)
501
+ nativeId = undefined;
502
+ if (id) {
503
+ deviceManager.nativeIds.set(nativeId?.toString(), {
504
+ id,
505
+ storage,
506
+ });
507
+ }
508
+ else {
509
+ deviceManager.nativeIds.delete(nativeId);
510
+ }
511
+ },
512
+ async updateDeviceState(id, state) {
513
+ if (!state) {
514
+ delete systemManager.state[id];
515
+ systemManager.events.notify(undefined, undefined, types_1.ScryptedInterface.ScryptedDevice, types_1.ScryptedInterfaceProperty.id, id, { changed: true });
516
+ }
517
+ else {
518
+ systemManager.state[id] = state;
519
+ systemManager.events.notify(id, undefined, types_1.ScryptedInterface.ScryptedDevice, undefined, state, { changed: true });
520
+ }
521
+ },
522
+ async notify(id, eventTimeOrDetails, eventInterfaceOrData, property, value, changed) {
523
+ if (typeof eventTimeOrDetails === 'number') {
524
+ // TODO: remove legacy code path
525
+ // 12/30/2022
526
+ const eventTime = eventTimeOrDetails;
527
+ const eventInterface = eventInterfaceOrData;
528
+ if (property) {
529
+ const state = systemManager.state?.[id];
530
+ if (!state) {
531
+ log.w(`state not found for ${id}`);
532
+ return;
533
+ }
534
+ state[property] = value;
535
+ systemManager.events.notify(id, eventTime, eventInterface, property, value.value, { changed });
536
+ }
537
+ else {
538
+ systemManager.events.notify(id, eventTime, eventInterface, property, value, { changed });
539
+ }
540
+ }
541
+ else {
542
+ const eventDetails = eventTimeOrDetails;
543
+ const eventData = eventInterfaceOrData;
544
+ if (eventDetails.property && !eventDetails.mixinId) {
545
+ const state = systemManager.state?.[id];
546
+ if (!state) {
547
+ log.w(`state not found for ${id}`);
548
+ return;
549
+ }
550
+ state[eventDetails.property] = eventData;
551
+ systemManager.events.notifyEventDetails(id, eventDetails, eventData.value);
552
+ }
553
+ else {
554
+ systemManager.events.notifyEventDetails(id, eventDetails, eventData);
555
+ }
556
+ }
557
+ },
558
+ async setSystemState(state) {
559
+ systemManager.state = state;
560
+ deviceManager.pruneMixinStorage();
561
+ done(ret);
562
+ },
563
+ async loadZip(packageJson, zipData, zipOptions) {
564
+ const params = {
565
+ __filename: undefined,
566
+ deviceManager,
567
+ systemManager,
568
+ mediaManager,
569
+ endpointManager,
570
+ log,
571
+ localStorage,
572
+ pluginHostAPI: api,
573
+ // TODO:
574
+ // 10/10/2022: remove this shim from all plugins and server.
575
+ WebSocket: function (url) {
576
+ if (typeof url === 'string')
577
+ throw new Error('unsupported websocket');
578
+ return url;
579
+ },
580
+ pluginRuntimeAPI: ret,
581
+ };
582
+ params.pluginRuntimeAPI = ret;
583
+ try {
584
+ return await options.onLoadZip(ret, params, packageJson, zipData, zipOptions);
585
+ }
586
+ catch (e) {
587
+ console.error('plugin start/fork failed', e);
588
+ throw e;
589
+ }
590
+ },
591
+ };
592
+ ret.pluginRemoteAPI = remote;
593
+ return remote;
594
+ };
595
+ return retPromise;
596
+ }
597
+ exports.attachPluginRemote = attachPluginRemote;
598
+ //# sourceMappingURL=plugin-remote.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-remote.js","sourceRoot":"","sources":["../../src/plugin/plugin-remote.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { ScryptedStatic } from '@scrypted/types';
2
+ export declare function createREPLServer(scrypted: ScryptedStatic, params: any, plugin: any): Promise<number>;