From a7be7c3e19f6d7bda3f6aab6c056d2912e8ce1e3 Mon Sep 17 00:00:00 2001 From: Davidson Gomes Date: Fri, 7 Jul 2023 15:55:33 -0300 Subject: [PATCH] fix: Adjust in store files --- CHANGELOG.md | 1 + package.json | 2 +- src/config/path.config.ts | 1 + src/whatsapp/abstract/abstract.repository.ts | 4 +-- src/whatsapp/repository/chat.repository.ts | 8 +++-- src/whatsapp/repository/contact.repository.ts | 8 +++-- src/whatsapp/repository/message.repository.ts | 8 +++-- .../repository/messageUp.repository.ts | 8 +++-- src/whatsapp/services/monitor.service.ts | 23 +++++++++++-- src/whatsapp/services/whatsapp.service.ts | 33 +++++++++++++++---- 10 files changed, 75 insertions(+), 21 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 14c6f9b3..40aa77fc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,7 @@ ### Fixed * Adjusted set in webhook to go empty when enabled false +* Adjust in store files # 1.1.3 (2023-07-06 11:43) diff --git a/package.json b/package.json index 039c396f..dd1b8743 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "evolution-api", - "version": "1.1.3", + "version": "1.1.4", "description": "Rest api for communication with WhatsApp", "main": "./dist/src/main.js", "scripts": { diff --git a/src/config/path.config.ts b/src/config/path.config.ts index 3fb00e49..0d9b6d3c 100644 --- a/src/config/path.config.ts +++ b/src/config/path.config.ts @@ -4,3 +4,4 @@ export const ROOT_DIR = process.cwd(); export const INSTANCE_DIR = join(ROOT_DIR, 'instances'); export const SRC_DIR = join(ROOT_DIR, 'src'); export const AUTH_DIR = join(ROOT_DIR, 'store', 'auth'); +export const STORE_DIR = join(ROOT_DIR, 'store'); diff --git a/src/whatsapp/abstract/abstract.repository.ts b/src/whatsapp/abstract/abstract.repository.ts index a3afac2f..8e56148e 100644 --- a/src/whatsapp/abstract/abstract.repository.ts +++ b/src/whatsapp/abstract/abstract.repository.ts @@ -6,7 +6,7 @@ import { ROOT_DIR } from '../../config/path.config'; export type IInsert = { insertCount: number }; export interface IRepository { - insert(data: any, saveDb?: boolean): Promise; + insert(data: any, instanceName: string, saveDb?: boolean): Promise; find(query: any): Promise; delete(query: any, force?: boolean): Promise; @@ -45,7 +45,7 @@ export abstract class Repository implements IRepository { } }; - public insert(data: any, saveDb = false): Promise { + public insert(data: any, instanceName: string, saveDb = false): Promise { throw new Error('Method not implemented.'); } public find(query: any): Promise { diff --git a/src/whatsapp/repository/chat.repository.ts b/src/whatsapp/repository/chat.repository.ts index d57a9ea2..f717ae2f 100644 --- a/src/whatsapp/repository/chat.repository.ts +++ b/src/whatsapp/repository/chat.repository.ts @@ -16,7 +16,11 @@ export class ChatRepository extends Repository { super(configService); } - public async insert(data: ChatRaw[], saveDb = false): Promise { + public async insert( + data: ChatRaw[], + instanceName: string, + saveDb = false, + ): Promise { if (data.length === 0) { return; } @@ -32,7 +36,7 @@ export class ChatRepository extends Repository { if (store.CHATS) { data.forEach((chat) => { this.writeStore({ - path: join(this.storePath, 'chats', chat.owner), + path: join(this.storePath, 'chats', instanceName), fileName: chat.id, data: chat, }); diff --git a/src/whatsapp/repository/contact.repository.ts b/src/whatsapp/repository/contact.repository.ts index 26dfc25c..59d8947f 100644 --- a/src/whatsapp/repository/contact.repository.ts +++ b/src/whatsapp/repository/contact.repository.ts @@ -16,7 +16,11 @@ export class ContactRepository extends Repository { super(configService); } - public async insert(data: ContactRaw[], saveDb = false): Promise { + public async insert( + data: ContactRaw[], + instanceName: string, + saveDb = false, + ): Promise { if (data.length === 0) { return; } @@ -32,7 +36,7 @@ export class ContactRepository extends Repository { if (store.CONTACTS) { data.forEach((contact) => { this.writeStore({ - path: join(this.storePath, 'contacts', contact.owner), + path: join(this.storePath, 'contacts', instanceName), fileName: contact.id, data: contact, }); diff --git a/src/whatsapp/repository/message.repository.ts b/src/whatsapp/repository/message.repository.ts index eeb207af..4da56e8a 100644 --- a/src/whatsapp/repository/message.repository.ts +++ b/src/whatsapp/repository/message.repository.ts @@ -17,7 +17,11 @@ export class MessageRepository extends Repository { super(configService); } - public async insert(data: MessageRaw[], saveDb = false): Promise { + public async insert( + data: MessageRaw[], + instanceName: string, + saveDb = false, + ): Promise { if (!Array.isArray(data) || data.length === 0) { return; } @@ -52,7 +56,7 @@ export class MessageRepository extends Repository { if (store.MESSAGES) { data.forEach((msg) => this.writeStore({ - path: join(this.storePath, 'messages', msg.owner), + path: join(this.storePath, 'messages', instanceName), fileName: msg.key.id, data: msg, }), diff --git a/src/whatsapp/repository/messageUp.repository.ts b/src/whatsapp/repository/messageUp.repository.ts index e40fe1c9..f9a42ee0 100644 --- a/src/whatsapp/repository/messageUp.repository.ts +++ b/src/whatsapp/repository/messageUp.repository.ts @@ -17,7 +17,11 @@ export class MessageUpRepository extends Repository { super(configService); } - public async insert(data: MessageUpdateRaw[], saveDb?: boolean): Promise { + public async insert( + data: MessageUpdateRaw[], + instanceName: string, + saveDb?: boolean, + ): Promise { if (data.length === 0) { return; } @@ -33,7 +37,7 @@ export class MessageUpRepository extends Repository { if (store.MESSAGE_UP) { data.forEach((update) => { this.writeStore({ - path: join(this.storePath, 'message-up', update.owner), + path: join(this.storePath, 'message-up', instanceName), fileName: update.id, data: update, }); diff --git a/src/whatsapp/services/monitor.service.ts b/src/whatsapp/services/monitor.service.ts index 9fe5c99a..fc261866 100644 --- a/src/whatsapp/services/monitor.service.ts +++ b/src/whatsapp/services/monitor.service.ts @@ -1,6 +1,6 @@ import { opendirSync, readdirSync, rmSync } from 'fs'; import { WAStartupService } from './whatsapp.service'; -import { INSTANCE_DIR } from '../../config/path.config'; +import { INSTANCE_DIR, STORE_DIR } from '../../config/path.config'; import EventEmitter2 from 'eventemitter2'; import { join } from 'path'; import { Logger } from '../../config/logger.config'; @@ -16,6 +16,7 @@ import { NotFoundException } from '../../exceptions'; import { Db } from 'mongodb'; import { initInstance } from '../whatsapp.module'; import { RedisCache } from '../../db/redis.client'; +import { execSync } from 'child_process'; export class WAMonitoringService { constructor( @@ -216,7 +217,23 @@ export class WAMonitoringService { rmSync(join(INSTANCE_DIR, instanceName), { recursive: true, force: true }); } - public async clearStoreFiles(instanceName: string) {} + public async cleaningStoreFiles(instanceName: string) { + this.logger.verbose('cleaning store files instance: ' + instanceName); + + if (!this.db.ENABLED) { + const instance = this.waInstances[instanceName]; + + rmSync(join(INSTANCE_DIR, instanceName), { recursive: true, force: true }); + + execSync(`rm -rf ${join(STORE_DIR, 'chats', instanceName)}`); + execSync(`rm -rf ${join(STORE_DIR, 'contacts', instanceName)}`); + execSync(`rm -rf ${join(STORE_DIR, 'message-up', instanceName)}`); + execSync(`rm -rf ${join(STORE_DIR, 'messages', instanceName)}`); + + execSync(`rm -rf ${join(STORE_DIR, 'auth', 'apikey', instanceName + '.json')}`); + execSync(`rm -rf ${join(STORE_DIR, 'webhook', instanceName + '.json')}`); + } + } public async loadInstance() { this.logger.verbose('load instances'); @@ -302,7 +319,7 @@ export class WAMonitoringService { try { this.logger.verbose('request cleaning up instance: ' + instanceName); this.cleaningUp(instanceName); - this.clearStoreFiles(instanceName); + this.cleaningStoreFiles(instanceName); } finally { this.logger.warn(`Instance "${instanceName}" - REMOVED`); } diff --git a/src/whatsapp/services/whatsapp.service.ts b/src/whatsapp/services/whatsapp.service.ts index 692f0e33..c90b0b54 100644 --- a/src/whatsapp/services/whatsapp.service.ts +++ b/src/whatsapp/services/whatsapp.service.ts @@ -30,6 +30,7 @@ import makeWASocket, { WAMessageUpdate, WASocket, getAggregateVotesInPollMessage, + Browsers, } from '@whiskeysockets/baileys'; import { Auth, @@ -554,14 +555,14 @@ export class WAStartupService { `rm -rf ${join( this.storePath, key.toLowerCase().replace('_', '-'), - this.instance.wuid, + this.instance.name, )}/*.json`, ); this.logger.verbose( `Cleaned ${join( this.storePath, key.toLowerCase().replace('_', '-'), - this.instance.wuid, + this.instance.name, )}/*.json`, ); } @@ -601,7 +602,8 @@ export class WAStartupService { const { version } = await fetchLatestBaileysVersion(); this.logger.verbose('Baileys version: ' + version); const session = this.configService.get('CONFIG_SESSION_PHONE'); - const browser: WABrowserDescription = [session.CLIENT, session.NAME, release()]; + // const browser: WABrowserDescription = [session.CLIENT, session.NAME, release()]; + const browser: WABrowserDescription = Browsers.appropriate(session.CLIENT); this.logger.verbose('Browser: ' + JSON.stringify(browser)); const socketConfig: UserFacingSocketConfig = { @@ -692,7 +694,11 @@ export class WAStartupService { await this.sendDataWebhook(Events.CHATS_UPSERT, chatsRaw); this.logger.verbose('Inserting chats in database'); - await this.repository.chat.insert(chatsRaw, database.SAVE_DATA.CHATS); + await this.repository.chat.insert( + chatsRaw, + this.instance.name, + database.SAVE_DATA.CHATS, + ); }, 'chats.update': async ( @@ -757,7 +763,11 @@ export class WAStartupService { await this.sendDataWebhook(Events.CONTACTS_UPSERT, contactsRaw); this.logger.verbose('Inserting contacts in database'); - await this.repository.contact.insert(contactsRaw, database.SAVE_DATA.CONTACTS); + await this.repository.contact.insert( + contactsRaw, + this.instance.name, + database.SAVE_DATA.CONTACTS, + ); }, 'contacts.update': async (contacts: Partial[]) => { @@ -808,7 +818,11 @@ export class WAStartupService { await this.sendDataWebhook(Events.CHATS_SET, chatsRaw); this.logger.verbose('Inserting chats in database'); - await this.repository.chat.insert(chatsRaw, database.SAVE_DATA.CHATS); + await this.repository.chat.insert( + chatsRaw, + this.instance.name, + database.SAVE_DATA.CHATS, + ); } const messagesRaw: MessageRaw[] = []; @@ -890,7 +904,11 @@ export class WAStartupService { await this.sendDataWebhook(Events.MESSAGES_UPSERT, messageRaw); this.logger.verbose('Inserting message in database'); - await this.repository.message.insert([messageRaw], database.SAVE_DATA.NEW_MESSAGE); + await this.repository.message.insert( + [messageRaw], + this.instance.name, + database.SAVE_DATA.NEW_MESSAGE, + ); }, 'messages.update': async (args: WAMessageUpdate[], database: Database) => { @@ -934,6 +952,7 @@ export class WAStartupService { this.logger.verbose('Inserting message in database'); await this.repository.messageUpdate.insert( [message], + this.instance.name, database.SAVE_DATA.MESSAGE_UPDATE, ); }