sinricpro 2.12.1 → 3.0.0
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/LICENSE +15 -0
- package/README.md +132 -15
- package/dist/capabilities/AirQualitySensor.js +23 -0
- package/dist/capabilities/AirQualitySensor.js.map +1 -0
- package/dist/capabilities/BrightnessController.js +76 -0
- package/dist/capabilities/BrightnessController.js.map +1 -0
- package/dist/capabilities/CameraController.js +29 -0
- package/dist/capabilities/CameraController.js.map +1 -0
- package/dist/capabilities/ChannelController.js +52 -0
- package/dist/capabilities/ChannelController.js.map +1 -0
- package/dist/capabilities/ColorController.js +53 -0
- package/dist/capabilities/ColorController.js.map +1 -0
- package/dist/capabilities/ColorTemperatureController.js +53 -0
- package/dist/capabilities/ColorTemperatureController.js.map +1 -0
- package/dist/capabilities/ContactSensor.js +23 -0
- package/dist/capabilities/ContactSensor.js.map +1 -0
- package/dist/capabilities/Doorbell.js +23 -0
- package/dist/capabilities/Doorbell.js.map +1 -0
- package/dist/capabilities/EqualizerController.js +103 -0
- package/dist/capabilities/EqualizerController.js.map +1 -0
- package/dist/capabilities/InputController.js +51 -0
- package/dist/capabilities/InputController.js.map +1 -0
- package/dist/capabilities/KeypadController.js +23 -0
- package/dist/capabilities/KeypadController.js.map +1 -0
- package/dist/capabilities/LockController.js +40 -0
- package/dist/capabilities/LockController.js.map +1 -0
- package/dist/capabilities/MediaController.js +40 -0
- package/dist/capabilities/MediaController.js.map +1 -0
- package/dist/capabilities/ModeController.js +51 -0
- package/dist/capabilities/ModeController.js.map +1 -0
- package/dist/capabilities/MotionSensor.js +23 -0
- package/dist/capabilities/MotionSensor.js.map +1 -0
- package/dist/capabilities/MuteController.js +51 -0
- package/dist/capabilities/MuteController.js.map +1 -0
- package/dist/capabilities/OpenCloseController.js +40 -0
- package/dist/capabilities/OpenCloseController.js.map +1 -0
- package/dist/capabilities/PercentageController.js +52 -0
- package/dist/capabilities/PercentageController.js.map +1 -0
- package/dist/capabilities/PowerLevelController.js +52 -0
- package/dist/capabilities/PowerLevelController.js.map +1 -0
- package/dist/capabilities/PowerSensor.js +23 -0
- package/dist/capabilities/PowerSensor.js.map +1 -0
- package/dist/capabilities/PowerStateController.js +53 -0
- package/dist/capabilities/PowerStateController.js.map +1 -0
- package/dist/capabilities/PushNotification.js +23 -0
- package/dist/capabilities/PushNotification.js.map +1 -0
- package/dist/capabilities/RangeController.js +52 -0
- package/dist/capabilities/RangeController.js.map +1 -0
- package/dist/capabilities/SettingController.js +33 -0
- package/dist/capabilities/SettingController.js.map +1 -0
- package/dist/capabilities/StartStopController.js +51 -0
- package/dist/capabilities/StartStopController.js.map +1 -0
- package/dist/capabilities/TemperatureSensor.js +29 -0
- package/dist/capabilities/TemperatureSensor.js.map +1 -0
- package/dist/capabilities/ThermostatController.js +70 -0
- package/dist/capabilities/ThermostatController.js.map +1 -0
- package/dist/capabilities/ToggleController.js +51 -0
- package/dist/capabilities/ToggleController.js.map +1 -0
- package/dist/capabilities/VolumeController.js +74 -0
- package/dist/capabilities/VolumeController.js.map +1 -0
- package/dist/capabilities/index.js +56 -0
- package/dist/capabilities/index.js.map +1 -0
- package/dist/core/EventLimiter.js +50 -0
- package/dist/core/EventLimiter.js.map +1 -0
- package/dist/core/MessageQueue.js +28 -0
- package/dist/core/MessageQueue.js.map +1 -0
- package/dist/core/Signature.js +68 -0
- package/dist/core/Signature.js.map +1 -0
- package/dist/core/SinricPro.js +332 -0
- package/dist/core/SinricPro.js.map +1 -0
- package/dist/core/SinricProDevice.js +82 -0
- package/dist/core/SinricProDevice.js.map +1 -0
- package/dist/core/WebSocketClient.js +156 -0
- package/dist/core/WebSocketClient.js.map +1 -0
- package/dist/core/types.js +30 -0
- package/dist/core/types.js.map +1 -0
- package/dist/devices/SinricProAirQualitySensor.js +29 -0
- package/dist/devices/SinricProAirQualitySensor.js.map +1 -0
- package/dist/devices/SinricProBlinds.js +29 -0
- package/dist/devices/SinricProBlinds.js.map +1 -0
- package/dist/devices/SinricProCamera.js +29 -0
- package/dist/devices/SinricProCamera.js.map +1 -0
- package/dist/devices/SinricProContactSensor.js +28 -0
- package/dist/devices/SinricProContactSensor.js.map +1 -0
- package/dist/devices/SinricProDimSwitch.js +29 -0
- package/dist/devices/SinricProDimSwitch.js.map +1 -0
- package/dist/devices/SinricProDoorbell.js +29 -0
- package/dist/devices/SinricProDoorbell.js.map +1 -0
- package/dist/devices/SinricProFan.js +29 -0
- package/dist/devices/SinricProFan.js.map +1 -0
- package/dist/devices/SinricProFanUS.js +29 -0
- package/dist/devices/SinricProFanUS.js.map +1 -0
- package/dist/devices/SinricProGarageDoor.js +28 -0
- package/dist/devices/SinricProGarageDoor.js.map +1 -0
- package/dist/devices/SinricProLight.js +30 -0
- package/dist/devices/SinricProLight.js.map +1 -0
- package/dist/devices/SinricProLock.js +28 -0
- package/dist/devices/SinricProLock.js.map +1 -0
- package/dist/devices/SinricProMotionSensor.js +28 -0
- package/dist/devices/SinricProMotionSensor.js.map +1 -0
- package/dist/devices/SinricProPowerSensor.js +28 -0
- package/dist/devices/SinricProPowerSensor.js.map +1 -0
- package/dist/devices/SinricProSpeaker.js +33 -0
- package/dist/devices/SinricProSpeaker.js.map +1 -0
- package/dist/devices/SinricProSwitch.js +24 -0
- package/dist/devices/SinricProSwitch.js.map +1 -0
- package/dist/devices/SinricProTV.js +33 -0
- package/dist/devices/SinricProTV.js.map +1 -0
- package/dist/devices/SinricProThermostat.js +30 -0
- package/dist/devices/SinricProThermostat.js.map +1 -0
- package/dist/devices/SinricProWindowAC.js +31 -0
- package/dist/devices/SinricProWindowAC.js.map +1 -0
- package/dist/devices/index.js +44 -0
- package/dist/devices/index.js.map +1 -0
- package/dist/index.js +43 -0
- package/dist/index.js.map +1 -0
- package/dist/utils/SinricProSdkLogger.js +42 -0
- package/dist/utils/SinricProSdkLogger.js.map +1 -0
- package/package.json +78 -38
- package/.github/workflows/npm-publish.yml +0 -32
- package/.nvmrc +0 -1
- package/.prettierrc +0 -5
- package/CHANGELOG.md +0 -45
- package/index.js +0 -1
- package/lib/cbhandler.js +0 -182
- package/lib/contorllers/brightness_controller.js +0 -40
- package/lib/contorllers/camera_stream_controller.js +0 -39
- package/lib/contorllers/color_controller.js +0 -23
- package/lib/contorllers/color_temperature.js +0 -23
- package/lib/contorllers/mode_controller.js +0 -22
- package/lib/contorllers/power_controller.js +0 -53
- package/lib/contorllers/range_value_controller.js +0 -38
- package/lib/contorllers/sensors_controller.js +0 -54
- package/lib/contorllers/speaker_controller.js +0 -51
- package/lib/contorllers/toggle_state_controller.js +0 -21
- package/lib/contorllers/tv_controller.js +0 -93
- package/lib/errors/errors.js +0 -8
- package/lib/events/event_handler.js +0 -108
- package/lib/signature.js +0 -26
- package/lib/sinrcpro.js +0 -129
- package/lib/sinricproudp.js +0 -60
- package/lib/storage.js +0 -31
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* InputController - Adds input selection capability (for TV/AV receivers)
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.InputController = InputController;
|
|
7
|
+
const EventLimiter_1 = require("../core/EventLimiter");
|
|
8
|
+
const types_1 = require("../core/types");
|
|
9
|
+
function InputController(Base) {
|
|
10
|
+
return class extends Base {
|
|
11
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
12
|
+
constructor(...args) {
|
|
13
|
+
super(...args);
|
|
14
|
+
this.selectInputCallback = null;
|
|
15
|
+
this.inputEventLimiter = new EventLimiter_1.EventLimiter(types_1.EVENT_LIMIT_STATE);
|
|
16
|
+
this.registerRequestHandler(this.handleInputRequest.bind(this));
|
|
17
|
+
}
|
|
18
|
+
onSelectInput(callback) {
|
|
19
|
+
this.selectInputCallback = callback;
|
|
20
|
+
}
|
|
21
|
+
async sendInputEvent(input, cause = types_1.PHYSICAL_INTERACTION) {
|
|
22
|
+
if (this.inputEventLimiter.isLimited()) {
|
|
23
|
+
return false;
|
|
24
|
+
}
|
|
25
|
+
return this.sendEvent('selectInput', { input }, cause);
|
|
26
|
+
}
|
|
27
|
+
async handleInputRequest(request) {
|
|
28
|
+
if (request.action !== 'selectInput' || !this.selectInputCallback) {
|
|
29
|
+
return false;
|
|
30
|
+
}
|
|
31
|
+
const input = request.requestValue.input;
|
|
32
|
+
const result = await this.selectInputCallback(this.getDeviceId(), input);
|
|
33
|
+
// Handle both boolean and object return types
|
|
34
|
+
let success;
|
|
35
|
+
if (typeof result === 'boolean') {
|
|
36
|
+
success = result;
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
success = result.success;
|
|
40
|
+
if (result.message) {
|
|
41
|
+
request.errorMessage = result.message;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
if (success) {
|
|
45
|
+
request.responseValue.input = input;
|
|
46
|
+
}
|
|
47
|
+
return success;
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=InputController.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InputController.js","sourceRoot":"","sources":["../../src/capabilities/InputController.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAoBH,0CAiDC;AAlED,uDAAoD;AAEpD,yCAAwE;AAexE,SAAgB,eAAe,CAAyC,IAAO;IAC7E,OAAO,KAAM,SAAQ,IAAI;QAIvB,8DAA8D;QAC9D,YAAY,GAAG,IAAW;YACxB,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;YALT,wBAAmB,GAA+B,IAAI,CAAC;YACvD,sBAAiB,GAAG,IAAI,2BAAY,CAAC,yBAAiB,CAAC,CAAC;YAK9D,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAClE,CAAC;QAED,aAAa,CAAC,QAA6B;YACzC,IAAI,CAAC,mBAAmB,GAAG,QAAQ,CAAC;QACtC,CAAC;QAED,KAAK,CAAC,cAAc,CAAC,KAAa,EAAE,QAAgB,4BAAoB;YACtE,IAAI,IAAI,CAAC,iBAAiB,CAAC,SAAS,EAAE,EAAE,CAAC;gBACvC,OAAO,KAAK,CAAC;YACf,CAAC;YAED,OAAO,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,EAAE,KAAK,EAAE,EAAE,KAAK,CAAC,CAAC;QACzD,CAAC;QAEO,KAAK,CAAC,kBAAkB,CAAC,OAAyB;YACxD,IAAI,OAAO,CAAC,MAAM,KAAK,aAAa,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC;gBAClE,OAAO,KAAK,CAAC;YACf,CAAC;YAED,MAAM,KAAK,GAAG,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC;YACzC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,KAAK,CAAC,CAAC;YAEzE,8CAA8C;YAC9C,IAAI,OAAgB,CAAC;YACrB,IAAI,OAAO,MAAM,KAAK,SAAS,EAAE,CAAC;gBAChC,OAAO,GAAG,MAAM,CAAC;YACnB,CAAC;iBAAM,CAAC;gBACN,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;gBACzB,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;oBACnB,OAAO,CAAC,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC;gBACxC,CAAC;YACH,CAAC;YAED,IAAI,OAAO,EAAE,CAAC;gBACZ,OAAO,CAAC,aAAa,CAAC,KAAK,GAAG,KAAK,CAAC;YACtC,CAAC;YAED,OAAO,OAAO,CAAC;QACjB,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* KeypadController - Adds keypad input capability
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.KeypadController = KeypadController;
|
|
7
|
+
const EventLimiter_1 = require("../core/EventLimiter");
|
|
8
|
+
const types_1 = require("../core/types");
|
|
9
|
+
function KeypadController(Base) {
|
|
10
|
+
return class extends Base {
|
|
11
|
+
constructor() {
|
|
12
|
+
super(...arguments);
|
|
13
|
+
this.keypadEventLimiter = new EventLimiter_1.EventLimiter(types_1.EVENT_LIMIT_STATE);
|
|
14
|
+
}
|
|
15
|
+
async sendKeystrokeEvent(keystroke, cause = types_1.PHYSICAL_INTERACTION) {
|
|
16
|
+
if (this.keypadEventLimiter.isLimited()) {
|
|
17
|
+
return false;
|
|
18
|
+
}
|
|
19
|
+
return this.sendEvent('keystroke', { keystroke }, cause);
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=KeypadController.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"KeypadController.js","sourceRoot":"","sources":["../../src/capabilities/KeypadController.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAaH,4CAeC;AAzBD,uDAAoD;AACpD,yCAAwE;AASxE,SAAgB,gBAAgB,CAAyC,IAAO;IAC9E,OAAO,KAAM,SAAQ,IAAI;QAAlB;;YACG,uBAAkB,GAAG,IAAI,2BAAY,CAAC,yBAAiB,CAAC,CAAC;QAYnE,CAAC;QAVC,KAAK,CAAC,kBAAkB,CACtB,SAAiB,EACjB,QAAgB,4BAAoB;YAEpC,IAAI,IAAI,CAAC,kBAAkB,CAAC,SAAS,EAAE,EAAE,CAAC;gBACxC,OAAO,KAAK,CAAC;YACf,CAAC;YAED,OAAO,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,EAAE,KAAK,CAAC,CAAC;QAC3D,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* LockController - Adds lock/unlock capability
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.LockController = LockController;
|
|
7
|
+
const EventLimiter_1 = require("../core/EventLimiter");
|
|
8
|
+
const types_1 = require("../core/types");
|
|
9
|
+
function LockController(Base) {
|
|
10
|
+
return class extends Base {
|
|
11
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
12
|
+
constructor(...args) {
|
|
13
|
+
super(...args);
|
|
14
|
+
this.lockStateCallback = null;
|
|
15
|
+
this.lockEventLimiter = new EventLimiter_1.EventLimiter(types_1.EVENT_LIMIT_STATE);
|
|
16
|
+
this.registerRequestHandler(this.handleLockRequest.bind(this));
|
|
17
|
+
}
|
|
18
|
+
onLockState(callback) {
|
|
19
|
+
this.lockStateCallback = callback;
|
|
20
|
+
}
|
|
21
|
+
async sendLockStateEvent(lockState, cause = types_1.PHYSICAL_INTERACTION) {
|
|
22
|
+
if (this.lockEventLimiter.isLimited()) {
|
|
23
|
+
return false;
|
|
24
|
+
}
|
|
25
|
+
return this.sendEvent('setLockState', { state: lockState }, cause);
|
|
26
|
+
}
|
|
27
|
+
async handleLockRequest(request) {
|
|
28
|
+
if (request.action !== 'setLockState' || !this.lockStateCallback) {
|
|
29
|
+
return false;
|
|
30
|
+
}
|
|
31
|
+
const lockState = request.requestValue.state;
|
|
32
|
+
const success = await this.lockStateCallback(this.getDeviceId(), lockState);
|
|
33
|
+
if (success) {
|
|
34
|
+
request.responseValue.state = lockState;
|
|
35
|
+
}
|
|
36
|
+
return success;
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=LockController.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LockController.js","sourceRoot":"","sources":["../../src/capabilities/LockController.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAoBH,wCAyCC;AA1DD,uDAAoD;AAEpD,yCAAwE;AAexE,SAAgB,cAAc,CAAyC,IAAO;IAC5E,OAAO,KAAM,SAAQ,IAAI;QAIvB,8DAA8D;QAC9D,YAAY,GAAG,IAAW;YACxB,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;YALT,sBAAiB,GAA6B,IAAI,CAAC;YACnD,qBAAgB,GAAG,IAAI,2BAAY,CAAC,yBAAiB,CAAC,CAAC;YAK7D,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACjE,CAAC;QAED,WAAW,CAAC,QAA2B;YACrC,IAAI,CAAC,iBAAiB,GAAG,QAAQ,CAAC;QACpC,CAAC;QAED,KAAK,CAAC,kBAAkB,CACtB,SAA2C,EAC3C,QAAgB,4BAAoB;YAEpC,IAAI,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,EAAE,CAAC;gBACtC,OAAO,KAAK,CAAC;YACf,CAAC;YAED,OAAO,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,KAAK,CAAC,CAAC;QACrE,CAAC;QAEO,KAAK,CAAC,iBAAiB,CAAC,OAAyB;YACvD,IAAI,OAAO,CAAC,MAAM,KAAK,cAAc,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC;gBACjE,OAAO,KAAK,CAAC;YACf,CAAC;YAED,MAAM,SAAS,GAAG,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC;YAC7C,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,SAAS,CAAC,CAAC;YAE5E,IAAI,OAAO,EAAE,CAAC;gBACZ,OAAO,CAAC,aAAa,CAAC,KAAK,GAAG,SAAS,CAAC;YAC1C,CAAC;YAED,OAAO,OAAO,CAAC;QACjB,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* MediaController - Adds media playback control capability
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.MediaController = MediaController;
|
|
7
|
+
const EventLimiter_1 = require("../core/EventLimiter");
|
|
8
|
+
const types_1 = require("../core/types");
|
|
9
|
+
function MediaController(Base) {
|
|
10
|
+
return class extends Base {
|
|
11
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
12
|
+
constructor(...args) {
|
|
13
|
+
super(...args);
|
|
14
|
+
this.mediaControlCallback = null;
|
|
15
|
+
this.mediaEventLimiter = new EventLimiter_1.EventLimiter(types_1.EVENT_LIMIT_STATE);
|
|
16
|
+
this.registerRequestHandler(this.handleMediaControlRequest.bind(this));
|
|
17
|
+
}
|
|
18
|
+
onMediaControl(callback) {
|
|
19
|
+
this.mediaControlCallback = callback;
|
|
20
|
+
}
|
|
21
|
+
async sendMediaControlEvent(control, cause = types_1.PHYSICAL_INTERACTION) {
|
|
22
|
+
if (this.mediaEventLimiter.isLimited()) {
|
|
23
|
+
return false;
|
|
24
|
+
}
|
|
25
|
+
return this.sendEvent('mediaControl', { control }, cause);
|
|
26
|
+
}
|
|
27
|
+
async handleMediaControlRequest(request) {
|
|
28
|
+
if (request.action !== 'mediaControl' || !this.mediaControlCallback) {
|
|
29
|
+
return false;
|
|
30
|
+
}
|
|
31
|
+
const control = request.requestValue.control;
|
|
32
|
+
const success = await this.mediaControlCallback(this.getDeviceId(), control);
|
|
33
|
+
if (success) {
|
|
34
|
+
request.responseValue.control = control;
|
|
35
|
+
}
|
|
36
|
+
return success;
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=MediaController.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MediaController.js","sourceRoot":"","sources":["../../src/capabilities/MediaController.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAoBH,0CAiDC;AAlED,uDAAoD;AAEpD,yCAAwE;AAexE,SAAgB,eAAe,CAAyC,IAAO;IAC7E,OAAO,KAAM,SAAQ,IAAI;QAIvB,8DAA8D;QAC9D,YAAY,GAAG,IAAW;YACxB,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;YALT,yBAAoB,GAAgC,IAAI,CAAC;YACzD,sBAAiB,GAAG,IAAI,2BAAY,CAAC,yBAAiB,CAAC,CAAC;YAK9D,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACzE,CAAC;QAED,cAAc,CAAC,QAA8B;YAC3C,IAAI,CAAC,oBAAoB,GAAG,QAAQ,CAAC;QACvC,CAAC;QAED,KAAK,CAAC,qBAAqB,CACzB,OAAe,EACf,QAAgB,4BAAoB;YAEpC,IAAI,IAAI,CAAC,iBAAiB,CAAC,SAAS,EAAE,EAAE,CAAC;gBACvC,OAAO,KAAK,CAAC;YACf,CAAC;YAED,OAAO,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE,EAAE,OAAO,EAAE,EAAE,KAAK,CAAC,CAAC;QAC5D,CAAC;QAEO,KAAK,CAAC,yBAAyB,CAAC,OAAyB;YAC/D,IAAI,OAAO,CAAC,MAAM,KAAK,cAAc,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;gBACpE,OAAO,KAAK,CAAC;YACf,CAAC;YAED,MAAM,OAAO,GAAG,OAAO,CAAC,YAAY,CAAC,OAQpB,CAAC;YAClB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,OAAO,CAAC,CAAC;YAE7E,IAAI,OAAO,EAAE,CAAC;gBACZ,OAAO,CAAC,aAAa,CAAC,OAAO,GAAG,OAAO,CAAC;YAC1C,CAAC;YAED,OAAO,OAAO,CAAC;QACjB,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* ModeController - Adds generic mode control capability
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.ModeController = ModeController;
|
|
7
|
+
const EventLimiter_1 = require("../core/EventLimiter");
|
|
8
|
+
const types_1 = require("../core/types");
|
|
9
|
+
function ModeController(Base) {
|
|
10
|
+
return class extends Base {
|
|
11
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
12
|
+
constructor(...args) {
|
|
13
|
+
super(...args);
|
|
14
|
+
this.setModeCallback = null;
|
|
15
|
+
this.modeEventLimiter = new EventLimiter_1.EventLimiter(types_1.EVENT_LIMIT_STATE);
|
|
16
|
+
this.registerRequestHandler(this.handleModeRequest.bind(this));
|
|
17
|
+
}
|
|
18
|
+
onSetMode(callback) {
|
|
19
|
+
this.setModeCallback = callback;
|
|
20
|
+
}
|
|
21
|
+
async sendModeEvent(mode, cause = types_1.PHYSICAL_INTERACTION) {
|
|
22
|
+
if (this.modeEventLimiter.isLimited()) {
|
|
23
|
+
return false;
|
|
24
|
+
}
|
|
25
|
+
return this.sendEvent('setMode', { mode }, cause);
|
|
26
|
+
}
|
|
27
|
+
async handleModeRequest(request) {
|
|
28
|
+
if (request.action !== 'setMode' || !this.setModeCallback) {
|
|
29
|
+
return false;
|
|
30
|
+
}
|
|
31
|
+
const mode = request.requestValue.mode;
|
|
32
|
+
const result = await this.setModeCallback(this.getDeviceId(), mode);
|
|
33
|
+
// Handle both boolean and object return types
|
|
34
|
+
let success;
|
|
35
|
+
if (typeof result === 'boolean') {
|
|
36
|
+
success = result;
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
success = result.success;
|
|
40
|
+
if (result.message) {
|
|
41
|
+
request.errorMessage = result.message;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
if (success) {
|
|
45
|
+
request.responseValue.mode = mode;
|
|
46
|
+
}
|
|
47
|
+
return success;
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=ModeController.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ModeController.js","sourceRoot":"","sources":["../../src/capabilities/ModeController.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAoBH,wCAiDC;AAlED,uDAAoD;AAEpD,yCAAwE;AAexE,SAAgB,cAAc,CAAyC,IAAO;IAC5E,OAAO,KAAM,SAAQ,IAAI;QAIvB,8DAA8D;QAC9D,YAAY,GAAG,IAAW;YACxB,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;YALT,oBAAe,GAA2B,IAAI,CAAC;YAC/C,qBAAgB,GAAG,IAAI,2BAAY,CAAC,yBAAiB,CAAC,CAAC;YAK7D,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACjE,CAAC;QAED,SAAS,CAAC,QAAyB;YACjC,IAAI,CAAC,eAAe,GAAG,QAAQ,CAAC;QAClC,CAAC;QAED,KAAK,CAAC,aAAa,CAAC,IAAY,EAAE,QAAgB,4BAAoB;YACpE,IAAI,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,EAAE,CAAC;gBACtC,OAAO,KAAK,CAAC;YACf,CAAC;YAED,OAAO,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,EAAE,KAAK,CAAC,CAAC;QACpD,CAAC;QAEO,KAAK,CAAC,iBAAiB,CAAC,OAAyB;YACvD,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;gBAC1D,OAAO,KAAK,CAAC;YACf,CAAC;YAED,MAAM,IAAI,GAAG,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC;YACvC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,IAAI,CAAC,CAAC;YAEpE,8CAA8C;YAC9C,IAAI,OAAgB,CAAC;YACrB,IAAI,OAAO,MAAM,KAAK,SAAS,EAAE,CAAC;gBAChC,OAAO,GAAG,MAAM,CAAC;YACnB,CAAC;iBAAM,CAAC;gBACN,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;gBACzB,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;oBACnB,OAAO,CAAC,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC;gBACxC,CAAC;YACH,CAAC;YAED,IAAI,OAAO,EAAE,CAAC;gBACZ,OAAO,CAAC,aAAa,CAAC,IAAI,GAAG,IAAI,CAAC;YACpC,CAAC;YAED,OAAO,OAAO,CAAC;QACjB,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* MotionSensor - Adds motion detection capability
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.MotionSensor = MotionSensor;
|
|
7
|
+
const EventLimiter_1 = require("../core/EventLimiter");
|
|
8
|
+
const types_1 = require("../core/types");
|
|
9
|
+
function MotionSensor(Base) {
|
|
10
|
+
return class extends Base {
|
|
11
|
+
constructor() {
|
|
12
|
+
super(...arguments);
|
|
13
|
+
this.motionEventLimiter = new EventLimiter_1.EventLimiter(types_1.EVENT_LIMIT_SENSOR_VALUE);
|
|
14
|
+
}
|
|
15
|
+
async sendMotionEvent(detected, cause = types_1.PHYSICAL_INTERACTION) {
|
|
16
|
+
if (this.motionEventLimiter.isLimited()) {
|
|
17
|
+
return false;
|
|
18
|
+
}
|
|
19
|
+
return this.sendEvent('motion', { state: detected ? 'detected' : 'notDetected' }, cause);
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=MotionSensor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MotionSensor.js","sourceRoot":"","sources":["../../src/capabilities/MotionSensor.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAaH,oCAeC;AAzBD,uDAAoD;AACpD,yCAA+E;AAS/E,SAAgB,YAAY,CAAyC,IAAO;IAC1E,OAAO,KAAM,SAAQ,IAAI;QAAlB;;YACG,uBAAkB,GAAG,IAAI,2BAAY,CAAC,gCAAwB,CAAC,CAAC;QAY1E,CAAC;QAVC,KAAK,CAAC,eAAe,CACnB,QAAiB,EACjB,QAAgB,4BAAoB;YAEpC,IAAI,IAAI,CAAC,kBAAkB,CAAC,SAAS,EAAE,EAAE,CAAC;gBACxC,OAAO,KAAK,CAAC;YACf,CAAC;YAED,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,aAAa,EAAE,EAAE,KAAK,CAAC,CAAC;QAC3F,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* MuteController - Adds mute/unmute capability
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.MuteController = MuteController;
|
|
7
|
+
const EventLimiter_1 = require("../core/EventLimiter");
|
|
8
|
+
const types_1 = require("../core/types");
|
|
9
|
+
function MuteController(Base) {
|
|
10
|
+
return class extends Base {
|
|
11
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
12
|
+
constructor(...args) {
|
|
13
|
+
super(...args);
|
|
14
|
+
this.muteCallback = null;
|
|
15
|
+
this.muteEventLimiter = new EventLimiter_1.EventLimiter(types_1.EVENT_LIMIT_STATE);
|
|
16
|
+
this.registerRequestHandler(this.handleMuteRequest.bind(this));
|
|
17
|
+
}
|
|
18
|
+
onMute(callback) {
|
|
19
|
+
this.muteCallback = callback;
|
|
20
|
+
}
|
|
21
|
+
async sendMuteEvent(mute, cause = types_1.PHYSICAL_INTERACTION) {
|
|
22
|
+
if (this.muteEventLimiter.isLimited()) {
|
|
23
|
+
return false;
|
|
24
|
+
}
|
|
25
|
+
return this.sendEvent('setMute', { mute }, cause);
|
|
26
|
+
}
|
|
27
|
+
async handleMuteRequest(request) {
|
|
28
|
+
if (request.action !== 'setMute' || !this.muteCallback) {
|
|
29
|
+
return false;
|
|
30
|
+
}
|
|
31
|
+
const mute = request.requestValue.mute;
|
|
32
|
+
const result = await this.muteCallback(this.getDeviceId(), mute);
|
|
33
|
+
// Handle both boolean and object return types
|
|
34
|
+
let success;
|
|
35
|
+
if (typeof result === 'boolean') {
|
|
36
|
+
success = result;
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
success = result.success;
|
|
40
|
+
if (result.message) {
|
|
41
|
+
request.errorMessage = result.message;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
if (success) {
|
|
45
|
+
request.responseValue.mute = mute;
|
|
46
|
+
}
|
|
47
|
+
return success;
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=MuteController.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MuteController.js","sourceRoot":"","sources":["../../src/capabilities/MuteController.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAoBH,wCAiDC;AAlED,uDAAoD;AAEpD,yCAAwE;AAexE,SAAgB,cAAc,CAAyC,IAAO;IAC5E,OAAO,KAAM,SAAQ,IAAI;QAIvB,8DAA8D;QAC9D,YAAY,GAAG,IAAW;YACxB,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;YALT,iBAAY,GAAwB,IAAI,CAAC;YACzC,qBAAgB,GAAG,IAAI,2BAAY,CAAC,yBAAiB,CAAC,CAAC;YAK7D,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACjE,CAAC;QAED,MAAM,CAAC,QAAsB;YAC3B,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAC;QAC/B,CAAC;QAED,KAAK,CAAC,aAAa,CAAC,IAAa,EAAE,QAAgB,4BAAoB;YACrE,IAAI,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,EAAE,CAAC;gBACtC,OAAO,KAAK,CAAC;YACf,CAAC;YAED,OAAO,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,EAAE,KAAK,CAAC,CAAC;QACpD,CAAC;QAEO,KAAK,CAAC,iBAAiB,CAAC,OAAyB;YACvD,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;gBACvD,OAAO,KAAK,CAAC;YACf,CAAC;YAED,MAAM,IAAI,GAAG,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC;YACvC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,IAAI,CAAC,CAAC;YAEjE,8CAA8C;YAC9C,IAAI,OAAgB,CAAC;YACrB,IAAI,OAAO,MAAM,KAAK,SAAS,EAAE,CAAC;gBAChC,OAAO,GAAG,MAAM,CAAC;YACnB,CAAC;iBAAM,CAAC;gBACN,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;gBACzB,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;oBACnB,OAAO,CAAC,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC;gBACxC,CAAC;YACH,CAAC;YAED,IAAI,OAAO,EAAE,CAAC;gBACZ,OAAO,CAAC,aAAa,CAAC,IAAI,GAAG,IAAI,CAAC;YACpC,CAAC;YAED,OAAO,OAAO,CAAC;QACjB,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* OpenCloseController - Adds open/close capability (for blinds, curtains)
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.OpenCloseController = OpenCloseController;
|
|
7
|
+
const EventLimiter_1 = require("../core/EventLimiter");
|
|
8
|
+
const types_1 = require("../core/types");
|
|
9
|
+
function OpenCloseController(Base) {
|
|
10
|
+
return class extends Base {
|
|
11
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
12
|
+
constructor(...args) {
|
|
13
|
+
super(...args);
|
|
14
|
+
this.openCloseCallback = null;
|
|
15
|
+
this.openCloseEventLimiter = new EventLimiter_1.EventLimiter(types_1.EVENT_LIMIT_STATE);
|
|
16
|
+
this.registerRequestHandler(this.handleOpenCloseRequest.bind(this));
|
|
17
|
+
}
|
|
18
|
+
onOpenClose(callback) {
|
|
19
|
+
this.openCloseCallback = callback;
|
|
20
|
+
}
|
|
21
|
+
async sendOpenCloseEvent(position, cause = types_1.PHYSICAL_INTERACTION) {
|
|
22
|
+
if (this.openCloseEventLimiter.isLimited()) {
|
|
23
|
+
return false;
|
|
24
|
+
}
|
|
25
|
+
return this.sendEvent('setRangeValue', { rangeValue: position }, cause);
|
|
26
|
+
}
|
|
27
|
+
async handleOpenCloseRequest(request) {
|
|
28
|
+
if (request.action !== 'setRangeValue' || !this.openCloseCallback) {
|
|
29
|
+
return false;
|
|
30
|
+
}
|
|
31
|
+
const position = request.requestValue.rangeValue;
|
|
32
|
+
const success = await this.openCloseCallback(this.getDeviceId(), position);
|
|
33
|
+
if (success) {
|
|
34
|
+
request.responseValue.rangeValue = position;
|
|
35
|
+
}
|
|
36
|
+
return success;
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=OpenCloseController.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OpenCloseController.js","sourceRoot":"","sources":["../../src/capabilities/OpenCloseController.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAoBH,kDAyCC;AA1DD,uDAAoD;AAEpD,yCAAwE;AAexE,SAAgB,mBAAmB,CAAyC,IAAO;IACjF,OAAO,KAAM,SAAQ,IAAI;QAIvB,8DAA8D;QAC9D,YAAY,GAAG,IAAW;YACxB,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;YALT,sBAAiB,GAA6B,IAAI,CAAC;YACnD,0BAAqB,GAAG,IAAI,2BAAY,CAAC,yBAAiB,CAAC,CAAC;YAKlE,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACtE,CAAC;QAED,WAAW,CAAC,QAA2B;YACrC,IAAI,CAAC,iBAAiB,GAAG,QAAQ,CAAC;QACpC,CAAC;QAED,KAAK,CAAC,kBAAkB,CACtB,QAAgB,EAChB,QAAgB,4BAAoB;YAEpC,IAAI,IAAI,CAAC,qBAAqB,CAAC,SAAS,EAAE,EAAE,CAAC;gBAC3C,OAAO,KAAK,CAAC;YACf,CAAC;YAED,OAAO,IAAI,CAAC,SAAS,CAAC,eAAe,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,KAAK,CAAC,CAAC;QAC1E,CAAC;QAEO,KAAK,CAAC,sBAAsB,CAAC,OAAyB;YAC5D,IAAI,OAAO,CAAC,MAAM,KAAK,eAAe,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC;gBAClE,OAAO,KAAK,CAAC;YACf,CAAC;YAED,MAAM,QAAQ,GAAG,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC;YACjD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,QAAQ,CAAC,CAAC;YAE3E,IAAI,OAAO,EAAE,CAAC;gBACZ,OAAO,CAAC,aAAa,CAAC,UAAU,GAAG,QAAQ,CAAC;YAC9C,CAAC;YAED,OAAO,OAAO,CAAC;QACjB,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* PercentageController - Adds percentage control capability
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.PercentageController = PercentageController;
|
|
7
|
+
const EventLimiter_1 = require("../core/EventLimiter");
|
|
8
|
+
const types_1 = require("../core/types");
|
|
9
|
+
function PercentageController(Base) {
|
|
10
|
+
return class extends Base {
|
|
11
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
12
|
+
constructor(...args) {
|
|
13
|
+
super(...args);
|
|
14
|
+
this.percentageCallback = null;
|
|
15
|
+
this.adjustPercentageCallback = null;
|
|
16
|
+
this.percentageEventLimiter = new EventLimiter_1.EventLimiter(types_1.EVENT_LIMIT_STATE);
|
|
17
|
+
this.registerRequestHandler(this.handlePercentageRequest.bind(this));
|
|
18
|
+
}
|
|
19
|
+
onPercentage(callback) {
|
|
20
|
+
this.percentageCallback = callback;
|
|
21
|
+
}
|
|
22
|
+
onAdjustPercentage(callback) {
|
|
23
|
+
this.adjustPercentageCallback = callback;
|
|
24
|
+
}
|
|
25
|
+
async sendPercentageEvent(percentage, cause = types_1.PHYSICAL_INTERACTION) {
|
|
26
|
+
if (this.percentageEventLimiter.isLimited()) {
|
|
27
|
+
return false;
|
|
28
|
+
}
|
|
29
|
+
return this.sendEvent('setPercentage', { percentage }, cause);
|
|
30
|
+
}
|
|
31
|
+
async handlePercentageRequest(request) {
|
|
32
|
+
if (request.action === 'setPercentage' && this.percentageCallback) {
|
|
33
|
+
const percentage = request.requestValue.percentage;
|
|
34
|
+
const success = await this.percentageCallback(this.getDeviceId(), percentage);
|
|
35
|
+
if (success) {
|
|
36
|
+
request.responseValue.percentage = percentage;
|
|
37
|
+
}
|
|
38
|
+
return success;
|
|
39
|
+
}
|
|
40
|
+
if (request.action === 'adjustPercentage' && this.adjustPercentageCallback) {
|
|
41
|
+
const percentageDelta = request.requestValue.percentageDelta;
|
|
42
|
+
const success = await this.adjustPercentageCallback(this.getDeviceId(), percentageDelta);
|
|
43
|
+
if (success) {
|
|
44
|
+
request.responseValue.percentage = percentageDelta;
|
|
45
|
+
}
|
|
46
|
+
return success;
|
|
47
|
+
}
|
|
48
|
+
return false;
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=PercentageController.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PercentageController.js","sourceRoot":"","sources":["../../src/capabilities/PercentageController.ts"],"names":[],"mappings":";AAAA;;GAEG;;AA0BH,oDAyDC;AAhFD,uDAAoD;AAEpD,yCAAwE;AAqBxE,SAAgB,oBAAoB,CAAyC,IAAO;IAClF,OAAO,KAAM,SAAQ,IAAI;QAKvB,8DAA8D;QAC9D,YAAY,GAAG,IAAW;YACxB,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;YANT,uBAAkB,GAA8B,IAAI,CAAC;YACrD,6BAAwB,GAAoC,IAAI,CAAC;YACjE,2BAAsB,GAAG,IAAI,2BAAY,CAAC,yBAAiB,CAAC,CAAC;YAKnE,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACvE,CAAC;QAED,YAAY,CAAC,QAA4B;YACvC,IAAI,CAAC,kBAAkB,GAAG,QAAQ,CAAC;QACrC,CAAC;QAED,kBAAkB,CAAC,QAAkC;YACnD,IAAI,CAAC,wBAAwB,GAAG,QAAQ,CAAC;QAC3C,CAAC;QAED,KAAK,CAAC,mBAAmB,CACvB,UAAkB,EAClB,QAAgB,4BAAoB;YAEpC,IAAI,IAAI,CAAC,sBAAsB,CAAC,SAAS,EAAE,EAAE,CAAC;gBAC5C,OAAO,KAAK,CAAC;YACf,CAAC;YAED,OAAO,IAAI,CAAC,SAAS,CAAC,eAAe,EAAE,EAAE,UAAU,EAAE,EAAE,KAAK,CAAC,CAAC;QAChE,CAAC;QAEO,KAAK,CAAC,uBAAuB,CAAC,OAAyB;YAC7D,IAAI,OAAO,CAAC,MAAM,KAAK,eAAe,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;gBAClE,MAAM,UAAU,GAAG,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC;gBACnD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,UAAU,CAAC,CAAC;gBAE9E,IAAI,OAAO,EAAE,CAAC;oBACZ,OAAO,CAAC,aAAa,CAAC,UAAU,GAAG,UAAU,CAAC;gBAChD,CAAC;gBAED,OAAO,OAAO,CAAC;YACjB,CAAC;YAED,IAAI,OAAO,CAAC,MAAM,KAAK,kBAAkB,IAAI,IAAI,CAAC,wBAAwB,EAAE,CAAC;gBAC3E,MAAM,eAAe,GAAG,OAAO,CAAC,YAAY,CAAC,eAAe,CAAC;gBAC7D,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,eAAe,CAAC,CAAC;gBAEzF,IAAI,OAAO,EAAE,CAAC;oBACZ,OAAO,CAAC,aAAa,CAAC,UAAU,GAAG,eAAe,CAAC;gBACrD,CAAC;gBAED,OAAO,OAAO,CAAC;YACjB,CAAC;YAED,OAAO,KAAK,CAAC;QACf,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* PowerLevelController - Adds power level control capability
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.PowerLevelController = PowerLevelController;
|
|
7
|
+
const EventLimiter_1 = require("../core/EventLimiter");
|
|
8
|
+
const types_1 = require("../core/types");
|
|
9
|
+
function PowerLevelController(Base) {
|
|
10
|
+
return class extends Base {
|
|
11
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
12
|
+
constructor(...args) {
|
|
13
|
+
super(...args);
|
|
14
|
+
this.powerLevelCallback = null;
|
|
15
|
+
this.adjustPowerLevelCallback = null;
|
|
16
|
+
this.powerLevelEventLimiter = new EventLimiter_1.EventLimiter(types_1.EVENT_LIMIT_STATE);
|
|
17
|
+
this.registerRequestHandler(this.handlePowerLevelRequest.bind(this));
|
|
18
|
+
}
|
|
19
|
+
onPowerLevel(callback) {
|
|
20
|
+
this.powerLevelCallback = callback;
|
|
21
|
+
}
|
|
22
|
+
onAdjustPowerLevel(callback) {
|
|
23
|
+
this.adjustPowerLevelCallback = callback;
|
|
24
|
+
}
|
|
25
|
+
async sendPowerLevelEvent(powerLevel, cause = types_1.PHYSICAL_INTERACTION) {
|
|
26
|
+
if (this.powerLevelEventLimiter.isLimited()) {
|
|
27
|
+
return false;
|
|
28
|
+
}
|
|
29
|
+
return this.sendEvent('setPowerLevel', { powerLevel }, cause);
|
|
30
|
+
}
|
|
31
|
+
async handlePowerLevelRequest(request) {
|
|
32
|
+
if (request.action === 'setPowerLevel' && this.powerLevelCallback) {
|
|
33
|
+
const powerLevel = request.requestValue.powerLevel;
|
|
34
|
+
const success = await this.powerLevelCallback(this.getDeviceId(), powerLevel);
|
|
35
|
+
if (success) {
|
|
36
|
+
request.responseValue.powerLevel = powerLevel;
|
|
37
|
+
}
|
|
38
|
+
return success;
|
|
39
|
+
}
|
|
40
|
+
if (request.action === 'adjustPowerLevel' && this.adjustPowerLevelCallback) {
|
|
41
|
+
const powerLevelDelta = request.requestValue.powerLevelDelta;
|
|
42
|
+
const success = await this.adjustPowerLevelCallback(this.getDeviceId(), powerLevelDelta);
|
|
43
|
+
if (success) {
|
|
44
|
+
request.responseValue.powerLevel = powerLevelDelta;
|
|
45
|
+
}
|
|
46
|
+
return success;
|
|
47
|
+
}
|
|
48
|
+
return false;
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=PowerLevelController.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PowerLevelController.js","sourceRoot":"","sources":["../../src/capabilities/PowerLevelController.ts"],"names":[],"mappings":";AAAA;;GAEG;;AA0BH,oDAyDC;AAhFD,uDAAoD;AAEpD,yCAAwE;AAqBxE,SAAgB,oBAAoB,CAAyC,IAAO;IAClF,OAAO,KAAM,SAAQ,IAAI;QAKvB,8DAA8D;QAC9D,YAAY,GAAG,IAAW;YACxB,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;YANT,uBAAkB,GAA8B,IAAI,CAAC;YACrD,6BAAwB,GAAoC,IAAI,CAAC;YACjE,2BAAsB,GAAG,IAAI,2BAAY,CAAC,yBAAiB,CAAC,CAAC;YAKnE,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACvE,CAAC;QAED,YAAY,CAAC,QAA4B;YACvC,IAAI,CAAC,kBAAkB,GAAG,QAAQ,CAAC;QACrC,CAAC;QAED,kBAAkB,CAAC,QAAkC;YACnD,IAAI,CAAC,wBAAwB,GAAG,QAAQ,CAAC;QAC3C,CAAC;QAED,KAAK,CAAC,mBAAmB,CACvB,UAAkB,EAClB,QAAgB,4BAAoB;YAEpC,IAAI,IAAI,CAAC,sBAAsB,CAAC,SAAS,EAAE,EAAE,CAAC;gBAC5C,OAAO,KAAK,CAAC;YACf,CAAC;YAED,OAAO,IAAI,CAAC,SAAS,CAAC,eAAe,EAAE,EAAE,UAAU,EAAE,EAAE,KAAK,CAAC,CAAC;QAChE,CAAC;QAEO,KAAK,CAAC,uBAAuB,CAAC,OAAyB;YAC7D,IAAI,OAAO,CAAC,MAAM,KAAK,eAAe,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;gBAClE,MAAM,UAAU,GAAG,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC;gBACnD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,UAAU,CAAC,CAAC;gBAE9E,IAAI,OAAO,EAAE,CAAC;oBACZ,OAAO,CAAC,aAAa,CAAC,UAAU,GAAG,UAAU,CAAC;gBAChD,CAAC;gBAED,OAAO,OAAO,CAAC;YACjB,CAAC;YAED,IAAI,OAAO,CAAC,MAAM,KAAK,kBAAkB,IAAI,IAAI,CAAC,wBAAwB,EAAE,CAAC;gBAC3E,MAAM,eAAe,GAAG,OAAO,CAAC,YAAY,CAAC,eAAe,CAAC;gBAC7D,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,eAAe,CAAC,CAAC;gBAEzF,IAAI,OAAO,EAAE,CAAC;oBACZ,OAAO,CAAC,aAAa,CAAC,UAAU,GAAG,eAAe,CAAC;gBACrD,CAAC;gBAED,OAAO,OAAO,CAAC;YACjB,CAAC;YAED,OAAO,KAAK,CAAC;QACf,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* PowerSensor - Adds power consumption monitoring capability
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.PowerSensor = PowerSensor;
|
|
7
|
+
const EventLimiter_1 = require("../core/EventLimiter");
|
|
8
|
+
const types_1 = require("../core/types");
|
|
9
|
+
function PowerSensor(Base) {
|
|
10
|
+
return class extends Base {
|
|
11
|
+
constructor() {
|
|
12
|
+
super(...arguments);
|
|
13
|
+
this.powerSensorEventLimiter = new EventLimiter_1.EventLimiter(types_1.EVENT_LIMIT_SENSOR_VALUE);
|
|
14
|
+
}
|
|
15
|
+
async sendPowerSensorEvent(value, cause = types_1.PERIODIC_POLL) {
|
|
16
|
+
if (this.powerSensorEventLimiter.isLimited()) {
|
|
17
|
+
return false;
|
|
18
|
+
}
|
|
19
|
+
return this.sendEvent('currentPowerConsumption', value, cause);
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=PowerSensor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PowerSensor.js","sourceRoot":"","sources":["../../src/capabilities/PowerSensor.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAqBH,kCAYC;AA9BD,uDAAoD;AACpD,yCAAwE;AAiBxE,SAAgB,WAAW,CAAyC,IAAO;IACzE,OAAO,KAAM,SAAQ,IAAI;QAAlB;;YACG,4BAAuB,GAAG,IAAI,2BAAY,CAAC,gCAAwB,CAAC,CAAC;QAS/E,CAAC;QAPC,KAAK,CAAC,oBAAoB,CAAC,KAAiB,EAAE,QAAgB,qBAAa;YACzE,IAAI,IAAI,CAAC,uBAAuB,CAAC,SAAS,EAAE,EAAE,CAAC;gBAC7C,OAAO,KAAK,CAAC;YACf,CAAC;YAED,OAAO,IAAI,CAAC,SAAS,CAAC,yBAAyB,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;QACjE,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* PowerStateController - Adds on/off capability to devices
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.PowerStateController = PowerStateController;
|
|
7
|
+
const EventLimiter_1 = require("../core/EventLimiter");
|
|
8
|
+
const types_1 = require("../core/types");
|
|
9
|
+
function PowerStateController(Base) {
|
|
10
|
+
return class extends Base {
|
|
11
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
12
|
+
constructor(...args) {
|
|
13
|
+
super(...args);
|
|
14
|
+
this.powerStateCallback = null;
|
|
15
|
+
this.powerStateEventLimiter = new EventLimiter_1.EventLimiter(types_1.EVENT_LIMIT_STATE);
|
|
16
|
+
this.registerRequestHandler(this.handlePowerStateRequest.bind(this));
|
|
17
|
+
}
|
|
18
|
+
onPowerState(callback) {
|
|
19
|
+
this.powerStateCallback = callback;
|
|
20
|
+
}
|
|
21
|
+
async sendPowerStateEvent(state, cause = types_1.PHYSICAL_INTERACTION) {
|
|
22
|
+
if (this.powerStateEventLimiter.isLimited()) {
|
|
23
|
+
return false;
|
|
24
|
+
}
|
|
25
|
+
return this.sendEvent('setPowerState', {
|
|
26
|
+
state: state ? 'On' : 'Off',
|
|
27
|
+
}, cause);
|
|
28
|
+
}
|
|
29
|
+
async handlePowerStateRequest(request) {
|
|
30
|
+
if (request.action !== 'setPowerState' || !this.powerStateCallback) {
|
|
31
|
+
return false;
|
|
32
|
+
}
|
|
33
|
+
const state = request.requestValue.state === 'On';
|
|
34
|
+
const result = await this.powerStateCallback(this.getDeviceId(), state);
|
|
35
|
+
// Handle both boolean and object return types
|
|
36
|
+
let success;
|
|
37
|
+
if (typeof result === 'boolean') {
|
|
38
|
+
success = result;
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
success = result.success;
|
|
42
|
+
if (result.message) {
|
|
43
|
+
request.errorMessage = result.message;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
if (success) {
|
|
47
|
+
request.responseValue.state = state ? 'On' : 'Off';
|
|
48
|
+
}
|
|
49
|
+
return success;
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=PowerStateController.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PowerStateController.js","sourceRoot":"","sources":["../../src/capabilities/PowerStateController.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAeH,oDA0DC;AAtED,uDAAoD;AAEpD,yCAAwE;AAUxE,SAAgB,oBAAoB,CAAyC,IAAO;IAClF,OAAO,KAAM,SAAQ,IAAI;QAIvB,8DAA8D;QAC9D,YAAY,GAAG,IAAW;YACxB,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;YALT,uBAAkB,GAA8B,IAAI,CAAC;YACrD,2BAAsB,GAAG,IAAI,2BAAY,CAAC,yBAAiB,CAAC,CAAC;YAKnE,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACvE,CAAC;QAED,YAAY,CAAC,QAA4B;YACvC,IAAI,CAAC,kBAAkB,GAAG,QAAQ,CAAC;QACrC,CAAC;QAED,KAAK,CAAC,mBAAmB,CACvB,KAAc,EACd,QAAgB,4BAAoB;YAEpC,IAAI,IAAI,CAAC,sBAAsB,CAAC,SAAS,EAAE,EAAE,CAAC;gBAC5C,OAAO,KAAK,CAAC;YACf,CAAC;YAED,OAAO,IAAI,CAAC,SAAS,CACnB,eAAe,EACf;gBACE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK;aAC5B,EACD,KAAK,CACN,CAAC;QACJ,CAAC;QAEO,KAAK,CAAC,uBAAuB,CAAC,OAAyB;YAC7D,IAAI,OAAO,CAAC,MAAM,KAAK,eAAe,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC;gBACnE,OAAO,KAAK,CAAC;YACf,CAAC;YAED,MAAM,KAAK,GAAG,OAAO,CAAC,YAAY,CAAC,KAAK,KAAK,IAAI,CAAC;YAClD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,KAAK,CAAC,CAAC;YAExE,8CAA8C;YAC9C,IAAI,OAAgB,CAAC;YACrB,IAAI,OAAO,MAAM,KAAK,SAAS,EAAE,CAAC;gBAChC,OAAO,GAAG,MAAM,CAAC;YACnB,CAAC;iBAAM,CAAC;gBACN,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;gBACzB,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;oBACnB,OAAO,CAAC,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC;gBACxC,CAAC;YACH,CAAC;YAED,IAAI,OAAO,EAAE,CAAC;gBACZ,OAAO,CAAC,aAAa,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;YACrD,CAAC;YAED,OAAO,OAAO,CAAC;QACjB,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* PushNotification - Adds push notification capability
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.PushNotification = PushNotification;
|
|
7
|
+
const EventLimiter_1 = require("../core/EventLimiter");
|
|
8
|
+
const types_1 = require("../core/types");
|
|
9
|
+
function PushNotification(Base) {
|
|
10
|
+
return class extends Base {
|
|
11
|
+
constructor() {
|
|
12
|
+
super(...arguments);
|
|
13
|
+
this.pushNotificationEventLimiter = new EventLimiter_1.EventLimiter(types_1.EVENT_LIMIT_STATE);
|
|
14
|
+
}
|
|
15
|
+
async sendPushNotification(notification, cause = types_1.PHYSICAL_INTERACTION) {
|
|
16
|
+
if (this.pushNotificationEventLimiter.isLimited()) {
|
|
17
|
+
return false;
|
|
18
|
+
}
|
|
19
|
+
return this.sendEvent('pushNotification', { notification }, cause);
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=PushNotification.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PushNotification.js","sourceRoot":"","sources":["../../src/capabilities/PushNotification.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAaH,4CAeC;AAzBD,uDAAoD;AACpD,yCAAwE;AASxE,SAAgB,gBAAgB,CAAyC,IAAO;IAC9E,OAAO,KAAM,SAAQ,IAAI;QAAlB;;YACG,iCAA4B,GAAG,IAAI,2BAAY,CAAC,yBAAiB,CAAC,CAAC;QAY7E,CAAC;QAVC,KAAK,CAAC,oBAAoB,CACxB,YAAoB,EACpB,QAAgB,4BAAoB;YAEpC,IAAI,IAAI,CAAC,4BAA4B,CAAC,SAAS,EAAE,EAAE,CAAC;gBAClD,OAAO,KAAK,CAAC;YACf,CAAC;YAED,OAAO,IAAI,CAAC,SAAS,CAAC,kBAAkB,EAAE,EAAE,YAAY,EAAE,EAAE,KAAK,CAAC,CAAC;QACrE,CAAC;KACF,CAAC;AACJ,CAAC"}
|