sdk: convert to typescript

This commit is contained in:
Koushik Dutta
2021-10-06 20:52:21 -07:00
parent 7ed788c1eb
commit 770dd2fb93
9 changed files with 851 additions and 1675 deletions

1
sdk/.gitignore vendored
View File

@@ -1 +1,2 @@
node_modules/
*.map

262
sdk/index.d.ts vendored
View File

@@ -1,129 +1,137 @@
export * from './types'
import { DeviceInformation, ScryptedInterface, ScryptedStatic, ScryptedDeviceType, Logger, ColorRgb, ColorHsv, DeviceState, TemperatureUnit, LockState, ThermostatMode, Position, ScryptedDevice } from './types';
export class ScryptedDeviceBase implements DeviceState {
constructor(nativeId?: string);
nativeId: string;
/**
* @deprecated
*/
log: Logger;
console: Console;
storage: Storage;
id?: string;
interfaces?: string[];
mixins?: string[];
info?: DeviceInformation;
name?: string;
providedInterfaces?: string[];
providedName?: ScryptedDeviceType;
providedRoom?: string;
providedType?: ScryptedDeviceType;
providerId?: string;
room?: string;
type?: ScryptedDeviceType;
on?: boolean;
brightness?: number;
colorTemperature?: number;
rgb?: ColorRgb;
hsv?: ColorHsv;
running?: boolean;
paused?: boolean;
docked?: boolean;
/**
* Get the ambient temperature in Celsius.
*/
temperature?: number;
/**
* Get the user facing unit of measurement for this thermometer. Note that while this may be Fahrenheit, getTemperatureAmbient will return the temperature in Celsius.
*/
temperatureUnit?: TemperatureUnit;
humidity?: number;
thermostatAvailableModes?: ThermostatMode[];
thermostatMode?: ThermostatMode;
thermostatSetpoint?: number;
thermostatSetpointHigh?: number;
thermostatSetpointLow?: number;
lockState?: LockState;
entryOpen?: boolean;
batteryLevel?: number;
online?: boolean;
updateAvailable?: boolean;
fromMimeType?: string;
toMimeType?: string;
binaryState?: boolean;
intrusionDetected?: boolean;
powerDetected?: boolean;
motionDetected?: boolean;
audioDetected?: boolean;
occupied?: boolean;
flooded?: boolean;
ultraviolet?: number;
luminance?: number;
position?: Position;
export * from './types';
import type { ScryptedNativeId } from './types';
import type { DeviceInformation, ScryptedInterface, ScryptedStatic, ScryptedDeviceType, Logger, ColorRgb, ColorHsv, DeviceState, TemperatureUnit, LockState, ThermostatMode, Position } from './types';
export declare class ScryptedDeviceBase implements DeviceState {
nativeId: string;
id?: string;
interfaces?: string[];
mixins?: string[];
info?: DeviceInformation;
name?: string;
providedInterfaces?: string[];
providedName?: ScryptedDeviceType;
providedRoom?: string;
providedType?: ScryptedDeviceType;
providerId?: string;
room?: string;
type?: ScryptedDeviceType;
on?: boolean;
brightness?: number;
colorTemperature?: number;
rgb?: ColorRgb;
hsv?: ColorHsv;
running?: boolean;
paused?: boolean;
docked?: boolean;
/**
* Get the ambient temperature in Celsius.
*/
temperature?: number;
/**
* Get the user facing unit of measurement for this thermometer. Note that while this may be Fahrenheit, getTemperatureAmbient will return the temperature in Celsius.
*/
temperatureUnit?: TemperatureUnit;
humidity?: number;
thermostatAvailableModes?: ThermostatMode[];
thermostatMode?: ThermostatMode;
thermostatSetpoint?: number;
thermostatSetpointHigh?: number;
thermostatSetpointLow?: number;
lockState?: LockState;
entryOpen?: boolean;
batteryLevel?: number;
online?: boolean;
updateAvailable?: boolean;
fromMimeType?: string;
toMimeType?: string;
binaryState?: boolean;
intrusionDetected?: boolean;
powerDetected?: boolean;
motionDetected?: boolean;
audioDetected?: boolean;
occupied?: boolean;
flooded?: boolean;
ultraviolet?: number;
luminance?: number;
position?: Position;
private _storage;
private _log;
private _console;
private _deviceState;
constructor(nativeId: string);
get storage(): Storage;
/**
* @deprecated
*/
get log(): Logger;
get console(): Console;
_lazyLoadDeviceState(): void;
}
export class MixinDeviceBase<T> implements DeviceState {
constructor(mixinDevice: T, mixinDeviceInterfaces: ScryptedInterface[], mixinDeviceState: { [key: string]: any }, mixinProviderNativeId: string);
mixinProviderNativeId: string;
mixinDevice: ScryptedDevice & T;
mixinDeviceInterfaces: ScryptedInterface[];
console: Console;
storage: Storage;
id?: string;
interfaces?: string[];
mixins?: string[];
info?: DeviceInformation;
name?: string;
providedInterfaces?: string[];
providedName?: ScryptedDeviceType;
providedRoom?: string;
providedType?: ScryptedDeviceType;
providerId?: string;
room?: string;
type?: ScryptedDeviceType;
on?: boolean;
brightness?: number;
colorTemperature?: number;
rgb?: ColorRgb;
hsv?: ColorHsv;
running?: boolean;
paused?: boolean;
docked?: boolean;
/**
* Get the ambient temperature in Celsius.
*/
temperature?: number;
/**
* Get the user facing unit of measurement for this thermometer. Note that while this may be Fahrenheit, getTemperatureAmbient will return the temperature in Celsius.
*/
temperatureUnit?: TemperatureUnit;
humidity?: number;
thermostatAvailableModes?: ThermostatMode[];
thermostatMode?: ThermostatMode;
thermostatSetpoint?: number;
thermostatSetpointHigh?: number;
thermostatSetpointLow?: number;
lockState?: LockState;
entryOpen?: boolean;
batteryLevel?: number;
online?: boolean;
updateAvailable?: boolean;
fromMimeType?: string;
toMimeType?: string;
binaryState?: boolean;
intrusionDetected?: boolean;
powerDetected?: boolean;
motionDetected?: boolean;
audioDetected?: boolean;
occupied?: boolean;
flooded?: boolean;
ultraviolet?: number;
luminance?: number;
position?: Position;
export declare class MixinDeviceBase<T> implements DeviceState {
mixinDevice: any;
mixinDeviceInterfaces: ScryptedInterface[];
mixinProviderNativeId: ScryptedNativeId;
nativeId?: string;
id?: string;
interfaces?: string[];
mixins?: string[];
info?: DeviceInformation;
name?: string;
providedInterfaces?: string[];
providedName?: ScryptedDeviceType;
providedRoom?: string;
providedType?: ScryptedDeviceType;
providerId?: string;
room?: string;
type?: ScryptedDeviceType;
on?: boolean;
brightness?: number;
colorTemperature?: number;
rgb?: ColorRgb;
hsv?: ColorHsv;
running?: boolean;
paused?: boolean;
docked?: boolean;
/**
* Get the ambient temperature in Celsius.
*/
temperature?: number;
/**
* Get the user facing unit of measurement for this thermometer. Note that while this may be Fahrenheit, getTemperatureAmbient will return the temperature in Celsius.
*/
temperatureUnit?: TemperatureUnit;
humidity?: number;
thermostatAvailableModes?: ThermostatMode[];
thermostatMode?: ThermostatMode;
thermostatSetpoint?: number;
thermostatSetpointHigh?: number;
thermostatSetpointLow?: number;
lockState?: LockState;
entryOpen?: boolean;
batteryLevel?: number;
online?: boolean;
updateAvailable?: boolean;
fromMimeType?: string;
toMimeType?: string;
binaryState?: boolean;
intrusionDetected?: boolean;
powerDetected?: boolean;
motionDetected?: boolean;
audioDetected?: boolean;
occupied?: boolean;
flooded?: boolean;
ultraviolet?: number;
luminance?: number;
position?: Position;
private _storage;
private _log;
private _console;
private _deviceState;
constructor(mixinDevice: any, mixinDeviceInterfaces: ScryptedInterface[], mixinDeviceState: DeviceState, mixinProviderNativeId: ScryptedNativeId);
get storage(): Storage;
get console(): Console;
_lazyLoadDeviceState(): void;
release(): void;
}
declare const Scrypted: ScryptedStatic;
export default Scrypted;
declare let sdk: ScryptedStatic;
export default sdk;

View File

@@ -1,113 +0,0 @@
const types = require('./types.generated.js');
const stream = require('stream');
class ScryptedDeviceBase {
constructor(nativeId) {
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;
}
_lazyLoadDeviceState() {
if (!this._deviceState) {
if (this.nativeId) {
this._deviceState = deviceManager.getDeviceState(this.nativeId);
}
else {
this._deviceState = deviceManager.getDeviceState();
}
}
}
}
class MixinDeviceBase {
constructor(mixinDevice, mixinDeviceInterfaces, mixinDeviceState, mixinProviderNativeId) {
this.mixinDevice = mixinDevice;
this.mixinDevice = mixinDevice;
this.mixinDeviceInterfaces = mixinDeviceInterfaces;
this._deviceState = mixinDeviceState;
this.mixinProviderNativeId = mixinProviderNativeId;
}
get storage() {
if (!this._storage) {
this._storage = deviceManager.getMixinStorage(this.id, 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;
}
_lazyLoadDeviceState() {
}
release() {
}
}
(function () {
function _createGetState(state) {
return function () {
this._lazyLoadDeviceState();
return this._deviceState[state];
};
}
function _createSetState(state) {
return function (value) {
this._lazyLoadDeviceState();
this._deviceState[state] = value;
};
}
for (var field of Object.values(types.ScryptedInterfaceProperty)) {
Object.defineProperty(ScryptedDeviceBase.prototype, field, {
set: _createSetState(field),
get: _createGetState(field),
});
Object.defineProperty(MixinDeviceBase.prototype, field, {
set: _createSetState(field),
get: _createGetState(field),
});
}
})();
const sdk = {
ScryptedDeviceBase,
MixinDeviceBase,
}
Object.assign(sdk, types);
module.exports = sdk;
module.exports.default = sdk;

View File

@@ -1,17 +0,0 @@
var sdk = require('./index.generated.js');
try {
sdk = Object.assign(sdk, {
log: deviceManager.getDeviceLogger(undefined),
deviceManager,
endpointManager,
mediaManager,
systemManager,
pluginHostAPI,
});
}
catch (e) {
console.error('sdk initialization error, import @scrypted/sdk/types instead', e);
}
module.exports = sdk;
module.exports.default = sdk;

View File

@@ -4,6 +4,7 @@
"description": "",
"main": "index.js",
"scripts": {
"build": "tsc",
"webpack": "webpack-cli --config webpack.config.js",
"test": "echo \"Error: no test specified\" && exit 1"
},
@@ -53,7 +54,7 @@
"webpack-cli": "^3.1.2",
"webpack-inject-plugin": "^1.0.2"
},
"types": "./index.d.ts",
"types": "index.d.ts",
"devDependencies": {
"typescript-json-schema": "^0.50.1"
}

View File

@@ -1,6 +1,10 @@
{
"compilerOptions": {
"module": "commonjs",
"target": "esnext",
"noImplicitAny": true,
"esModuleInterop": true,
"sourceMap": true,
"target": "es5",
}
}
"declaration": true,
},
}

1533
sdk/types.d.ts vendored

File diff suppressed because it is too large Load Diff

View File

@@ -1,584 +0,0 @@
const types = {
}
module.exports = types;
module.exports.default = types;
module.exports.ScryptedDeviceType = {
Builtin: "Builtin",
Camera: "Camera",
Fan: "Fan",
Light: "Light",
Switch: "Switch",
Outlet: "Outlet",
Sensor: "Sensor",
Scene: "Scene",
Program: "Program",
Automation: "Automation",
Vacuum: "Vacuum",
Notifier: "Notifier",
Thermostat: "Thermostat",
Lock: "Lock",
PasswordControl: "PasswordControl",
Display: "Display",
Speaker: "Speaker",
Event: "Event",
Entry: "Entry",
Garage: "Garage",
DeviceProvider: "DeviceProvider",
DataSource: "DataSource",
API: "API",
Doorbell: "Doorbell",
Irrigation: "Irrigation",
Valve: "Valve",
Unknown: "Unknown",
}
module.exports.TemperatureUnit = {
C: "C",
F: "F",
}
module.exports.ThermostatMode = {
Off: "Off",
Cool: "Cool",
Heat: "Heat",
HeatCool: "HeatCool",
Auto: "Auto",
FanOnly: "FanOnly",
Purifier: "Purifier",
Eco: "Eco",
Dry: "Dry",
On: "On",
}
module.exports.LockState = {
Locked: "Locked",
Unlocked: "Unlocked",
Jammed: "Jammed",
}
module.exports.MediaPlayerState = {
Idle: "Idle",
Playing: "Playing",
Paused: "Paused",
Buffering: "Buffering",
}
module.exports.ScryptedInterface = {
ScryptedDevice: "ScryptedDevice",
OnOff: "OnOff",
Brightness: "Brightness",
ColorSettingTemperature: "ColorSettingTemperature",
ColorSettingRgb: "ColorSettingRgb",
ColorSettingHsv: "ColorSettingHsv",
Notifier: "Notifier",
StartStop: "StartStop",
Pause: "Pause",
Dock: "Dock",
TemperatureSetting: "TemperatureSetting",
Thermometer: "Thermometer",
HumiditySensor: "HumiditySensor",
Camera: "Camera",
VideoCamera: "VideoCamera",
Intercom: "Intercom",
Lock: "Lock",
PasswordStore: "PasswordStore",
Authenticator: "Authenticator",
Scene: "Scene",
Entry: "Entry",
EntrySensor: "EntrySensor",
DeviceProvider: "DeviceProvider",
Battery: "Battery",
Refresh: "Refresh",
MediaPlayer: "MediaPlayer",
Online: "Online",
SoftwareUpdate: "SoftwareUpdate",
BufferConverter: "BufferConverter",
Settings: "Settings",
BinarySensor: "BinarySensor",
IntrusionSensor: "IntrusionSensor",
PowerSensor: "PowerSensor",
AudioSensor: "AudioSensor",
MotionSensor: "MotionSensor",
OccupancySensor: "OccupancySensor",
FloodSensor: "FloodSensor",
UltravioletSensor: "UltravioletSensor",
LuminanceSensor: "LuminanceSensor",
PositionSensor: "PositionSensor",
MediaSource: "MediaSource",
MessagingEndpoint: "MessagingEndpoint",
OauthClient: "OauthClient",
MixinProvider: "MixinProvider",
HttpRequestHandler: "HttpRequestHandler",
EngineIOHandler: "EngineIOHandler",
PushHandler: "PushHandler",
Program: "Program",
Scriptable: "Scriptable",
}
module.exports.ScryptedInterfaceDescriptors = {
ScryptedDevice: {
name: "ScryptedDevice",
properties: [
"id",
"interfaces",
"mixins",
"info",
"name",
"providedInterfaces",
"providedName",
"providedRoom",
"providedType",
"providerId",
"room",
"type",
],
methods: [
"listen",
"setName",
"setRoom",
"setType",
]
},
OnOff: {
name: "OnOff",
properties: [
"on",
],
methods: [
"turnOff",
"turnOn",
]
},
Brightness: {
name: "Brightness",
properties: [
"brightness",
],
methods: [
"setBrightness",
]
},
ColorSettingTemperature: {
name: "ColorSettingTemperature",
properties: [
"colorTemperature",
],
methods: [
"getTemperatureMaxK",
"getTemperatureMinK",
"setColorTemperature",
]
},
ColorSettingRgb: {
name: "ColorSettingRgb",
properties: [
"rgb",
],
methods: [
"setRgb",
]
},
ColorSettingHsv: {
name: "ColorSettingHsv",
properties: [
"hsv",
],
methods: [
"setHsv",
]
},
Notifier: {
name: "Notifier",
properties: [
],
methods: [
"sendNotification",
]
},
StartStop: {
name: "StartStop",
properties: [
"running",
],
methods: [
"start",
"stop",
]
},
Pause: {
name: "Pause",
properties: [
"paused",
],
methods: [
"pause",
"resume",
]
},
Dock: {
name: "Dock",
properties: [
"docked",
],
methods: [
"dock",
]
},
TemperatureSetting: {
name: "TemperatureSetting",
properties: [
"thermostatAvailableModes",
"thermostatMode",
"thermostatSetpoint",
"thermostatSetpointHigh",
"thermostatSetpointLow",
],
methods: [
"setThermostatMode",
"setThermostatSetpoint",
"setThermostatSetpointHigh",
"setThermostatSetpointLow",
]
},
Thermometer: {
name: "Thermometer",
properties: [
"temperature",
"temperatureUnit",
],
methods: [
]
},
HumiditySensor: {
name: "HumiditySensor",
properties: [
"humidity",
],
methods: [
]
},
Camera: {
name: "Camera",
properties: [
],
methods: [
"takePicture",
]
},
VideoCamera: {
name: "VideoCamera",
properties: [
],
methods: [
"getVideoStream",
"getVideoStreamOptions",
]
},
Intercom: {
name: "Intercom",
properties: [
],
methods: [
"startIntercom",
"stopIntercom",
]
},
Lock: {
name: "Lock",
properties: [
"lockState",
],
methods: [
"lock",
"unlock",
]
},
PasswordStore: {
name: "PasswordStore",
properties: [
],
methods: [
"addPassword",
"getPasswords",
"removePassword",
]
},
Authenticator: {
name: "Authenticator",
properties: [
],
methods: [
"checkPassword",
]
},
Scene: {
name: "Scene",
properties: [
],
methods: [
"activate",
"deactivate",
"isReversible",
]
},
Entry: {
name: "Entry",
properties: [
],
methods: [
"closeEntry",
"openEntry",
]
},
EntrySensor: {
name: "EntrySensor",
properties: [
"entryOpen",
],
methods: [
]
},
DeviceProvider: {
name: "DeviceProvider",
properties: [
],
methods: [
"discoverDevices",
"getDevice",
]
},
Battery: {
name: "Battery",
properties: [
"batteryLevel",
],
methods: [
]
},
Refresh: {
name: "Refresh",
properties: [
],
methods: [
"getRefreshFrequency",
"refresh",
]
},
MediaPlayer: {
name: "MediaPlayer",
properties: [
],
methods: [
"getMediaStatus",
"load",
"seek",
"skipNext",
"skipPrevious",
]
},
Online: {
name: "Online",
properties: [
"online",
],
methods: [
]
},
SoftwareUpdate: {
name: "SoftwareUpdate",
properties: [
"updateAvailable",
],
methods: [
"checkForUpdate",
"installUpdate",
]
},
BufferConverter: {
name: "BufferConverter",
properties: [
"fromMimeType",
"toMimeType",
],
methods: [
"convert",
]
},
Settings: {
name: "Settings",
properties: [
],
methods: [
"getSettings",
"putSetting",
]
},
BinarySensor: {
name: "BinarySensor",
properties: [
"binaryState",
],
methods: [
]
},
IntrusionSensor: {
name: "IntrusionSensor",
properties: [
"intrusionDetected",
],
methods: [
]
},
PowerSensor: {
name: "PowerSensor",
properties: [
"powerDetected",
],
methods: [
]
},
AudioSensor: {
name: "AudioSensor",
properties: [
"audioDetected",
],
methods: [
]
},
MotionSensor: {
name: "MotionSensor",
properties: [
"motionDetected",
],
methods: [
]
},
OccupancySensor: {
name: "OccupancySensor",
properties: [
"occupied",
],
methods: [
]
},
FloodSensor: {
name: "FloodSensor",
properties: [
"flooded",
],
methods: [
]
},
UltravioletSensor: {
name: "UltravioletSensor",
properties: [
"ultraviolet",
],
methods: [
]
},
LuminanceSensor: {
name: "LuminanceSensor",
properties: [
"luminance",
],
methods: [
]
},
PositionSensor: {
name: "PositionSensor",
properties: [
"position",
],
methods: [
]
},
MediaSource: {
name: "MediaSource",
properties: [
],
methods: [
"getMedia",
]
},
MessagingEndpoint: {
name: "MessagingEndpoint",
properties: [
],
methods: [
]
},
OauthClient: {
name: "OauthClient",
properties: [
],
methods: [
"getOauthUrl",
"onOauthCallback",
]
},
MixinProvider: {
name: "MixinProvider",
properties: [
],
methods: [
"canMixin",
"getMixin",
"releaseMixin",
]
},
HttpRequestHandler: {
name: "HttpRequestHandler",
properties: [
],
methods: [
"onRequest",
]
},
EngineIOHandler: {
name: "EngineIOHandler",
properties: [
],
methods: [
"onConnection",
]
},
PushHandler: {
name: "PushHandler",
properties: [
],
methods: [
"onPush",
]
},
Program: {
name: "Program",
properties: [
],
methods: [
"run",
]
},
Scriptable: {
name: "Scriptable",
properties: [
],
methods: [
"saveScript",
"loadScripts",
"eval",
]
},
}
module.exports.ScryptedInterfaceProperty = {}
Object.values(module.exports.ScryptedInterfaceDescriptors).map(s => s.properties).flat().forEach(s => module.exports.ScryptedInterfaceProperty[s] = s);
module.exports.ScryptedMimeTypes = {
AcceptUrlParameter: 'accept-url',
Url: 'text/x-uri',
InsecureLocalUrl: 'text/x-insecure-local-uri',
LocalUrl: 'text/x-local-uri',
PushEndpoint: 'text/x-push-endpoint',
FFmpegInput: 'x-scrypted/x-ffmpeg-input',
RTCAVOffer: 'x-scrypted/x-rtc-av-offer',
RTCAVAnswer: 'x-scrypted/x-rtc-av-answer',
}

View File

@@ -1,3 +0,0 @@
var types = require('./types.generated.js');
module.exports = types;
module.exports.default = types;