openWebSocket: use v2 API

This commit is contained in:
Martín M
2020-10-26 21:10:51 -03:00
parent 08e84b5fea
commit 82f152d624
4 changed files with 29 additions and 8 deletions

View File

@@ -96,6 +96,11 @@ class eWeLink {
return `wss://${this.region}-pconnect3.coolkit.cc:8080/api/ws`;
}
getDispatchServiceUrl() {
const domain = this.region === 'cn' ? 'cn' : 'cc';
return `https://${this.region}-dispa.coolkit.${domain}`;
}
/**
* Generate Zeroconf URL
* @param device

View File

@@ -13,7 +13,7 @@ const { getDevices } = require('./getDevices');
const { getFirmwareVersion } = require('./getFirmwareVersion');
const { getRegion } = require('./getRegion');
const { makeRequest } = require('./makeRequest');
const { openWebSocket } = require('./openWebSocket');
const openWebSocket = require('./openWebSocket');
const { saveDevicesCache } = require('./saveDevicesCache');
const { setDevicePowerState } = require('./setDevicePowerState');
const { toggleDevicePowerState } = require('./toggleDevicePowerState');
@@ -34,7 +34,7 @@ const mixins = {
getFirmwareVersion,
getRegion,
makeRequest,
openWebSocket,
...openWebSocket,
saveDevicesCache,
setDevicePowerState,
toggleDevicePowerState,

View File

@@ -1,7 +1,9 @@
const fetch = require('node-fetch');
const W3CWebSocket = require('websocket').w3cwebsocket;
const WebSocketAsPromised = require('websocket-as-promised');
const wssLoginPayload = require('../payloads/wssLoginPayload');
const errors = require('../data/errors');
module.exports = {
/**
@@ -13,17 +15,20 @@ module.exports = {
* @returns {Promise<WebSocketAsPromised>}
*/
async openWebSocket(callback, ...{ heartbeat = 120000 }) {
const dispatch = await this.getWebSocketServer();
const WSS_URL = `wss://${dispatch.domain}:${dispatch.port}/api/ws`;
const payloadLogin = wssLoginPayload({
at: this.at,
apiKey: this.apiKey,
appid: this.APP_ID,
});
const wsp = new WebSocketAsPromised(this.getApiWebSocket(), {
createWebSocket: wss => new W3CWebSocket(wss),
const wsp = new WebSocketAsPromised(WSS_URL, {
createWebSocket: (wss) => new W3CWebSocket(wss),
});
wsp.onMessage.addListener(message => {
wsp.onMessage.addListener((message) => {
try {
const data = JSON.parse(message);
callback(data);
@@ -41,4 +46,15 @@ module.exports = {
return wsp;
},
async getWebSocketServer() {
const requestUrl = this.getDispatchServiceUrl();
const request = await fetch(`${requestUrl}/dispatch/app`);
if (!request.ok) {
throw new Error(`[${request.status}] ${errors[request.status]}`);
}
return request.json();
},
};

View File

@@ -3,14 +3,14 @@ const { timestamp, nonce } = require('../helpers/utilities');
const wssLoginPayload = ({ at, apiKey, appid }) => {
const payload = {
action: 'userOnline',
version: 8,
ts: timestamp,
at,
userAgent: 'app',
apikey: apiKey,
appid,
nonce,
ts: timestamp,
userAgent: 'app',
sequence: Math.floor(timestamp * 1000),
version: 8,
};
return JSON.stringify(payload);