diff --git a/src/whatsapp/controllers/chat.controller.ts b/src/whatsapp/controllers/chat.controller.ts index 63c72092..2b500ad1 100644 --- a/src/whatsapp/controllers/chat.controller.ts +++ b/src/whatsapp/controllers/chat.controller.ts @@ -50,7 +50,7 @@ export class ChatController { public async fetchProfile({ instanceName }: InstanceDto, data: NumberDto) { logger.verbose('requested fetchProfile from ' + instanceName + ' instance'); - return await this.waMonitor.waInstances[instanceName].profile(instanceName, data.number); + return await this.waMonitor.waInstances[instanceName].fetchProfile(instanceName, data.number); } public async fetchContacts({ instanceName }: InstanceDto, query: ContactQuery) { diff --git a/src/whatsapp/dto/chat.dto.ts b/src/whatsapp/dto/chat.dto.ts index 07757194..5af66a5e 100644 --- a/src/whatsapp/dto/chat.dto.ts +++ b/src/whatsapp/dto/chat.dto.ts @@ -26,6 +26,19 @@ export class NumberDto { number: string; } +export class NumberBusiness { + wid?: string; + jid?: string; + exists?: boolean; + isBusiness: boolean; + name?: string; + message?: string; + description?: string; + email?: string; + website?: string[]; + address?: string; +} + export class ProfileNameDto { name: string; } diff --git a/src/whatsapp/routers/chat.router.ts b/src/whatsapp/routers/chat.router.ts index ac7990c8..68ecd97e 100644 --- a/src/whatsapp/routers/chat.router.ts +++ b/src/whatsapp/routers/chat.router.ts @@ -130,7 +130,7 @@ export class ChatRouter extends RouterBroker { return res.status(HttpStatus.OK).json(response); }) - .get(this.routerPath('fetchProfile'), ...guards, async (req, res) => { + .post(this.routerPath('fetchProfile'), ...guards, async (req, res) => { logger.verbose('request received in fetchProfile'); logger.verbose('request body: '); logger.verbose(req.body); diff --git a/src/whatsapp/services/whatsapp.service.ts b/src/whatsapp/services/whatsapp.service.ts index b2ab7127..e99cee84 100644 --- a/src/whatsapp/services/whatsapp.service.ts +++ b/src/whatsapp/services/whatsapp.service.ts @@ -85,6 +85,7 @@ import { ArchiveChatDto, DeleteMessage, OnWhatsAppDto, + NumberBusiness, PrivacySettingDto, ReadMessageDto, WhatsAppNumberDto, @@ -1437,23 +1438,66 @@ export class WAStartupService { } } - public async profile(instanceName: string) { - const jid = this.client?.user?.id; - + public async getStatus(number: string) { + const jid = this.createJid(number); + + this.logger.verbose('Getting profile status with jid:' + jid); + try { + this.logger.verbose('Getting status'); + return { + wuid: jid, + status: (await this.client.fetchStatus(jid))?.status, + }; + } catch (error) { + this.logger.verbose('Status not found'); + return { + wuid: jid, + status: null, + }; + } + } + + public async fetchProfile(instanceName: string, number?: string) { + const jid = (number) + ? this.createJid(number) + : this.client?.user?.id; this.logger.verbose('Getting profile with jid: ' + jid); try { this.logger.verbose('Getting profile info'); - const info = await waMonitor.instanceInfo(instanceName); const business = await this.fetchBusinessProfile(jid); - return { - wuid: jid, - name: info?.instance?.profileName, - picture: info?.instance?.profilePictureUrl, - status: info?.instance?.profileStatus, - os: this.client?.authState?.creds?.platform, - isBusiness: typeof business !== 'undefined', - }; + if (number) { + const info = (await this.whatsappNumber({ numbers: [jid] }))?.shift(); + const picture = await this.profilePicture(jid); + const status = await this.getStatus(jid); + + return { + wuid: jid, + name: info?.name, + numberExists: info?.exists, + picture: picture?.profilePictureUrl, + status: status?.status, + isBusiness: business.isBusiness, + email: business?.email, + description: business?.description, + website: business?.website?.shift(), + }; + } else { + const info = await waMonitor.instanceInfo(instanceName); + + return { + wuid: jid, + name: info?.instance?.profileName, + numberExists: true, + picture: info?.instance?.profilePictureUrl, + status: info?.instance?.profileStatus, + isBusiness: business.isBusiness, + email: business?.email, + description: business?.description, + website: business?.website?.shift(), + }; + } + } catch (error) { this.logger.verbose('Profile not found'); return { @@ -2463,29 +2507,31 @@ export class WAStartupService { } } - public async fetchBusinessProfile(number: string) { + public async fetchBusinessProfile(number: string) : Promise { this.logger.verbose('Fetching business profile'); try { - let jid; - - if (!number) { - jid = this.instance.wuid; - } else { - jid = this.createJid(number); - } + const jid = (number) + ? this.createJid(number) + : this.instance.wuid; const profile = await this.client.getBusinessProfile(jid); this.logger.verbose('Trying to get business profile'); if (!profile) { + const info = await this.whatsappNumber({ numbers: [jid] }); + return { - exists: false, - message: 'Business profile not found', + isBusiness: false, + message: 'Not is business profile', + ...info?.shift() }; } this.logger.verbose('Business profile fetched'); - return profile; + return { + isBusiness: true, + ...profile + }; } catch (error) { throw new InternalServerErrorException( 'Error updating profile name',