Skip to content
33 changes: 23 additions & 10 deletions front/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 3 additions & 3 deletions front/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@
"cropperjs": "^1.5.12",
"date-fns": "^2.22.1",
"dayjs": "^1.10.6",
"debounce": "^1.2.1",
"debounce": "^3.0.0",
Comment thread
coderabbitai[bot] marked this conversation as resolved.
"dotenv": "^6.2.0",
"eslint-plugin-i18n-json": "^4.0.0",
"get-value": "^3.0.1",
Expand All @@ -69,8 +69,8 @@
"preact": "^10.7.2",
"preact-async-route": "^2.2.1",
"preact-i18n": "^2.4.0-preactx",
"preact-router": "^3.2.1",
"qrcode": "^1.4.2",
"preact-router": "^4.1.2",
Comment thread
coderabbitai[bot] marked this conversation as resolved.
"qrcode": "^1.5.4",
"react-big-calendar": "^1.19.4",
"react-clock": "^4.5.0",
"react-datepicker": "^3.8.0",
Expand Down
2 changes: 1 addition & 1 deletion front/src/routes/integration/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ class Integration extends Component {
searchKeyword: '',
orderDir: 'asc'
};
this.getIntegrationsDebounced = debounce(this.getIntegrations, 300);
this.getIntegrationsDebounced = debounce(this.getIntegrations, 300).bind(this);
}

componentWillMount() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,9 @@ class SettingsSystemBatteryLevelWarning extends Component {
});
};

debouncedUpdateBatteryLevelUnderWarningThreshold = debounce(this.updateBatteryLevelUnderWarningThreshold, 200);
debouncedUpdateBatteryLevelUnderWarningThreshold = debounce(this.updateBatteryLevelUnderWarningThreshold, 200).bind(
this
);

updateBatteryLevelUnderWarningEnabled = async () => {
const value = !this.state.batteryLevelUnderWarningEnabled;
Expand Down
4 changes: 1 addition & 3 deletions server/lib/device/device.notify.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
const get = require('get-value');

const logger = require('../../utils/logger');
const { EVENTS } = require('../../utils/constants');

Expand Down Expand Up @@ -31,7 +29,7 @@ async function notify(device, event) {
const service = this.serviceManager.getServiceById(device.service_id);
if (service === null) {
logger.warn(`Service ${device.service_id} was not found.`);
} else if (typeof get(service, `device.${serviceFuncName}`) !== 'function') {
} else if (typeof service?.device?.[serviceFuncName] !== 'function') {
logger.debug(`Function device.${serviceFuncName} in service ${service.name} does not exist.`);
} else {
try {
Expand Down
3 changes: 1 addition & 2 deletions server/lib/device/device.poll.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
const get = require('get-value');
const { NotFoundError } = require('../../utils/coreErrors');
const logger = require('../../utils/logger');

Expand All @@ -14,7 +13,7 @@ async function poll(device) {
if (service === null) {
throw new NotFoundError(`Service ${device.service.name} was not found.`);
}
if (typeof get(service, 'device.poll') !== 'function') {
if (typeof service?.device?.poll !== 'function') {
throw new NotFoundError(`Service ${device.service.name} does not have a device.poll function.`);
}
try {
Expand Down
4 changes: 1 addition & 3 deletions server/lib/device/device.setValue.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
const get = require('get-value');

const { NotFoundError } = require('../../utils/coreErrors');

/**
Expand All @@ -16,7 +14,7 @@ async function setValue(device, deviceFeature, value, options = {}) {
if (service === null) {
throw new NotFoundError(`Service ${device.service.name} was not found.`);
}
if (typeof get(service, 'device.setValue') !== 'function') {
if (typeof service?.device?.setValue !== 'function') {
throw new NotFoundError(`Function device.setValue in service ${device.service.name} does not exist.`);
}
await service.device.setValue(device, deviceFeature, value, options);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
const get = require('get-value');

const { Error403 } = require('../../../utils/httpErrors');

/**
Expand All @@ -17,7 +15,7 @@ async function enedisGetConsumptionLoadCurve(query) {
const consumption = await this.gladysGatewayClient.enedisGetConsumptionLoadCurve(query);
return consumption;
} catch (e) {
if (get(e, 'response.status') === 403) {
if (e?.response?.status === 403) {
throw new Error403();
}
throw e;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
const get = require('get-value');

const { Error403 } = require('../../../utils/httpErrors');

/**
Expand All @@ -17,7 +15,7 @@ async function enedisGetDailyConsumption(query) {
const consumption = await this.gladysGatewayClient.enedisGetDailyConsumption(query);
return consumption;
} catch (e) {
if (get(e, 'response.status') === 403) {
if (e?.response?.status === 403) {
throw new Error403();
}
throw e;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
const get = require('get-value');

const logger = require('../../../utils/logger');
const { Error403 } = require('../../../utils/httpErrors');

Expand All @@ -19,7 +17,7 @@ async function enedisGetDailyConsumptionMaxPower(query) {
return consumption;
} catch (e) {
logger.debug(e);
if (get(e, 'response.status') === 403) {
if (e?.response?.status === 403) {
throw new Error403();
}
throw e;
Expand Down
11 changes: 5 additions & 6 deletions server/lib/gateway/gateway.forwardDeviceStateToAlexa.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
const get = require('get-value');
const uuid = require('uuid');
const { randomUUID } = require('crypto');

const logger = require('../../utils/logger');
const { EVENTS } = require('../../utils/constants');
Expand Down Expand Up @@ -29,8 +28,8 @@ async function sendCurrentState(stateManager, gladysGatewayClient, deviceFeature
return;
}

const func = get(readValues, `${gladysFeature.category}.${gladysFeature.type}`);
const mapping = get(mappings, `${gladysFeature.category}.capabilities.${gladysFeature.type}`);
const func = readValues?.[gladysFeature.category]?.[gladysFeature.type];
const mapping = mappings?.[gladysFeature.category]?.capabilities?.[gladysFeature.type];

if (!func || !mapping) {
logger.debug(`Gladys Gateway: Not forwarding state, device feature doesnt seems handled.`);
Expand All @@ -42,7 +41,7 @@ async function sendCurrentState(stateManager, gladysGatewayClient, deviceFeature
const properties = [
{
namespace: mapping.interface,
name: get(mapping, 'properties.supported.0.name'),
name: mapping?.properties?.supported?.[0]?.name,
value: func(gladysFeature.last_value, gladysFeature),
timeOfSample: now,
uncertaintyInMilliseconds: 0,
Expand All @@ -54,7 +53,7 @@ async function sendCurrentState(stateManager, gladysGatewayClient, deviceFeature
header: {
namespace: 'Alexa',
name: 'ChangeReport',
messageId: uuid.v4(),
messageId: randomUUID(),
payloadVersion: '3',
},
endpoint: {
Expand Down
4 changes: 1 addition & 3 deletions server/lib/gateway/gateway.getBackups.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
const get = require('get-value');

const logger = require('../../utils/logger');
const { ERROR_MESSAGES } = require('../../utils/constants');
const { Error403, Error500 } = require('../../utils/httpErrors');
Expand All @@ -16,7 +14,7 @@ async function getBackups() {
return backups;
} catch (e) {
logger.debug(e);
const status = get(e, 'response.status');
const status = e?.response?.status;
if (status) {
throw new Error403();
} else {
Expand Down
5 changes: 2 additions & 3 deletions server/lib/gateway/gateway.getTTSApiUrl.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
const get = require('get-value');
const logger = require('../../utils/logger');
const { Error403, Error429 } = require('../../utils/httpErrors');

Expand All @@ -17,8 +16,8 @@ async function getTTSApiUrl(body) {
return response;
} catch (e) {
logger.warn(e);
const status = get(e, 'response.status');
const message = get(e, 'response.data.error_message');
const status = e?.response?.status;
const message = e?.response?.data?.error_message;
if (status === 403) {
throw new Error403(message);
}
Expand Down
3 changes: 1 addition & 2 deletions server/lib/gateway/gateway.getUsersKeys.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
const get = require('get-value');
const Promise = require('bluebird');
const logger = require('../../utils/logger');
const { ERROR_MESSAGES } = require('../../utils/constants');
Expand Down Expand Up @@ -47,7 +46,7 @@ async function getUsersKeys() {
return localUsers;
} catch (e) {
logger.debug(e);
const status = get(e, 'response.status');
const status = e?.response?.status;
if (status) {
throw new Error500();
} else {
Expand Down
5 changes: 2 additions & 3 deletions server/lib/gateway/gateway.handleAlexaMessage.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
const get = require('get-value');
const logger = require('../../utils/logger');
const { SYSTEM_VARIABLE_NAMES } = require('../../utils/constants');
const { DIRECTIVE_NAMESPACES_LIST } = require('../../services/alexa/lib/alexa.constants');
Expand Down Expand Up @@ -32,8 +31,8 @@ async function handleAlexaMessage(data, rawMessage, cb) {
);
this.alexaConnected = true;
}
const directiveNamespace = get(body, 'directive.header.namespace');
const directiveName = get(body, 'directive.header.name');
const directiveNamespace = body?.directive?.header?.namespace;
const directiveName = body?.directive?.header?.name;
logger.debug(`gateway.handleAlexaMessage: New message : ${directiveNamespace}`);
let response;
if (directiveNamespace === 'Alexa.Discovery') {
Expand Down
3 changes: 1 addition & 2 deletions server/lib/gateway/gateway.handleGoogleHomeMessage.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
const get = require('get-value');
const logger = require('../../utils/logger');
const { SYSTEM_VARIABLE_NAMES } = require('../../utils/constants');

Expand Down Expand Up @@ -31,7 +30,7 @@ async function handleGoogleHomeMessage(data, rawMessage, cb) {
);
this.googleHomeConnected = true;
}
const firstOrderIntent = get(body, 'inputs.0.intent');
const firstOrderIntent = body?.inputs?.[0]?.intent;
let response;
if (firstOrderIntent === 'action.devices.SYNC') {
response = await service.googleActionsHandler.onSync(body);
Expand Down
6 changes: 2 additions & 4 deletions server/lib/gateway/gateway.handleNewMessage.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
const get = require('get-value');

const { NotFoundError } = require('../../utils/coreErrors');
const { EVENTS } = require('../../utils/constants');

Expand All @@ -22,15 +20,15 @@ async function handleNewMessage(data, rawMessage, cb) {
(user) => user.rsa_public_key === rsaPublicKey && user.ecdsa_public_key === ecdsaPublicKey,
);

if ((!found || !found.accepted) && get(data, 'options.url') !== '/api/v1/user') {
if ((!found || !found.accepted) && data?.options?.url !== '/api/v1/user') {
cb({
status: 403,
error: 'USER_NOT_ACCEPTED_LOCALLY',
message: 'User not allowed to control this Gladys instance',
});
return;
}
if (!rawMessage.local_user_id && get(data, 'options.url') !== '/api/v1/user') {
if (!rawMessage.local_user_id && data?.options?.url !== '/api/v1/user') {
cb({
status: 400,
error: 'GATEWAY_USER_NOT_LINKED',
Expand Down
3 changes: 1 addition & 2 deletions server/lib/gateway/gateway.login.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
const get = require('get-value');
const { webcrypto } = require('crypto');
const logger = require('../../utils/logger');
const { ERROR_MESSAGES } = require('../../utils/constants');
Expand Down Expand Up @@ -29,7 +28,7 @@ async function login(email, password) {
return loginResults;
} catch (e) {
logger.debug(e);
const status = get(e, 'response.status');
const status = e?.response?.status;
if (status) {
throw new Error403();
} else {
Expand Down
5 changes: 2 additions & 3 deletions server/lib/gateway/gateway.openAIAsk.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
const get = require('get-value');
const logger = require('../../utils/logger');
const { Error403, Error429 } = require('../../utils/httpErrors');

Expand All @@ -17,8 +16,8 @@ async function openAIAsk(body) {
return response;
} catch (e) {
logger.debug(e);
const status = get(e, 'response.status');
const message = get(e, 'response.data.error_message');
const status = e?.response?.status;
const message = e?.response?.data?.error_message;
if (status === 403) {
throw new Error403(message);
}
Expand Down
4 changes: 2 additions & 2 deletions server/lib/scene/scene.addScene.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
const cloneDeep = require('lodash.clonedeep');
const uuid = require('uuid');
const { randomUUID } = require('crypto');

const { BadParameters } = require('../../utils/coreErrors');
const { EVENTS } = require('../../utils/constants');
Expand Down Expand Up @@ -35,7 +35,7 @@ function addScene(sceneRaw) {
if (scene.triggers && scene.active) {
scene.triggers.forEach((trigger) => {
// First, we had a trigger key, import to uniquely identify this trigger
trigger.key = uuid.v4();
trigger.key = randomUUID();
if (trigger.type === EVENTS.TIME.CHANGED && trigger.scheduler_type !== 'interval') {
const rule = {};
rule.tz = this.timezone;
Expand Down
5 changes: 2 additions & 3 deletions server/lib/system/system.getContainers.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
const get = require('get-value');
const { PlatformNotCompatible } = require('../../utils/coreErrors');

/**
Expand All @@ -19,8 +18,8 @@ async function getContainers(options = { all: true }) {
image: container.Image,
state: container.State,
id: container.Id,
networkMode: get(container, 'HostConfig.NetworkMode'),
devices: get(container, 'HostConfig.Devices'),
networkMode: container?.HostConfig?.NetworkMode,
devices: container?.HostConfig?.Devices,
created_at: container.Created,
};
});
Expand Down
Loading
Loading