Files
scrypted/sdk/index.js
2022-09-21 11:42:16 -07:00

189 lines
6.7 KiB
JavaScript

"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __exportStar = (this && this.__exportStar) || function(m, exports) {
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
};
var _a, _b, _c;
Object.defineProperty(exports, "__esModule", { value: true });
exports.MixinDeviceBase = exports.ScryptedDeviceBase = void 0;
__exportStar(require("./types/index"), exports);
const index_1 = require("./types/index");
class ScryptedDeviceBase extends index_1.DeviceBase {
constructor(nativeId) {
super();
this.nativeId = nativeId;
}
get storage() {
if (!this._storage) {
this._storage = deviceManager.getDeviceStorage(this.nativeId);
}
return this._storage;
}
get log() {
if (!this._log) {
this._log = deviceManager.getDeviceLogger(this.nativeId);
}
return this._log;
}
get console() {
if (!this._console) {
this._console = deviceManager.getDeviceConsole(this.nativeId);
}
return this._console;
}
async createMediaObject(data, mimeType) {
return mediaManager.createMediaObject(data, mimeType, {
sourceId: this.id,
});
}
getMediaObjectConsole(mediaObject) {
if (typeof mediaObject.sourceId !== 'string')
return this.console;
return deviceManager.getMixinConsole(mediaObject.sourceId, this.nativeId);
}
_lazyLoadDeviceState() {
if (!this._deviceState) {
if (this.nativeId) {
this._deviceState = deviceManager.getDeviceState(this.nativeId);
}
else {
this._deviceState = deviceManager.getDeviceState();
}
}
}
/**
* Fire an event for this device.
*/
onDeviceEvent(eventInterface, eventData) {
return deviceManager.onDeviceEvent(this.nativeId, eventInterface, eventData);
}
}
exports.ScryptedDeviceBase = ScryptedDeviceBase;
class MixinDeviceBase extends index_1.DeviceBase {
constructor(options) {
super();
this._listeners = new Set();
this.mixinDevice = options.mixinDevice;
this.mixinDeviceInterfaces = options.mixinDeviceInterfaces;
this.mixinStorageSuffix = options.mixinStorageSuffix;
this._deviceState = options.mixinDeviceState;
// 8-11-2022
// RpcProxy will trap all properties, and the following check/hack will determine
// if the device state came from another node worker thread.
// This should ultimately be removed at some point in the future.
if (this._deviceState.__rpcproxy_traps_all_properties && deviceManager.createDeviceState && typeof this._deviceState.id === 'string') {
this._deviceState = deviceManager.createDeviceState(this._deviceState.id, this._deviceState.setState);
}
this.mixinProviderNativeId = options.mixinProviderNativeId;
}
get storage() {
if (!this._storage) {
const mixinStorageSuffix = this.mixinStorageSuffix;
const mixinStorageKey = this.id + (mixinStorageSuffix ? ':' + mixinStorageSuffix : '');
this._storage = deviceManager.getMixinStorage(mixinStorageKey, this.mixinProviderNativeId);
}
return this._storage;
}
get console() {
if (!this._console) {
if (deviceManager.getMixinConsole)
this._console = deviceManager.getMixinConsole(this.id, this.mixinProviderNativeId);
else
this._console = deviceManager.getDeviceConsole(this.mixinProviderNativeId);
}
return this._console;
}
async createMediaObject(data, mimeType) {
return mediaManager.createMediaObject(data, mimeType, {
sourceId: this.id,
});
}
getMediaObjectConsole(mediaObject) {
if (typeof mediaObject.sourceId !== 'string')
return this.console;
return deviceManager.getMixinConsole(mediaObject.sourceId, this.mixinProviderNativeId);
}
/**
* Fire an event for this device.
*/
onDeviceEvent(eventInterface, eventData) {
return deviceManager.onMixinEvent(this.id, this, eventInterface, eventData);
}
_lazyLoadDeviceState() {
}
manageListener(listener) {
this._listeners.add(listener);
}
release() {
for (const l of this._listeners) {
l.removeListener();
}
}
}
exports.MixinDeviceBase = MixinDeviceBase;
(function () {
function _createGetState(state) {
return function () {
var _a;
this._lazyLoadDeviceState();
return (_a = this._deviceState) === null || _a === void 0 ? void 0 : _a[state];
};
}
function _createSetState(state) {
return function (value) {
this._lazyLoadDeviceState();
if (!this._deviceState)
console.warn('device state is unavailable. the device must be discovered with deviceManager.onDeviceDiscovered or deviceManager.onDevicesChanged before the state can be set.');
else
this._deviceState[state] = value;
};
}
for (var field of Object.values(index_1.ScryptedInterfaceProperty)) {
Object.defineProperty(ScryptedDeviceBase.prototype, field, {
set: _createSetState(field),
get: _createGetState(field),
});
Object.defineProperty(MixinDeviceBase.prototype, field, {
set: _createSetState(field),
get: _createGetState(field),
});
}
})();
let sdk = {};
try {
let runtimeAPI;
try {
runtimeAPI = pluginRuntimeAPI;
}
catch (e) {
}
sdk = Object.assign(sdk, {
log: deviceManager.getDeviceLogger(undefined),
deviceManager,
endpointManager,
mediaManager,
systemManager,
pluginHostAPI,
...runtimeAPI,
});
try {
(_c = (_b = (_a = systemManager).setScryptedInterfaceDescriptors) === null || _b === void 0 ? void 0 : _b.call(_a, index_1.TYPES_VERSION, index_1.ScryptedInterfaceDescriptors)) === null || _c === void 0 ? void 0 : _c.catch(() => { });
}
catch (e) {
}
}
catch (e) {
console.error('sdk initialization error, import @scrypted/types or use @scrypted/client instead', e);
}
exports.default = sdk;
//# sourceMappingURL=index.js.map