sinricpro 2.11.4 → 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.
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 -34
  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 -103
  139. package/lib/signature.js +0 -26
  140. package/lib/sinrcpro.js +0 -127
  141. package/lib/sinricproudp.js +0 -60
  142. package/lib/storage.js +0 -31
@@ -0,0 +1,332 @@
1
+ "use strict";
2
+ /**
3
+ * Main SinricPro SDK class
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.SinricPro = void 0;
7
+ const events_1 = require("events");
8
+ const WebSocketClient_1 = require("./WebSocketClient");
9
+ const MessageQueue_1 = require("./MessageQueue");
10
+ const Signature_1 = require("./Signature");
11
+ const SinricProSdkLogger_1 = require("../utils/SinricProSdkLogger");
12
+ const types_1 = require("./types");
13
+ class SinricPro extends events_1.EventEmitter {
14
+ constructor() {
15
+ super();
16
+ this.isInitialized = false;
17
+ this.processingInterval = null;
18
+ this.devices = new Map();
19
+ this.receiveQueue = new MessageQueue_1.MessageQueue();
20
+ this.sendQueue = new MessageQueue_1.MessageQueue();
21
+ }
22
+ /**
23
+ * Get the singleton instance of SinricPro
24
+ * @returns The SinricPro singleton instance
25
+ */
26
+ static getInstance() {
27
+ if (!SinricPro.instance) {
28
+ SinricPro.instance = new SinricPro();
29
+ }
30
+ return SinricPro.instance;
31
+ }
32
+ /**
33
+ * Initialize and connect to SinricPro service
34
+ * @param config - Configuration object containing appKey, appSecret, and optional settings
35
+ * @throws {Error} If appKey or appSecret are missing or invalid
36
+ * @throws {Error} If connection to SinricPro server fails
37
+ * @example
38
+ * ```typescript
39
+ * await SinricPro.begin({
40
+ * appKey: 'your-app-key',
41
+ * appSecret: 'your-app-secret',
42
+ * debug: false
43
+ * });
44
+ * ```
45
+ */
46
+ async begin(config) {
47
+ if (this.isInitialized) {
48
+ SinricProSdkLogger_1.SinricProSdkLogger.warn('SinricPro already initialized');
49
+ return;
50
+ }
51
+ // Validate config
52
+ this.validateConfig(config);
53
+ this.config = {
54
+ serverUrl: types_1.SINRICPRO_SERVER_URL,
55
+ restoreDeviceStates: false,
56
+ debug: false,
57
+ ...config,
58
+ };
59
+ // Set log level
60
+ if (this.config.debug) {
61
+ SinricProSdkLogger_1.SinricProSdkLogger.setLevel(SinricProSdkLogger_1.LogLevel.ERROR);
62
+ }
63
+ SinricProSdkLogger_1.SinricProSdkLogger.info('Initializing SinricPro SDK...');
64
+ this.signature = new Signature_1.Signature(this.config.appSecret);
65
+ // Initialize WebSocket
66
+ this.websocket = new WebSocketClient_1.WebSocketClient({
67
+ serverUrl: this.config.serverUrl,
68
+ appKey: this.config.appKey,
69
+ deviceIds: Array.from(this.devices.keys()),
70
+ restoreDeviceStates: this.config.restoreDeviceStates,
71
+ });
72
+ this.setupWebSocketHandlers();
73
+ try {
74
+ await this.websocket.connect();
75
+ this.isInitialized = true;
76
+ this.startMessageProcessor();
77
+ SinricProSdkLogger_1.SinricProSdkLogger.info('SinricPro SDK initialized successfully');
78
+ }
79
+ catch (error) {
80
+ SinricProSdkLogger_1.SinricProSdkLogger.error('Failed to initialize SinricPro:', error);
81
+ throw error;
82
+ }
83
+ }
84
+ /**
85
+ * Add a device to SinricPro
86
+ * @param device - The device instance to add
87
+ * @returns The added device instance
88
+ * @throws {Error} If deviceId is invalid or not in the correct format
89
+ * @example
90
+ * ```typescript
91
+ * const mySwitch = SinricProSwitch('5dc1564130xxxxxxxxxxxxxx');
92
+ * SinricPro.add(mySwitch);
93
+ * ```
94
+ */
95
+ add(device) {
96
+ const deviceId = device.getDeviceId();
97
+ // Validate device ID format (should be 24 hex characters)
98
+ if (!deviceId || typeof deviceId !== 'string') {
99
+ throw new Error('Invalid device: deviceId is required and must be a string');
100
+ }
101
+ if (!/^[a-f0-9]{24}$/i.test(deviceId)) {
102
+ throw new Error(`Invalid deviceId format: ${deviceId}. Expected 24 hexadecimal characters`);
103
+ }
104
+ if (this.devices.has(deviceId)) {
105
+ SinricProSdkLogger_1.SinricProSdkLogger.warn(`Device ${deviceId} already exists, returning existing instance`);
106
+ return this.devices.get(deviceId);
107
+ }
108
+ device.setSinricPro(this);
109
+ this.devices.set(deviceId, device);
110
+ SinricProSdkLogger_1.SinricProSdkLogger.info(`Device added: ${deviceId} (${device.getProductType()})`);
111
+ // Update WebSocket device list if already connected
112
+ if (this.isInitialized) {
113
+ this.websocket.updateDeviceList(Array.from(this.devices.keys()));
114
+ }
115
+ return device;
116
+ }
117
+ /**
118
+ * Get a device by its ID
119
+ * @param deviceId - The device ID to look up
120
+ * @returns The device instance if found, undefined otherwise
121
+ */
122
+ get(deviceId) {
123
+ return this.devices.get(deviceId);
124
+ }
125
+ /**
126
+ * Register a callback for when connected to SinricPro
127
+ * @param callback - Function to call when connected
128
+ * @example
129
+ * ```typescript
130
+ * SinricPro.onConnected(() => {
131
+ * console.log('Connected to SinricPro!');
132
+ * });
133
+ * ```
134
+ */
135
+ onConnected(callback) {
136
+ this.on('connected', callback);
137
+ }
138
+ /**
139
+ * Register a callback for when disconnected from SinricPro
140
+ * @param callback - Function to call when disconnected
141
+ */
142
+ onDisconnected(callback) {
143
+ this.on('disconnected', callback);
144
+ }
145
+ /**
146
+ * Register a callback for heartbeat pong responses
147
+ * @param callback - Function to call with latency in milliseconds
148
+ */
149
+ onPong(callback) {
150
+ this.on('pong', callback);
151
+ }
152
+ /**
153
+ * Stop the SinricPro SDK and disconnect from the server
154
+ * @example
155
+ * ```typescript
156
+ * await SinricPro.stop();
157
+ * ```
158
+ */
159
+ async stop() {
160
+ SinricProSdkLogger_1.SinricProSdkLogger.info('Stopping SinricPro SDK...');
161
+ this.isInitialized = false;
162
+ if (this.processingInterval) {
163
+ clearInterval(this.processingInterval);
164
+ this.processingInterval = null;
165
+ }
166
+ await this.websocket.disconnect();
167
+ this.receiveQueue.clear();
168
+ this.sendQueue.clear();
169
+ SinricProSdkLogger_1.SinricProSdkLogger.info('SinricPro SDK stopped');
170
+ }
171
+ /**
172
+ * Check if currently connected to SinricPro
173
+ * @returns true if connected, false otherwise
174
+ */
175
+ isConnected() {
176
+ return this.websocket?.isConnected() || false;
177
+ }
178
+ // ISinricPro interface methods
179
+ async sendMessage(message) {
180
+ message.payload.createdAt = this.getTimestamp();
181
+ this.signature.sign(message);
182
+ this.sendQueue.push(JSON.stringify(message));
183
+ }
184
+ getTimestamp() {
185
+ return Math.floor(Date.now() / 1000);
186
+ }
187
+ sign(message) {
188
+ return this.signature.calculateSignature(message);
189
+ }
190
+ // Private methods
191
+ setupWebSocketHandlers() {
192
+ this.websocket.on('connected', () => {
193
+ SinricProSdkLogger_1.SinricProSdkLogger.info('Connected to SinricPro server');
194
+ this.emit('connected');
195
+ });
196
+ this.websocket.on('disconnected', () => {
197
+ SinricProSdkLogger_1.SinricProSdkLogger.info('Disconnected from SinricPro server');
198
+ this.emit('disconnected');
199
+ });
200
+ this.websocket.on('message', (msg) => {
201
+ this.receiveQueue.push(msg);
202
+ });
203
+ this.websocket.on('pong', (latency) => {
204
+ this.emit('pong', latency);
205
+ });
206
+ this.websocket.on('error', (error) => {
207
+ SinricProSdkLogger_1.SinricProSdkLogger.error('WebSocket error:', error);
208
+ this.emit('error', error);
209
+ });
210
+ }
211
+ startMessageProcessor() {
212
+ this.processingInterval = setInterval(() => {
213
+ this.processReceiveQueue();
214
+ this.processSendQueue();
215
+ }, 10); // Process every 10ms
216
+ }
217
+ async processReceiveQueue() {
218
+ while (!this.receiveQueue.isEmpty()) {
219
+ const rawMessage = this.receiveQueue.pop();
220
+ if (!rawMessage)
221
+ continue;
222
+ try {
223
+ const message = JSON.parse(rawMessage);
224
+ // Handle timestamp message
225
+ if ('timestamp' in message) {
226
+ continue;
227
+ }
228
+ // Validate signature
229
+ if (!this.signature.validate(message)) {
230
+ SinricProSdkLogger_1.SinricProSdkLogger.error('Invalid message signature');
231
+ this.sendInvalidSignatureResponse(message);
232
+ continue;
233
+ }
234
+ // Route message
235
+ if (message.payload.type === 'request') {
236
+ await this.handleRequest(message);
237
+ }
238
+ else if (message.payload.type === 'response') {
239
+ this.emit('response', message);
240
+ }
241
+ }
242
+ catch (error) {
243
+ SinricProSdkLogger_1.SinricProSdkLogger.error('Error processing received message:', error);
244
+ }
245
+ }
246
+ }
247
+ processSendQueue() {
248
+ if (!this.isConnected()) {
249
+ return;
250
+ }
251
+ while (!this.sendQueue.isEmpty()) {
252
+ const message = this.sendQueue.pop();
253
+ if (message) {
254
+ try {
255
+ this.websocket.send(message);
256
+ }
257
+ catch (error) {
258
+ // If send fails, put message back in queue and stop processing
259
+ this.sendQueue.push(message);
260
+ SinricProSdkLogger_1.SinricProSdkLogger.error('Failed to send message, will retry later:', error);
261
+ break;
262
+ }
263
+ }
264
+ }
265
+ }
266
+ async handleRequest(message) {
267
+ const deviceId = message.payload.deviceId;
268
+ const device = deviceId ? this.devices.get(deviceId) : null;
269
+ if (!device) {
270
+ SinricProSdkLogger_1.SinricProSdkLogger.error(`Device not found: ${deviceId}`);
271
+ this.sendErrorResponse(message, `Device ${deviceId} not found`);
272
+ return;
273
+ }
274
+ const request = {
275
+ action: message.payload.action,
276
+ instance: message.payload.instanceId || '',
277
+ requestValue: message.payload.value,
278
+ responseValue: {},
279
+ };
280
+ const success = await device.handleRequest(request);
281
+ this.sendResponse(message, success, request.responseValue, request.errorMessage);
282
+ }
283
+ sendResponse(requestMessage, success, value, errorMessage) {
284
+ const responseMessage = {
285
+ header: {
286
+ payloadVersion: 2,
287
+ signatureVersion: 1,
288
+ },
289
+ payload: {
290
+ action: requestMessage.payload.action,
291
+ clientId: requestMessage.payload.clientId,
292
+ createdAt: Math.floor(new Date().getTime() / 1000),
293
+ deviceId: requestMessage.payload.deviceId,
294
+ message: errorMessage || (success ? 'OK' : 'Request failed'),
295
+ replyToken: requestMessage.payload.replyToken,
296
+ success,
297
+ type: 'response',
298
+ value,
299
+ },
300
+ };
301
+ this.signature.sign(responseMessage);
302
+ if (requestMessage.payload.instanceId) {
303
+ responseMessage.payload.instanceId = requestMessage.payload.instanceId;
304
+ }
305
+ this.sendQueue.push(JSON.stringify(responseMessage));
306
+ }
307
+ validateConfig(config) {
308
+ // Validate required fields
309
+ if (!config.appKey || !config.appSecret) {
310
+ throw new Error('appKey and appSecret are required');
311
+ }
312
+ // Validate appKey format (should be UUID-like: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)
313
+ const uuidRegex = /^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/i;
314
+ if (!uuidRegex.test(config.appKey)) {
315
+ throw new Error('Invalid appKey format. Expected format: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx');
316
+ }
317
+ // Validate appSecret format (longer UUID-like with dashes and alphanumeric)
318
+ if (config.appSecret.length < 32) {
319
+ throw new Error('Invalid appSecret: must be at least 32 characters long');
320
+ }
321
+ }
322
+ sendErrorResponse(message, errorMessage) {
323
+ this.sendResponse(message, false, { error: errorMessage });
324
+ }
325
+ sendInvalidSignatureResponse(message) {
326
+ this.sendErrorResponse(message, 'Invalid signature');
327
+ }
328
+ }
329
+ exports.SinricPro = SinricPro;
330
+ // Export singleton instance
331
+ exports.default = SinricPro.getInstance();
332
+ //# sourceMappingURL=SinricPro.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SinricPro.js","sourceRoot":"","sources":["../../src/core/SinricPro.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,82 @@
1
+ "use strict";
2
+ /**
3
+ * Base class for all SinricPro devices
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.SinricProDevice = void 0;
7
+ const SinricProSdkLogger_1 = require("../utils/SinricProSdkLogger");
8
+ class SinricProDevice {
9
+ constructor(deviceId, productType) {
10
+ this.sinricPro = null;
11
+ this.requestHandlers = [];
12
+ this.deviceId = deviceId;
13
+ this.productType = productType;
14
+ }
15
+ getDeviceId() {
16
+ return this.deviceId;
17
+ }
18
+ getProductType() {
19
+ return `sinric.device.type.${this.productType}`;
20
+ }
21
+ setSinricPro(sinricPro) {
22
+ this.sinricPro = sinricPro;
23
+ }
24
+ registerRequestHandler(handler) {
25
+ this.requestHandlers.push(handler);
26
+ }
27
+ async handleRequest(request) {
28
+ SinricProSdkLogger_1.SinricProSdkLogger.debug(`Device ${this.deviceId} handling request: ${request.action}`);
29
+ for (const handler of this.requestHandlers) {
30
+ try {
31
+ const result = await handler(request);
32
+ if (result) {
33
+ SinricProSdkLogger_1.SinricProSdkLogger.debug(`Request ${request.action} handled successfully`);
34
+ return true;
35
+ }
36
+ }
37
+ catch (error) {
38
+ SinricProSdkLogger_1.SinricProSdkLogger.error(`Error handling request ${request.action}:`, error);
39
+ return false;
40
+ }
41
+ }
42
+ SinricProSdkLogger_1.SinricProSdkLogger.warn(`No handler found for action: ${request.action}`);
43
+ return false;
44
+ }
45
+ async sendEvent(action,
46
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
47
+ value, cause = 'PHYSICAL_INTERACTION') {
48
+ if (!this.sinricPro) {
49
+ SinricProSdkLogger_1.SinricProSdkLogger.error('Cannot send event: Device not registered with SinricPro');
50
+ return false;
51
+ }
52
+ const eventMessage = {
53
+ header: {
54
+ payloadVersion: 2,
55
+ signatureVersion: 1,
56
+ },
57
+ payload: {
58
+ action,
59
+ deviceId: this.deviceId,
60
+ replyToken: this.generateMessageId(),
61
+ type: 'event',
62
+ createdAt: Math.floor(new Date().getTime() / 1000),
63
+ cause: { type: cause },
64
+ value,
65
+ },
66
+ };
67
+ try {
68
+ await this.sinricPro.sendMessage(eventMessage);
69
+ SinricProSdkLogger_1.SinricProSdkLogger.debug(`Event sent: ${action}`, value);
70
+ return true;
71
+ }
72
+ catch (error) {
73
+ SinricProSdkLogger_1.SinricProSdkLogger.error(`Failed to send event ${action}:`, error);
74
+ return false;
75
+ }
76
+ }
77
+ generateMessageId() {
78
+ return `${Date.now()}-${Math.random().toString(36).substring(2, 11)}`;
79
+ }
80
+ }
81
+ exports.SinricProDevice = SinricProDevice;
82
+ //# sourceMappingURL=SinricProDevice.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SinricProDevice.js","sourceRoot":"","sources":["../../src/core/SinricProDevice.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,156 @@
1
+ "use strict";
2
+ /**
3
+ * WebSocket client for SinricPro communication
4
+ */
5
+ var __importDefault = (this && this.__importDefault) || function (mod) {
6
+ return (mod && mod.__esModule) ? mod : { "default": mod };
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.WebSocketClient = void 0;
10
+ const ws_1 = __importDefault(require("ws"));
11
+ const events_1 = require("events");
12
+ const SinricProSdkLogger_1 = require("../utils/SinricProSdkLogger");
13
+ const types_1 = require("./types");
14
+ const package_json_1 = require("../../package.json");
15
+ class WebSocketClient extends events_1.EventEmitter {
16
+ constructor(config) {
17
+ super();
18
+ this.ws = null;
19
+ this.pingInterval = null;
20
+ this.pongTimeout = null;
21
+ this.reconnectTimeout = null;
22
+ this.connected = false;
23
+ this.shouldReconnect = true;
24
+ this.lastPingTime = 0;
25
+ this.config = {
26
+ platform: 'NodeJS',
27
+ sdkVersion: package_json_1.version,
28
+ ...config,
29
+ };
30
+ }
31
+ async connect() {
32
+ if (this.connected) {
33
+ SinricProSdkLogger_1.SinricProSdkLogger.warn('WebSocket already connected');
34
+ return;
35
+ }
36
+ const protocol = 'wss';
37
+ const port = types_1.SINRICPRO_SERVER_SSL_PORT;
38
+ const url = `${protocol}://${this.config.serverUrl}:${port}/`;
39
+ const headers = {
40
+ appkey: this.config.appKey,
41
+ deviceids: this.config.deviceIds.join(';'),
42
+ restoredevicestates: this.config.restoreDeviceStates.toString(),
43
+ platform: this.config.platform || 'NodeJS',
44
+ SDKVersion: this.config.sdkVersion || package_json_1.version,
45
+ };
46
+ SinricProSdkLogger_1.SinricProSdkLogger.info(`Connecting to ${url}`);
47
+ SinricProSdkLogger_1.SinricProSdkLogger.debug('WebSocket headers:', headers);
48
+ return new Promise((resolve, reject) => {
49
+ this.ws = new ws_1.default(url, { headers });
50
+ this.ws.on('open', () => {
51
+ this.connected = true;
52
+ this.startHeartbeat();
53
+ SinricProSdkLogger_1.SinricProSdkLogger.info('WebSocket connected');
54
+ this.emit('connected');
55
+ resolve();
56
+ });
57
+ this.ws.on('message', (data) => {
58
+ const message = data.toString();
59
+ SinricProSdkLogger_1.SinricProSdkLogger.debug('WebSocket received:', message);
60
+ this.emit('message', message);
61
+ });
62
+ this.ws.on('close', () => {
63
+ this.connected = false;
64
+ this.stopHeartbeat();
65
+ SinricProSdkLogger_1.SinricProSdkLogger.info('WebSocket disconnected');
66
+ this.emit('disconnected');
67
+ if (this.shouldReconnect) {
68
+ this.scheduleReconnect();
69
+ }
70
+ });
71
+ this.ws.on('error', (error) => {
72
+ SinricProSdkLogger_1.SinricProSdkLogger.error('WebSocket error:', error.message);
73
+ this.emit('error', error);
74
+ reject(error);
75
+ });
76
+ this.ws.on('pong', () => {
77
+ // Clear pong timeout - connection is alive
78
+ if (this.pongTimeout) {
79
+ clearTimeout(this.pongTimeout);
80
+ this.pongTimeout = null;
81
+ }
82
+ const latency = Date.now() - this.lastPingTime;
83
+ SinricProSdkLogger_1.SinricProSdkLogger.debug(`WebSocket pong received (latency: ${latency}ms)`);
84
+ this.emit('pong', latency);
85
+ });
86
+ });
87
+ }
88
+ send(message) {
89
+ if (!this.ws || !this.connected) {
90
+ const error = new Error('Cannot send message: WebSocket not connected');
91
+ SinricProSdkLogger_1.SinricProSdkLogger.error(error.message);
92
+ throw error;
93
+ }
94
+ SinricProSdkLogger_1.SinricProSdkLogger.debug('WebSocket sending:', message);
95
+ this.ws.send(message);
96
+ }
97
+ isConnected() {
98
+ return this.connected;
99
+ }
100
+ startHeartbeat() {
101
+ this.pingInterval = setInterval(() => {
102
+ if (this.ws && this.connected) {
103
+ this.lastPingTime = Date.now();
104
+ this.ws.ping();
105
+ SinricProSdkLogger_1.SinricProSdkLogger.debug('WebSocket ping sent');
106
+ // Set timeout for pong response
107
+ this.pongTimeout = setTimeout(() => {
108
+ SinricProSdkLogger_1.SinricProSdkLogger.error('WebSocket pong timeout - connection appears dead');
109
+ // Force close the connection
110
+ if (this.ws) {
111
+ this.ws.terminate();
112
+ }
113
+ }, types_1.WEBSOCKET_PING_TIMEOUT);
114
+ }
115
+ }, types_1.WEBSOCKET_PING_INTERVAL);
116
+ }
117
+ stopHeartbeat() {
118
+ if (this.pingInterval) {
119
+ clearInterval(this.pingInterval);
120
+ this.pingInterval = null;
121
+ }
122
+ if (this.pongTimeout) {
123
+ clearTimeout(this.pongTimeout);
124
+ this.pongTimeout = null;
125
+ }
126
+ }
127
+ scheduleReconnect() {
128
+ if (this.reconnectTimeout) {
129
+ clearTimeout(this.reconnectTimeout);
130
+ }
131
+ this.reconnectTimeout = setTimeout(() => {
132
+ SinricProSdkLogger_1.SinricProSdkLogger.info('Attempting to reconnect...');
133
+ this.connect().catch((error) => {
134
+ SinricProSdkLogger_1.SinricProSdkLogger.error('Reconnection failed:', error.message);
135
+ });
136
+ }, 5000);
137
+ }
138
+ updateDeviceList(deviceIds) {
139
+ this.config.deviceIds = deviceIds;
140
+ }
141
+ async disconnect() {
142
+ this.shouldReconnect = false;
143
+ if (this.reconnectTimeout) {
144
+ clearTimeout(this.reconnectTimeout);
145
+ this.reconnectTimeout = null;
146
+ }
147
+ this.stopHeartbeat();
148
+ if (this.ws) {
149
+ this.ws.close();
150
+ this.ws = null;
151
+ }
152
+ this.connected = false;
153
+ }
154
+ }
155
+ exports.WebSocketClient = WebSocketClient;
156
+ //# sourceMappingURL=WebSocketClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WebSocketClient.js","sourceRoot":"","sources":["../../src/core/WebSocketClient.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ /**
3
+ * Core type definitions for SinricPro SDK
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.PERIODIC_POLL = exports.VOICE_INTERACTION = exports.APP_INTERACTION = exports.PHYSICAL_INTERACTION = exports.EVENT_LIMIT_SENSOR_VALUE = exports.EVENT_LIMIT_STATE = exports.WEBSOCKET_PING_TIMEOUT = exports.WEBSOCKET_PING_INTERVAL = exports.SINRICPRO_SERVER_SSL_PORT = exports.SINRICPRO_SERVER_PORT = exports.SINRICPRO_SERVER_URL = exports.InterfaceType = exports.MessageType = void 0;
7
+ var MessageType;
8
+ (function (MessageType) {
9
+ MessageType["Request"] = "request";
10
+ MessageType["Response"] = "response";
11
+ MessageType["Event"] = "event";
12
+ })(MessageType || (exports.MessageType = MessageType = {}));
13
+ var InterfaceType;
14
+ (function (InterfaceType) {
15
+ InterfaceType["WebSocket"] = "websocket";
16
+ InterfaceType["UDP"] = "udp";
17
+ })(InterfaceType || (exports.InterfaceType = InterfaceType = {}));
18
+ // Constants
19
+ exports.SINRICPRO_SERVER_URL = 'testws.sinric.pro';
20
+ exports.SINRICPRO_SERVER_PORT = 80;
21
+ exports.SINRICPRO_SERVER_SSL_PORT = 443;
22
+ exports.WEBSOCKET_PING_INTERVAL = 300000; // 5 minutes
23
+ exports.WEBSOCKET_PING_TIMEOUT = 10000; // 10 seconds
24
+ exports.EVENT_LIMIT_STATE = 1000; // 1 second
25
+ exports.EVENT_LIMIT_SENSOR_VALUE = 60000; // 60 seconds
26
+ exports.PHYSICAL_INTERACTION = 'PHYSICAL_INTERACTION';
27
+ exports.APP_INTERACTION = 'APP_INTERACTION';
28
+ exports.VOICE_INTERACTION = 'VOICE_INTERACTION';
29
+ exports.PERIODIC_POLL = 'PERIODIC_POLL';
30
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAcH,IAAY,WAIX;AAJD,WAAY,WAAW;IACrB,kCAAmB,CAAA;IACnB,oCAAqB,CAAA;IACrB,8BAAe,CAAA;AACjB,CAAC,EAJW,WAAW,2BAAX,WAAW,QAItB;AAED,IAAY,aAGX;AAHD,WAAY,aAAa;IACvB,wCAAuB,CAAA;IACvB,4BAAW,CAAA;AACb,CAAC,EAHW,aAAa,6BAAb,aAAa,QAGxB;AAuFD,YAAY;AACC,QAAA,oBAAoB,GAAG,mBAAmB,CAAC;AAC3C,QAAA,qBAAqB,GAAG,EAAE,CAAC;AAC3B,QAAA,yBAAyB,GAAG,GAAG,CAAC;AAChC,QAAA,uBAAuB,GAAG,MAAM,CAAC,CAAC,YAAY;AAC9C,QAAA,sBAAsB,GAAG,KAAK,CAAC,CAAC,aAAa;AAC7C,QAAA,iBAAiB,GAAG,IAAI,CAAC,CAAC,WAAW;AACrC,QAAA,wBAAwB,GAAG,KAAK,CAAC,CAAC,aAAa;AAE/C,QAAA,oBAAoB,GAAG,sBAAsB,CAAC;AAC9C,QAAA,eAAe,GAAG,iBAAiB,CAAC;AACpC,QAAA,iBAAiB,GAAG,mBAAmB,CAAC;AACxC,QAAA,aAAa,GAAG,eAAe,CAAC"}
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ /**
3
+ * SinricProAirQualitySensor - Air quality sensor device
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.SinricProAirQualitySensor = SinricProAirQualitySensor;
7
+ const SinricProDevice_1 = require("../core/SinricProDevice");
8
+ const AirQualitySensor_1 = require("../capabilities/AirQualitySensor");
9
+ const TemperatureSensor_1 = require("../capabilities/TemperatureSensor");
10
+ const SettingController_1 = require("../capabilities/SettingController");
11
+ const PushNotification_1 = require("../capabilities/PushNotification");
12
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
13
+ class SinricProAirQualitySensorClass extends (0, SettingController_1.SettingController)(
14
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
15
+ (0, PushNotification_1.PushNotification)((0, TemperatureSensor_1.TemperatureSensor)((0, AirQualitySensor_1.AirQualitySensor)(SinricProDevice_1.SinricProDevice)))) {
16
+ constructor(deviceId) {
17
+ super(deviceId, 'AIR_QUALITY_SENSOR');
18
+ }
19
+ }
20
+ /**
21
+ * Create a SinricProAirQualitySensor device
22
+ * @param deviceId - Device ID from SinricPro portal
23
+ * @returns SinricProAirQualitySensor instance
24
+ */
25
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
26
+ function SinricProAirQualitySensor(deviceId) {
27
+ return new SinricProAirQualitySensorClass(deviceId);
28
+ }
29
+ //# sourceMappingURL=SinricProAirQualitySensor.js.map