From 3bc692d894c7ecdd79dee52a1a58853766a0ec22 Mon Sep 17 00:00:00 2001 From: Davidson Gomes Date: Tue, 9 Apr 2024 07:30:15 -0300 Subject: [PATCH] adjusts in redis --- src/libs/redis.client.ts | 54 +++++++++++-------- .../use-multi-file-auth-state-redis-db.ts | 6 +-- src/whatsapp/services/monitor.service.ts | 2 +- .../services/whatsapp.baileys.service.ts | 3 +- 4 files changed, 37 insertions(+), 28 deletions(-) diff --git a/src/libs/redis.client.ts b/src/libs/redis.client.ts index 1d74ff15..c1a0fd84 100644 --- a/src/libs/redis.client.ts +++ b/src/libs/redis.client.ts @@ -43,73 +43,81 @@ export class RedisCache { } } - public async instanceKeys(): Promise { + public async getInstanceKeys(): Promise { const keys: string[] = []; try { this.logger.verbose('Fetching instance keys'); for await (const key of this.client.scanIterator({ MATCH: `${this.redisEnv.PREFIX_KEY}:*` })) { keys.push(key); } + return keys; } catch (error) { this.logger.error('Error fetching instance keys ' + error); + throw error; } - return keys; } public async keyExists(key?: string) { - if (key) { - this.logger.verbose('keyExists: ' + key); - return !!(await this.instanceKeys()).find((i) => i === key); + try { + const keys = await this.getInstanceKeys(); + const targetKey = key || this.instanceName; + this.logger.verbose('keyExists: ' + targetKey); + return keys.includes(targetKey); + } catch (error) { + return false; } - this.logger.verbose('keyExists: ' + this.instanceName); - return !!(await this.instanceKeys()).find((i) => i === this.instanceName); } - public async writeData(field: string, data: any) { + public async setData(field: string, data: any) { try { - this.logger.verbose('writeData: ' + field); + this.logger.verbose('setData: ' + field); const json = JSON.stringify(data, BufferJSON.replacer); - - return await this.client.hSet(this.redisEnv.PREFIX_KEY + ':' + this.instanceName, field, json); + await this.client.hSet(`${this.redisEnv.PREFIX_KEY}-${this.instanceName}`, field, json); + return true; } catch (error) { this.logger.error(error); + return false; } } - public async readData(field: string) { + public async getData(field: string): Promise { try { - this.logger.verbose('readData: ' + field); - const data = await this.client.hGet(this.redisEnv.PREFIX_KEY + ':' + this.instanceName, field); + this.logger.verbose('getData: ' + field); + const data = await this.client.hGet(`${this.redisEnv.PREFIX_KEY}-${this.instanceName}`, field); if (data) { - this.logger.verbose('readData: ' + field + ' success'); + this.logger.verbose('getData: ' + field + ' success'); return JSON.parse(data, BufferJSON.reviver); } - this.logger.verbose('readData: ' + field + ' not found'); + this.logger.verbose('getData: ' + field + ' not found'); return null; } catch (error) { this.logger.error(error); + return null; } } - public async removeData(field: string) { + public async removeData(field: string): Promise { try { this.logger.verbose('removeData: ' + field); - return await this.client.hDel(this.redisEnv.PREFIX_KEY + ':' + this.instanceName, field); + await this.client.hDel(`${this.redisEnv.PREFIX_KEY}-${this.instanceName}`, field); + return true; } catch (error) { this.logger.error(error); + return false; } } - public async delAll(hash?: string) { + public async delAll(hash?: string): Promise { try { - this.logger.verbose('instance delAll: ' + hash); - const result = await this.client.del(hash || this.redisEnv.PREFIX_KEY + ':' + this.instanceName); - - return result; + const targetHash = hash || `${this.redisEnv.PREFIX_KEY}-${this.instanceName}`; + this.logger.verbose('instance delAll: ' + targetHash); + const result = await this.client.del(targetHash); + return !!result; } catch (error) { this.logger.error(error); + return false; } } } diff --git a/src/utils/use-multi-file-auth-state-redis-db.ts b/src/utils/use-multi-file-auth-state-redis-db.ts index 8e685b54..eb88d678 100644 --- a/src/utils/use-multi-file-auth-state-redis-db.ts +++ b/src/utils/use-multi-file-auth-state-redis-db.ts @@ -17,7 +17,7 @@ export async function useMultiFileAuthStateRedisDb(cache: RedisCache): Promise<{ const writeData = async (data: any, key: string): Promise => { try { - return await cache.writeData(key, data); + return await cache.setData(key, data); } catch (error) { return logger.error({ localError: 'writeData', error }); } @@ -25,9 +25,9 @@ export async function useMultiFileAuthStateRedisDb(cache: RedisCache): Promise<{ const readData = async (key: string): Promise => { try { - return await cache.readData(key); + return await cache.getData(key); } catch (error) { - logger.error({ readData: 'writeData', error }); + logger.error({ localError: 'readData', error }); return; } }; diff --git a/src/whatsapp/services/monitor.service.ts b/src/whatsapp/services/monitor.service.ts index e7eb0bc1..f8148926 100644 --- a/src/whatsapp/services/monitor.service.ts +++ b/src/whatsapp/services/monitor.service.ts @@ -375,7 +375,7 @@ export class WAMonitoringService { private async loadInstancesFromRedis() { this.logger.verbose('Redis enabled'); await this.cache.connect(this.redis as Redis); - const keys = await this.cache.instanceKeys(); + const keys = await this.cache.getInstanceKeys(); if (keys?.length > 0) { this.logger.verbose('Reading instance keys and setting instances'); diff --git a/src/whatsapp/services/whatsapp.baileys.service.ts b/src/whatsapp/services/whatsapp.baileys.service.ts index 6ac1e5e6..cd26d84b 100644 --- a/src/whatsapp/services/whatsapp.baileys.service.ts +++ b/src/whatsapp/services/whatsapp.baileys.service.ts @@ -1032,7 +1032,8 @@ export class BaileysStartupService extends WAStartupService { if ( (type !== 'notify' && type !== 'append') || received.message?.protocolMessage || - received.message?.pollUpdateMessage + received.message?.pollUpdateMessage || + !received?.message ) { this.logger.verbose('message rejected'); return;