mirror of
https://github.com/skydiver/ewelink-api.git
synced 2025-12-31 01:57:23 +01:00
Release v1.4.0 (#11)
* refactor websocket / power usage * cooldown between api requests during testing * refactor power state methods * remove unused code * cooldown between api requests during testing * version bump
This commit is contained in:
55
classes/WebSocket.js
Normal file
55
classes/WebSocket.js
Normal file
@@ -0,0 +1,55 @@
|
||||
const W3CWebSocket = require('websocket').w3cwebsocket;
|
||||
const WebSocketAsPromised = require('websocket-as-promised');
|
||||
const delay = require('delay');
|
||||
|
||||
class WebSocket {
|
||||
/**
|
||||
* Open WebSocket connection and send provided payloads
|
||||
*
|
||||
* @param url
|
||||
* @param payloads
|
||||
* @param delayTime
|
||||
*
|
||||
* @returns {Array}
|
||||
*/
|
||||
static async WebSocketRequest(url, payloads, ...{ delayTime = 1000 }) {
|
||||
const wsp = new WebSocketAsPromised(url, {
|
||||
createWebSocket: wss => new W3CWebSocket(wss),
|
||||
});
|
||||
|
||||
const responses = [];
|
||||
wsp.onMessage.addListener(message => responses.push(JSON.parse(message)));
|
||||
|
||||
try {
|
||||
await wsp.open();
|
||||
|
||||
for (const payload of payloads) {
|
||||
await wsp.send(payload);
|
||||
await delay(delayTime);
|
||||
}
|
||||
|
||||
await wsp.close();
|
||||
} catch (e) {
|
||||
return this.customThrowError(e);
|
||||
}
|
||||
|
||||
return responses;
|
||||
}
|
||||
|
||||
/**
|
||||
* Parse WebSocket errors and return user friendly messages
|
||||
*
|
||||
* @param e
|
||||
*
|
||||
* @returns {{error: string}|{msg: string, error: number}}
|
||||
*/
|
||||
static customThrowError(e) {
|
||||
const loginError = e.message.indexOf('WebSocket is not opened');
|
||||
if (loginError > -1) {
|
||||
return { error: 401, msg: 'Authentication error' };
|
||||
}
|
||||
return { error: 'An unknown error occurred' };
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = WebSocket;
|
||||
Reference in New Issue
Block a user