From 71f6ccb4db7f17edcd11eea4d7222d9f2f837aaa Mon Sep 17 00:00:00 2001 From: faris Aljohari <83524184+farisaljohari@users.noreply.github.com> Date: Wed, 25 Jun 2025 05:20:26 -0600 Subject: [PATCH 1/3] fix: add validation for missing properties in device status logs --- .../devices-status/services/devices-status.service.ts | 8 +++++++- .../common/src/helper/services/tuya.web.socket.service.ts | 8 ++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/libs/common/src/firebase/devices-status/services/devices-status.service.ts b/libs/common/src/firebase/devices-status/services/devices-status.service.ts index 3fae855..7bbdd87 100644 --- a/libs/common/src/firebase/devices-status/services/devices-status.service.ts +++ b/libs/common/src/firebase/devices-status/services/devices-status.service.ts @@ -95,7 +95,13 @@ export class DeviceStatusFirebaseService { for (const item of batch) { const device = deviceMap.get(item.deviceTuyaUuid); if (!device?.uuid) continue; - + if (!Array.isArray(item.log?.properties)) { + console.warn( + `🚨 Missing properties for device: ${item.deviceTuyaUuid}`, + ); + console.log('🔍 Problematic item:', JSON.stringify(item, null, 2)); + continue; + } const logs = item.log.properties.map((property) => this.deviceStatusLogRepository.create({ deviceId: device.uuid, diff --git a/libs/common/src/helper/services/tuya.web.socket.service.ts b/libs/common/src/helper/services/tuya.web.socket.service.ts index 1db1991..3bc3bc8 100644 --- a/libs/common/src/helper/services/tuya.web.socket.service.ts +++ b/libs/common/src/helper/services/tuya.web.socket.service.ts @@ -107,6 +107,14 @@ export class TuyaWebSocketService { console.log(`🔁 Processing batch of size: ${batch.length}`); try { + batch.forEach((item, index) => { + if (!Array.isArray(item?.logData?.properties)) { + console.warn( + `❌ Item #${index + 1} has invalid or missing 'properties':`, + ); + console.log(JSON.stringify(item, null, 2)); + } + }); await this.deviceStatusFirebaseService.addBatchDeviceStatusToOurDb( batch?.map((item) => ({ deviceTuyaUuid: item.devId, From a83424f45b0b3517171dde2d1018e07c83a80fe6 Mon Sep 17 00:00:00 2001 From: faris Aljohari <83524184+farisaljohari@users.noreply.github.com> Date: Wed, 25 Jun 2025 05:29:28 -0600 Subject: [PATCH 2/3] fix: remove unnecessary validation for missing properties in device status logs --- .../devices-status/services/devices-status.service.ts | 7 ------- .../src/helper/services/tuya.web.socket.service.ts | 11 +++-------- 2 files changed, 3 insertions(+), 15 deletions(-) diff --git a/libs/common/src/firebase/devices-status/services/devices-status.service.ts b/libs/common/src/firebase/devices-status/services/devices-status.service.ts index 7bbdd87..a4f7aad 100644 --- a/libs/common/src/firebase/devices-status/services/devices-status.service.ts +++ b/libs/common/src/firebase/devices-status/services/devices-status.service.ts @@ -95,13 +95,6 @@ export class DeviceStatusFirebaseService { for (const item of batch) { const device = deviceMap.get(item.deviceTuyaUuid); if (!device?.uuid) continue; - if (!Array.isArray(item.log?.properties)) { - console.warn( - `🚨 Missing properties for device: ${item.deviceTuyaUuid}`, - ); - console.log('🔍 Problematic item:', JSON.stringify(item, null, 2)); - continue; - } const logs = item.log.properties.map((property) => this.deviceStatusLogRepository.create({ deviceId: device.uuid, diff --git a/libs/common/src/helper/services/tuya.web.socket.service.ts b/libs/common/src/helper/services/tuya.web.socket.service.ts index 3bc3bc8..9d56240 100644 --- a/libs/common/src/helper/services/tuya.web.socket.service.ts +++ b/libs/common/src/helper/services/tuya.web.socket.service.ts @@ -51,6 +51,9 @@ export class TuyaWebSocketService { this.client.message(async (ws: WebSocket, message: any) => { try { const { devId, status, logData } = this.extractMessageData(message); + if (!Array.isArray(logData?.properties)) { + return; + } if (this.sosHandlerService.isSosTriggered(status)) { await this.sosHandlerService.handleSosEventFirebase(devId, logData); } else { @@ -107,14 +110,6 @@ export class TuyaWebSocketService { console.log(`🔁 Processing batch of size: ${batch.length}`); try { - batch.forEach((item, index) => { - if (!Array.isArray(item?.logData?.properties)) { - console.warn( - `❌ Item #${index + 1} has invalid or missing 'properties':`, - ); - console.log(JSON.stringify(item, null, 2)); - } - }); await this.deviceStatusFirebaseService.addBatchDeviceStatusToOurDb( batch?.map((item) => ({ deviceTuyaUuid: item.devId, From 324661e1eee6aea203139afde2f4cac040848620 Mon Sep 17 00:00:00 2001 From: faris Aljohari <83524184+farisaljohari@users.noreply.github.com> Date: Wed, 25 Jun 2025 05:30:15 -0600 Subject: [PATCH 3/3] fix: add missing check for device UUID in batch processing logs --- .../firebase/devices-status/services/devices-status.service.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/libs/common/src/firebase/devices-status/services/devices-status.service.ts b/libs/common/src/firebase/devices-status/services/devices-status.service.ts index a4f7aad..3fae855 100644 --- a/libs/common/src/firebase/devices-status/services/devices-status.service.ts +++ b/libs/common/src/firebase/devices-status/services/devices-status.service.ts @@ -95,6 +95,7 @@ export class DeviceStatusFirebaseService { for (const item of batch) { const device = deviceMap.get(item.deviceTuyaUuid); if (!device?.uuid) continue; + const logs = item.log.properties.map((property) => this.deviceStatusLogRepository.create({ deviceId: device.uuid,