mirror of
https://github.com/skydiver/ewelink-api.git
synced 2025-12-21 21:33:11 +01:00
* set APP_ID and APP_SECRET from main class * add APP_ID and APP_SECRET as class constructor parameters * updated test case * updated test case * added new test case * docs updated * Release v3.1.0 - "setWSDevicePowerState" (#96) * new mixing to control devices using websocket * switch status on single channel devices * working on deviceControl mixin * better error handling * working on fix for shared devices * refactor/cleanup * added helper function * added docs for new method * return device new status * added test cases * properly close websocket connection and clean used properties * added test cases * error detection enhancements * added test cases * error detection enhancements * added new test file to jest setup * method renamed * fix for closing websocket connection * new getWSDevicePowerState method * added test cases * re-arrange tests * added new test cases * extract helpers methods * added test case * close WebSocket connection on auth error * updated docs * updated dependencies * fix for "forbidden" error * updated dependencies
55 lines
1.5 KiB
JavaScript
55 lines
1.5 KiB
JavaScript
const fetch = require('node-fetch');
|
|
|
|
const { _get } = require('../helpers/utilities');
|
|
const credentialsPayload = require('../payloads/credentialsPayload');
|
|
const { makeAuthorizationSign } = require('../helpers/ewelink');
|
|
const errors = require('../data/errors');
|
|
|
|
module.exports = {
|
|
/**
|
|
* Returns user credentials information
|
|
*
|
|
* @returns {Promise<{msg: string, error: *}>}
|
|
*/
|
|
async getCredentials() {
|
|
const { APP_ID, APP_SECRET } = this;
|
|
|
|
const body = credentialsPayload({
|
|
appid: APP_ID,
|
|
email: this.email,
|
|
phoneNumber: this.phoneNumber,
|
|
password: this.password,
|
|
});
|
|
|
|
const request = await fetch(`${this.getApiUrl()}/user/login`, {
|
|
method: 'post',
|
|
headers: {
|
|
Authorization: `Sign ${makeAuthorizationSign(APP_SECRET, body)}`,
|
|
},
|
|
body: JSON.stringify(body),
|
|
});
|
|
|
|
let response = await request.json();
|
|
|
|
const error = _get(response, 'error', false);
|
|
const region = _get(response, 'region', false);
|
|
|
|
if (error && [400, 401, 404].indexOf(parseInt(error)) !== -1) {
|
|
return { error: 406, msg: errors['406'] };
|
|
}
|
|
|
|
if (error && parseInt(error) === 301 && region) {
|
|
if (this.region !== region) {
|
|
this.region = region;
|
|
response = await this.getCredentials();
|
|
return response;
|
|
}
|
|
return { error, msg: 'Region does not exist' };
|
|
}
|
|
|
|
this.apiKey = _get(response, 'user.apikey', '');
|
|
this.at = _get(response, 'at', '');
|
|
return response;
|
|
},
|
|
};
|