@scrypted/server 0.7.92 → 0.7.93

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 (184) hide show
  1. package/package.json +1 -1
  2. package/dist/asynciterable-utils.d.ts +0 -2
  3. package/dist/asynciterable-utils.js +0 -24
  4. package/dist/asynciterable-utils.js.map +0 -1
  5. package/dist/cert.d.ts +0 -6
  6. package/dist/cert.js +0 -75
  7. package/dist/cert.js.map +0 -1
  8. package/dist/collection.d.ts +0 -1
  9. package/dist/collection.js +0 -16
  10. package/dist/collection.js.map +0 -1
  11. package/dist/db-types.d.ts +0 -38
  12. package/dist/db-types.js +0 -45
  13. package/dist/db-types.js.map +0 -1
  14. package/dist/event-registry.d.ts +0 -19
  15. package/dist/event-registry.js +0 -92
  16. package/dist/event-registry.js.map +0 -1
  17. package/dist/http-interfaces.d.ts +0 -3
  18. package/dist/http-interfaces.js +0 -73
  19. package/dist/http-interfaces.js.map +0 -1
  20. package/dist/infer-defaults.d.ts +0 -11
  21. package/dist/infer-defaults.js +0 -119
  22. package/dist/infer-defaults.js.map +0 -1
  23. package/dist/io.d.ts +0 -22
  24. package/dist/io.js +0 -3
  25. package/dist/io.js.map +0 -1
  26. package/dist/level.d.ts +0 -110
  27. package/dist/level.js +0 -135
  28. package/dist/level.js.map +0 -1
  29. package/dist/listen-zero.d.ts +0 -13
  30. package/dist/listen-zero.js +0 -48
  31. package/dist/listen-zero.js.map +0 -1
  32. package/dist/logger.d.ts +0 -29
  33. package/dist/logger.js +0 -78
  34. package/dist/logger.js.map +0 -1
  35. package/dist/media-helpers.d.ts +0 -5
  36. package/dist/media-helpers.js +0 -89
  37. package/dist/media-helpers.js.map +0 -1
  38. package/dist/mixin/mixin-cycle.d.ts +0 -3
  39. package/dist/mixin/mixin-cycle.js +0 -32
  40. package/dist/mixin/mixin-cycle.js.map +0 -1
  41. package/dist/plugin/acl.d.ts +0 -16
  42. package/dist/plugin/acl.js +0 -83
  43. package/dist/plugin/acl.js.map +0 -1
  44. package/dist/plugin/descriptor.d.ts +0 -22
  45. package/dist/plugin/descriptor.js +0 -35
  46. package/dist/plugin/descriptor.js.map +0 -1
  47. package/dist/plugin/media.d.ts +0 -71
  48. package/dist/plugin/media.js +0 -420
  49. package/dist/plugin/media.js.map +0 -1
  50. package/dist/plugin/mediaobject.d.ts +0 -10
  51. package/dist/plugin/mediaobject.js +0 -26
  52. package/dist/plugin/mediaobject.js.map +0 -1
  53. package/dist/plugin/plugin-api.d.ts +0 -106
  54. package/dist/plugin/plugin-api.js +0 -120
  55. package/dist/plugin/plugin-api.js.map +0 -1
  56. package/dist/plugin/plugin-console.d.ts +0 -28
  57. package/dist/plugin/plugin-console.js +0 -291
  58. package/dist/plugin/plugin-console.js.map +0 -1
  59. package/dist/plugin/plugin-debug.d.ts +0 -4
  60. package/dist/plugin/plugin-debug.js +0 -3
  61. package/dist/plugin/plugin-debug.js.map +0 -1
  62. package/dist/plugin/plugin-device.d.ts +0 -54
  63. package/dist/plugin/plugin-device.js +0 -413
  64. package/dist/plugin/plugin-device.js.map +0 -1
  65. package/dist/plugin/plugin-error.d.ts +0 -2
  66. package/dist/plugin/plugin-error.js +0 -7
  67. package/dist/plugin/plugin-error.js.map +0 -1
  68. package/dist/plugin/plugin-host-api.d.ts +0 -43
  69. package/dist/plugin/plugin-host-api.js +0 -177
  70. package/dist/plugin/plugin-host-api.js.map +0 -1
  71. package/dist/plugin/plugin-host.d.ts +0 -45
  72. package/dist/plugin/plugin-host.js +0 -398
  73. package/dist/plugin/plugin-host.js.map +0 -1
  74. package/dist/plugin/plugin-http.d.ts +0 -18
  75. package/dist/plugin/plugin-http.js +0 -120
  76. package/dist/plugin/plugin-http.js.map +0 -1
  77. package/dist/plugin/plugin-lazy-remote.d.ts +0 -31
  78. package/dist/plugin/plugin-lazy-remote.js +0 -75
  79. package/dist/plugin/plugin-lazy-remote.js.map +0 -1
  80. package/dist/plugin/plugin-npm-dependencies.d.ts +0 -8
  81. package/dist/plugin/plugin-npm-dependencies.js +0 -103
  82. package/dist/plugin/plugin-npm-dependencies.js.map +0 -1
  83. package/dist/plugin/plugin-remote-stats.d.ts +0 -8
  84. package/dist/plugin/plugin-remote-stats.js +0 -30
  85. package/dist/plugin/plugin-remote-stats.js.map +0 -1
  86. package/dist/plugin/plugin-remote-websocket.d.ts +0 -29
  87. package/dist/plugin/plugin-remote-websocket.js +0 -152
  88. package/dist/plugin/plugin-remote-websocket.js.map +0 -1
  89. package/dist/plugin/plugin-remote-worker.d.ts +0 -5
  90. package/dist/plugin/plugin-remote-worker.js +0 -348
  91. package/dist/plugin/plugin-remote-worker.js.map +0 -1
  92. package/dist/plugin/plugin-remote.d.ts +0 -75
  93. package/dist/plugin/plugin-remote.js +0 -598
  94. package/dist/plugin/plugin-remote.js.map +0 -1
  95. package/dist/plugin/plugin-repl.d.ts +0 -2
  96. package/dist/plugin/plugin-repl.js +0 -74
  97. package/dist/plugin/plugin-repl.js.map +0 -1
  98. package/dist/plugin/plugin-state-check.d.ts +0 -1
  99. package/dist/plugin/plugin-state-check.js +0 -27
  100. package/dist/plugin/plugin-state-check.js.map +0 -1
  101. package/dist/plugin/plugin-volume.d.ts +0 -3
  102. package/dist/plugin/plugin-volume.js +0 -31
  103. package/dist/plugin/plugin-volume.js.map +0 -1
  104. package/dist/plugin/runtime/child-process-worker.d.ts +0 -20
  105. package/dist/plugin/runtime/child-process-worker.js +0 -42
  106. package/dist/plugin/runtime/child-process-worker.js.map +0 -1
  107. package/dist/plugin/runtime/node-fork-worker.d.ts +0 -9
  108. package/dist/plugin/runtime/node-fork-worker.js +0 -67
  109. package/dist/plugin/runtime/node-fork-worker.js.map +0 -1
  110. package/dist/plugin/runtime/node-thread-worker.d.ts +0 -20
  111. package/dist/plugin/runtime/node-thread-worker.js +0 -73
  112. package/dist/plugin/runtime/node-thread-worker.js.map +0 -1
  113. package/dist/plugin/runtime/python-worker.d.ts +0 -10
  114. package/dist/plugin/runtime/python-worker.js +0 -91
  115. package/dist/plugin/runtime/python-worker.js.map +0 -1
  116. package/dist/plugin/runtime/runtime-worker.d.ts +0 -26
  117. package/dist/plugin/runtime/runtime-worker.js +0 -3
  118. package/dist/plugin/runtime/runtime-worker.js.map +0 -1
  119. package/dist/plugin/socket-serializer.d.ts +0 -5
  120. package/dist/plugin/socket-serializer.js +0 -17
  121. package/dist/plugin/socket-serializer.js.map +0 -1
  122. package/dist/plugin/system.d.ts +0 -39
  123. package/dist/plugin/system.js +0 -216
  124. package/dist/plugin/system.js.map +0 -1
  125. package/dist/rpc-buffer-serializer.d.ts +0 -11
  126. package/dist/rpc-buffer-serializer.js +0 -30
  127. package/dist/rpc-buffer-serializer.js.map +0 -1
  128. package/dist/rpc-serializer.d.ts +0 -24
  129. package/dist/rpc-serializer.js +0 -144
  130. package/dist/rpc-serializer.js.map +0 -1
  131. package/dist/rpc.d.ts +0 -147
  132. package/dist/rpc.js +0 -689
  133. package/dist/rpc.js.map +0 -1
  134. package/dist/runtime.d.ts +0 -103
  135. package/dist/runtime.js +0 -815
  136. package/dist/runtime.js.map +0 -1
  137. package/dist/scrypted-main-exports.d.ts +0 -6
  138. package/dist/scrypted-main-exports.js +0 -57
  139. package/dist/scrypted-main-exports.js.map +0 -1
  140. package/dist/scrypted-main.d.ts +0 -1
  141. package/dist/scrypted-main.js +0 -8
  142. package/dist/scrypted-main.js.map +0 -1
  143. package/dist/scrypted-plugin-main.d.ts +0 -2
  144. package/dist/scrypted-plugin-main.js +0 -43
  145. package/dist/scrypted-plugin-main.js.map +0 -1
  146. package/dist/scrypted-server-main.d.ts +0 -6
  147. package/dist/scrypted-server-main.js +0 -559
  148. package/dist/scrypted-server-main.js.map +0 -1
  149. package/dist/server-settings.d.ts +0 -5
  150. package/dist/server-settings.js +0 -91
  151. package/dist/server-settings.js.map +0 -1
  152. package/dist/services/addresses.d.ts +0 -7
  153. package/dist/services/addresses.js +0 -41
  154. package/dist/services/addresses.js.map +0 -1
  155. package/dist/services/alerts.d.ts +0 -9
  156. package/dist/services/alerts.js +0 -27
  157. package/dist/services/alerts.js.map +0 -1
  158. package/dist/services/cors.d.ts +0 -18
  159. package/dist/services/cors.js +0 -18
  160. package/dist/services/cors.js.map +0 -1
  161. package/dist/services/info.d.ts +0 -5
  162. package/dist/services/info.js +0 -18
  163. package/dist/services/info.js.map +0 -1
  164. package/dist/services/plugin.d.ts +0 -46
  165. package/dist/services/plugin.js +0 -172
  166. package/dist/services/plugin.js.map +0 -1
  167. package/dist/services/service-control.d.ts +0 -8
  168. package/dist/services/service-control.js +0 -39
  169. package/dist/services/service-control.js.map +0 -1
  170. package/dist/services/users.d.ts +0 -19
  171. package/dist/services/users.js +0 -75
  172. package/dist/services/users.js.map +0 -1
  173. package/dist/sleep.d.ts +0 -1
  174. package/dist/sleep.js +0 -8
  175. package/dist/sleep.js.map +0 -1
  176. package/dist/state.d.ts +0 -39
  177. package/dist/state.js +0 -247
  178. package/dist/state.js.map +0 -1
  179. package/dist/threading.d.ts +0 -3
  180. package/dist/threading.js +0 -93
  181. package/dist/threading.js.map +0 -1
  182. package/dist/usertoken.d.ts +0 -11
  183. package/dist/usertoken.js +0 -52
  184. package/dist/usertoken.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"plugin-debug.js","sourceRoot":"","sources":["../../src/plugin/plugin-debug.ts"],"names":[],"mappings":""}
@@ -1,54 +0,0 @@
1
- import { EventListener, EventListenerOptions, EventListenerRegister, ScryptedDevice, ScryptedDeviceType } from "@scrypted/types";
2
- import { PluginDevice } from "../db-types";
3
- import { PrimitiveProxyHandler } from "../rpc";
4
- import { ScryptedRuntime } from "../runtime";
5
- interface MixinTable {
6
- mixinProviderId: string;
7
- entry: Promise<MixinTableEntry>;
8
- }
9
- interface MixinTableEntry {
10
- interfaces: Set<string>;
11
- methods?: Set<string>;
12
- allInterfaces: string[];
13
- proxy: any;
14
- error?: Error;
15
- passthrough: boolean;
16
- }
17
- export declare const RefreshSymbol: unique symbol;
18
- export declare const QueryInterfaceSymbol: unique symbol;
19
- export declare class PluginDeviceProxyHandler implements PrimitiveProxyHandler<any>, ScryptedDevice {
20
- scrypted: ScryptedRuntime;
21
- id: string;
22
- mixinTable: MixinTable[];
23
- releasing: Set<any>;
24
- static sortInterfaces(interfaces: string[]): string[];
25
- constructor(scrypted: ScryptedRuntime, id: string);
26
- toPrimitive(): string;
27
- invalidateEntry(mixinEntry: MixinTable): void;
28
- getMixinProviderId(id: string, mixinDevice: any): Promise<string | true>;
29
- invalidate(): void;
30
- /**
31
- * Rebuild the mixin table with any currently missing mixins.
32
- */
33
- rebuildMixinTable(): void;
34
- ensureProxy(lastValidMixinId?: string): Promise<PluginDevice>;
35
- rebuildEntry(pluginDevice: PluginDevice, mixinId: string, wrappedMixinTablePromise: Promise<MixinTable[]>): Promise<MixinTableEntry>;
36
- get(target: any, p: PropertyKey, receiver: any): any;
37
- listen(event: string | EventListenerOptions, callback: EventListener): EventListenerRegister;
38
- setName(name: string): Promise<void>;
39
- setRoom(room: string): Promise<void>;
40
- setType(type: ScryptedDeviceType): Promise<void>;
41
- setMixins(mixins: string[]): Promise<void>;
42
- probe(): Promise<boolean>;
43
- applyMixin(method: string, argArray?: any): Promise<any>;
44
- findMethod(method: string): Promise<{
45
- mixin: MixinTable;
46
- entry: MixinTableEntry;
47
- }>;
48
- findMixin(iface: string): Promise<{
49
- mixin: MixinTable;
50
- entry: MixinTableEntry;
51
- }>;
52
- apply(target: any, thisArg: any, argArray?: any): Promise<any>;
53
- }
54
- export {};
@@ -1,413 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.PluginDeviceProxyHandler = exports.QueryInterfaceSymbol = exports.RefreshSymbol = void 0;
7
- const types_1 = require("@scrypted/types");
8
- const fs_1 = __importDefault(require("fs"));
9
- const path_1 = __importDefault(require("path"));
10
- const infer_defaults_1 = require("../infer-defaults");
11
- const rpc_1 = require("../rpc");
12
- const sleep_1 = require("../sleep");
13
- const state_1 = require("../state");
14
- const descriptor_1 = require("./descriptor");
15
- const plugin_error_1 = require("./plugin-error");
16
- exports.RefreshSymbol = Symbol('ScryptedDeviceRefresh');
17
- exports.QueryInterfaceSymbol = Symbol("ScryptedPluginDeviceQueryInterface");
18
- class PluginDeviceProxyHandler {
19
- scrypted;
20
- id;
21
- mixinTable;
22
- releasing = new Set();
23
- static sortInterfaces(interfaces) {
24
- return [...new Set(interfaces || [])].sort();
25
- }
26
- constructor(scrypted, id) {
27
- this.scrypted = scrypted;
28
- this.id = id;
29
- }
30
- toPrimitive() {
31
- return `PluginDevice-${this.id}`;
32
- }
33
- invalidateEntry(mixinEntry) {
34
- if (!mixinEntry?.mixinProviderId)
35
- return;
36
- (async () => {
37
- const mixinProvider = this.scrypted.getDevice(mixinEntry.mixinProviderId);
38
- const { proxy } = await mixinEntry.entry;
39
- // allow mixins in the process of being released to manage final
40
- // events, etc, before teardown.
41
- this.releasing.add(proxy);
42
- mixinProvider?.releaseMixin(this.id, proxy).catch(() => { });
43
- await (0, sleep_1.sleep)(1000);
44
- this.releasing.delete(proxy);
45
- })().catch(() => { });
46
- }
47
- async getMixinProviderId(id, mixinDevice) {
48
- if (this.releasing.has(mixinDevice))
49
- return true;
50
- await this.scrypted.devices[id].handler.ensureProxy();
51
- for (const mixin of this.scrypted.devices[id].handler.mixinTable) {
52
- const { proxy } = await mixin.entry;
53
- if (proxy === mixinDevice) {
54
- return mixin.mixinProviderId || id;
55
- }
56
- }
57
- return undefined;
58
- }
59
- // should this be async?
60
- invalidate() {
61
- const mixinTable = this.mixinTable;
62
- this.mixinTable = undefined;
63
- for (const mixinEntry of (mixinTable || [])) {
64
- this.invalidateEntry(mixinEntry);
65
- }
66
- }
67
- /**
68
- * Rebuild the mixin table with any currently missing mixins.
69
- */
70
- rebuildMixinTable() {
71
- if (!this.mixinTable)
72
- return this.invalidate();
73
- let previousMixinIds = this.mixinTable?.map(entry => entry.mixinProviderId) || [];
74
- previousMixinIds.pop();
75
- previousMixinIds = previousMixinIds.reverse();
76
- const pluginDevice = this.scrypted.findPluginDeviceById(this.id);
77
- if (!pluginDevice)
78
- return this.invalidate();
79
- const mixins = (0, state_1.getState)(pluginDevice, types_1.ScryptedInterfaceProperty.mixins) || [];
80
- // iterate the new mixin table to find the last good mixin,
81
- // and resume creation from there.
82
- let lastValidMixinId;
83
- for (const mixinId of mixins) {
84
- if (!previousMixinIds.length) {
85
- // reached of the previous mixin table, meaning
86
- // mixins were added.
87
- break;
88
- }
89
- const check = previousMixinIds.shift();
90
- if (check !== mixinId)
91
- break;
92
- lastValidMixinId = mixinId;
93
- }
94
- if (!lastValidMixinId)
95
- return this.invalidate();
96
- // invalidate and remove everything up to lastValidMixinId
97
- while (true) {
98
- const entry = this.mixinTable[0];
99
- if (entry.mixinProviderId === lastValidMixinId)
100
- break;
101
- this.mixinTable.shift();
102
- this.invalidateEntry(entry);
103
- console.log('invalidating mixin', this.id, entry.mixinProviderId);
104
- }
105
- this.ensureProxy(lastValidMixinId);
106
- }
107
- // this must not be async, because it potentially changes execution order.
108
- ensureProxy(lastValidMixinId) {
109
- const pluginDevice = this.scrypted.findPluginDeviceById(this.id);
110
- if (!pluginDevice)
111
- throw new plugin_error_1.PluginError(`device ${this.id} does not exist`);
112
- if (!lastValidMixinId) {
113
- if (this.mixinTable)
114
- return Promise.resolve(pluginDevice);
115
- this.mixinTable = [];
116
- const entry = (async () => {
117
- let proxy;
118
- try {
119
- if (!pluginDevice.nativeId) {
120
- const plugin = this.scrypted.plugins[pluginDevice.pluginId];
121
- proxy = await plugin.module;
122
- }
123
- else {
124
- const providerId = (0, state_1.getState)(pluginDevice, types_1.ScryptedInterfaceProperty.providerId);
125
- const provider = this.scrypted.getDevice(providerId);
126
- proxy = await provider.getDevice(pluginDevice.nativeId);
127
- }
128
- if (!proxy)
129
- console.warn('no device was returned by the plugin', this.id);
130
- }
131
- catch (e) {
132
- console.error('error occured retrieving device from plugin', e);
133
- }
134
- const interfaces = (0, state_1.getState)(pluginDevice, types_1.ScryptedInterfaceProperty.providedInterfaces) || [];
135
- return {
136
- passthrough: false,
137
- proxy,
138
- interfaces: new Set(interfaces),
139
- allInterfaces: interfaces,
140
- };
141
- })();
142
- this.mixinTable.unshift({
143
- mixinProviderId: undefined,
144
- entry,
145
- });
146
- }
147
- else {
148
- if (!this.mixinTable)
149
- throw new plugin_error_1.PluginError('mixin table partial invalidation was called with empty mixin table');
150
- const prevTable = this.mixinTable.find(table => table.mixinProviderId === lastValidMixinId);
151
- if (!prevTable)
152
- throw new plugin_error_1.PluginError('mixin table partial invalidation was called with invalid lastValidMixinId');
153
- }
154
- for (const mixinId of (0, state_1.getState)(pluginDevice, types_1.ScryptedInterfaceProperty.mixins) || []) {
155
- if (lastValidMixinId) {
156
- if (mixinId === lastValidMixinId)
157
- lastValidMixinId = undefined;
158
- continue;
159
- }
160
- const wrappedMixinTable = this.mixinTable.slice();
161
- const entry = this.rebuildEntry(pluginDevice, mixinId, Promise.resolve(wrappedMixinTable));
162
- this.mixinTable.unshift({
163
- mixinProviderId: mixinId,
164
- entry,
165
- });
166
- }
167
- return this.mixinTable[0].entry.then(entry => {
168
- if (entry.error) {
169
- console.error('Mixin device creation completed with error. Merging with previous interface set to retain device descriptor.');
170
- const previousInterfaces = (0, state_1.getState)(pluginDevice, types_1.ScryptedInterfaceProperty.interfaces) || [];
171
- const allInterfaces = new Set([...entry.allInterfaces, ...previousInterfaces]);
172
- entry.allInterfaces = [...allInterfaces];
173
- }
174
- const changed = this.scrypted.stateManager.setPluginDeviceState(pluginDevice, types_1.ScryptedInterfaceProperty.interfaces, PluginDeviceProxyHandler.sortInterfaces(entry.allInterfaces));
175
- if (changed)
176
- this.scrypted.notifyPluginDeviceDescriptorChanged(pluginDevice);
177
- return pluginDevice;
178
- });
179
- }
180
- async rebuildEntry(pluginDevice, mixinId, wrappedMixinTablePromise) {
181
- const wrappedMixinTable = await wrappedMixinTablePromise;
182
- const previousEntry = wrappedMixinTable[0].entry;
183
- const type = (0, infer_defaults_1.getDisplayType)(pluginDevice);
184
- let { allInterfaces, error } = await previousEntry;
185
- try {
186
- const mixinProvider = this.scrypted.getDevice(mixinId);
187
- const isMixinProvider = mixinProvider?.interfaces?.includes(types_1.ScryptedInterface.MixinProvider);
188
- const interfaces = isMixinProvider && await mixinProvider?.canMixin(type, allInterfaces);
189
- if (!interfaces) {
190
- console.log(`Mixin provider ${mixinId} can no longer mixin ${this.id}.`, {
191
- mixinProvider: !!mixinProvider,
192
- interfaces,
193
- });
194
- if (!error) {
195
- if (!mixinProvider || (isMixinProvider && !interfaces)) {
196
- const mixins = (0, state_1.getState)(pluginDevice, types_1.ScryptedInterfaceProperty.mixins) || [];
197
- this.scrypted.stateManager.setPluginDeviceState(pluginDevice, types_1.ScryptedInterfaceProperty.mixins, mixins.filter(mid => mid !== mixinId));
198
- this.scrypted.notifyPluginDeviceDescriptorChanged(pluginDevice);
199
- this.scrypted.datastore.upsert(pluginDevice);
200
- }
201
- else {
202
- console.log(`Mixin provider ${mixinId} can not mixin ${this.id}. It is no longer a MixinProvider. This may be temporary. Passing through.`);
203
- }
204
- }
205
- else {
206
- console.error(`Error encountered in previous mixin entry may have caused mixin error. Ignoring.`);
207
- }
208
- // this is not an error
209
- // do not advertise interfaces so it is skipped during
210
- // vtable lookup.
211
- return {
212
- error,
213
- passthrough: true,
214
- allInterfaces,
215
- interfaces: new Set(),
216
- proxy: undefined,
217
- };
218
- }
219
- const previousInterfaces = allInterfaces;
220
- allInterfaces = previousInterfaces.slice();
221
- allInterfaces.push(...interfaces);
222
- const combinedInterfaces = [...new Set(allInterfaces)];
223
- const wrappedHandler = new PluginDeviceProxyHandler(this.scrypted, this.id);
224
- wrappedHandler.mixinTable = wrappedMixinTable;
225
- const wrappedProxy = new Proxy(wrappedHandler, wrappedHandler);
226
- const implementer = await mixinProvider[exports.QueryInterfaceSymbol](types_1.ScryptedInterface.MixinProvider);
227
- const host = this.scrypted.getPluginHostForDeviceId(implementer);
228
- const propertyInterfaces = (0, descriptor_1.getPropertyInterfaces)(host.api.descriptors || types_1.ScryptedInterfaceDescriptors);
229
- // todo: remove this and pass the setter directly.
230
- const deviceState = await host.remote.createDeviceState(this.id, async (property, value) => this.scrypted.stateManager.setPluginDeviceStateFromMixin(pluginDevice, property, value, propertyInterfaces[property], mixinId));
231
- const mixinProxy = await mixinProvider.getMixin(wrappedProxy, previousInterfaces, deviceState);
232
- if (!mixinProxy)
233
- throw new plugin_error_1.PluginError(`mixin provider ${mixinId} did not return mixin for ${this.id}`);
234
- // mixin is a passthrough of no interfaces changed, and the proxy is the same
235
- // a mixin can be a passthrough even if it implements an interface (like Settings),
236
- // so long as the wrapped proxy also implements that interface.
237
- // techically it is a passthrough if the proxies are the same instance, but
238
- // better to be explicit here about interface differences.
239
- const passthrough = wrappedProxy === mixinProxy && previousInterfaces.length === combinedInterfaces.length;
240
- return {
241
- error,
242
- passthrough,
243
- interfaces: new Set(interfaces),
244
- allInterfaces: combinedInterfaces,
245
- proxy: mixinProxy,
246
- };
247
- }
248
- catch (e) {
249
- // on any error, do not advertise interfaces
250
- // on this mixin, so as to prevent total failure?
251
- // this has been the behavior for a while,
252
- // but maybe interfaces implemented by that mixin
253
- // should rethrow the error caught here in applyMixin.
254
- console.error('Mixin error', e);
255
- return {
256
- passthrough: false,
257
- allInterfaces,
258
- interfaces: new Set(),
259
- error: e,
260
- proxy: undefined,
261
- };
262
- }
263
- }
264
- get(target, p, receiver) {
265
- if (rpc_1.RpcPeer.PROBED_PROPERTIES.has(p))
266
- return;
267
- const handled = rpc_1.RpcPeer.handleFunctionInvocations(this, target, p, receiver);
268
- if (handled)
269
- return handled;
270
- const pluginDevice = this.scrypted.findPluginDeviceById(this.id);
271
- // device may be deleted.
272
- if (!pluginDevice)
273
- return;
274
- const prop = p.toString();
275
- if (descriptor_1.allInterfaceProperties.includes(prop))
276
- return (0, state_1.getState)(pluginDevice, prop);
277
- if (p === exports.RefreshSymbol || p === exports.QueryInterfaceSymbol)
278
- return new Proxy(() => p, this);
279
- if (types_1.ScryptedInterfaceDescriptors[types_1.ScryptedInterface.ScryptedDevice].methods.includes(prop))
280
- return this[p].bind(this);
281
- return new Proxy(() => prop, this);
282
- }
283
- listen(event, callback) {
284
- return this.scrypted.stateManager.listenDevice(this.id, event, (eventDetails, eventData) => callback(this.scrypted.getDevice(this.id), eventDetails, eventData));
285
- }
286
- async setName(name) {
287
- const device = this.scrypted.findPluginDeviceById(this.id);
288
- this.scrypted.stateManager.setPluginDeviceState(device, types_1.ScryptedInterfaceProperty.name, name);
289
- this.scrypted.stateManager.updateDescriptor(device);
290
- }
291
- async setRoom(room) {
292
- const device = this.scrypted.findPluginDeviceById(this.id);
293
- this.scrypted.stateManager.setPluginDeviceState(device, types_1.ScryptedInterfaceProperty.room, room);
294
- this.scrypted.stateManager.updateDescriptor(device);
295
- }
296
- async setType(type) {
297
- const device = this.scrypted.findPluginDeviceById(this.id);
298
- this.scrypted.stateManager.setPluginDeviceState(device, types_1.ScryptedInterfaceProperty.type, type);
299
- this.scrypted.stateManager.updateDescriptor(device);
300
- }
301
- async setMixins(mixins) {
302
- }
303
- async probe() {
304
- try {
305
- await this.ensureProxy();
306
- return true;
307
- }
308
- catch (e) {
309
- return false;
310
- }
311
- }
312
- async applyMixin(method, argArray) {
313
- const found = await this.findMethod(method);
314
- if (found) {
315
- const { mixin, entry } = found;
316
- const { proxy } = entry;
317
- if (!proxy)
318
- throw new plugin_error_1.PluginError(`device is unavailable ${this.id} (mixin ${mixin.mixinProviderId})`);
319
- return proxy[method](...argArray);
320
- }
321
- throw new plugin_error_1.PluginError(`${method} not implemented`);
322
- }
323
- async findMethod(method) {
324
- for (const mixin of this.mixinTable) {
325
- const entry = await mixin.entry;
326
- if (!entry.methods) {
327
- if (entry.interfaces.size) {
328
- const pluginDevice = this.scrypted.findPluginDeviceById(mixin.mixinProviderId || this.id);
329
- const plugin = this.scrypted.plugins[pluginDevice.pluginId];
330
- let methods = new Set((0, descriptor_1.getInterfaceMethods)(types_1.ScryptedInterfaceDescriptors, entry.interfaces));
331
- if (plugin?.api.descriptors)
332
- methods = new Set([...methods, ...(0, descriptor_1.getInterfaceMethods)(plugin.api.descriptors, entry.interfaces)]);
333
- entry.methods = methods;
334
- }
335
- else {
336
- entry.methods = new Set();
337
- }
338
- }
339
- if (entry.methods.has(method)) {
340
- return { mixin, entry };
341
- }
342
- }
343
- }
344
- async findMixin(iface) {
345
- for (const mixin of this.mixinTable) {
346
- const entry = await mixin.entry;
347
- const { interfaces } = entry;
348
- if (interfaces.has(iface)) {
349
- return { mixin, entry };
350
- }
351
- }
352
- }
353
- async apply(target, thisArg, argArray) {
354
- const method = target();
355
- const { activeRpcPeer } = rpc_1.RpcPeer;
356
- const acl = activeRpcPeer?.tags?.acl;
357
- if (acl?.shouldRejectMethod(this.id, method))
358
- acl.deny();
359
- this.ensureProxy();
360
- const pluginDevice = this.scrypted.findPluginDeviceById(this.id);
361
- if (method === exports.RefreshSymbol)
362
- return this.applyMixin('refresh', argArray);
363
- if (method === exports.QueryInterfaceSymbol) {
364
- const iface = argArray[0];
365
- if (iface === types_1.ScryptedInterface.ScryptedDevice)
366
- return this.id;
367
- const found = await this.findMixin(iface);
368
- if (found?.entry.interfaces.has(iface)) {
369
- return found.mixin.mixinProviderId || this.id;
370
- }
371
- throw new plugin_error_1.PluginError(`${iface} not implemented`);
372
- }
373
- if (method === 'getReadmeMarkdown') {
374
- const pluginDevice = this.scrypted.findPluginDeviceById(this.id);
375
- if (pluginDevice && !pluginDevice.nativeId) {
376
- const plugin = this.scrypted.plugins[pluginDevice.pluginId];
377
- if (!plugin.packageJson.scrypted.interfaces.includes(types_1.ScryptedInterface.Readme)) {
378
- const readmePath = path_1.default.join(plugin.unzippedPath, 'README.md');
379
- if (fs_1.default.existsSync(readmePath)) {
380
- try {
381
- return fs_1.default.readFileSync(readmePath).toString();
382
- }
383
- catch (e) {
384
- return "# Error loading Readme:\n\n" + e;
385
- }
386
- }
387
- }
388
- }
389
- }
390
- if (method === 'getPluginJson'
391
- && (0, state_1.getState)(pluginDevice, types_1.ScryptedInterfaceProperty.providedInterfaces)?.includes(types_1.ScryptedInterface.ScryptedPlugin)) {
392
- return this.scrypted.getPackageJson(pluginDevice.pluginId);
393
- }
394
- if (method === 'refresh') {
395
- const refreshInterface = argArray[0];
396
- const userInitiated = argArray[1];
397
- return this.scrypted.stateManager.refresh(this.id, refreshInterface, userInitiated);
398
- }
399
- if (method === 'createDevice') {
400
- const idOrNativeId = await this.applyMixin(method, argArray);
401
- // TODO: 2/17/2023 deprecate this old code path
402
- let newDevice = this.scrypted.findPluginDevice(pluginDevice.pluginId, idOrNativeId);
403
- if (newDevice) {
404
- console.warn(`${pluginDevice.pluginId} is returning legacy nativeId value from createDevice.`);
405
- return newDevice._id;
406
- }
407
- return idOrNativeId;
408
- }
409
- return this.applyMixin(method, argArray);
410
- }
411
- }
412
- exports.PluginDeviceProxyHandler = PluginDeviceProxyHandler;
413
- //# sourceMappingURL=plugin-device.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"plugin-device.js","sourceRoot":"","sources":["../../src/plugin/plugin-device.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export declare class PluginError extends Error {
2
- }
@@ -1,7 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.PluginError = void 0;
4
- class PluginError extends Error {
5
- }
6
- exports.PluginError = PluginError;
7
- //# sourceMappingURL=plugin-error.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"plugin-error.js","sourceRoot":"","sources":["../../src/plugin/plugin-error.ts"],"names":[],"mappings":";;;AAAA,MAAa,WAAY,SAAQ,KAAK;CACrC;AADD,kCACC"}
@@ -1,43 +0,0 @@
1
- /// <reference types="lodash" />
2
- import { Device, DeviceManifest, EventDetails, EventListenerOptions, EventListenerRegister, MediaManager, ScryptedDevice, ScryptedInterfaceDescriptor, ScryptedInterfaceProperty, ScryptedNativeId } from '@scrypted/types';
3
- import { Logger } from '../logger';
4
- import { RpcPeer } from '../rpc';
5
- import { ScryptedRuntime } from '../runtime';
6
- import { getPropertyInterfaces } from './descriptor';
7
- import { PluginAPI, PluginAPIManagedListeners } from './plugin-api';
8
- import { PluginHost } from './plugin-host';
9
- export declare class PluginHostAPI extends PluginAPIManagedListeners implements PluginAPI {
10
- scrypted: ScryptedRuntime;
11
- pluginHost: PluginHost;
12
- mediaManager: MediaManager;
13
- pluginId: string;
14
- typesVersion: string;
15
- descriptors: {
16
- [scryptedInterface: string]: ScryptedInterfaceDescriptor;
17
- };
18
- propertyInterfaces: ReturnType<typeof getPropertyInterfaces>;
19
- [RpcPeer.PROPERTY_PROXY_ONEWAY_METHODS]: string[];
20
- restartDebounced: import("lodash").DebouncedFunc<() => Promise<void>>;
21
- constructor(scrypted: ScryptedRuntime, pluginId: string, pluginHost: PluginHost, mediaManager: MediaManager);
22
- onMixinEvent(id: string, nativeIdOrMixinDevice: ScryptedNativeId | any, eventInterface: string, eventData?: any): Promise<void>;
23
- getMediaManager(): Promise<MediaManager>;
24
- getLogger(nativeId: ScryptedNativeId): Promise<Logger>;
25
- getComponent(id: string): Promise<any>;
26
- setDeviceProperty(id: string, property: ScryptedInterfaceProperty, value: any): Promise<void>;
27
- setState(nativeId: ScryptedNativeId, key: string, value: any): Promise<void>;
28
- setStorage(nativeId: ScryptedNativeId, storage: {
29
- [key: string]: string;
30
- }): Promise<void>;
31
- onDevicesChanged(deviceManifest: DeviceManifest): Promise<void>;
32
- onDeviceDiscovered(device: Device): Promise<string>;
33
- onDeviceRemoved(nativeId: string): Promise<void>;
34
- onDeviceEvent(nativeId: any, eventInterface: any, eventData?: any): Promise<void>;
35
- getDeviceById<T>(id: string): Promise<T & ScryptedDevice>;
36
- listen(callback: (id: string, eventDetails: EventDetails, eventData: any) => void): Promise<EventListenerRegister>;
37
- listenDevice(id: string, event: string | EventListenerOptions, callback: (eventDetails: EventDetails, eventData: any) => void): Promise<EventListenerRegister>;
38
- removeDevice(id: string): Promise<void>;
39
- requestRestart(): Promise<void>;
40
- setScryptedInterfaceDescriptors(typesVersion: string, descriptors: {
41
- [scryptedInterface: string]: ScryptedInterfaceDescriptor;
42
- }): Promise<void>;
43
- }