diff --git a/CHANGELOG.md b/CHANGELOG.md index 84f6d02..cd3669d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,9 @@ # Changelog All notable changes to this project will be documented in this file. +## [11.3.0] - 2024-09-27 +### removed all promises + ## [11.2.0] - 2024-09-19 ### all gen2+ devices can act as blu gateway - [#164](https://github.com/windkh/node-red-contrib-shelly/issues/164) diff --git a/package.json b/package.json index f59a222..ba41c4a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "node-red-contrib-shelly", - "version": "11.2.0", + "version": "11.3.0", "description": "Shelly nodes.", "node-red": { "version": ">=3.0.0", diff --git a/shelly/99-shelly.js b/shelly/99-shelly.js index 317334f..a213913 100644 --- a/shelly/99-shelly.js +++ b/shelly/99-shelly.js @@ -297,86 +297,73 @@ module.exports = function (RED) { } - // Gets the type from the model. - function getDeviceType(model){ - let deviceType; - - let keys = Object.keys(config.devices); - for (let i = 0; i < keys.length; i++) { - let device = config.devices[i]; - if (device.model === model) { - deviceType = device.type; - break; - } - - }; - - return deviceType; - } + // Gets the type from the model. + function getDeviceType(model){ + let deviceType; + let keys = Object.keys(config.devices); + for (let i = 0; i < keys.length; i++) { + let device = config.devices[i]; + if (device.model === model) { + deviceType = device.type; + break; + } - + }; - // generic REST request wrapper with promise - function shellyRequestAsync(axiosInstance, method, route, params, data, credentials, timeout){ - return new Promise(function (resolve, reject) { + return deviceType; + } - if (timeout === undefined || timeout === null){ - timeout = 5003; - }; - // We avoid an invalid timeout by taking a default if 0. - let requestTimeout = timeout; - if (requestTimeout <= 0){ - requestTimeout = 5004; - } + // generic REST request wrapper. + async function shellyRequestAsync(axiosInstance, method, route, params, data, credentials, timeout){ + + if (timeout === undefined || timeout === null){ + timeout = 5003; + }; - let headers = getHeaders(credentials); + // We avoid an invalid timeout by taking a default if 0. + let requestTimeout = timeout; + if (requestTimeout <= 0){ + requestTimeout = 5004; + } - let baseUrl = 'http://' + credentials.hostname; - let config = { - baseURL : baseUrl, - url : route, - method : method, - params : params, - data : data, - headers : headers, - timeout: requestTimeout, - validateStatus : (status) => status === 200 || status === 401 - }; + let headers = getHeaders(credentials); - try { - const request = axiosInstance.request(config); - - request.then(response => { - if (response.status == 200){ - resolve(response.data) - } else if (response.status == 401){ - config.headers = { - 'Authorization': getDigestAuthorization(response, credentials, config) - } - - const digestRequest = axiosInstance.request(config); - digestRequest.then(response => { - if (response.status == 200){ - resolve(response.data) - } - else { - reject(response.statusText + ' ' + config.url); - } - }) - } else { - reject(response.statusText); - } - }) - .catch(error => { - reject(error); - }); + let baseUrl = 'http://' + credentials.hostname; + let config = { + baseURL : baseUrl, + url : route, + method : method, + params : params, + data : data, + headers : headers, + timeout: requestTimeout, + validateStatus : (status) => status === 200 || status === 401 + }; + + let result; + const response = await axiosInstance.request(config); + if (response.status == 200){ + result = response.data; + } else if (response.status == 401){ + config.headers = { + 'Authorization': getDigestAuthorization(response, credentials, config) } - catch(error2) { - reject(error2); + + const digestResponse = await axiosInstance.request(config); + if (digestResponse.status == 200){ + result = digestResponse.data; } - }); + else { + throw new Error(digestResponse.statusText + ' ' + config.url); + } + + } else { + throw new Error(response.statusText + ' ' + config.url); + } + + return result; } @@ -560,11 +547,8 @@ module.exports = function (RED) { } } - function startAsync(node, types){ - return new Promise(function (resolve, reject) { - start(node, types); - resolve(); - }); + async function startAsync(node, types){ + start(node, types); } // GEN 1 -------------------------------------------------------------------------------------- @@ -2841,53 +2825,43 @@ module.exports = function (RED) { return params; }; - // generic REST cloud request wrapper with promise - function shellyCloudRequestAsync(method, route, data, credentials, timeout){ - return new Promise(function (resolve, reject) { + // generic REST cloud request wrapper + async function shellyCloudRequestAsync(method, route, data, credentials, timeout){ + + if (timeout === undefined || timeout === null){ + timeout = 10000; + }; - if (timeout === undefined || timeout === null){ - timeout = 10000; - }; + // We avoid an invalid timeout by taking a default if 0. + let requestTimeout = timeout; + if (requestTimeout <= 0){ + requestTimeout = 10000; + } - // We avoid an invalid timeout by taking a default if 0. - let requestTimeout = timeout; - if (requestTimeout <= 0){ - requestTimeout = 10000; - } + let encodedData = 'auth_key=' + credentials.authKey; + if (data !== undefined && data !== null) { + encodedData += '&' + data; + } - let encodedData = 'auth_key=' + credentials.authKey; - if (data !== undefined && data !== null) { - encodedData += '&' + data; - } + let baseUrl = credentials.serverUri; + let config = { + baseURL : baseUrl, + url : route, + method : method, + data : encodedData, + timeout: requestTimeout, + validateStatus : (status) => status === 200 + }; - let baseUrl = credentials.serverUri; - let config = { - baseURL : baseUrl, - url : route, - method : method, - data : encodedData, - timeout: requestTimeout, - validateStatus : (status) => status === 200 - }; + let result; + const response = await cloudAxios.request(config); + if (response.status == 200){ + result = response.data; + } else { + throw new Error(response.statusText + ' ' + config.url); + } - try { - const request = cloudAxios.request(config); - - request.then(response => { - if (response.status == 200){ - resolve(response.data) - } else { - reject(response.statusText); - } - }) - .catch(error => { - reject(error); - }); - } - catch(error2) { - reject(error2); - } - }); + return result; } // --------------------------------------------------------------------------------------------