feat: adiciona controlador de chamadas

Adiciona o controlador de chamadas para oferecer chamadas falsas.

- Adiciona o arquivo `call.controller.ts` com a classe `CallController` que possui o método `offerCall` para oferecer chamadas falsas.
- Adiciona o arquivo `call.dto.ts` com as classes `Metadata` e `OfferCallDto` para definir os dados da chamada.
- Atualiza o arquivo `sendMessage.dto.ts` removendo a classe `OfferCallDto`.
- Atualiza o arquivo `whatsapp.baileys.service.ts` importando a classe `OfferCallDto` corretamente e atualizando o método `offerCall` para receber os parâmetros corretos.
- Adiciona o arquivo `call.router.ts` com a classe `CallRouter` para lidar com as rotas relacionadas a chamadas.
- Atualiza o arquivo `index.router.ts` para incluir as rotas relacionadas a chamadas.
This commit is contained in:
Felipe Medeiros 2024-10-07 10:49:51 -03:00
parent 0af00582f0
commit bcf59a2015
7 changed files with 50 additions and 23 deletions

View File

@ -0,0 +1,11 @@
import { OfferCallDto } from '@api/dto/call.dto';
import { InstanceDto } from '@api/dto/instance.dto';
import { WAMonitoringService } from '@api/services/monitor.service';
export class CallController {
constructor(private readonly waMonitor: WAMonitoringService) {}
public async offerCall({ instanceName }: InstanceDto, data: OfferCallDto) {
return await this.waMonitor.waInstances[instanceName].offerCall(data);
}
}

8
src/api/dto/call.dto.ts Normal file
View File

@ -0,0 +1,8 @@
export class Metadata {
number: string;
}
export class OfferCallDto extends Metadata {
isVideo?: boolean;
callDuration?: number;
}

View File

@ -46,11 +46,6 @@ export class Metadata {
encoding?: boolean;
}
export class OfferCallDto extends Metadata {
isVideo?: boolean;
callDuration?: number;
}
export class SendTextDto extends Metadata {
text: string;
}

View File

@ -1,3 +1,4 @@
import { OfferCallDto } from '@api/dto/call.dto';
import {
ArchiveChatDto,
BlockUserDto,
@ -32,7 +33,6 @@ import { HandleLabelDto, LabelDto } from '@api/dto/label.dto';
import {
ContactMessage,
MediaMessage,
OfferCallDto,
Options,
SendAudioDto,
SendContactDto,
@ -1671,14 +1671,12 @@ export class BaileysStartupService extends ChannelStartupService {
}
}
public async offerCall({ number, callDuration }: OfferCallDto) {
public async offerCall({ number, isVideo, callDuration }: OfferCallDto) {
const jid = this.createJid(number);
try {
const call = await this.client.offerCall(jid);
if (callDuration) {
setTimeout(() => this.client.terminateCall(call.id, call.to), callDuration * 1000);
}
const call = await this.client.offerCall(jid, isVideo);
setTimeout(() => this.client.terminateCall(call.id, call.to), callDuration * 1000);
return call;
} catch (error) {

View File

@ -0,0 +1,25 @@
import { RouterBroker } from '@api/abstract/abstract.router';
import { OfferCallDto } from '@api/dto/call.dto';
import { sendMessageController } from '@api/server.module';
import { offerCallSchema } from '@validate/validate.schema';
import { RequestHandler, Router } from 'express';
import { HttpStatus } from './index.router';
export class CallRouter extends RouterBroker {
constructor(...guards: RequestHandler[]) {
super();
this.router.post(this.routerPath('offer'), ...guards, async (req, res) => {
const response = await this.dataValidate<OfferCallDto>({
request: req,
schema: offerCallSchema,
ClassRef: OfferCallDto,
execute: (instance, data) => sendMessageController.offerCall(instance, data),
});
return res.status(HttpStatus.CREATED).json(response);
});
}
public readonly router: Router = Router();
}

View File

@ -11,6 +11,7 @@ import fs from 'fs';
import mime from 'mime';
import path from 'path';
import { CallRouter } from './call.router';
import { ChatRouter } from './chat.router';
import { GroupRouter } from './group.router';
import { InstanceRouter } from './instance.router';
@ -79,6 +80,7 @@ router
})
.use('/instance', new InstanceRouter(configService, ...guards).router)
.use('/message', new MessageRouter(...guards).router)
.use('/call', new CallRouter(...guards).router)
.use('/chat', new ChatRouter(...guards).router)
.use('/group', new GroupRouter(...guards).router)
.use('/template', new TemplateRouter(configService, ...guards).router)

View File

@ -1,6 +1,5 @@
import { RouterBroker } from '@api/abstract/abstract.router';
import {
OfferCallDto,
SendAudioDto,
SendButtonDto,
SendContactDto,
@ -22,7 +21,6 @@ import {
listMessageSchema,
locationMessageSchema,
mediaMessageSchema,
offerCallSchema,
pollMessageSchema,
reactionMessageSchema,
statusMessageSchema,
@ -168,16 +166,6 @@ export class MessageRouter extends RouterBroker {
execute: (instance, data) => sendMessageController.sendButtons(instance, data),
});
return res.status(HttpStatus.CREATED).json(response);
})
.post(this.routerPath('offerCall'), ...guards, async (req, res) => {
const response = await this.dataValidate<OfferCallDto>({
request: req,
schema: offerCallSchema,
ClassRef: OfferCallDto,
execute: (instance, data) => sendMessageController.offerCall(instance, data),
});
return res.status(HttpStatus.CREATED).json(response);
});
}