mirror of
https://github.com/skydiver/ewelink-api.git
synced 2025-12-24 14:31:53 +01:00
* 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
56 lines
1.3 KiB
JavaScript
56 lines
1.3 KiB
JavaScript
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;
|