diff --git a/CHANGELOG.md b/CHANGELOG.md index 40aa77fc..f74648ee 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ * Adjusted set in webhook to go empty when enabled false * Adjust in store files +* Added verbose logs # 1.1.3 (2023-07-06 11:43) diff --git a/src/whatsapp/controllers/chat.controller.ts b/src/whatsapp/controllers/chat.controller.ts index 8d567a51..0a176059 100644 --- a/src/whatsapp/controllers/chat.controller.ts +++ b/src/whatsapp/controllers/chat.controller.ts @@ -16,31 +16,40 @@ import { ContactQuery } from '../repository/contact.repository'; import { MessageQuery } from '../repository/message.repository'; import { MessageUpQuery } from '../repository/messageUp.repository'; import { WAMonitoringService } from '../services/monitor.service'; +import { Logger } from '../../config/logger.config'; + +const logger = new Logger('ChatController'); export class ChatController { constructor(private readonly waMonitor: WAMonitoringService) {} public async whatsappNumber({ instanceName }: InstanceDto, data: WhatsAppNumberDto) { + logger.verbose('requested whatsappNumber from ' + instanceName + ' instance'); return await this.waMonitor.waInstances[instanceName].whatsappNumber(data); } public async readMessage({ instanceName }: InstanceDto, data: ReadMessageDto) { + logger.verbose('requested readMessage from ' + instanceName + ' instance'); return await this.waMonitor.waInstances[instanceName].markMessageAsRead(data); } public async archiveChat({ instanceName }: InstanceDto, data: ArchiveChatDto) { + logger.verbose('requested archiveChat from ' + instanceName + ' instance'); return await this.waMonitor.waInstances[instanceName].archiveChat(data); } public async deleteMessage({ instanceName }: InstanceDto, data: DeleteMessage) { + logger.verbose('requested deleteMessage from ' + instanceName + ' instance'); return await this.waMonitor.waInstances[instanceName].deleteMessage(data); } public async fetchProfilePicture({ instanceName }: InstanceDto, data: NumberDto) { + logger.verbose('requested fetchProfilePicture from ' + instanceName + ' instance'); return await this.waMonitor.waInstances[instanceName].profilePicture(data.number); } public async fetchContacts({ instanceName }: InstanceDto, query: ContactQuery) { + logger.verbose('requested fetchContacts from ' + instanceName + ' instance'); return await this.waMonitor.waInstances[instanceName].fetchContacts(query); } @@ -48,22 +57,29 @@ export class ChatController { { instanceName }: InstanceDto, data: getBase64FromMediaMessageDto, ) { + logger.verbose( + 'requested getBase64FromMediaMessage from ' + instanceName + ' instance', + ); return await this.waMonitor.waInstances[instanceName].getBase64FromMediaMessage(data); } public async fetchMessages({ instanceName }: InstanceDto, query: MessageQuery) { + logger.verbose('requested fetchMessages from ' + instanceName + ' instance'); return await this.waMonitor.waInstances[instanceName].fetchMessages(query); } public async fetchStatusMessage({ instanceName }: InstanceDto, query: MessageUpQuery) { + logger.verbose('requested fetchStatusMessage from ' + instanceName + ' instance'); return await this.waMonitor.waInstances[instanceName].fetchStatusMessage(query); } public async fetchChats({ instanceName }: InstanceDto) { + logger.verbose('requested fetchChats from ' + instanceName + ' instance'); return await this.waMonitor.waInstances[instanceName].fetchChats(); } public async fetchPrivacySettings({ instanceName }: InstanceDto) { + logger.verbose('requested fetchPrivacySettings from ' + instanceName + ' instance'); return await this.waMonitor.waInstances[instanceName].fetchPrivacySettings(); } @@ -71,6 +87,7 @@ export class ChatController { { instanceName }: InstanceDto, data: PrivacySettingDto, ) { + logger.verbose('requested updatePrivacySettings from ' + instanceName + ' instance'); return await this.waMonitor.waInstances[instanceName].updatePrivacySettings(data); } @@ -78,12 +95,14 @@ export class ChatController { { instanceName }: InstanceDto, data: ProfilePictureDto, ) { + logger.verbose('requested fetchBusinessProfile from ' + instanceName + ' instance'); return await this.waMonitor.waInstances[instanceName].fetchBusinessProfile( data.number, ); } public async updateProfileName({ instanceName }: InstanceDto, data: ProfileNameDto) { + logger.verbose('requested updateProfileName from ' + instanceName + ' instance'); return await this.waMonitor.waInstances[instanceName].updateProfileName(data.name); } @@ -91,6 +110,7 @@ export class ChatController { { instanceName }: InstanceDto, data: ProfileStatusDto, ) { + logger.verbose('requested updateProfileStatus from ' + instanceName + ' instance'); return await this.waMonitor.waInstances[instanceName].updateProfileStatus( data.status, ); @@ -100,6 +120,7 @@ export class ChatController { { instanceName }: InstanceDto, data: ProfilePictureDto, ) { + logger.verbose('requested updateProfilePicture from ' + instanceName + ' instance'); return await this.waMonitor.waInstances[instanceName].updateProfilePicture( data.picture, ); @@ -109,6 +130,7 @@ export class ChatController { { instanceName }: InstanceDto, data: ProfilePictureDto, ) { + logger.verbose('requested removeProfilePicture from ' + instanceName + ' instance'); return await this.waMonitor.waInstances[instanceName].removeProfilePicture(); } } diff --git a/src/whatsapp/controllers/group.controller.ts b/src/whatsapp/controllers/group.controller.ts index e8376bfa..e0254796 100644 --- a/src/whatsapp/controllers/group.controller.ts +++ b/src/whatsapp/controllers/group.controller.ts @@ -12,21 +12,31 @@ import { } from '../dto/group.dto'; import { InstanceDto } from '../dto/instance.dto'; import { WAMonitoringService } from '../services/monitor.service'; +import { Logger } from '../../config/logger.config'; + +const logger = new Logger('ChatController'); export class GroupController { constructor(private readonly waMonitor: WAMonitoringService) {} public async createGroup(instance: InstanceDto, create: CreateGroupDto) { + logger.verbose('requested createGroup from ' + instance.instanceName + ' instance'); return await this.waMonitor.waInstances[instance.instanceName].createGroup(create); } public async updateGroupPicture(instance: InstanceDto, update: GroupPictureDto) { + logger.verbose( + 'requested updateGroupPicture from ' + instance.instanceName + ' instance', + ); return await this.waMonitor.waInstances[instance.instanceName].updateGroupPicture( update, ); } public async updateGroupSubject(instance: InstanceDto, update: GroupSubjectDto) { + logger.verbose( + 'requested updateGroupSubject from ' + instance.instanceName + ' instance', + ); return await this.waMonitor.waInstances[instance.instanceName].updateGroupSubject( update, ); @@ -36,38 +46,54 @@ export class GroupController { instance: InstanceDto, update: GroupDescriptionDto, ) { + logger.verbose( + 'requested updateGroupDescription from ' + instance.instanceName + ' instance', + ); return await this.waMonitor.waInstances[instance.instanceName].updateGroupDescription( update, ); } public async findGroupInfo(instance: InstanceDto, groupJid: GroupJid) { + logger.verbose('requested findGroupInfo from ' + instance.instanceName + ' instance'); return await this.waMonitor.waInstances[instance.instanceName].findGroup(groupJid); } public async fetchAllGroups(instance: InstanceDto) { + logger.verbose( + 'requested fetchAllGroups from ' + instance.instanceName + ' instance', + ); return await this.waMonitor.waInstances[instance.instanceName].fetchAllGroups(); } public async inviteCode(instance: InstanceDto, groupJid: GroupJid) { + logger.verbose('requested inviteCode from ' + instance.instanceName + ' instance'); return await this.waMonitor.waInstances[instance.instanceName].inviteCode(groupJid); } public async inviteInfo(instance: InstanceDto, inviteCode: GroupInvite) { + logger.verbose('requested inviteInfo from ' + instance.instanceName + ' instance'); return await this.waMonitor.waInstances[instance.instanceName].inviteInfo(inviteCode); } public async sendInvite(instance: InstanceDto, data: GroupSendInvite) { + logger.verbose('requested sendInvite from ' + instance.instanceName + ' instance'); return await this.waMonitor.waInstances[instance.instanceName].sendInvite(data); } public async revokeInviteCode(instance: InstanceDto, groupJid: GroupJid) { + logger.verbose( + 'requested revokeInviteCode from ' + instance.instanceName + ' instance', + ); return await this.waMonitor.waInstances[instance.instanceName].revokeInviteCode( groupJid, ); } public async findParticipants(instance: InstanceDto, groupJid: GroupJid) { + logger.verbose( + 'requested findParticipants from ' + instance.instanceName + ' instance', + ); return await this.waMonitor.waInstances[instance.instanceName].findParticipants( groupJid, ); @@ -77,22 +103,32 @@ export class GroupController { instance: InstanceDto, update: GroupUpdateParticipantDto, ) { + logger.verbose( + 'requested updateGParticipate from ' + instance.instanceName + ' instance', + ); return await this.waMonitor.waInstances[instance.instanceName].updateGParticipant( update, ); } public async updateGSetting(instance: InstanceDto, update: GroupUpdateSettingDto) { + logger.verbose( + 'requested updateGSetting from ' + instance.instanceName + ' instance', + ); return await this.waMonitor.waInstances[instance.instanceName].updateGSetting(update); } public async toggleEphemeral(instance: InstanceDto, update: GroupToggleEphemeralDto) { + logger.verbose( + 'requested toggleEphemeral from ' + instance.instanceName + ' instance', + ); return await this.waMonitor.waInstances[instance.instanceName].toggleEphemeral( update, ); } public async leaveGroup(instance: InstanceDto, groupJid: GroupJid) { + logger.verbose('requested leaveGroup from ' + instance.instanceName + ' instance'); return await this.waMonitor.waInstances[instance.instanceName].leaveGroup(groupJid); } } diff --git a/src/whatsapp/controllers/instance.controller.ts b/src/whatsapp/controllers/instance.controller.ts index b309366a..c2abbffa 100644 --- a/src/whatsapp/controllers/instance.controller.ts +++ b/src/whatsapp/controllers/instance.controller.ts @@ -33,9 +33,13 @@ export class InstanceController { qrcode, token, }: InstanceDto) { + this.logger.verbose('requested createInstance from ' + instanceName + ' instance'); + const mode = this.configService.get('AUTHENTICATION').INSTANCE.MODE; if (mode === 'container') { + this.logger.verbose('container mode'); + if (Object.keys(this.waMonitor.waInstances).length > 0) { throw new BadRequestException([ 'Instance already created', @@ -43,8 +47,10 @@ export class InstanceController { ]); } + this.logger.verbose('checking duplicate token'); await this.authService.checkDuplicateToken(token); + this.logger.verbose('creating instance'); const instance = new WAStartupService( this.configService, this.eventEmitter, @@ -52,9 +58,12 @@ export class InstanceController { this.cache, ); instance.instanceName = instanceName; + this.logger.verbose('instance: ' + instance.instanceName + ' created'); + this.waMonitor.waInstances[instance.instanceName] = instance; this.waMonitor.delInstanceTime(instance.instanceName); + this.logger.verbose('generating hash'); const hash = await this.authService.generateHash( { instanceName: instance.instanceName, @@ -62,9 +71,12 @@ export class InstanceController { token, ); + this.logger.verbose('hash: ' + hash + ' generated'); + let getEvents: string[]; if (webhook) { + this.logger.verbose('creating webhook'); try { this.webhookService.create(instance, { enabled: true, @@ -79,6 +91,17 @@ export class InstanceController { } } + this.logger.verbose('instance created'); + this.logger.verbose({ + instance: { + instanceName: instance.instanceName, + status: 'created', + }, + hash, + webhook, + events: getEvents, + }); + return { instance: { instanceName: instance.instanceName, @@ -89,8 +112,12 @@ export class InstanceController { events: getEvents, }; } else { + this.logger.verbose('server mode'); + + this.logger.verbose('checking duplicate token'); await this.authService.checkDuplicateToken(token); + this.logger.verbose('creating instance'); const instance = new WAStartupService( this.configService, this.eventEmitter, @@ -98,9 +125,13 @@ export class InstanceController { this.cache, ); instance.instanceName = instanceName; + + this.logger.verbose('instance: ' + instance.instanceName + ' created'); + this.waMonitor.waInstances[instance.instanceName] = instance; this.waMonitor.delInstanceTime(instance.instanceName); + this.logger.verbose('generating hash'); const hash = await this.authService.generateHash( { instanceName: instance.instanceName, @@ -108,9 +139,12 @@ export class InstanceController { token, ); + this.logger.verbose('hash: ' + hash + ' generated'); + let getEvents: string[]; if (webhook) { + this.logger.verbose('creating webhook'); try { this.webhookService.create(instance, { enabled: true, @@ -128,11 +162,25 @@ export class InstanceController { let getQrcode: wa.QrCode; if (qrcode) { + this.logger.verbose('creating qrcode'); await instance.connectToWhatsapp(); await delay(2000); getQrcode = instance.qrCode; } + this.logger.verbose('instance created'); + this.logger.verbose({ + instance: { + instanceName: instance.instanceName, + status: 'created', + }, + hash, + webhook, + webhook_by_events, + events: getEvents, + qrcode: getQrcode, + }); + return { instance: { instanceName: instance.instanceName, @@ -149,11 +197,18 @@ export class InstanceController { public async connectToWhatsapp({ instanceName }: InstanceDto) { try { + this.logger.verbose( + 'requested connectToWhatsapp from ' + instanceName + ' instance', + ); + const instance = this.waMonitor.waInstances[instanceName]; const state = instance?.connectionStatus?.state; + this.logger.verbose('state: ' + state); + switch (state) { case 'close': + this.logger.verbose('connecting'); await instance.connectToWhatsapp(); await delay(2000); return instance.qrCode; @@ -169,8 +224,12 @@ export class InstanceController { public async restartInstance({ instanceName }: InstanceDto) { try { + this.logger.verbose('requested restartInstance from ' + instanceName + ' instance'); + + this.logger.verbose('deleting instance: ' + instanceName); delete this.waMonitor.waInstances[instanceName]; - console.log(this.waMonitor.waInstances[instanceName]); + + this.logger.verbose('creating instance: ' + instanceName); const instance = new WAStartupService( this.configService, this.eventEmitter, @@ -179,6 +238,10 @@ export class InstanceController { ); instance.instanceName = instanceName; + + this.logger.verbose('instance: ' + instance.instanceName + ' created'); + + this.logger.verbose('connecting instance: ' + instanceName); await instance.connectToWhatsapp(); this.waMonitor.waInstances[instance.instanceName] = instance; @@ -189,11 +252,14 @@ export class InstanceController { } public async connectionState({ instanceName }: InstanceDto) { + this.logger.verbose('requested connectionState from ' + instanceName + ' instance'); return this.waMonitor.waInstances[instanceName]?.connectionStatus; } public async fetchInstances({ instanceName }: InstanceDto) { + this.logger.verbose('requested fetchInstances from ' + instanceName + ' instance'); if (instanceName) { + this.logger.verbose('instanceName: ' + instanceName); return this.waMonitor.instanceInfo(instanceName); } @@ -201,11 +267,14 @@ export class InstanceController { } public async logout({ instanceName }: InstanceDto) { + this.logger.verbose('requested logout from ' + instanceName + ' instance'); try { + this.logger.verbose('logging out instance: ' + instanceName); await this.waMonitor.waInstances[instanceName]?.client?.logout( 'Log out instance: ' + instanceName, ); + this.logger.verbose('close connection instance: ' + instanceName); this.waMonitor.waInstances[instanceName]?.client?.ws?.close(); return { error: false, message: 'Instance logged out' }; @@ -215,7 +284,9 @@ export class InstanceController { } public async deleteInstance({ instanceName }: InstanceDto) { + this.logger.verbose('requested deleteInstance from ' + instanceName + ' instance'); const stateConn = await this.connectionState({ instanceName }); + if (stateConn.state === 'open') { throw new BadRequestException([ 'Deletion failed', @@ -224,10 +295,14 @@ export class InstanceController { } try { if (stateConn.state === 'connecting') { + this.logger.verbose('logging out instance: ' + instanceName); + await this.logout({ instanceName }); delete this.waMonitor.waInstances[instanceName]; return { error: false, message: 'Instance deleted' }; } else { + this.logger.verbose('deleting instance: ' + instanceName); + delete this.waMonitor.waInstances[instanceName]; this.eventEmitter.emit('remove.instance', instanceName, 'inner'); return { error: false, message: 'Instance deleted' }; @@ -238,6 +313,7 @@ export class InstanceController { } public async refreshToken(_: InstanceDto, oldToken: OldToken) { + this.logger.verbose('requested refreshToken'); return await this.authService.refreshToken(oldToken); } } diff --git a/src/whatsapp/controllers/sendMessage.controller.ts b/src/whatsapp/controllers/sendMessage.controller.ts index 8e70c26c..c2d5298c 100644 --- a/src/whatsapp/controllers/sendMessage.controller.ts +++ b/src/whatsapp/controllers/sendMessage.controller.ts @@ -17,17 +17,29 @@ import { } from '../dto/sendMessage.dto'; import { WAMonitoringService } from '../services/monitor.service'; +import { Logger } from '../../config/logger.config'; + +const logger = new Logger('MessageRouter'); + export class SendMessageController { constructor(private readonly waMonitor: WAMonitoringService) {} public async sendText({ instanceName }: InstanceDto, data: SendTextDto) { + logger.verbose('requested sendText from ' + instanceName + ' instance'); return await this.waMonitor.waInstances[instanceName].textMessage(data); } public async sendMedia({ instanceName }: InstanceDto, data: SendMediaDto) { + logger.verbose('requested sendMedia from ' + instanceName + ' instance'); if (isBase64(data?.mediaMessage?.media) && !data?.mediaMessage?.fileName) { throw new BadRequestException('For bse64 the file name must be informed.'); } + logger.verbose( + 'isURL: ' + + isURL(data?.mediaMessage?.media) + + ', isBase64: ' + + isBase64(data?.mediaMessage?.media), + ); if (isURL(data?.mediaMessage?.media) || isBase64(data?.mediaMessage?.media)) { return await this.waMonitor.waInstances[instanceName].mediaMessage(data); } @@ -35,6 +47,14 @@ export class SendMessageController { } public async sendSticker({ instanceName }: InstanceDto, data: SendStickerDto) { + logger.verbose('requested sendSticker from ' + instanceName + ' instance'); + + logger.verbose( + 'isURL: ' + + isURL(data?.stickerMessage?.image) + + ', isBase64: ' + + isBase64(data?.stickerMessage?.image), + ); if (isURL(data.stickerMessage.image) || isBase64(data.stickerMessage.image)) { return await this.waMonitor.waInstances[instanceName].mediaSticker(data); } @@ -42,6 +62,14 @@ export class SendMessageController { } public async sendWhatsAppAudio({ instanceName }: InstanceDto, data: SendAudioDto) { + logger.verbose('requested sendWhatsAppAudio from ' + instanceName + ' instance'); + + logger.verbose( + 'isURL: ' + + isURL(data?.audioMessage?.audio) + + ', isBase64: ' + + isBase64(data?.audioMessage?.audio), + ); if (isURL(data.audioMessage.audio) || isBase64(data.audioMessage.audio)) { return await this.waMonitor.waInstances[instanceName].audioWhatsapp(data); } @@ -49,6 +77,7 @@ export class SendMessageController { } public async sendButtons({ instanceName }: InstanceDto, data: SendButtonDto) { + logger.verbose('requested sendButtons from ' + instanceName + ' instance'); if ( isBase64(data.buttonMessage.mediaMessage?.media) && !data.buttonMessage.mediaMessage?.fileName @@ -59,18 +88,22 @@ export class SendMessageController { } public async sendLocation({ instanceName }: InstanceDto, data: SendLocationDto) { + logger.verbose('requested sendLocation from ' + instanceName + ' instance'); return await this.waMonitor.waInstances[instanceName].locationMessage(data); } public async sendList({ instanceName }: InstanceDto, data: SendListDto) { + logger.verbose('requested sendList from ' + instanceName + ' instance'); return await this.waMonitor.waInstances[instanceName].listMessage(data); } public async sendContact({ instanceName }: InstanceDto, data: SendContactDto) { + logger.verbose('requested sendContact from ' + instanceName + ' instance'); return await this.waMonitor.waInstances[instanceName].contactMessage(data); } public async sendReaction({ instanceName }: InstanceDto, data: SendReactionDto) { + logger.verbose('requested sendReaction from ' + instanceName + ' instance'); if (!data.reactionMessage.reaction.match(/[^\(\)\w\sà-ú"-\+]+/)) { throw new BadRequestException('"reaction" must be an emoji'); } @@ -78,14 +111,17 @@ export class SendMessageController { } public async sendPoll({ instanceName }: InstanceDto, data: SendPollDto) { + logger.verbose('requested sendPoll from ' + instanceName + ' instance'); return await this.waMonitor.waInstances[instanceName].pollMessage(data); } public async sendStatus({ instanceName }: InstanceDto, data: SendStatusDto) { + logger.verbose('requested sendStatus from ' + instanceName + ' instance'); return await this.waMonitor.waInstances[instanceName].statusMessage(data); } public async sendLinkPreview({ instanceName }: InstanceDto, data: SendLinkPreviewDto) { + logger.verbose('requested sendLinkPreview from ' + instanceName + ' instance'); return await this.waMonitor.waInstances[instanceName].linkPreview(data); } } diff --git a/src/whatsapp/controllers/webhook.controller.ts b/src/whatsapp/controllers/webhook.controller.ts index e8141dc7..b5747b2e 100644 --- a/src/whatsapp/controllers/webhook.controller.ts +++ b/src/whatsapp/controllers/webhook.controller.ts @@ -3,16 +3,22 @@ import { BadRequestException } from '../../exceptions'; import { InstanceDto } from '../dto/instance.dto'; import { WebhookDto } from '../dto/webhook.dto'; import { WebhookService } from '../services/webhook.service'; +import { Logger } from '../../config/logger.config'; + +const logger = new Logger('WebhookController'); export class WebhookController { constructor(private readonly webhookService: WebhookService) {} public async createWebhook(instance: InstanceDto, data: WebhookDto) { + logger.verbose('requested createWebhook from ' + instance.instanceName + ' instance'); + if (data.enabled && !isURL(data.url, { require_tld: false })) { throw new BadRequestException('Invalid "url" property'); } if (!data.enabled) { + logger.verbose('webhook disabled'); data.url = ''; data.events = []; } @@ -21,6 +27,7 @@ export class WebhookController { } public async findWebhook(instance: InstanceDto) { + logger.verbose('requested findWebhook from ' + instance.instanceName + ' instance'); return this.webhookService.find(instance); } } diff --git a/src/whatsapp/routers/chat.router.ts b/src/whatsapp/routers/chat.router.ts index 46d05aa9..50ead521 100644 --- a/src/whatsapp/routers/chat.router.ts +++ b/src/whatsapp/routers/chat.router.ts @@ -32,12 +32,22 @@ import { HttpStatus } from './index.router'; import { MessageUpQuery } from '../repository/messageUp.repository'; import { proto } from '@whiskeysockets/baileys'; import { InstanceDto } from '../dto/instance.dto'; +import { Logger } from '../../config/logger.config'; + +const logger = new Logger('ChatRouter'); export class ChatRouter extends RouterBroker { constructor(...guards: RequestHandler[]) { super(); this.router .post(this.routerPath('whatsappNumbers'), ...guards, async (req, res) => { + logger.verbose('request received in whatsappNumbers'); + logger.verbose('request body: '); + logger.verbose(req.body); + + logger.verbose('request query: '); + logger.verbose(req.query); + const response = await this.dataValidate({ request: req, schema: whatsappNumberSchema, @@ -48,6 +58,13 @@ export class ChatRouter extends RouterBroker { return res.status(HttpStatus.CREATED).json(response); }) .put(this.routerPath('markMessageAsRead'), ...guards, async (req, res) => { + logger.verbose('request received in markMessageAsRead'); + logger.verbose('request body: '); + logger.verbose(req.body); + + logger.verbose('request query: '); + logger.verbose(req.query); + const response = await this.dataValidate({ request: req, schema: readMessageSchema, @@ -58,6 +75,13 @@ export class ChatRouter extends RouterBroker { return res.status(HttpStatus.CREATED).json(response); }) .put(this.routerPath('archiveChat'), ...guards, async (req, res) => { + logger.verbose('request received in archiveChat'); + logger.verbose('request body: '); + logger.verbose(req.body); + + logger.verbose('request query: '); + logger.verbose(req.query); + const response = await this.dataValidate({ request: req, schema: archiveChatSchema, @@ -71,6 +95,13 @@ export class ChatRouter extends RouterBroker { this.routerPath('deleteMessageForEveryone'), ...guards, async (req, res) => { + logger.verbose('request received in deleteMessageForEveryone'); + logger.verbose('request body: '); + logger.verbose(req.body); + + logger.verbose('request query: '); + logger.verbose(req.query); + const response = await this.dataValidate({ request: req, schema: deleteMessageSchema, @@ -82,6 +113,13 @@ export class ChatRouter extends RouterBroker { }, ) .post(this.routerPath('fetchProfilePictureUrl'), ...guards, async (req, res) => { + logger.verbose('request received in fetchProfilePictureUrl'); + logger.verbose('request body: '); + logger.verbose(req.body); + + logger.verbose('request query: '); + logger.verbose(req.query); + const response = await this.dataValidate({ request: req, schema: profilePictureSchema, @@ -92,6 +130,13 @@ export class ChatRouter extends RouterBroker { return res.status(HttpStatus.OK).json(response); }) .post(this.routerPath('findContacts'), ...guards, async (req, res) => { + logger.verbose('request received in findContacts'); + logger.verbose('request body: '); + logger.verbose(req.body); + + logger.verbose('request query: '); + logger.verbose(req.query); + const response = await this.dataValidate({ request: req, schema: contactValidateSchema, @@ -102,6 +147,13 @@ export class ChatRouter extends RouterBroker { return res.status(HttpStatus.OK).json(response); }) .post(this.routerPath('getBase64FromMediaMessage'), ...guards, async (req, res) => { + logger.verbose('request received in getBase64FromMediaMessage'); + logger.verbose('request body: '); + logger.verbose(req.body); + + logger.verbose('request query: '); + logger.verbose(req.query); + const response = await this.dataValidate({ request: req, schema: null, @@ -113,6 +165,13 @@ export class ChatRouter extends RouterBroker { return res.status(HttpStatus.CREATED).json(response); }) .post(this.routerPath('findMessages'), ...guards, async (req, res) => { + logger.verbose('request received in findMessages'); + logger.verbose('request body: '); + logger.verbose(req.body); + + logger.verbose('request query: '); + logger.verbose(req.query); + const response = await this.dataValidate({ request: req, schema: messageValidateSchema, @@ -123,6 +182,13 @@ export class ChatRouter extends RouterBroker { return res.status(HttpStatus.OK).json(response); }) .post(this.routerPath('findStatusMessage'), ...guards, async (req, res) => { + logger.verbose('request received in findStatusMessage'); + logger.verbose('request body: '); + logger.verbose(req.body); + + logger.verbose('request query: '); + logger.verbose(req.query); + const response = await this.dataValidate({ request: req, schema: messageUpSchema, @@ -133,6 +199,13 @@ export class ChatRouter extends RouterBroker { return res.status(HttpStatus.OK).json(response); }) .get(this.routerPath('findChats'), ...guards, async (req, res) => { + logger.verbose('request received in findChats'); + logger.verbose('request body: '); + logger.verbose(req.body); + + logger.verbose('request query: '); + logger.verbose(req.query); + const response = await this.dataValidate({ request: req, schema: null, @@ -144,6 +217,13 @@ export class ChatRouter extends RouterBroker { }) // Profile routes .get(this.routerPath('fetchPrivacySettings'), ...guards, async (req, res) => { + logger.verbose('request received in fetchPrivacySettings'); + logger.verbose('request body: '); + logger.verbose(req.body); + + logger.verbose('request query: '); + logger.verbose(req.query); + const response = await this.dataValidate({ request: req, schema: null, @@ -154,6 +234,13 @@ export class ChatRouter extends RouterBroker { return res.status(HttpStatus.OK).json(response); }) .put(this.routerPath('updatePrivacySettings'), ...guards, async (req, res) => { + logger.verbose('request received in updatePrivacySettings'); + logger.verbose('request body: '); + logger.verbose(req.body); + + logger.verbose('request query: '); + logger.verbose(req.query); + const response = await this.dataValidate({ request: req, schema: privacySettingsSchema, @@ -165,6 +252,13 @@ export class ChatRouter extends RouterBroker { return res.status(HttpStatus.CREATED).json(response); }) .post(this.routerPath('fetchBusinessProfile'), ...guards, async (req, res) => { + logger.verbose('request received in fetchBusinessProfile'); + logger.verbose('request body: '); + logger.verbose(req.body); + + logger.verbose('request query: '); + logger.verbose(req.query); + const response = await this.dataValidate({ request: req, schema: profilePictureSchema, @@ -176,6 +270,13 @@ export class ChatRouter extends RouterBroker { return res.status(HttpStatus.OK).json(response); }) .post(this.routerPath('updateProfileName'), ...guards, async (req, res) => { + logger.verbose('request received in updateProfileName'); + logger.verbose('request body: '); + logger.verbose(req.body); + + logger.verbose('request query: '); + logger.verbose(req.query); + const response = await this.dataValidate({ request: req, schema: profileNameSchema, @@ -186,6 +287,13 @@ export class ChatRouter extends RouterBroker { return res.status(HttpStatus.OK).json(response); }) .post(this.routerPath('updateProfileStatus'), ...guards, async (req, res) => { + logger.verbose('request received in updateProfileStatus'); + logger.verbose('request body: '); + logger.verbose(req.body); + + logger.verbose('request query: '); + logger.verbose(req.query); + const response = await this.dataValidate({ request: req, schema: profileStatusSchema, @@ -196,6 +304,13 @@ export class ChatRouter extends RouterBroker { return res.status(HttpStatus.OK).json(response); }) .put(this.routerPath('updateProfilePicture'), ...guards, async (req, res) => { + logger.verbose('request received in updateProfilePicture'); + logger.verbose('request body: '); + logger.verbose(req.body); + + logger.verbose('request query: '); + logger.verbose(req.query); + const response = await this.dataValidate({ request: req, schema: profilePictureSchema, @@ -207,6 +322,13 @@ export class ChatRouter extends RouterBroker { return res.status(HttpStatus.OK).json(response); }) .delete(this.routerPath('removeProfilePicture'), ...guards, async (req, res) => { + logger.verbose('request received in removeProfilePicture'); + logger.verbose('request body: '); + logger.verbose(req.body); + + logger.verbose('request query: '); + logger.verbose(req.query); + const response = await this.dataValidate({ request: req, schema: profilePictureSchema, diff --git a/src/whatsapp/routers/group.router.ts b/src/whatsapp/routers/group.router.ts index 17764f4e..8cb3032e 100644 --- a/src/whatsapp/routers/group.router.ts +++ b/src/whatsapp/routers/group.router.ts @@ -26,12 +26,21 @@ import { } from '../dto/group.dto'; import { groupController } from '../whatsapp.module'; import { HttpStatus } from './index.router'; +import { Logger } from '../../config/logger.config'; + +const logger = new Logger('GroupRouter'); export class GroupRouter extends RouterBroker { constructor(...guards: RequestHandler[]) { super(); this.router .post(this.routerPath('create'), ...guards, async (req, res) => { + logger.verbose('request received in createGroup'); + logger.verbose('request body: '); + logger.verbose(req.body); + + logger.verbose('request query: '); + logger.verbose(req.query); const response = await this.dataValidate({ request: req, schema: createGroupSchema, @@ -42,6 +51,13 @@ export class GroupRouter extends RouterBroker { res.status(HttpStatus.CREATED).json(response); }) .put(this.routerPath('updateGroupSubject'), ...guards, async (req, res) => { + logger.verbose('request received in updateGroupSubject'); + logger.verbose('request body: '); + logger.verbose(req.body); + + logger.verbose('request query: '); + logger.verbose(req.query); + const response = await this.groupValidate({ request: req, schema: updateGroupSubjectSchema, @@ -52,6 +68,12 @@ export class GroupRouter extends RouterBroker { res.status(HttpStatus.CREATED).json(response); }) .put(this.routerPath('updateGroupPicture'), ...guards, async (req, res) => { + logger.verbose('request received in updateGroupPicture'); + logger.verbose('request body: '); + logger.verbose(req.body); + + logger.verbose('request query: '); + logger.verbose(req.query); const response = await this.groupValidate({ request: req, schema: updateGroupPictureSchema, @@ -62,6 +84,12 @@ export class GroupRouter extends RouterBroker { res.status(HttpStatus.CREATED).json(response); }) .put(this.routerPath('updateGroupDescription'), ...guards, async (req, res) => { + logger.verbose('request received in updateGroupDescription'); + logger.verbose('request body: '); + logger.verbose(req.body); + + logger.verbose('request query: '); + logger.verbose(req.query); const response = await this.groupValidate({ request: req, schema: updateGroupDescriptionSchema, @@ -73,6 +101,12 @@ export class GroupRouter extends RouterBroker { res.status(HttpStatus.CREATED).json(response); }) .get(this.routerPath('findGroupInfos'), ...guards, async (req, res) => { + logger.verbose('request received in findGroupInfos'); + logger.verbose('request body: '); + logger.verbose(req.body); + + logger.verbose('request query: '); + logger.verbose(req.query); const response = await this.groupValidate({ request: req, schema: groupJidSchema, @@ -83,6 +117,12 @@ export class GroupRouter extends RouterBroker { res.status(HttpStatus.OK).json(response); }) .get(this.routerPath('fetchAllGroups'), ...guards, async (req, res) => { + logger.verbose('request received in fetchAllGroups'); + logger.verbose('request body: '); + logger.verbose(req.body); + + logger.verbose('request query: '); + logger.verbose(req.query); const response = await this.groupNoValidate({ request: req, schema: {}, @@ -93,6 +133,12 @@ export class GroupRouter extends RouterBroker { res.status(HttpStatus.OK).json(response); }) .get(this.routerPath('participants'), ...guards, async (req, res) => { + logger.verbose('request received in participants'); + logger.verbose('request body: '); + logger.verbose(req.body); + + logger.verbose('request query: '); + logger.verbose(req.query); const response = await this.groupValidate({ request: req, schema: groupJidSchema, @@ -103,6 +149,12 @@ export class GroupRouter extends RouterBroker { res.status(HttpStatus.OK).json(response); }) .get(this.routerPath('inviteCode'), ...guards, async (req, res) => { + logger.verbose('request received in inviteCode'); + logger.verbose('request body: '); + logger.verbose(req.body); + + logger.verbose('request query: '); + logger.verbose(req.query); const response = await this.groupValidate({ request: req, schema: groupJidSchema, @@ -113,6 +165,12 @@ export class GroupRouter extends RouterBroker { res.status(HttpStatus.OK).json(response); }) .get(this.routerPath('inviteInfo'), ...guards, async (req, res) => { + logger.verbose('request received in inviteInfo'); + logger.verbose('request body: '); + logger.verbose(req.body); + + logger.verbose('request query: '); + logger.verbose(req.query); const response = await this.inviteCodeValidate({ request: req, schema: groupInviteSchema, @@ -123,6 +181,12 @@ export class GroupRouter extends RouterBroker { res.status(HttpStatus.OK).json(response); }) .post(this.routerPath('sendInvite'), ...guards, async (req, res) => { + logger.verbose('request received in sendInvite'); + logger.verbose('request body: '); + logger.verbose(req.body); + + logger.verbose('request query: '); + logger.verbose(req.query); const response = await this.groupNoValidate({ request: req, schema: groupSendInviteSchema, @@ -133,6 +197,12 @@ export class GroupRouter extends RouterBroker { res.status(HttpStatus.OK).json(response); }) .put(this.routerPath('revokeInviteCode'), ...guards, async (req, res) => { + logger.verbose('request received in revokeInviteCode'); + logger.verbose('request body: '); + logger.verbose(req.body); + + logger.verbose('request query: '); + logger.verbose(req.query); const response = await this.groupValidate({ request: req, schema: groupJidSchema, @@ -143,6 +213,12 @@ export class GroupRouter extends RouterBroker { res.status(HttpStatus.CREATED).json(response); }) .put(this.routerPath('updateParticipant'), ...guards, async (req, res) => { + logger.verbose('request received in updateParticipant'); + logger.verbose('request body: '); + logger.verbose(req.body); + + logger.verbose('request query: '); + logger.verbose(req.query); const response = await this.groupValidate({ request: req, schema: updateParticipantsSchema, @@ -153,6 +229,12 @@ export class GroupRouter extends RouterBroker { res.status(HttpStatus.CREATED).json(response); }) .put(this.routerPath('updateSetting'), ...guards, async (req, res) => { + logger.verbose('request received in updateSetting'); + logger.verbose('request body: '); + logger.verbose(req.body); + + logger.verbose('request query: '); + logger.verbose(req.query); const response = await this.groupValidate({ request: req, schema: updateSettingsSchema, @@ -163,6 +245,12 @@ export class GroupRouter extends RouterBroker { res.status(HttpStatus.CREATED).json(response); }) .put(this.routerPath('toggleEphemeral'), ...guards, async (req, res) => { + logger.verbose('request received in toggleEphemeral'); + logger.verbose('request body: '); + logger.verbose(req.body); + + logger.verbose('request query: '); + logger.verbose(req.query); const response = await this.groupValidate({ request: req, schema: toggleEphemeralSchema, @@ -173,6 +261,12 @@ export class GroupRouter extends RouterBroker { res.status(HttpStatus.CREATED).json(response); }) .delete(this.routerPath('leaveGroup'), ...guards, async (req, res) => { + logger.verbose('request received in leaveGroup'); + logger.verbose('request body: '); + logger.verbose(req.body); + + logger.verbose('request query: '); + logger.verbose(req.query); const response = await this.groupValidate({ request: req, schema: {}, diff --git a/src/whatsapp/routers/instance.router.ts b/src/whatsapp/routers/instance.router.ts index 29a59a87..799c8249 100644 --- a/src/whatsapp/routers/instance.router.ts +++ b/src/whatsapp/routers/instance.router.ts @@ -7,6 +7,9 @@ import { HttpStatus } from './index.router'; import { OldToken } from '../services/auth.service'; import { Auth, ConfigService, Database } from '../../config/env.config'; import { dbserver } from '../../db/db.connect'; +import { Logger } from '../../config/logger.config'; + +const logger = new Logger('InstanceRouter'); export class InstanceRouter extends RouterBroker { constructor(readonly configService: ConfigService, ...guards: RequestHandler[]) { @@ -14,6 +17,12 @@ export class InstanceRouter extends RouterBroker { const auth = configService.get('AUTHENTICATION'); this.router .post('/create', ...guards, async (req, res) => { + logger.verbose('request received in createInstance'); + logger.verbose('request body: '); + logger.verbose(req.body); + + logger.verbose('request query: '); + logger.verbose(req.query); const response = await this.dataValidate({ request: req, schema: instanceNameSchema, @@ -24,6 +33,12 @@ export class InstanceRouter extends RouterBroker { return res.status(HttpStatus.CREATED).json(response); }) .put(this.routerPath('restart'), ...guards, async (req, res) => { + logger.verbose('request received in restartInstance'); + logger.verbose('request body: '); + logger.verbose(req.body); + + logger.verbose('request query: '); + logger.verbose(req.query); const response = await this.dataValidate({ request: req, schema: instanceNameSchema, @@ -34,6 +49,12 @@ export class InstanceRouter extends RouterBroker { return res.status(HttpStatus.OK).json(response); }) .get(this.routerPath('connect'), ...guards, async (req, res) => { + logger.verbose('request received in connectInstance'); + logger.verbose('request body: '); + logger.verbose(req.body); + + logger.verbose('request query: '); + logger.verbose(req.query); const response = await this.dataValidate({ request: req, schema: instanceNameSchema, @@ -44,6 +65,12 @@ export class InstanceRouter extends RouterBroker { return res.status(HttpStatus.OK).json(response); }) .get(this.routerPath('connectionState'), ...guards, async (req, res) => { + logger.verbose('request received in connectionState'); + logger.verbose('request body: '); + logger.verbose(req.body); + + logger.verbose('request query: '); + logger.verbose(req.query); const response = await this.dataValidate({ request: req, schema: instanceNameSchema, @@ -54,6 +81,12 @@ export class InstanceRouter extends RouterBroker { return res.status(HttpStatus.OK).json(response); }) .get(this.routerPath('fetchInstances', false), ...guards, async (req, res) => { + logger.verbose('request received in fetchInstances'); + logger.verbose('request body: '); + logger.verbose(req.body); + + logger.verbose('request query: '); + logger.verbose(req.query); const response = await this.dataValidate({ request: req, schema: null, @@ -64,6 +97,12 @@ export class InstanceRouter extends RouterBroker { return res.status(HttpStatus.OK).json(response); }) .delete(this.routerPath('logout'), ...guards, async (req, res) => { + logger.verbose('request received in logoutInstances'); + logger.verbose('request body: '); + logger.verbose(req.body); + + logger.verbose('request query: '); + logger.verbose(req.query); const response = await this.dataValidate({ request: req, schema: instanceNameSchema, @@ -74,6 +113,12 @@ export class InstanceRouter extends RouterBroker { return res.status(HttpStatus.OK).json(response); }) .delete(this.routerPath('delete'), ...guards, async (req, res) => { + logger.verbose('request received in deleteInstances'); + logger.verbose('request body: '); + logger.verbose(req.body); + + logger.verbose('request query: '); + logger.verbose(req.query); const response = await this.dataValidate({ request: req, schema: instanceNameSchema, @@ -86,6 +131,12 @@ export class InstanceRouter extends RouterBroker { if (auth.TYPE === 'jwt') { this.router.put('/refreshToken', async (req, res) => { + logger.verbose('request received in refreshToken'); + logger.verbose('request body: '); + logger.verbose(req.body); + + logger.verbose('request query: '); + logger.verbose(req.query); const response = await this.dataValidate({ request: req, schema: oldTokenSchema, @@ -98,6 +149,12 @@ export class InstanceRouter extends RouterBroker { } this.router.delete('/deleteDatabase', async (req, res) => { + logger.verbose('request received in deleteDatabase'); + logger.verbose('request body: '); + logger.verbose(req.body); + + logger.verbose('request query: '); + logger.verbose(req.query); const db = this.configService.get('DATABASE'); if (db.ENABLED) { try { diff --git a/src/whatsapp/routers/sendMessage.router.ts b/src/whatsapp/routers/sendMessage.router.ts index 92b01557..d8d3acea 100644 --- a/src/whatsapp/routers/sendMessage.router.ts +++ b/src/whatsapp/routers/sendMessage.router.ts @@ -30,12 +30,21 @@ import { import { sendMessageController } from '../whatsapp.module'; import { RouterBroker } from '../abstract/abstract.router'; import { HttpStatus } from './index.router'; +import { Logger } from '../../config/logger.config'; + +const logger = new Logger('MessageRouter'); export class MessageRouter extends RouterBroker { constructor(...guards: RequestHandler[]) { super(); this.router .post(this.routerPath('sendText'), ...guards, async (req, res) => { + logger.verbose('request received in sendText'); + logger.verbose('request body: '); + logger.verbose(req.body); + + logger.verbose('request query: '); + logger.verbose(req.query); const response = await this.dataValidate({ request: req, schema: textMessageSchema, @@ -46,6 +55,12 @@ export class MessageRouter extends RouterBroker { return res.status(HttpStatus.CREATED).json(response); }) .post(this.routerPath('sendMedia'), ...guards, async (req, res) => { + logger.verbose('request received in sendMedia'); + logger.verbose('request body: '); + logger.verbose(req.body); + + logger.verbose('request query: '); + logger.verbose(req.query); const response = await this.dataValidate({ request: req, schema: mediaMessageSchema, @@ -56,6 +71,12 @@ export class MessageRouter extends RouterBroker { return res.status(HttpStatus.CREATED).json(response); }) .post(this.routerPath('sendWhatsAppAudio'), ...guards, async (req, res) => { + logger.verbose('request received in sendWhatsAppAudio'); + logger.verbose('request body: '); + logger.verbose(req.body); + + logger.verbose('request query: '); + logger.verbose(req.query); const response = await this.dataValidate({ request: req, schema: audioMessageSchema, @@ -67,6 +88,12 @@ export class MessageRouter extends RouterBroker { return res.status(HttpStatus.CREATED).json(response); }) .post(this.routerPath('sendButtons'), ...guards, async (req, res) => { + logger.verbose('request received in sendButtons'); + logger.verbose('request body: '); + logger.verbose(req.body); + + logger.verbose('request query: '); + logger.verbose(req.query); const response = await this.dataValidate({ request: req, schema: buttonMessageSchema, @@ -77,6 +104,12 @@ export class MessageRouter extends RouterBroker { return res.status(HttpStatus.CREATED).json(response); }) .post(this.routerPath('sendLocation'), ...guards, async (req, res) => { + logger.verbose('request received in sendLocation'); + logger.verbose('request body: '); + logger.verbose(req.body); + + logger.verbose('request query: '); + logger.verbose(req.query); const response = await this.dataValidate({ request: req, schema: locationMessageSchema, @@ -87,6 +120,12 @@ export class MessageRouter extends RouterBroker { return res.status(HttpStatus.CREATED).json(response); }) .post(this.routerPath('sendList'), ...guards, async (req, res) => { + logger.verbose('request received in sendList'); + logger.verbose('request body: '); + logger.verbose(req.body); + + logger.verbose('request query: '); + logger.verbose(req.query); const response = await this.dataValidate({ request: req, schema: listMessageSchema, @@ -97,6 +136,12 @@ export class MessageRouter extends RouterBroker { return res.status(HttpStatus.CREATED).json(response); }) .post(this.routerPath('sendContact'), ...guards, async (req, res) => { + logger.verbose('request received in sendContact'); + logger.verbose('request body: '); + logger.verbose(req.body); + + logger.verbose('request query: '); + logger.verbose(req.query); const response = await this.dataValidate({ request: req, schema: contactMessageSchema, @@ -107,6 +152,12 @@ export class MessageRouter extends RouterBroker { return res.status(HttpStatus.CREATED).json(response); }) .post(this.routerPath('sendReaction'), ...guards, async (req, res) => { + logger.verbose('request received in sendReaction'); + logger.verbose('request body: '); + logger.verbose(req.body); + + logger.verbose('request query: '); + logger.verbose(req.query); const response = await this.dataValidate({ request: req, schema: reactionMessageSchema, @@ -117,6 +168,12 @@ export class MessageRouter extends RouterBroker { return res.status(HttpStatus.CREATED).json(response); }) .post(this.routerPath('sendPoll'), ...guards, async (req, res) => { + logger.verbose('request received in sendPoll'); + logger.verbose('request body: '); + logger.verbose(req.body); + + logger.verbose('request query: '); + logger.verbose(req.query); const response = await this.dataValidate({ request: req, schema: pollMessageSchema, @@ -127,6 +184,12 @@ export class MessageRouter extends RouterBroker { return res.status(HttpStatus.CREATED).json(response); }) .post(this.routerPath('sendStatus'), ...guards, async (req, res) => { + logger.verbose('request received in sendStatus'); + logger.verbose('request body: '); + logger.verbose(req.body); + + logger.verbose('request query: '); + logger.verbose(req.query); const response = await this.dataValidate({ request: req, schema: statusMessageSchema, @@ -137,6 +200,12 @@ export class MessageRouter extends RouterBroker { return res.status(HttpStatus.CREATED).json(response); }) .post(this.routerPath('sendLinkPreview'), ...guards, async (req, res) => { + logger.verbose('request received in sendLinkPreview'); + logger.verbose('request body: '); + logger.verbose(req.body); + + logger.verbose('request query: '); + logger.verbose(req.query); const response = await this.dataValidate({ request: req, schema: linkPreviewSchema, @@ -148,6 +217,12 @@ export class MessageRouter extends RouterBroker { return res.status(HttpStatus.CREATED).json(response); }) .post(this.routerPath('sendSticker'), ...guards, async (req, res) => { + logger.verbose('request received in sendSticker'); + logger.verbose('request body: '); + logger.verbose(req.body); + + logger.verbose('request query: '); + logger.verbose(req.query); const response = await this.dataValidate({ request: req, schema: stickerMessageSchema, diff --git a/src/whatsapp/routers/webhook.router.ts b/src/whatsapp/routers/webhook.router.ts index 70a65a0c..c520d9d5 100644 --- a/src/whatsapp/routers/webhook.router.ts +++ b/src/whatsapp/routers/webhook.router.ts @@ -5,12 +5,21 @@ import { InstanceDto } from '../dto/instance.dto'; import { WebhookDto } from '../dto/webhook.dto'; import { webhookController } from '../whatsapp.module'; import { HttpStatus } from './index.router'; +import { Logger } from '../../config/logger.config'; + +const logger = new Logger('WebhookRouter'); export class WebhookRouter extends RouterBroker { constructor(...guards: RequestHandler[]) { super(); this.router .post(this.routerPath('set'), ...guards, async (req, res) => { + logger.verbose('request received in setWebhook'); + logger.verbose('request body: '); + logger.verbose(req.body); + + logger.verbose('request query: '); + logger.verbose(req.query); const response = await this.dataValidate({ request: req, schema: webhookSchema, @@ -21,6 +30,12 @@ export class WebhookRouter extends RouterBroker { res.status(HttpStatus.CREATED).json(response); }) .get(this.routerPath('find'), ...guards, async (req, res) => { + logger.verbose('request received in findWebhook'); + logger.verbose('request body: '); + logger.verbose(req.body); + + logger.verbose('request query: '); + logger.verbose(req.query); const response = await this.dataValidate({ request: req, schema: instanceNameSchema,