sinricpro 4.0.0 → 6.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/README.md +43 -0
- package/dist/capabilities/EqualizerController.js +4 -3
- package/dist/capabilities/EqualizerController.js.map +1 -1
- package/dist/capabilities/ModeController.js +5 -3
- package/dist/capabilities/ModeController.js.map +1 -1
- package/dist/capabilities/RangeController.js +7 -4
- package/dist/capabilities/RangeController.js.map +1 -1
- package/dist/capabilities/SettingController.js +12 -3
- package/dist/capabilities/SettingController.js.map +1 -1
- package/dist/core/MessageQueue.js +6 -2
- package/dist/core/MessageQueue.js.map +1 -1
- package/dist/core/Signature.js +51 -18
- package/dist/core/Signature.js.map +1 -1
- package/dist/core/SinricPro.js +255 -42
- package/dist/core/SinricPro.js.map +1 -1
- package/dist/core/SinricProDevice.js +16 -10
- package/dist/core/SinricProDevice.js.map +1 -1
- package/dist/core/WebSocketClient.js +2 -1
- package/dist/core/WebSocketClient.js.map +1 -1
- package/dist/core/local/MdnsAnnouncer.js +107 -0
- package/dist/core/local/MdnsAnnouncer.js.map +1 -0
- package/dist/core/local/UdpListener.js +135 -0
- package/dist/core/local/UdpListener.js.map +1 -0
- package/dist/core/types.js +9 -1
- package/dist/core/types.js.map +1 -1
- package/dist/devices/SinricProCustomDevice.js +63 -0
- package/dist/devices/SinricProCustomDevice.js.map +1 -0
- package/dist/devices/SinricProSwitch.js +3 -1
- package/dist/devices/SinricProSwitch.js.map +1 -1
- package/dist/devices/SinricProTemperatureSensor.js +28 -0
- package/dist/devices/SinricProTemperatureSensor.js.map +1 -0
- package/dist/devices/index.js +3 -0
- package/dist/devices/index.js.map +1 -1
- package/dist/utils/network.js +58 -0
- package/dist/utils/network.js.map +1 -0
- package/package.json +14 -10
package/dist/core/SinricPro.js
CHANGED
|
@@ -9,12 +9,19 @@ const WebSocketClient_1 = require("./WebSocketClient");
|
|
|
9
9
|
const MessageQueue_1 = require("./MessageQueue");
|
|
10
10
|
const Signature_1 = require("./Signature");
|
|
11
11
|
const SinricProSdkLogger_1 = require("../utils/SinricProSdkLogger");
|
|
12
|
+
const UdpListener_1 = require("./local/UdpListener");
|
|
13
|
+
const MdnsAnnouncer_1 = require("./local/MdnsAnnouncer");
|
|
12
14
|
const types_1 = require("./types");
|
|
15
|
+
const EventLimiter_1 = require("./EventLimiter");
|
|
13
16
|
class SinricPro extends events_1.EventEmitter {
|
|
14
17
|
constructor() {
|
|
15
18
|
super();
|
|
16
19
|
this.isInitialized = false;
|
|
17
20
|
this.processingInterval = null;
|
|
21
|
+
this.moduleSettingCallback = null;
|
|
22
|
+
this.settingEventLimiter = new EventLimiter_1.EventLimiter(types_1.EVENT_LIMIT_STATE);
|
|
23
|
+
this.udpListener = null;
|
|
24
|
+
this.mdnsAnnouncer = null;
|
|
18
25
|
this.devices = new Map();
|
|
19
26
|
this.receiveQueue = new MessageQueue_1.MessageQueue();
|
|
20
27
|
this.sendQueue = new MessageQueue_1.MessageQueue();
|
|
@@ -33,7 +40,10 @@ class SinricPro extends events_1.EventEmitter {
|
|
|
33
40
|
* Initialize and connect to SinricPro service
|
|
34
41
|
* @param config - Configuration object containing appKey, appSecret, and optional settings
|
|
35
42
|
* @throws {Error} If appKey or appSecret are missing or invalid
|
|
36
|
-
*
|
|
43
|
+
*
|
|
44
|
+
* A cloud connection failure is not fatal: the SDK stays up, retries in the
|
|
45
|
+
* background, and keeps answering local control. Call isConnected() to check
|
|
46
|
+
* cloud state.
|
|
37
47
|
* @example
|
|
38
48
|
* ```typescript
|
|
39
49
|
* await SinricPro.begin({
|
|
@@ -52,8 +62,9 @@ class SinricPro extends events_1.EventEmitter {
|
|
|
52
62
|
this.validateConfig(config);
|
|
53
63
|
this.config = {
|
|
54
64
|
serverUrl: types_1.SINRICPRO_SERVER_URL,
|
|
55
|
-
restoreDeviceStates: false,
|
|
56
65
|
debug: false,
|
|
66
|
+
localControl: process.env.SINRICPRO_NO_LOCAL_CONTROL !== '1',
|
|
67
|
+
mdns: process.env.SINRICPRO_NOMDNS !== '1',
|
|
57
68
|
...config,
|
|
58
69
|
};
|
|
59
70
|
// Set log level
|
|
@@ -67,19 +78,48 @@ class SinricPro extends events_1.EventEmitter {
|
|
|
67
78
|
serverUrl: this.config.serverUrl,
|
|
68
79
|
appKey: this.config.appKey,
|
|
69
80
|
deviceIds: Array.from(this.devices.keys()),
|
|
70
|
-
restoreDeviceStates: this.config.restoreDeviceStates,
|
|
71
81
|
});
|
|
72
82
|
this.setupWebSocketHandlers();
|
|
83
|
+
// Local control is brought up before the cloud on purpose: a host that has
|
|
84
|
+
// never reached SinricPro must still answer signed LAN requests.
|
|
85
|
+
await this.startLocalControl();
|
|
86
|
+
this.isInitialized = true;
|
|
87
|
+
this.startMessageProcessor();
|
|
73
88
|
try {
|
|
74
89
|
await this.websocket.connect();
|
|
75
|
-
this.isInitialized = true;
|
|
76
|
-
this.startMessageProcessor();
|
|
77
|
-
SinricProSdkLogger_1.SinricProSdkLogger.info('SinricPro SDK initialized successfully');
|
|
78
90
|
}
|
|
79
91
|
catch (error) {
|
|
80
|
-
|
|
81
|
-
|
|
92
|
+
// Transport failure is never fatal -- the socket's close handler arms the
|
|
93
|
+
// reconnect timer and local control already answers. Only invalid
|
|
94
|
+
// configuration throws, and validateConfig() has done so above.
|
|
95
|
+
const reason = error instanceof Error ? error.message : String(error);
|
|
96
|
+
SinricProSdkLogger_1.SinricProSdkLogger.warn(`Cloud connection failed (${reason}); will keep retrying`);
|
|
82
97
|
}
|
|
98
|
+
SinricProSdkLogger_1.SinricProSdkLogger.info('SinricPro SDK initialized successfully');
|
|
99
|
+
}
|
|
100
|
+
async startLocalControl() {
|
|
101
|
+
if (!this.config.localControl) {
|
|
102
|
+
SinricProSdkLogger_1.SinricProSdkLogger.info('Local control disabled by configuration');
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
this.udpListener = new UdpListener_1.UdpListener();
|
|
106
|
+
this.udpListener.on('message', (message, origin) => {
|
|
107
|
+
this.receiveQueue.push({ message, origin });
|
|
108
|
+
});
|
|
109
|
+
try {
|
|
110
|
+
await this.udpListener.start();
|
|
111
|
+
}
|
|
112
|
+
catch {
|
|
113
|
+
// Already logged by the listener; the cloud path is unaffected.
|
|
114
|
+
this.udpListener = null;
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
if (!this.config.mdns) {
|
|
118
|
+
SinricProSdkLogger_1.SinricProSdkLogger.info('mDNS announcement disabled by configuration');
|
|
119
|
+
return;
|
|
120
|
+
}
|
|
121
|
+
this.mdnsAnnouncer = new MdnsAnnouncer_1.MdnsAnnouncer();
|
|
122
|
+
this.mdnsAnnouncer.start(Array.from(this.devices.keys()));
|
|
83
123
|
}
|
|
84
124
|
/**
|
|
85
125
|
* Add a device to SinricPro
|
|
@@ -111,6 +151,8 @@ class SinricPro extends events_1.EventEmitter {
|
|
|
111
151
|
// Update WebSocket device list if already connected
|
|
112
152
|
if (this.isInitialized) {
|
|
113
153
|
this.websocket.updateDeviceList(Array.from(this.devices.keys()));
|
|
154
|
+
// Re-announce only because the device list changed.
|
|
155
|
+
this.mdnsAnnouncer?.update(Array.from(this.devices.keys()));
|
|
114
156
|
}
|
|
115
157
|
return device;
|
|
116
158
|
}
|
|
@@ -149,6 +191,80 @@ class SinricPro extends events_1.EventEmitter {
|
|
|
149
191
|
onPong(callback) {
|
|
150
192
|
this.on('pong', callback);
|
|
151
193
|
}
|
|
194
|
+
/**
|
|
195
|
+
* Register a callback for module-level setting changes
|
|
196
|
+
*
|
|
197
|
+
* Module settings are configuration values for the module (dev board) itself,
|
|
198
|
+
* not for individual devices. Use this to handle settings like WiFi retry count,
|
|
199
|
+
* logging level, or other module-wide configurations.
|
|
200
|
+
*
|
|
201
|
+
* @param callback - Function that receives settingId and value, returns boolean or Promise<boolean>
|
|
202
|
+
* @example
|
|
203
|
+
* ```typescript
|
|
204
|
+
* SinricPro.onSetSetting(async (settingId, value) => {
|
|
205
|
+
* if (settingId === 'wifi_retry_count') {
|
|
206
|
+
* setWifiRetryCount(value);
|
|
207
|
+
* }
|
|
208
|
+
* return true;
|
|
209
|
+
* });
|
|
210
|
+
* ```
|
|
211
|
+
*/
|
|
212
|
+
onSetSetting(callback) {
|
|
213
|
+
this.moduleSettingCallback = callback;
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Send a module-level setting event to SinricPro server
|
|
217
|
+
*
|
|
218
|
+
* Module settings are configuration values for the module (dev board) itself.
|
|
219
|
+
* Use this to report setting changes like WiFi configuration, logging level,
|
|
220
|
+
* or other module-wide settings.
|
|
221
|
+
*
|
|
222
|
+
* @param settingId - The setting identifier
|
|
223
|
+
* @param value - The setting value (can be any JSON-serializable type)
|
|
224
|
+
* @param cause - (optional) Reason for the event (default: 'PHYSICAL_INTERACTION')
|
|
225
|
+
* @returns Promise<boolean> - true if event was sent, false if rate limited
|
|
226
|
+
* @example
|
|
227
|
+
* ```typescript
|
|
228
|
+
* await SinricPro.sendSettingEvent('wifi_retry_count', 5);
|
|
229
|
+
* await SinricPro.sendSettingEvent('debug_mode', true);
|
|
230
|
+
* ```
|
|
231
|
+
*/
|
|
232
|
+
async sendSettingEvent(settingId, value, cause = types_1.PHYSICAL_INTERACTION) {
|
|
233
|
+
if (this.settingEventLimiter.isLimited()) {
|
|
234
|
+
return false;
|
|
235
|
+
}
|
|
236
|
+
if (!this.isConnected()) {
|
|
237
|
+
SinricProSdkLogger_1.SinricProSdkLogger.error('Cannot send setting event: Not connected to SinricPro');
|
|
238
|
+
return false;
|
|
239
|
+
}
|
|
240
|
+
const eventMessage = {
|
|
241
|
+
header: {
|
|
242
|
+
payloadVersion: 2,
|
|
243
|
+
signatureVersion: 1,
|
|
244
|
+
},
|
|
245
|
+
payload: {
|
|
246
|
+
action: 'setSetting',
|
|
247
|
+
replyToken: this.generateMessageId(),
|
|
248
|
+
type: 'event',
|
|
249
|
+
createdAt: this.getTimestamp(),
|
|
250
|
+
cause: { type: cause },
|
|
251
|
+
scope: 'module',
|
|
252
|
+
value: { id: settingId, value },
|
|
253
|
+
},
|
|
254
|
+
};
|
|
255
|
+
try {
|
|
256
|
+
await this.sendMessage(eventMessage);
|
|
257
|
+
SinricProSdkLogger_1.SinricProSdkLogger.debug(`Module setting event sent: ${settingId}`, value);
|
|
258
|
+
return true;
|
|
259
|
+
}
|
|
260
|
+
catch (error) {
|
|
261
|
+
SinricProSdkLogger_1.SinricProSdkLogger.error(`Failed to send module setting event ${settingId}:`, error);
|
|
262
|
+
return false;
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
generateMessageId() {
|
|
266
|
+
return `${Date.now()}-${Math.random().toString(36).substring(2, 11)}`;
|
|
267
|
+
}
|
|
152
268
|
/**
|
|
153
269
|
* Stop the SinricPro SDK and disconnect from the server
|
|
154
270
|
* @example
|
|
@@ -163,6 +279,10 @@ class SinricPro extends events_1.EventEmitter {
|
|
|
163
279
|
clearInterval(this.processingInterval);
|
|
164
280
|
this.processingInterval = null;
|
|
165
281
|
}
|
|
282
|
+
this.mdnsAnnouncer?.stop();
|
|
283
|
+
this.mdnsAnnouncer = null;
|
|
284
|
+
this.udpListener?.stop();
|
|
285
|
+
this.udpListener = null;
|
|
166
286
|
await this.websocket.disconnect();
|
|
167
287
|
this.receiveQueue.clear();
|
|
168
288
|
this.sendQueue.clear();
|
|
@@ -178,8 +298,7 @@ class SinricPro extends events_1.EventEmitter {
|
|
|
178
298
|
// ISinricPro interface methods
|
|
179
299
|
async sendMessage(message) {
|
|
180
300
|
message.payload.createdAt = this.getTimestamp();
|
|
181
|
-
this.signature.
|
|
182
|
-
this.sendQueue.push(JSON.stringify(message));
|
|
301
|
+
this.sendQueue.push({ message: this.signature.serialize(message), origin: types_1.WEBSOCKET_ORIGIN });
|
|
183
302
|
}
|
|
184
303
|
getTimestamp() {
|
|
185
304
|
return Math.floor(Date.now() / 1000);
|
|
@@ -198,14 +317,17 @@ class SinricPro extends events_1.EventEmitter {
|
|
|
198
317
|
this.emit('disconnected');
|
|
199
318
|
});
|
|
200
319
|
this.websocket.on('message', (msg) => {
|
|
201
|
-
this.receiveQueue.push(msg);
|
|
320
|
+
this.receiveQueue.push({ message: msg, origin: types_1.WEBSOCKET_ORIGIN });
|
|
202
321
|
});
|
|
203
322
|
this.websocket.on('pong', (latency) => {
|
|
204
323
|
this.emit('pong', latency);
|
|
205
324
|
});
|
|
206
325
|
this.websocket.on('error', (error) => {
|
|
207
326
|
SinricProSdkLogger_1.SinricProSdkLogger.error('WebSocket error:', error);
|
|
208
|
-
|
|
327
|
+
// EventEmitter throws on an unhandled 'error' event; a cloud outage must
|
|
328
|
+
// not take down a process that is still serving local control.
|
|
329
|
+
if (this.listenerCount('error') > 0)
|
|
330
|
+
this.emit('error', error);
|
|
209
331
|
});
|
|
210
332
|
}
|
|
211
333
|
startMessageProcessor() {
|
|
@@ -216,24 +338,32 @@ class SinricPro extends events_1.EventEmitter {
|
|
|
216
338
|
}
|
|
217
339
|
async processReceiveQueue() {
|
|
218
340
|
while (!this.receiveQueue.isEmpty()) {
|
|
219
|
-
const
|
|
220
|
-
if (!
|
|
341
|
+
const entry = this.receiveQueue.pop();
|
|
342
|
+
if (!entry)
|
|
221
343
|
continue;
|
|
344
|
+
const { message: rawMessage, origin } = entry;
|
|
222
345
|
try {
|
|
223
346
|
const message = JSON.parse(rawMessage);
|
|
224
347
|
// Handle timestamp message
|
|
225
348
|
if ('timestamp' in message) {
|
|
226
349
|
continue;
|
|
227
350
|
}
|
|
228
|
-
//
|
|
229
|
-
if (!this.signature.validate(
|
|
351
|
+
// Verified against the received bytes, never a re-encoded object.
|
|
352
|
+
if (!this.signature.validate(rawMessage)) {
|
|
230
353
|
SinricProSdkLogger_1.SinricProSdkLogger.error('Invalid message signature');
|
|
231
|
-
this.sendInvalidSignatureResponse(message);
|
|
354
|
+
this.sendInvalidSignatureResponse(message, origin);
|
|
232
355
|
continue;
|
|
233
356
|
}
|
|
234
357
|
// Route message
|
|
235
358
|
if (message.payload.type === 'request') {
|
|
236
|
-
|
|
359
|
+
// Check scope to determine if this is a module or device request
|
|
360
|
+
const scope = message.payload.scope || 'device';
|
|
361
|
+
if (scope === 'module') {
|
|
362
|
+
await this.handleModuleRequest(message, origin);
|
|
363
|
+
}
|
|
364
|
+
else {
|
|
365
|
+
await this.handleRequest(message, origin);
|
|
366
|
+
}
|
|
237
367
|
}
|
|
238
368
|
else if (message.payload.type === 'response') {
|
|
239
369
|
this.emit('response', message);
|
|
@@ -244,31 +374,62 @@ class SinricPro extends events_1.EventEmitter {
|
|
|
244
374
|
}
|
|
245
375
|
}
|
|
246
376
|
}
|
|
377
|
+
/**
|
|
378
|
+
* Route each queued message by its own origin.
|
|
379
|
+
*
|
|
380
|
+
* The queue as a whole is never gated on the cloud - a UDP reply must go out
|
|
381
|
+
* even when the websocket has never connected.
|
|
382
|
+
*/
|
|
247
383
|
processSendQueue() {
|
|
248
|
-
|
|
249
|
-
return;
|
|
250
|
-
}
|
|
384
|
+
const deferred = [];
|
|
251
385
|
while (!this.sendQueue.isEmpty()) {
|
|
252
|
-
const
|
|
253
|
-
if (
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
386
|
+
const entry = this.sendQueue.pop();
|
|
387
|
+
if (!entry)
|
|
388
|
+
continue;
|
|
389
|
+
if (entry.origin.transport === types_1.InterfaceType.UDP) {
|
|
390
|
+
this.udpListener?.send(entry.message, entry.origin.address, entry.origin.port);
|
|
391
|
+
continue;
|
|
392
|
+
}
|
|
393
|
+
if (!this.isConnected()) {
|
|
394
|
+
deferred.push(entry);
|
|
395
|
+
continue;
|
|
396
|
+
}
|
|
397
|
+
try {
|
|
398
|
+
this.websocket.send(entry.message);
|
|
399
|
+
}
|
|
400
|
+
catch (error) {
|
|
401
|
+
SinricProSdkLogger_1.SinricProSdkLogger.error('Failed to send message, will retry later:', error);
|
|
402
|
+
deferred.push(entry);
|
|
403
|
+
break;
|
|
263
404
|
}
|
|
264
405
|
}
|
|
406
|
+
if (deferred.length === 0)
|
|
407
|
+
return;
|
|
408
|
+
// An unreachable cloud must not grow the queue without bound.
|
|
409
|
+
const dropped = Math.max(0, deferred.length - types_1.MAX_QUEUED_WEBSOCKET_MESSAGES);
|
|
410
|
+
if (dropped > 0) {
|
|
411
|
+
SinricProSdkLogger_1.SinricProSdkLogger.warn(`Dropping ${dropped} websocket message(s): offline backlog exceeded ` +
|
|
412
|
+
`${types_1.MAX_QUEUED_WEBSOCKET_MESSAGES}`);
|
|
413
|
+
}
|
|
414
|
+
for (const entry of deferred.slice(dropped).reverse()) {
|
|
415
|
+
this.sendQueue.pushFront(entry);
|
|
416
|
+
}
|
|
265
417
|
}
|
|
266
|
-
async handleRequest(message) {
|
|
418
|
+
async handleRequest(message, origin) {
|
|
267
419
|
const deviceId = message.payload.deviceId;
|
|
268
420
|
const device = deviceId ? this.devices.get(deviceId) : null;
|
|
269
421
|
if (!device) {
|
|
422
|
+
// A LAN request for someone else's device is not ours to answer. Every
|
|
423
|
+
// device on an account shares one app secret, so a reply here is
|
|
424
|
+
// indistinguishable from the real owner's and would send a discovering
|
|
425
|
+
// client to the wrong address. The cloud only ever addresses devices we
|
|
426
|
+
// registered, so it still gets an answer.
|
|
427
|
+
if (origin.transport === types_1.InterfaceType.UDP) {
|
|
428
|
+
SinricProSdkLogger_1.SinricProSdkLogger.debug(`Ignoring LAN request for unknown device: ${deviceId}`);
|
|
429
|
+
return;
|
|
430
|
+
}
|
|
270
431
|
SinricProSdkLogger_1.SinricProSdkLogger.error(`Device not found: ${deviceId}`);
|
|
271
|
-
this.sendErrorResponse(message, `Device ${deviceId} not found
|
|
432
|
+
this.sendErrorResponse(message, `Device ${deviceId} not found`, origin);
|
|
272
433
|
return;
|
|
273
434
|
}
|
|
274
435
|
const request = {
|
|
@@ -278,9 +439,56 @@ class SinricPro extends events_1.EventEmitter {
|
|
|
278
439
|
responseValue: {},
|
|
279
440
|
};
|
|
280
441
|
const success = await device.handleRequest(request);
|
|
281
|
-
this.sendResponse(message, success, request.responseValue, request.errorMessage);
|
|
442
|
+
this.sendResponse(message, success, request.responseValue, origin, request.errorMessage);
|
|
443
|
+
}
|
|
444
|
+
async handleModuleRequest(message, origin) {
|
|
445
|
+
const action = message.payload.action;
|
|
446
|
+
const requestValue = message.payload.value || {};
|
|
447
|
+
if (action === 'setSetting') {
|
|
448
|
+
if (!this.moduleSettingCallback) {
|
|
449
|
+
SinricProSdkLogger_1.SinricProSdkLogger.error('No module setting callback registered');
|
|
450
|
+
this.sendModuleResponse(message, false, {}, origin, 'No module setting callback registered');
|
|
451
|
+
return;
|
|
452
|
+
}
|
|
453
|
+
const settingId = requestValue.id || '';
|
|
454
|
+
const value = requestValue.value;
|
|
455
|
+
try {
|
|
456
|
+
const success = await this.moduleSettingCallback(settingId, value);
|
|
457
|
+
const responseValue = success ? { id: settingId, value } : {};
|
|
458
|
+
this.sendModuleResponse(message, success, responseValue, origin);
|
|
459
|
+
}
|
|
460
|
+
catch (error) {
|
|
461
|
+
SinricProSdkLogger_1.SinricProSdkLogger.error('Error in module setting callback:', error);
|
|
462
|
+
this.sendModuleResponse(message, false, {}, origin, String(error));
|
|
463
|
+
}
|
|
464
|
+
}
|
|
465
|
+
else {
|
|
466
|
+
SinricProSdkLogger_1.SinricProSdkLogger.error(`Unknown module action: ${action}`);
|
|
467
|
+
this.sendModuleResponse(message, false, {}, origin, `Unknown module action: ${action}`);
|
|
468
|
+
}
|
|
282
469
|
}
|
|
283
|
-
|
|
470
|
+
sendModuleResponse(requestMessage, success, value, origin, errorMessage) {
|
|
471
|
+
// Module response does NOT include deviceId
|
|
472
|
+
const responseMessage = {
|
|
473
|
+
header: {
|
|
474
|
+
payloadVersion: 2,
|
|
475
|
+
signatureVersion: 1,
|
|
476
|
+
},
|
|
477
|
+
payload: {
|
|
478
|
+
action: requestMessage.payload.action,
|
|
479
|
+
clientId: requestMessage.payload.clientId,
|
|
480
|
+
createdAt: Math.floor(new Date().getTime() / 1000),
|
|
481
|
+
message: errorMessage || (success ? 'OK' : 'Request failed'),
|
|
482
|
+
replyToken: requestMessage.payload.replyToken,
|
|
483
|
+
scope: 'module',
|
|
484
|
+
success,
|
|
485
|
+
type: 'response',
|
|
486
|
+
value,
|
|
487
|
+
},
|
|
488
|
+
};
|
|
489
|
+
this.sendQueue.push({ message: this.signature.serialize(responseMessage), origin });
|
|
490
|
+
}
|
|
491
|
+
sendResponse(requestMessage, success, value, origin, errorMessage) {
|
|
284
492
|
const responseMessage = {
|
|
285
493
|
header: {
|
|
286
494
|
payloadVersion: 2,
|
|
@@ -293,16 +501,17 @@ class SinricPro extends events_1.EventEmitter {
|
|
|
293
501
|
deviceId: requestMessage.payload.deviceId,
|
|
294
502
|
message: errorMessage || (success ? 'OK' : 'Request failed'),
|
|
295
503
|
replyToken: requestMessage.payload.replyToken,
|
|
504
|
+
scope: 'device',
|
|
296
505
|
success,
|
|
297
506
|
type: 'response',
|
|
298
507
|
value,
|
|
299
508
|
},
|
|
300
509
|
};
|
|
301
|
-
|
|
510
|
+
// instanceId belongs to the payload, so it has to be set before signing.
|
|
302
511
|
if (requestMessage.payload.instanceId) {
|
|
303
512
|
responseMessage.payload.instanceId = requestMessage.payload.instanceId;
|
|
304
513
|
}
|
|
305
|
-
this.sendQueue.push(
|
|
514
|
+
this.sendQueue.push({ message: this.signature.serialize(responseMessage), origin });
|
|
306
515
|
}
|
|
307
516
|
validateConfig(config) {
|
|
308
517
|
// Validate required fields
|
|
@@ -319,11 +528,15 @@ class SinricPro extends events_1.EventEmitter {
|
|
|
319
528
|
throw new Error('Invalid appSecret: must be at least 32 characters long');
|
|
320
529
|
}
|
|
321
530
|
}
|
|
322
|
-
sendErrorResponse(message, errorMessage) {
|
|
323
|
-
this.sendResponse(message, false, { error: errorMessage });
|
|
531
|
+
sendErrorResponse(message, errorMessage, origin) {
|
|
532
|
+
this.sendResponse(message, false, { error: errorMessage }, origin);
|
|
324
533
|
}
|
|
325
|
-
|
|
326
|
-
|
|
534
|
+
/**
|
|
535
|
+
* A request that fails verification is answered rather than dropped, so a
|
|
536
|
+
* client can tell a wrong app secret from an unreachable device.
|
|
537
|
+
*/
|
|
538
|
+
sendInvalidSignatureResponse(message, origin) {
|
|
539
|
+
this.sendResponse(message, false, {}, origin, 'Signature is invalid');
|
|
327
540
|
}
|
|
328
541
|
}
|
|
329
542
|
exports.SinricPro = SinricPro;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SinricPro.js","sourceRoot":"","sources":["../../src/core/SinricPro.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"SinricPro.js","sourceRoot":"","sources":["../../src/core/SinricPro.ts"],"names":[],"mappings":"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"}
|
|
@@ -44,25 +44,31 @@ class SinricProDevice {
|
|
|
44
44
|
}
|
|
45
45
|
async sendEvent(action,
|
|
46
46
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
47
|
-
value, cause = 'PHYSICAL_INTERACTION') {
|
|
47
|
+
value, cause = 'PHYSICAL_INTERACTION', instanceId = '') {
|
|
48
48
|
if (!this.sinricPro) {
|
|
49
49
|
SinricProSdkLogger_1.SinricProSdkLogger.error('Cannot send event: Device not registered with SinricPro');
|
|
50
50
|
return false;
|
|
51
51
|
}
|
|
52
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
53
|
+
const payload = {
|
|
54
|
+
action,
|
|
55
|
+
deviceId: this.deviceId,
|
|
56
|
+
replyToken: this.generateMessageId(),
|
|
57
|
+
type: 'event',
|
|
58
|
+
createdAt: Math.floor(new Date().getTime() / 1000),
|
|
59
|
+
cause: { type: cause },
|
|
60
|
+
value,
|
|
61
|
+
};
|
|
62
|
+
// Include instanceId if provided
|
|
63
|
+
if (instanceId) {
|
|
64
|
+
payload.instanceId = instanceId;
|
|
65
|
+
}
|
|
52
66
|
const eventMessage = {
|
|
53
67
|
header: {
|
|
54
68
|
payloadVersion: 2,
|
|
55
69
|
signatureVersion: 1,
|
|
56
70
|
},
|
|
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
|
-
},
|
|
71
|
+
payload,
|
|
66
72
|
};
|
|
67
73
|
try {
|
|
68
74
|
await this.sinricPro.sendMessage(eventMessage);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SinricProDevice.js","sourceRoot":"","sources":["../../src/core/SinricProDevice.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAGH,oEAAiE;AASjE,MAAsB,eAAe;IAMnC,YAAY,QAAgB,EAAE,WAAmB;QAHvC,cAAS,GAAsB,IAAI,CAAC;QACpC,oBAAe,GAAqB,EAAE,CAAC;QAG/C,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACjC,CAAC;IAED,WAAW;QACT,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED,cAAc;QACZ,OAAO,sBAAsB,IAAI,CAAC,WAAW,EAAE,CAAC;IAClD,CAAC;IAED,YAAY,CAAC,SAAqB;QAChC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC7B,CAAC;IAES,sBAAsB,CAAC,OAAuB;QACtD,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACrC,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,OAAyB;QAC3C,uCAAkB,CAAC,KAAK,CAAC,UAAU,IAAI,CAAC,QAAQ,sBAAsB,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QAExF,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YAC3C,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;gBACtC,IAAI,MAAM,EAAE,CAAC;oBACX,uCAAkB,CAAC,KAAK,CAAC,WAAW,OAAO,CAAC,MAAM,uBAAuB,CAAC,CAAC;oBAC3E,OAAO,IAAI,CAAC;gBACd,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,uCAAkB,CAAC,KAAK,CAAC,0BAA0B,OAAO,CAAC,MAAM,GAAG,EAAE,KAAK,CAAC,CAAC;gBAC7E,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC;QAED,uCAAkB,CAAC,IAAI,CAAC,gCAAgC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QAC1E,OAAO,KAAK,CAAC;IACf,CAAC;IAES,KAAK,CAAC,SAAS,CACvB,MAAc;IACd,8DAA8D;IAC9D,KAA0B,EAC1B,QAAgB,sBAAsB;
|
|
1
|
+
{"version":3,"file":"SinricProDevice.js","sourceRoot":"","sources":["../../src/core/SinricProDevice.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,6 +10,7 @@ exports.WebSocketClient = void 0;
|
|
|
10
10
|
const ws_1 = __importDefault(require("ws"));
|
|
11
11
|
const events_1 = require("events");
|
|
12
12
|
const SinricProSdkLogger_1 = require("../utils/SinricProSdkLogger");
|
|
13
|
+
const network_1 = require("../utils/network");
|
|
13
14
|
const types_1 = require("./types");
|
|
14
15
|
const package_json_1 = require("../../package.json");
|
|
15
16
|
class WebSocketClient extends events_1.EventEmitter {
|
|
@@ -39,9 +40,9 @@ class WebSocketClient extends events_1.EventEmitter {
|
|
|
39
40
|
const headers = {
|
|
40
41
|
appkey: this.config.appKey,
|
|
41
42
|
deviceids: this.config.deviceIds.join(';'),
|
|
42
|
-
restoredevicestates: this.config.restoreDeviceStates.toString(),
|
|
43
43
|
platform: this.config.platform || 'NodeJS',
|
|
44
44
|
SDKVersion: this.config.sdkVersion || package_json_1.version,
|
|
45
|
+
mac: (0, network_1.getMacAddress)(),
|
|
45
46
|
};
|
|
46
47
|
SinricProSdkLogger_1.SinricProSdkLogger.info(`Connecting to ${url}`);
|
|
47
48
|
SinricProSdkLogger_1.SinricProSdkLogger.debug('WebSocket headers:', headers);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WebSocketClient.js","sourceRoot":"","sources":["../../src/core/WebSocketClient.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;AAEH,4CAA2B;AAC3B,mCAAsC;AACtC,oEAAiE;AACjE,mCAIiB;AACjB,qDAA6C;
|
|
1
|
+
{"version":3,"file":"WebSocketClient.js","sourceRoot":"","sources":["../../src/core/WebSocketClient.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;AAEH,4CAA2B;AAC3B,mCAAsC;AACtC,oEAAiE;AACjE,8CAAiD;AACjD,mCAIiB;AACjB,qDAA6C;AAU7C,MAAa,eAAgB,SAAQ,qBAAY;IAU/C,YAAY,MAAuB;QACjC,KAAK,EAAE,CAAC;QAVF,OAAE,GAAqB,IAAI,CAAC;QAE5B,iBAAY,GAA0B,IAAI,CAAC;QAC3C,gBAAW,GAA0B,IAAI,CAAC;QAC1C,qBAAgB,GAA0B,IAAI,CAAC;QAC/C,cAAS,GAAY,KAAK,CAAC;QAC3B,oBAAe,GAAY,IAAI,CAAC;QAChC,iBAAY,GAAW,CAAC,CAAC;QAI/B,IAAI,CAAC,MAAM,GAAG;YACZ,QAAQ,EAAE,QAAQ;YAClB,UAAU,EAAE,sBAAO;YACnB,GAAG,MAAM;SACV,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,OAAO;QACX,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,uCAAkB,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;YACvD,OAAO;QACT,CAAC;QAED,MAAM,QAAQ,GAAG,KAAK,CAAC;QACvB,MAAM,IAAI,GAAG,iCAAyB,CAAC;QACvC,MAAM,GAAG,GAAG,GAAG,QAAQ,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,IAAI,GAAG,CAAC;QAE9D,MAAM,OAAO,GAA2B;YACtC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM;YAC1B,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC;YAC1C,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,QAAQ;YAC1C,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,sBAAO;YAC7C,GAAG,EAAE,IAAA,uBAAa,GAAE;SACrB,CAAC;QAEF,uCAAkB,CAAC,IAAI,CAAC,iBAAiB,GAAG,EAAE,CAAC,CAAC;QAChD,uCAAkB,CAAC,KAAK,CAAC,oBAAoB,EAAE,OAAO,CAAC,CAAC;QAExD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,IAAI,CAAC,EAAE,GAAG,IAAI,YAAS,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;YAE1C,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE;gBACtB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;gBACtB,IAAI,CAAC,cAAc,EAAE,CAAC;gBACtB,uCAAkB,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;gBAC/C,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;gBACvB,OAAO,EAAE,CAAC;YACZ,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,IAAoB,EAAE,EAAE;gBAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAChC,uCAAkB,CAAC,KAAK,CAAC,qBAAqB,EAAE,OAAO,CAAC,CAAC;gBACzD,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YAChC,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;gBACvB,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;gBACvB,IAAI,CAAC,aAAa,EAAE,CAAC;gBACrB,uCAAkB,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;gBAClD,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;gBAE1B,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;oBACzB,IAAI,CAAC,iBAAiB,EAAE,CAAC;gBAC3B,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;gBAC5B,uCAAkB,CAAC,KAAK,CAAC,kBAAkB,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;gBAC5D,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;gBAC1B,MAAM,CAAC,KAAK,CAAC,CAAC;YAChB,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE;gBACtB,2CAA2C;gBAC3C,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;oBACrB,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;oBAC/B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;gBAC1B,CAAC;gBAED,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC;gBAC/C,uCAAkB,CAAC,KAAK,CAAC,qCAAqC,OAAO,KAAK,CAAC,CAAC;gBAC5E,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YAC7B,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAED,IAAI,CAAC,OAAe;QAClB,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YAChC,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;YACxE,uCAAkB,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACxC,MAAM,KAAK,CAAC;QACd,CAAC;QAED,uCAAkB,CAAC,KAAK,CAAC,oBAAoB,EAAE,OAAO,CAAC,CAAC;QACxD,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACxB,CAAC;IAED,WAAW;QACT,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAEO,cAAc;QACpB,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC,GAAG,EAAE;YACnC,IAAI,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;gBAC9B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;gBAC/B,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;gBACf,uCAAkB,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;gBAEhD,gCAAgC;gBAChC,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC,GAAG,EAAE;oBACjC,uCAAkB,CAAC,KAAK,CAAC,kDAAkD,CAAC,CAAC;oBAC7E,6BAA6B;oBAC7B,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;wBACZ,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC;oBACtB,CAAC;gBACH,CAAC,EAAE,8BAAsB,CAAC,CAAC;YAC7B,CAAC;QACH,CAAC,EAAE,+BAAuB,CAAC,CAAC;IAC9B,CAAC;IAEO,aAAa;QACnB,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YACjC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QAC3B,CAAC;QAED,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAC/B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QAC1B,CAAC;IACH,CAAC;IAEO,iBAAiB;QACvB,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC1B,YAAY,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QACtC,CAAC;QAED,IAAI,CAAC,gBAAgB,GAAG,UAAU,CAAC,GAAG,EAAE;YACtC,uCAAkB,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;YACtD,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;gBAC7B,uCAAkB,CAAC,KAAK,CAAC,sBAAsB,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;YAClE,CAAC,CAAC,CAAC;QACL,CAAC,EAAE,IAAI,CAAC,CAAC;IACX,CAAC;IAED,gBAAgB,CAAC,SAAmB;QAClC,IAAI,CAAC,MAAM,CAAC,SAAS,GAAG,SAAS,CAAC;IACpC,CAAC;IAED,KAAK,CAAC,UAAU;QACd,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;QAE7B,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC1B,YAAY,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;YACpC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;QAC/B,CAAC;QAED,IAAI,CAAC,aAAa,EAAE,CAAC;QAErB,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;YACZ,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;YAChB,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC;QACjB,CAAC;QAED,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;IACzB,CAAC;CACF;AAxKD,0CAwKC"}
|