mirror of
https://github.com/skydiver/ewelink-api.git
synced 2025-12-21 21:33:11 +01:00
openWebSocket: use v2 API
This commit is contained in:
5
main.js
5
main.js
@@ -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
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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();
|
||||
},
|
||||
};
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user