sinricpro 2.12.1 → 4.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.
Files changed (142) hide show
  1. package/LICENSE +15 -0
  2. package/README.md +132 -15
  3. package/dist/capabilities/AirQualitySensor.js +23 -0
  4. package/dist/capabilities/AirQualitySensor.js.map +1 -0
  5. package/dist/capabilities/BrightnessController.js +76 -0
  6. package/dist/capabilities/BrightnessController.js.map +1 -0
  7. package/dist/capabilities/CameraController.js +29 -0
  8. package/dist/capabilities/CameraController.js.map +1 -0
  9. package/dist/capabilities/ChannelController.js +52 -0
  10. package/dist/capabilities/ChannelController.js.map +1 -0
  11. package/dist/capabilities/ColorController.js +53 -0
  12. package/dist/capabilities/ColorController.js.map +1 -0
  13. package/dist/capabilities/ColorTemperatureController.js +53 -0
  14. package/dist/capabilities/ColorTemperatureController.js.map +1 -0
  15. package/dist/capabilities/ContactSensor.js +23 -0
  16. package/dist/capabilities/ContactSensor.js.map +1 -0
  17. package/dist/capabilities/Doorbell.js +23 -0
  18. package/dist/capabilities/Doorbell.js.map +1 -0
  19. package/dist/capabilities/EqualizerController.js +103 -0
  20. package/dist/capabilities/EqualizerController.js.map +1 -0
  21. package/dist/capabilities/InputController.js +51 -0
  22. package/dist/capabilities/InputController.js.map +1 -0
  23. package/dist/capabilities/KeypadController.js +23 -0
  24. package/dist/capabilities/KeypadController.js.map +1 -0
  25. package/dist/capabilities/LockController.js +40 -0
  26. package/dist/capabilities/LockController.js.map +1 -0
  27. package/dist/capabilities/MediaController.js +40 -0
  28. package/dist/capabilities/MediaController.js.map +1 -0
  29. package/dist/capabilities/ModeController.js +51 -0
  30. package/dist/capabilities/ModeController.js.map +1 -0
  31. package/dist/capabilities/MotionSensor.js +23 -0
  32. package/dist/capabilities/MotionSensor.js.map +1 -0
  33. package/dist/capabilities/MuteController.js +51 -0
  34. package/dist/capabilities/MuteController.js.map +1 -0
  35. package/dist/capabilities/OpenCloseController.js +40 -0
  36. package/dist/capabilities/OpenCloseController.js.map +1 -0
  37. package/dist/capabilities/PercentageController.js +52 -0
  38. package/dist/capabilities/PercentageController.js.map +1 -0
  39. package/dist/capabilities/PowerLevelController.js +52 -0
  40. package/dist/capabilities/PowerLevelController.js.map +1 -0
  41. package/dist/capabilities/PowerSensor.js +23 -0
  42. package/dist/capabilities/PowerSensor.js.map +1 -0
  43. package/dist/capabilities/PowerStateController.js +53 -0
  44. package/dist/capabilities/PowerStateController.js.map +1 -0
  45. package/dist/capabilities/PushNotification.js +23 -0
  46. package/dist/capabilities/PushNotification.js.map +1 -0
  47. package/dist/capabilities/RangeController.js +52 -0
  48. package/dist/capabilities/RangeController.js.map +1 -0
  49. package/dist/capabilities/SettingController.js +33 -0
  50. package/dist/capabilities/SettingController.js.map +1 -0
  51. package/dist/capabilities/StartStopController.js +51 -0
  52. package/dist/capabilities/StartStopController.js.map +1 -0
  53. package/dist/capabilities/TemperatureSensor.js +29 -0
  54. package/dist/capabilities/TemperatureSensor.js.map +1 -0
  55. package/dist/capabilities/ThermostatController.js +70 -0
  56. package/dist/capabilities/ThermostatController.js.map +1 -0
  57. package/dist/capabilities/ToggleController.js +51 -0
  58. package/dist/capabilities/ToggleController.js.map +1 -0
  59. package/dist/capabilities/VolumeController.js +74 -0
  60. package/dist/capabilities/VolumeController.js.map +1 -0
  61. package/dist/capabilities/index.js +56 -0
  62. package/dist/capabilities/index.js.map +1 -0
  63. package/dist/core/EventLimiter.js +50 -0
  64. package/dist/core/EventLimiter.js.map +1 -0
  65. package/dist/core/MessageQueue.js +28 -0
  66. package/dist/core/MessageQueue.js.map +1 -0
  67. package/dist/core/Signature.js +68 -0
  68. package/dist/core/Signature.js.map +1 -0
  69. package/dist/core/SinricPro.js +332 -0
  70. package/dist/core/SinricPro.js.map +1 -0
  71. package/dist/core/SinricProDevice.js +82 -0
  72. package/dist/core/SinricProDevice.js.map +1 -0
  73. package/dist/core/WebSocketClient.js +156 -0
  74. package/dist/core/WebSocketClient.js.map +1 -0
  75. package/dist/core/types.js +30 -0
  76. package/dist/core/types.js.map +1 -0
  77. package/dist/devices/SinricProAirQualitySensor.js +29 -0
  78. package/dist/devices/SinricProAirQualitySensor.js.map +1 -0
  79. package/dist/devices/SinricProBlinds.js +29 -0
  80. package/dist/devices/SinricProBlinds.js.map +1 -0
  81. package/dist/devices/SinricProCamera.js +29 -0
  82. package/dist/devices/SinricProCamera.js.map +1 -0
  83. package/dist/devices/SinricProContactSensor.js +28 -0
  84. package/dist/devices/SinricProContactSensor.js.map +1 -0
  85. package/dist/devices/SinricProDimSwitch.js +29 -0
  86. package/dist/devices/SinricProDimSwitch.js.map +1 -0
  87. package/dist/devices/SinricProDoorbell.js +29 -0
  88. package/dist/devices/SinricProDoorbell.js.map +1 -0
  89. package/dist/devices/SinricProFan.js +29 -0
  90. package/dist/devices/SinricProFan.js.map +1 -0
  91. package/dist/devices/SinricProFanUS.js +29 -0
  92. package/dist/devices/SinricProFanUS.js.map +1 -0
  93. package/dist/devices/SinricProGarageDoor.js +28 -0
  94. package/dist/devices/SinricProGarageDoor.js.map +1 -0
  95. package/dist/devices/SinricProLight.js +30 -0
  96. package/dist/devices/SinricProLight.js.map +1 -0
  97. package/dist/devices/SinricProLock.js +28 -0
  98. package/dist/devices/SinricProLock.js.map +1 -0
  99. package/dist/devices/SinricProMotionSensor.js +28 -0
  100. package/dist/devices/SinricProMotionSensor.js.map +1 -0
  101. package/dist/devices/SinricProPowerSensor.js +28 -0
  102. package/dist/devices/SinricProPowerSensor.js.map +1 -0
  103. package/dist/devices/SinricProSpeaker.js +33 -0
  104. package/dist/devices/SinricProSpeaker.js.map +1 -0
  105. package/dist/devices/SinricProSwitch.js +24 -0
  106. package/dist/devices/SinricProSwitch.js.map +1 -0
  107. package/dist/devices/SinricProTV.js +33 -0
  108. package/dist/devices/SinricProTV.js.map +1 -0
  109. package/dist/devices/SinricProThermostat.js +30 -0
  110. package/dist/devices/SinricProThermostat.js.map +1 -0
  111. package/dist/devices/SinricProWindowAC.js +31 -0
  112. package/dist/devices/SinricProWindowAC.js.map +1 -0
  113. package/dist/devices/index.js +44 -0
  114. package/dist/devices/index.js.map +1 -0
  115. package/dist/index.js +43 -0
  116. package/dist/index.js.map +1 -0
  117. package/dist/utils/SinricProSdkLogger.js +42 -0
  118. package/dist/utils/SinricProSdkLogger.js.map +1 -0
  119. package/package.json +78 -38
  120. package/.github/workflows/npm-publish.yml +0 -32
  121. package/.nvmrc +0 -1
  122. package/.prettierrc +0 -5
  123. package/CHANGELOG.md +0 -45
  124. package/index.js +0 -1
  125. package/lib/cbhandler.js +0 -182
  126. package/lib/contorllers/brightness_controller.js +0 -40
  127. package/lib/contorllers/camera_stream_controller.js +0 -39
  128. package/lib/contorllers/color_controller.js +0 -23
  129. package/lib/contorllers/color_temperature.js +0 -23
  130. package/lib/contorllers/mode_controller.js +0 -22
  131. package/lib/contorllers/power_controller.js +0 -53
  132. package/lib/contorllers/range_value_controller.js +0 -38
  133. package/lib/contorllers/sensors_controller.js +0 -54
  134. package/lib/contorllers/speaker_controller.js +0 -51
  135. package/lib/contorllers/toggle_state_controller.js +0 -21
  136. package/lib/contorllers/tv_controller.js +0 -93
  137. package/lib/errors/errors.js +0 -8
  138. package/lib/events/event_handler.js +0 -108
  139. package/lib/signature.js +0 -26
  140. package/lib/sinrcpro.js +0 -129
  141. package/lib/sinricproudp.js +0 -60
  142. package/lib/storage.js +0 -31
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ /**
3
+ * RangeController - Adds generic range control capability
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.RangeController = RangeController;
7
+ const EventLimiter_1 = require("../core/EventLimiter");
8
+ const types_1 = require("../core/types");
9
+ function RangeController(Base) {
10
+ return class extends Base {
11
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
12
+ constructor(...args) {
13
+ super(...args);
14
+ this.rangeValueCallback = null;
15
+ this.adjustRangeValueCallback = null;
16
+ this.rangeEventLimiter = new EventLimiter_1.EventLimiter(types_1.EVENT_LIMIT_STATE);
17
+ this.registerRequestHandler(this.handleRangeRequest.bind(this));
18
+ }
19
+ onRangeValue(callback) {
20
+ this.rangeValueCallback = callback;
21
+ }
22
+ onAdjustRangeValue(callback) {
23
+ this.adjustRangeValueCallback = callback;
24
+ }
25
+ async sendRangeValueEvent(rangeValue, cause = types_1.PHYSICAL_INTERACTION) {
26
+ if (this.rangeEventLimiter.isLimited()) {
27
+ return false;
28
+ }
29
+ return this.sendEvent('setRangeValue', { rangeValue }, cause);
30
+ }
31
+ async handleRangeRequest(request) {
32
+ if (request.action === 'setRangeValue' && this.rangeValueCallback) {
33
+ const rangeValue = request.requestValue.rangeValue;
34
+ const success = await this.rangeValueCallback(this.getDeviceId(), rangeValue);
35
+ if (success) {
36
+ request.responseValue.rangeValue = rangeValue;
37
+ }
38
+ return success;
39
+ }
40
+ if (request.action === 'adjustRangeValue' && this.adjustRangeValueCallback) {
41
+ const rangeValueDelta = request.requestValue.rangeValueDelta;
42
+ const success = await this.adjustRangeValueCallback(this.getDeviceId(), rangeValueDelta);
43
+ if (success) {
44
+ request.responseValue.rangeValue = rangeValueDelta;
45
+ }
46
+ return success;
47
+ }
48
+ return false;
49
+ }
50
+ };
51
+ }
52
+ //# sourceMappingURL=RangeController.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RangeController.js","sourceRoot":"","sources":["../../src/capabilities/RangeController.ts"],"names":[],"mappings":";AAAA;;GAEG;;AA0BH,0CAyDC;AAhFD,uDAAoD;AAEpD,yCAAwE;AAqBxE,SAAgB,eAAe,CAAyC,IAAO;IAC7E,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,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,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,iBAAiB,CAAC,SAAS,EAAE,EAAE,CAAC;gBACvC,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,kBAAkB,CAAC,OAAyB;YACxD,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,33 @@
1
+ "use strict";
2
+ /**
3
+ * SettingController - Adds settings management capability
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.SettingController = SettingController;
7
+ function SettingController(Base) {
8
+ return class extends Base {
9
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
10
+ constructor(...args) {
11
+ super(...args);
12
+ this.settingCallback = null;
13
+ this.registerRequestHandler(this.handleSettingRequest.bind(this));
14
+ }
15
+ onSetting(callback) {
16
+ this.settingCallback = callback;
17
+ }
18
+ async handleSettingRequest(request) {
19
+ if (request.action !== 'setSetting' || !this.settingCallback) {
20
+ return false;
21
+ }
22
+ const setting = request.requestValue.setting;
23
+ const value = request.requestValue.value;
24
+ const success = await this.settingCallback(this.getDeviceId(), setting, value);
25
+ if (success) {
26
+ request.responseValue.setting = setting;
27
+ request.responseValue.value = value;
28
+ }
29
+ return success;
30
+ }
31
+ };
32
+ }
33
+ //# sourceMappingURL=SettingController.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SettingController.js","sourceRoot":"","sources":["../../src/capabilities/SettingController.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAkBH,8CA+BC;AA/BD,SAAgB,iBAAiB,CAAyC,IAAO;IAC/E,OAAO,KAAM,SAAQ,IAAI;QAGvB,8DAA8D;QAC9D,YAAY,GAAG,IAAW;YACxB,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;YAJT,oBAAe,GAA2B,IAAI,CAAC;YAKrD,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACpE,CAAC;QAED,SAAS,CAAC,QAAyB;YACjC,IAAI,CAAC,eAAe,GAAG,QAAQ,CAAC;QAClC,CAAC;QAEO,KAAK,CAAC,oBAAoB,CAAC,OAAyB;YAC1D,IAAI,OAAO,CAAC,MAAM,KAAK,YAAY,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;gBAC7D,OAAO,KAAK,CAAC;YACf,CAAC;YAED,MAAM,OAAO,GAAG,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC;YAC7C,MAAM,KAAK,GAAG,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC;YACzC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;YAE/E,IAAI,OAAO,EAAE,CAAC;gBACZ,OAAO,CAAC,aAAa,CAAC,OAAO,GAAG,OAAO,CAAC;gBACxC,OAAO,CAAC,aAAa,CAAC,KAAK,GAAG,KAAK,CAAC;YACtC,CAAC;YAED,OAAO,OAAO,CAAC;QACjB,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+ /**
3
+ * StartStopController - Adds start/stop control capability
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.StartStopController = StartStopController;
7
+ const EventLimiter_1 = require("../core/EventLimiter");
8
+ const types_1 = require("../core/types");
9
+ function StartStopController(Base) {
10
+ return class extends Base {
11
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
12
+ constructor(...args) {
13
+ super(...args);
14
+ this.startStopCallback = null;
15
+ this.startStopEventLimiter = new EventLimiter_1.EventLimiter(types_1.EVENT_LIMIT_STATE);
16
+ this.registerRequestHandler(this.handleStartStopRequest.bind(this));
17
+ }
18
+ onStartStop(callback) {
19
+ this.startStopCallback = callback;
20
+ }
21
+ async sendStartStopEvent(start, cause = types_1.PHYSICAL_INTERACTION) {
22
+ if (this.startStopEventLimiter.isLimited()) {
23
+ return false;
24
+ }
25
+ return this.sendEvent('setStartStop', { state: start }, cause);
26
+ }
27
+ async handleStartStopRequest(request) {
28
+ if (request.action !== 'setStartStop' || !this.startStopCallback) {
29
+ return false;
30
+ }
31
+ const start = request.requestValue.state;
32
+ const result = await this.startStopCallback(this.getDeviceId(), start);
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.state = start;
46
+ }
47
+ return success;
48
+ }
49
+ };
50
+ }
51
+ //# sourceMappingURL=StartStopController.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StartStopController.js","sourceRoot":"","sources":["../../src/capabilities/StartStopController.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAoBH,kDAoDC;AArED,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,KAAc,EACd,QAAgB,4BAAoB;YAEpC,IAAI,IAAI,CAAC,qBAAqB,CAAC,SAAS,EAAE,EAAE,CAAC;gBAC3C,OAAO,KAAK,CAAC;YACf,CAAC;YAED,OAAO,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,KAAK,CAAC,CAAC;QACjE,CAAC;QAEO,KAAK,CAAC,sBAAsB,CAAC,OAAyB;YAC5D,IAAI,OAAO,CAAC,MAAM,KAAK,cAAc,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC;gBACjE,OAAO,KAAK,CAAC;YACf,CAAC;YAED,MAAM,KAAK,GAAG,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC;YACzC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,KAAK,CAAC,CAAC;YAEvE,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,29 @@
1
+ "use strict";
2
+ /**
3
+ * TemperatureSensor - Adds temperature reporting capability
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.TemperatureSensor = TemperatureSensor;
7
+ const EventLimiter_1 = require("../core/EventLimiter");
8
+ const types_1 = require("../core/types");
9
+ function TemperatureSensor(Base) {
10
+ return class extends Base {
11
+ constructor() {
12
+ super(...arguments);
13
+ this.temperatureEventLimiter = new EventLimiter_1.EventLimiter(types_1.EVENT_LIMIT_SENSOR_VALUE);
14
+ }
15
+ async sendTemperatureEvent(temperature, humidity, cause = types_1.PERIODIC_POLL) {
16
+ if (this.temperatureEventLimiter.isLimited()) {
17
+ return false;
18
+ }
19
+ const value = {
20
+ temperature,
21
+ };
22
+ if (humidity !== undefined) {
23
+ value.humidity = humidity;
24
+ }
25
+ return this.sendEvent('currentTemperature', value, cause);
26
+ }
27
+ };
28
+ }
29
+ //# sourceMappingURL=TemperatureSensor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TemperatureSensor.js","sourceRoot":"","sources":["../../src/capabilities/TemperatureSensor.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAaH,8CAwBC;AAlCD,uDAAoD;AACpD,yCAAwE;AASxE,SAAgB,iBAAiB,CAAyC,IAAO;IAC/E,OAAO,KAAM,SAAQ,IAAI;QAAlB;;YACG,4BAAuB,GAAG,IAAI,2BAAY,CAAC,gCAAwB,CAAC,CAAC;QAqB/E,CAAC;QAnBC,KAAK,CAAC,oBAAoB,CACxB,WAAmB,EACnB,QAAiB,EACjB,QAAgB,qBAAa;YAE7B,IAAI,IAAI,CAAC,uBAAuB,CAAC,SAAS,EAAE,EAAE,CAAC;gBAC7C,OAAO,KAAK,CAAC;YACf,CAAC;YAED,MAAM,KAAK,GAA4B;gBACrC,WAAW;aACZ,CAAC;YAEF,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;gBAC3B,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC;YAC5B,CAAC;YAED,OAAO,IAAI,CAAC,SAAS,CAAC,oBAAoB,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;QAC5D,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+ /**
3
+ * ThermostatController - Adds thermostat control capability
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.ThermostatController = ThermostatController;
7
+ const EventLimiter_1 = require("../core/EventLimiter");
8
+ const types_1 = require("../core/types");
9
+ function ThermostatController(Base) {
10
+ return class extends Base {
11
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
12
+ constructor(...args) {
13
+ super(...args);
14
+ this.thermostatModeCallback = null;
15
+ this.targetTemperatureCallback = null;
16
+ this.adjustTargetTemperatureCallback = null;
17
+ this.thermostatEventLimiter = new EventLimiter_1.EventLimiter(types_1.EVENT_LIMIT_STATE);
18
+ this.registerRequestHandler(this.handleThermostatRequest.bind(this));
19
+ }
20
+ onThermostatMode(callback) {
21
+ this.thermostatModeCallback = callback;
22
+ }
23
+ onTargetTemperature(callback) {
24
+ this.targetTemperatureCallback = callback;
25
+ }
26
+ onAdjustTargetTemperature(callback) {
27
+ this.adjustTargetTemperatureCallback = callback;
28
+ }
29
+ async sendThermostatModeEvent(mode, cause = types_1.PHYSICAL_INTERACTION) {
30
+ if (this.thermostatEventLimiter.isLimited()) {
31
+ return false;
32
+ }
33
+ return this.sendEvent('setThermostatMode', { thermostatMode: mode }, cause);
34
+ }
35
+ async sendTargetTemperatureEvent(temperature, cause = types_1.PHYSICAL_INTERACTION) {
36
+ if (this.thermostatEventLimiter.isLimited()) {
37
+ return false;
38
+ }
39
+ return this.sendEvent('targetTemperature', { temperature }, cause);
40
+ }
41
+ async handleThermostatRequest(request) {
42
+ if (request.action === 'setThermostatMode' && this.thermostatModeCallback) {
43
+ const mode = request.requestValue.thermostatMode;
44
+ const success = await this.thermostatModeCallback(this.getDeviceId(), mode);
45
+ if (success) {
46
+ request.responseValue.thermostatMode = mode;
47
+ }
48
+ return success;
49
+ }
50
+ if (request.action === 'targetTemperature' && this.targetTemperatureCallback) {
51
+ const temperature = request.requestValue.temperature;
52
+ const success = await this.targetTemperatureCallback(this.getDeviceId(), temperature);
53
+ if (success) {
54
+ request.responseValue.temperature = temperature;
55
+ }
56
+ return success;
57
+ }
58
+ if (request.action === 'adjustTargetTemperature' && this.adjustTargetTemperatureCallback) {
59
+ const temperatureDelta = request.requestValue.temperature.value;
60
+ const success = await this.adjustTargetTemperatureCallback(this.getDeviceId(), temperatureDelta);
61
+ if (success) {
62
+ request.responseValue.temperature = request.requestValue.temperature;
63
+ }
64
+ return success;
65
+ }
66
+ return false;
67
+ }
68
+ };
69
+ }
70
+ //# sourceMappingURL=ThermostatController.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ThermostatController.js","sourceRoot":"","sources":["../../src/capabilities/ThermostatController.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAwCH,oDAuFC;AA5HD,uDAAoD;AAEpD,yCAAwE;AAmCxE,SAAgB,oBAAoB,CAAyC,IAAO;IAClF,OAAO,KAAM,SAAQ,IAAI;QAMvB,8DAA8D;QAC9D,YAAY,GAAG,IAAW;YACxB,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;YAPT,2BAAsB,GAAkC,IAAI,CAAC;YAC7D,8BAAyB,GAAqC,IAAI,CAAC;YACnE,oCAA+B,GAA2C,IAAI,CAAC;YAC/E,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,gBAAgB,CAAC,QAAgC;YAC/C,IAAI,CAAC,sBAAsB,GAAG,QAAQ,CAAC;QACzC,CAAC;QAED,mBAAmB,CAAC,QAAmC;YACrD,IAAI,CAAC,yBAAyB,GAAG,QAAQ,CAAC;QAC5C,CAAC;QAED,yBAAyB,CAAC,QAAyC;YACjE,IAAI,CAAC,+BAA+B,GAAG,QAAQ,CAAC;QAClD,CAAC;QAED,KAAK,CAAC,uBAAuB,CAC3B,IAAoB,EACpB,QAAgB,4BAAoB;YAEpC,IAAI,IAAI,CAAC,sBAAsB,CAAC,SAAS,EAAE,EAAE,CAAC;gBAC5C,OAAO,KAAK,CAAC;YACf,CAAC;YAED,OAAO,IAAI,CAAC,SAAS,CAAC,mBAAmB,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,EAAE,KAAK,CAAC,CAAC;QAC9E,CAAC;QAED,KAAK,CAAC,0BAA0B,CAC9B,WAAgC,EAChC,QAAgB,4BAAoB;YAEpC,IAAI,IAAI,CAAC,sBAAsB,CAAC,SAAS,EAAE,EAAE,CAAC;gBAC5C,OAAO,KAAK,CAAC;YACf,CAAC;YAED,OAAO,IAAI,CAAC,SAAS,CAAC,mBAAmB,EAAE,EAAE,WAAW,EAAE,EAAE,KAAK,CAAC,CAAC;QACrE,CAAC;QAEO,KAAK,CAAC,uBAAuB,CAAC,OAAyB;YAC7D,IAAI,OAAO,CAAC,MAAM,KAAK,mBAAmB,IAAI,IAAI,CAAC,sBAAsB,EAAE,CAAC;gBAC1E,MAAM,IAAI,GAAG,OAAO,CAAC,YAAY,CAAC,cAAc,CAAC;gBACjD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,IAAI,CAAC,CAAC;gBAE5E,IAAI,OAAO,EAAE,CAAC;oBACZ,OAAO,CAAC,aAAa,CAAC,cAAc,GAAG,IAAI,CAAC;gBAC9C,CAAC;gBAED,OAAO,OAAO,CAAC;YACjB,CAAC;YAED,IAAI,OAAO,CAAC,MAAM,KAAK,mBAAmB,IAAI,IAAI,CAAC,yBAAyB,EAAE,CAAC;gBAC7E,MAAM,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC,WAAW,CAAC;gBACrD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,WAAW,CAAC,CAAC;gBAEtF,IAAI,OAAO,EAAE,CAAC;oBACZ,OAAO,CAAC,aAAa,CAAC,WAAW,GAAG,WAAW,CAAC;gBAClD,CAAC;gBAED,OAAO,OAAO,CAAC;YACjB,CAAC;YAED,IAAI,OAAO,CAAC,MAAM,KAAK,yBAAyB,IAAI,IAAI,CAAC,+BAA+B,EAAE,CAAC;gBACzF,MAAM,gBAAgB,GAAG,OAAO,CAAC,YAAY,CAAC,WAAW,CAAC,KAAK,CAAC;gBAChE,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,+BAA+B,CACxD,IAAI,CAAC,WAAW,EAAE,EAClB,gBAAgB,CACjB,CAAC;gBAEF,IAAI,OAAO,EAAE,CAAC;oBACZ,OAAO,CAAC,aAAa,CAAC,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC,WAAW,CAAC;gBACvE,CAAC;gBAED,OAAO,OAAO,CAAC;YACjB,CAAC;YAED,OAAO,KAAK,CAAC;QACf,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+ /**
3
+ * ToggleController - Adds generic toggle control capability
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.ToggleController = ToggleController;
7
+ const EventLimiter_1 = require("../core/EventLimiter");
8
+ const types_1 = require("../core/types");
9
+ function ToggleController(Base) {
10
+ return class extends Base {
11
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
12
+ constructor(...args) {
13
+ super(...args);
14
+ this.toggleStateCallback = null;
15
+ this.toggleEventLimiter = new EventLimiter_1.EventLimiter(types_1.EVENT_LIMIT_STATE);
16
+ this.registerRequestHandler(this.handleToggleRequest.bind(this));
17
+ }
18
+ onToggleState(callback) {
19
+ this.toggleStateCallback = callback;
20
+ }
21
+ async sendToggleStateEvent(state, cause = types_1.PHYSICAL_INTERACTION) {
22
+ if (this.toggleEventLimiter.isLimited()) {
23
+ return false;
24
+ }
25
+ return this.sendEvent('setToggleState', { state }, cause);
26
+ }
27
+ async handleToggleRequest(request) {
28
+ if (request.action !== 'setToggleState' || !this.toggleStateCallback) {
29
+ return false;
30
+ }
31
+ const state = request.requestValue.state;
32
+ const result = await this.toggleStateCallback(this.getDeviceId(), state);
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.state = state;
46
+ }
47
+ return success;
48
+ }
49
+ };
50
+ }
51
+ //# sourceMappingURL=ToggleController.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ToggleController.js","sourceRoot":"","sources":["../../src/capabilities/ToggleController.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAoBH,4CAoDC;AArED,uDAAoD;AAEpD,yCAAwE;AAexE,SAAgB,gBAAgB,CAAyC,IAAO;IAC9E,OAAO,KAAM,SAAQ,IAAI;QAIvB,8DAA8D;QAC9D,YAAY,GAAG,IAAW;YACxB,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;YALT,wBAAmB,GAA+B,IAAI,CAAC;YACvD,uBAAkB,GAAG,IAAI,2BAAY,CAAC,yBAAiB,CAAC,CAAC;YAK/D,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACnE,CAAC;QAED,aAAa,CAAC,QAA6B;YACzC,IAAI,CAAC,mBAAmB,GAAG,QAAQ,CAAC;QACtC,CAAC;QAED,KAAK,CAAC,oBAAoB,CACxB,KAAc,EACd,QAAgB,4BAAoB;YAEpC,IAAI,IAAI,CAAC,kBAAkB,CAAC,SAAS,EAAE,EAAE,CAAC;gBACxC,OAAO,KAAK,CAAC;YACf,CAAC;YAED,OAAO,IAAI,CAAC,SAAS,CAAC,gBAAgB,EAAE,EAAE,KAAK,EAAE,EAAE,KAAK,CAAC,CAAC;QAC5D,CAAC;QAEO,KAAK,CAAC,mBAAmB,CAAC,OAAyB;YACzD,IAAI,OAAO,CAAC,MAAM,KAAK,gBAAgB,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC;gBACrE,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,74 @@
1
+ "use strict";
2
+ /**
3
+ * VolumeController - Adds volume control capability
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.VolumeController = VolumeController;
7
+ const EventLimiter_1 = require("../core/EventLimiter");
8
+ const types_1 = require("../core/types");
9
+ function VolumeController(Base) {
10
+ return class extends Base {
11
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
12
+ constructor(...args) {
13
+ super(...args);
14
+ this.volumeCallback = null;
15
+ this.adjustVolumeCallback = null;
16
+ this.volumeEventLimiter = new EventLimiter_1.EventLimiter(types_1.EVENT_LIMIT_STATE);
17
+ this.registerRequestHandler(this.handleVolumeRequest.bind(this));
18
+ }
19
+ onVolume(callback) {
20
+ this.volumeCallback = callback;
21
+ }
22
+ onAdjustVolume(callback) {
23
+ this.adjustVolumeCallback = callback;
24
+ }
25
+ async sendVolumeEvent(volume, cause = types_1.PHYSICAL_INTERACTION) {
26
+ if (this.volumeEventLimiter.isLimited()) {
27
+ return false;
28
+ }
29
+ return this.sendEvent('setVolume', { volume }, cause);
30
+ }
31
+ async handleVolumeRequest(request) {
32
+ if (request.action === 'setVolume' && this.volumeCallback) {
33
+ const volume = request.requestValue.volume;
34
+ const result = await this.volumeCallback(this.getDeviceId(), volume);
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.volume = volume;
48
+ }
49
+ return success;
50
+ }
51
+ if (request.action === 'adjustVolume' && this.adjustVolumeCallback) {
52
+ const volumeDelta = request.requestValue.volumeDelta;
53
+ const result = await this.adjustVolumeCallback(this.getDeviceId(), volumeDelta);
54
+ // Handle both boolean and object return types
55
+ let success;
56
+ if (typeof result === 'boolean') {
57
+ success = result;
58
+ }
59
+ else {
60
+ success = result.success;
61
+ if (result.message) {
62
+ request.errorMessage = result.message;
63
+ }
64
+ }
65
+ if (success) {
66
+ request.responseValue.volume = volumeDelta;
67
+ }
68
+ return success;
69
+ }
70
+ return false;
71
+ }
72
+ };
73
+ }
74
+ //# sourceMappingURL=VolumeController.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VolumeController.js","sourceRoot":"","sources":["../../src/capabilities/VolumeController.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+ /**
3
+ * Export all capability controllers
4
+ */
5
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ var desc = Object.getOwnPropertyDescriptor(m, k);
8
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
9
+ desc = { enumerable: true, get: function() { return m[k]; } };
10
+ }
11
+ Object.defineProperty(o, k2, desc);
12
+ }) : (function(o, m, k, k2) {
13
+ if (k2 === undefined) k2 = k;
14
+ o[k2] = m[k];
15
+ }));
16
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
17
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
18
+ };
19
+ Object.defineProperty(exports, "__esModule", { value: true });
20
+ // Basic controls
21
+ __exportStar(require("./PowerStateController"), exports);
22
+ __exportStar(require("./BrightnessController"), exports);
23
+ __exportStar(require("./ColorController"), exports);
24
+ __exportStar(require("./ColorTemperatureController"), exports);
25
+ // Media & Audio
26
+ __exportStar(require("./VolumeController"), exports);
27
+ __exportStar(require("./MuteController"), exports);
28
+ __exportStar(require("./MediaController"), exports);
29
+ __exportStar(require("./EqualizerController"), exports);
30
+ // TV
31
+ __exportStar(require("./ChannelController"), exports);
32
+ __exportStar(require("./InputController"), exports);
33
+ // Sensors
34
+ __exportStar(require("./TemperatureSensor"), exports);
35
+ __exportStar(require("./MotionSensor"), exports);
36
+ __exportStar(require("./ContactSensor"), exports);
37
+ __exportStar(require("./AirQualitySensor"), exports);
38
+ __exportStar(require("./PowerSensor"), exports);
39
+ // Control
40
+ __exportStar(require("./LockController"), exports);
41
+ __exportStar(require("./ThermostatController"), exports);
42
+ __exportStar(require("./OpenCloseController"), exports);
43
+ // Generic
44
+ __exportStar(require("./RangeController"), exports);
45
+ __exportStar(require("./ModeController"), exports);
46
+ __exportStar(require("./ToggleController"), exports);
47
+ __exportStar(require("./PercentageController"), exports);
48
+ __exportStar(require("./PowerLevelController"), exports);
49
+ __exportStar(require("./StartStopController"), exports);
50
+ // Utility
51
+ __exportStar(require("./PushNotification"), exports);
52
+ __exportStar(require("./SettingController"), exports);
53
+ __exportStar(require("./KeypadController"), exports);
54
+ __exportStar(require("./CameraController"), exports);
55
+ __exportStar(require("./Doorbell"), exports);
56
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/capabilities/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;;;;;;;;;;;AAEH,iBAAiB;AACjB,yDAAuC;AACvC,yDAAuC;AACvC,oDAAkC;AAClC,+DAA6C;AAE7C,gBAAgB;AAChB,qDAAmC;AACnC,mDAAiC;AACjC,oDAAkC;AAClC,wDAAsC;AAEtC,KAAK;AACL,sDAAoC;AACpC,oDAAkC;AAElC,UAAU;AACV,sDAAoC;AACpC,iDAA+B;AAC/B,kDAAgC;AAChC,qDAAmC;AACnC,gDAA8B;AAE9B,UAAU;AACV,mDAAiC;AACjC,yDAAuC;AACvC,wDAAsC;AAEtC,UAAU;AACV,oDAAkC;AAClC,mDAAiC;AACjC,qDAAmC;AACnC,yDAAuC;AACvC,yDAAuC;AACvC,wDAAsC;AAEtC,UAAU;AACV,qDAAmC;AACnC,sDAAoC;AACpC,qDAAmC;AACnC,qDAAmC;AACnC,6CAA2B"}
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ /**
3
+ * Event rate limiter to prevent excessive event sending
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.EventLimiter = void 0;
7
+ const SinricProSdkLogger_1 = require("../utils/SinricProSdkLogger");
8
+ class EventLimiter {
9
+ constructor(minimumDistance = 1000) {
10
+ this.nextEvent = 0;
11
+ this.extraDistance = 0;
12
+ this.failCounter = 0;
13
+ this.minimumDistance = minimumDistance;
14
+ }
15
+ /**
16
+ * Check if event should be limited
17
+ * @returns true if event should be blocked, false if allowed
18
+ */
19
+ isLimited() {
20
+ const currentTime = Date.now();
21
+ const failThreshold = Math.floor(this.minimumDistance / 4);
22
+ if (currentTime >= this.nextEvent) {
23
+ if (this.failCounter > failThreshold) {
24
+ this.extraDistance += this.minimumDistance;
25
+ this.failCounter = 0;
26
+ SinricProSdkLogger_1.SinricProSdkLogger.warn(`Event limiter: Too many events detected. Adding ${this.extraDistance}ms delay.`);
27
+ }
28
+ else {
29
+ this.extraDistance = 0;
30
+ }
31
+ this.nextEvent = currentTime + this.minimumDistance + this.extraDistance;
32
+ return false;
33
+ }
34
+ this.failCounter++;
35
+ if (this.failCounter === failThreshold) {
36
+ SinricProSdkLogger_1.SinricProSdkLogger.warn(`WARNING: YOUR CODE SENDS EXCESSIVE EVENTS! Events will be limited by an additional ${this.extraDistance / 1000}s delay. Please check your code!`);
37
+ }
38
+ return true;
39
+ }
40
+ /**
41
+ * Reset the limiter
42
+ */
43
+ reset() {
44
+ this.nextEvent = 0;
45
+ this.extraDistance = 0;
46
+ this.failCounter = 0;
47
+ }
48
+ }
49
+ exports.EventLimiter = EventLimiter;
50
+ //# sourceMappingURL=EventLimiter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EventLimiter.js","sourceRoot":"","sources":["../../src/core/EventLimiter.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,oEAAiE;AAEjE,MAAa,YAAY;IAMvB,YAAY,kBAA0B,IAAI;QAJlC,cAAS,GAAW,CAAC,CAAC;QACtB,kBAAa,GAAW,CAAC,CAAC;QAC1B,gBAAW,GAAW,CAAC,CAAC;QAG9B,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;IACzC,CAAC;IAED;;;OAGG;IACH,SAAS;QACP,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC/B,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC,CAAC;QAE3D,IAAI,WAAW,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YAClC,IAAI,IAAI,CAAC,WAAW,GAAG,aAAa,EAAE,CAAC;gBACrC,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,eAAe,CAAC;gBAC3C,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;gBACrB,uCAAkB,CAAC,IAAI,CACrB,mDAAmD,IAAI,CAAC,aAAa,WAAW,CACjF,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;YACzB,CAAC;YAED,IAAI,CAAC,SAAS,GAAG,WAAW,GAAG,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,aAAa,CAAC;YACzE,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,CAAC,WAAW,EAAE,CAAC;QAEnB,IAAI,IAAI,CAAC,WAAW,KAAK,aAAa,EAAE,CAAC;YACvC,uCAAkB,CAAC,IAAI,CACrB,sFAAsF,IAAI,CAAC,aAAa,GAAG,IAAI,kCAAkC,CAClJ,CAAC;QACJ,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;QACnB,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;QACvB,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;IACvB,CAAC;CACF;AApDD,oCAoDC"}
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ /**
3
+ * Simple message queue implementation
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.MessageQueue = void 0;
7
+ class MessageQueue {
8
+ constructor() {
9
+ this.queue = [];
10
+ }
11
+ push(message) {
12
+ this.queue.push(message);
13
+ }
14
+ pop() {
15
+ return this.queue.shift();
16
+ }
17
+ size() {
18
+ return this.queue.length;
19
+ }
20
+ clear() {
21
+ this.queue = [];
22
+ }
23
+ isEmpty() {
24
+ return this.queue.length === 0;
25
+ }
26
+ }
27
+ exports.MessageQueue = MessageQueue;
28
+ //# sourceMappingURL=MessageQueue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MessageQueue.js","sourceRoot":"","sources":["../../src/core/MessageQueue.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,MAAa,YAAY;IAAzB;QACU,UAAK,GAAa,EAAE,CAAC;IAqB/B,CAAC;IAnBC,IAAI,CAAC,OAAe;QAClB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC3B,CAAC;IAED,GAAG;QACD,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IAC5B,CAAC;IAED,IAAI;QACF,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;IAC3B,CAAC;IAED,KAAK;QACH,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;IAClB,CAAC;IAED,OAAO;QACL,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC;IACjC,CAAC;CACF;AAtBD,oCAsBC"}
@@ -0,0 +1,68 @@
1
+ "use strict";
2
+ /**
3
+ * HMAC-SHA256 signature implementation for SinricPro authentication
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.Signature = void 0;
7
+ const crypto_1 = require("crypto");
8
+ class Signature {
9
+ constructor(appSecret) {
10
+ this.appSecret = appSecret;
11
+ }
12
+ /**
13
+ * Calculate HMAC-SHA256 signature and encode as base64
14
+ */
15
+ hmacBase64(message, key) {
16
+ const hmac = (0, crypto_1.createHmac)('sha256', key);
17
+ hmac.update(message);
18
+ return hmac.digest('base64');
19
+ }
20
+ /**
21
+ * Extract payload from JSON message string
22
+ */
23
+ extractPayload(messageStr) {
24
+ const beginPayload = messageStr.indexOf('"payload":');
25
+ const endPayload = messageStr.indexOf(',"signature"', beginPayload);
26
+ if (beginPayload > 0 && endPayload > 0) {
27
+ return messageStr.substring(beginPayload + 10, endPayload);
28
+ }
29
+ return '';
30
+ }
31
+ /**
32
+ * Calculate signature for a payload
33
+ */
34
+ calculateSignature(payload) {
35
+ if (!payload)
36
+ return '';
37
+ return this.hmacBase64(payload, this.appSecret);
38
+ }
39
+ /**
40
+ * Sign a message object
41
+ */
42
+ sign(message) {
43
+ const payloadStr = JSON.stringify(message.payload);
44
+ const signature = this.calculateSignature(payloadStr);
45
+ if (!message.signature) {
46
+ message.signature = { HMAC: '' };
47
+ }
48
+ message.signature.HMAC = signature;
49
+ }
50
+ /**
51
+ * Validate message signature
52
+ */
53
+ validate(message) {
54
+ // Timestamp messages don't have signatures
55
+ if ('timestamp' in message) {
56
+ return true;
57
+ }
58
+ if (!message.signature || !message.signature.HMAC) {
59
+ return false;
60
+ }
61
+ const messageStr = JSON.stringify(message);
62
+ const payload = this.extractPayload(messageStr);
63
+ const calculatedSignature = this.calculateSignature(payload);
64
+ return calculatedSignature === message.signature.HMAC;
65
+ }
66
+ }
67
+ exports.Signature = Signature;
68
+ //# sourceMappingURL=Signature.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Signature.js","sourceRoot":"","sources":["../../src/core/Signature.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,mCAAoC;AAGpC,MAAa,SAAS;IAGpB,YAAY,SAAiB;QAC3B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC7B,CAAC;IAED;;OAEG;IACK,UAAU,CAAC,OAAe,EAAE,GAAW;QAC7C,MAAM,IAAI,GAAG,IAAA,mBAAU,EAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QACvC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACrB,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC/B,CAAC;IAED;;OAEG;IACK,cAAc,CAAC,UAAkB;QACvC,MAAM,YAAY,GAAG,UAAU,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QACtD,MAAM,UAAU,GAAG,UAAU,CAAC,OAAO,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC;QAEpE,IAAI,YAAY,GAAG,CAAC,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;YACvC,OAAO,UAAU,CAAC,SAAS,CAAC,YAAY,GAAG,EAAE,EAAE,UAAU,CAAC,CAAC;QAC7D,CAAC;QAED,OAAO,EAAE,CAAC;IACZ,CAAC;IAED;;OAEG;IACH,kBAAkB,CAAC,OAAe;QAChC,IAAI,CAAC,OAAO;YAAE,OAAO,EAAE,CAAC;QACxB,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;IAClD,CAAC;IAED;;OAEG;IACH,IAAI,CAAC,OAAyB;QAC5B,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACnD,MAAM,SAAS,GAAG,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC;QAEtD,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;YACvB,OAAO,CAAC,SAAS,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;QACnC,CAAC;QACD,OAAO,CAAC,SAAS,CAAC,IAAI,GAAG,SAAS,CAAC;IACrC,CAAC;IAED;;OAEG;IACH,QAAQ,CAAC,OAAyB;QAChC,2CAA2C;QAC3C,IAAI,WAAW,IAAI,OAAO,EAAE,CAAC;YAC3B,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;YAClD,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QAC3C,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;QAChD,MAAM,mBAAmB,GAAG,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;QAE7D,OAAO,mBAAmB,KAAK,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC;IACxD,CAAC;CACF;AAtED,8BAsEC"}