diff --git a/package.json b/package.json index f9131fed..71391058 100644 --- a/package.json +++ b/package.json @@ -2,13 +2,14 @@ "name": "evolution-api", "version": "2.0.9-rc", "description": "Rest api for communication with WhatsApp", - "main": "./dist/src/main.js", + "main": "./dist/main.js", + "type": "commonjs", "scripts": { - "build": "tsc", - "start": "ts-node --files --transpile-only ./src/main.ts", - "start:prod": "node dist/src/main", - "dev:server": "clear && tsnd --files --transpile-only --respawn --ignore-watch node_modules ./src/main.ts", - "test": "clear && tsnd --files --transpile-only --respawn --ignore-watch node_modules ./test/all.test.ts", + "build": "tsup", + "start": "tsnd -r tsconfig-paths/register --files --transpile-only ./src/main.ts", + "start:prod": "node dist/main", + "dev:server": "clear && tsnd -r tsconfig-paths/register --files --transpile-only --respawn --ignore-watch node_modules ./src/main.ts", + "test": "clear && tsnd -r tsconfig-paths/register --files --transpile-only --respawn --ignore-watch node_modules ./test/all.test.ts", "lint": "eslint --fix --ext .ts src", "db:generate": "node runWithProvider.js \"npx prisma generate --schema ./prisma/DATABASE_PROVIDER-schema.prisma\"", @@ -75,11 +76,13 @@ "jimp": "^0.16.13", "join": "^3.0.0", "js-yaml": "^4.1.0", + "json-schema": "^0.4.0", "jsonschema": "^1.4.1", "link-preview-js": "^3.0.4", + "long": "^5.2.3", + "mime": "^3.0.0", "minio": "^8.0.1", "node-cache": "^5.1.2", - "node-mime-types": "^1.1.0", "node-windows": "^1.0.0-beta.8", "openai": "^4.52.7", "parse-bmfont-xml": "^1.1.4", @@ -92,6 +95,7 @@ "sharp": "^0.32.2", "socket.io": "^4.7.1", "socks-proxy-agent": "^8.0.1", + "tsup": "^8.2.4", "uuid": "^9.0.0", "xml2js": "^0.6.2", "yamljs": "^0.3.0" @@ -101,7 +105,7 @@ "@types/cors": "^2.8.13", "@types/express": "^4.17.17", "@types/js-yaml": "^4.0.5", - "@types/mime-types": "^2.1.1", + "@types/json-schema": "^7.0.15", "@types/node": "^18.15.11", "@types/node-windows": "^0.1.2", "@types/qrcode": "^1.5.0", @@ -116,6 +120,7 @@ "eslint-plugin-simple-import-sort": "^10.0.0", "prettier": "^2.8.8", "ts-node-dev": "^2.0.0", + "tsconfig-paths": "^4.2.0", "typescript": "^4.9.5" } } diff --git a/src/api/abstract/abstract.repository.ts b/src/api/abstract/abstract.repository.ts index a5b7a841..16bf81f9 100644 --- a/src/api/abstract/abstract.repository.ts +++ b/src/api/abstract/abstract.repository.ts @@ -1,9 +1,8 @@ +import { ConfigService, Database } from '@config/env.config'; +import { ROOT_DIR } from '@config/path.config'; import { existsSync, mkdirSync, writeFileSync } from 'fs'; import { join } from 'path'; -import { ConfigService, Database } from '../../config/env.config'; -import { ROOT_DIR } from '../../config/path.config'; - export type IInsert = { insertCount: number }; export interface IRepository { diff --git a/src/api/abstract/abstract.router.ts b/src/api/abstract/abstract.router.ts index 18770ffa..e8449a8c 100644 --- a/src/api/abstract/abstract.router.ts +++ b/src/api/abstract/abstract.router.ts @@ -1,14 +1,13 @@ import 'express-async-errors'; +import { GetParticipant, GroupInvite } from '@api/dto/group.dto'; +import { InstanceDto } from '@api/dto/instance.dto'; +import { Logger } from '@config/logger.config'; +import { BadRequestException } from '@exceptions'; import { Request } from 'express'; import { JSONSchema7 } from 'json-schema'; import { validate } from 'jsonschema'; -import { Logger } from '../../config/logger.config'; -import { BadRequestException } from '../../exceptions'; -import { GetParticipant, GroupInvite } from '../dto/group.dto'; -import { InstanceDto } from '../dto/instance.dto'; - type DataValidate = { request: Request; schema: JSONSchema7; diff --git a/src/api/controllers/chat.controller.ts b/src/api/controllers/chat.controller.ts index 044a9833..207d8ba5 100644 --- a/src/api/controllers/chat.controller.ts +++ b/src/api/controllers/chat.controller.ts @@ -1,5 +1,3 @@ -import { Contact, Message, MessageUpdate } from '@prisma/client'; - import { ArchiveChatDto, BlockUserDto, @@ -15,10 +13,11 @@ import { SendPresenceDto, UpdateMessageDto, WhatsAppNumberDto, -} from '../dto/chat.dto'; -import { InstanceDto } from '../dto/instance.dto'; -import { Query } from '../repository/repository.service'; -import { WAMonitoringService } from '../services/monitor.service'; +} from '@api/dto/chat.dto'; +import { InstanceDto } from '@api/dto/instance.dto'; +import { Query } from '@api/repository/repository.service'; +import { WAMonitoringService } from '@api/services/monitor.service'; +import { Contact, Message, MessageUpdate } from '@prisma/client'; export class ChatController { constructor(private readonly waMonitor: WAMonitoringService) {} diff --git a/src/api/controllers/group.controller.ts b/src/api/controllers/group.controller.ts index 0e3bdf4c..ebe7c036 100644 --- a/src/api/controllers/group.controller.ts +++ b/src/api/controllers/group.controller.ts @@ -11,9 +11,9 @@ import { GroupToggleEphemeralDto, GroupUpdateParticipantDto, GroupUpdateSettingDto, -} from '../dto/group.dto'; -import { InstanceDto } from '../dto/instance.dto'; -import { WAMonitoringService } from '../services/monitor.service'; +} from '@api/dto/group.dto'; +import { InstanceDto } from '@api/dto/instance.dto'; +import { WAMonitoringService } from '@api/services/monitor.service'; export class GroupController { constructor(private readonly waMonitor: WAMonitoringService) {} diff --git a/src/api/controllers/instance.controller.ts b/src/api/controllers/instance.controller.ts index 302b598d..e5e9a53b 100644 --- a/src/api/controllers/instance.controller.ts +++ b/src/api/controllers/instance.controller.ts @@ -1,27 +1,27 @@ +import { InstanceDto, SetPresenceDto } from '@api/dto/instance.dto'; +import { ChatwootService } from '@api/integrations/chatwoot/services/chatwoot.service'; +import { RabbitmqService } from '@api/integrations/rabbitmq/services/rabbitmq.service'; +import { SqsService } from '@api/integrations/sqs/services/sqs.service'; +import { WebsocketService } from '@api/integrations/websocket/services/websocket.service'; +import { ProviderFiles } from '@api/provider/sessions'; +import { PrismaRepository } from '@api/repository/repository.service'; +import { AuthService } from '@api/services/auth.service'; +import { CacheService } from '@api/services/cache.service'; +import { BaileysStartupService } from '@api/services/channels/whatsapp.baileys.service'; +import { BusinessStartupService } from '@api/services/channels/whatsapp.business.service'; +import { WAMonitoringService } from '@api/services/monitor.service'; +import { SettingsService } from '@api/services/settings.service'; +import { WebhookService } from '@api/services/webhook.service'; +import { Events, Integration, wa } from '@api/types/wa.types'; +import { Auth, Chatwoot, ConfigService, HttpServer, WaBusiness } from '@config/env.config'; +import { Logger } from '@config/logger.config'; +import { BadRequestException, InternalServerErrorException, UnauthorizedException } from '@exceptions'; import { JsonValue } from '@prisma/client/runtime/library'; import { delay } from 'baileys'; import { isArray, isURL } from 'class-validator'; import EventEmitter2 from 'eventemitter2'; import { v4 } from 'uuid'; -import { Auth, Chatwoot, ConfigService, HttpServer, WaBusiness } from '../../config/env.config'; -import { Logger } from '../../config/logger.config'; -import { BadRequestException, InternalServerErrorException, UnauthorizedException } from '../../exceptions'; -import { InstanceDto, SetPresenceDto } from '../dto/instance.dto'; -import { ChatwootService } from '../integrations/chatwoot/services/chatwoot.service'; -import { RabbitmqService } from '../integrations/rabbitmq/services/rabbitmq.service'; -import { SqsService } from '../integrations/sqs/services/sqs.service'; -import { WebsocketService } from '../integrations/websocket/services/websocket.service'; -import { ProviderFiles } from '../provider/sessions'; -import { PrismaRepository } from '../repository/repository.service'; -import { AuthService } from '../services/auth.service'; -import { CacheService } from '../services/cache.service'; -import { BaileysStartupService } from '../services/channels/whatsapp.baileys.service'; -import { BusinessStartupService } from '../services/channels/whatsapp.business.service'; -import { WAMonitoringService } from '../services/monitor.service'; -import { SettingsService } from '../services/settings.service'; -import { WebhookService } from '../services/webhook.service'; -import { Events, Integration, wa } from '../types/wa.types'; import { ProxyController } from './proxy.controller'; export class InstanceController { @@ -44,7 +44,7 @@ export class InstanceController { private readonly providerFiles: ProviderFiles, ) {} - private readonly logger = new Logger(InstanceController.name); + private readonly logger = new Logger('InstanceController'); public async createInstance({ instanceName, diff --git a/src/api/controllers/label.controller.ts b/src/api/controllers/label.controller.ts index 669af147..2df112f7 100644 --- a/src/api/controllers/label.controller.ts +++ b/src/api/controllers/label.controller.ts @@ -1,6 +1,6 @@ -import { InstanceDto } from '../dto/instance.dto'; -import { HandleLabelDto } from '../dto/label.dto'; -import { WAMonitoringService } from '../services/monitor.service'; +import { InstanceDto } from '@api/dto/instance.dto'; +import { HandleLabelDto } from '@api/dto/label.dto'; +import { WAMonitoringService } from '@api/services/monitor.service'; export class LabelController { constructor(private readonly waMonitor: WAMonitoringService) {} diff --git a/src/api/controllers/proxy.controller.ts b/src/api/controllers/proxy.controller.ts index 9dbc4510..637e7b18 100644 --- a/src/api/controllers/proxy.controller.ts +++ b/src/api/controllers/proxy.controller.ts @@ -1,13 +1,12 @@ +import { InstanceDto } from '@api/dto/instance.dto'; +import { ProxyDto } from '@api/dto/proxy.dto'; +import { WAMonitoringService } from '@api/services/monitor.service'; +import { ProxyService } from '@api/services/proxy.service'; +import { Logger } from '@config/logger.config'; +import { BadRequestException, NotFoundException } from '@exceptions'; +import { makeProxyAgent } from '@utils/makeProxyAgent'; import axios from 'axios'; -import { Logger } from '../../config/logger.config'; -import { BadRequestException, NotFoundException } from '../../exceptions'; -import { makeProxyAgent } from '../../utils/makeProxyAgent'; -import { InstanceDto } from '../dto/instance.dto'; -import { ProxyDto } from '../dto/proxy.dto'; -import { WAMonitoringService } from '../services/monitor.service'; -import { ProxyService } from '../services/proxy.service'; - const logger = new Logger('ProxyController'); export class ProxyController { diff --git a/src/api/controllers/sendMessage.controller.ts b/src/api/controllers/sendMessage.controller.ts index 8c005094..6a286cb8 100644 --- a/src/api/controllers/sendMessage.controller.ts +++ b/src/api/controllers/sendMessage.controller.ts @@ -1,7 +1,4 @@ -import { isBase64, isURL } from 'class-validator'; - -import { BadRequestException } from '../../exceptions'; -import { InstanceDto } from '../dto/instance.dto'; +import { InstanceDto } from '@api/dto/instance.dto'; import { SendAudioDto, SendButtonDto, @@ -15,8 +12,10 @@ import { SendStickerDto, SendTemplateDto, SendTextDto, -} from '../dto/sendMessage.dto'; -import { WAMonitoringService } from '../services/monitor.service'; +} from '@api/dto/sendMessage.dto'; +import { WAMonitoringService } from '@api/services/monitor.service'; +import { BadRequestException } from '@exceptions'; +import { isBase64, isURL } from 'class-validator'; export class SendMessageController { constructor(private readonly waMonitor: WAMonitoringService) {} diff --git a/src/api/controllers/settings.controller.ts b/src/api/controllers/settings.controller.ts index 5e0e6aae..8a600a24 100644 --- a/src/api/controllers/settings.controller.ts +++ b/src/api/controllers/settings.controller.ts @@ -1,6 +1,6 @@ -import { InstanceDto } from '../dto/instance.dto'; -import { SettingsDto } from '../dto/settings.dto'; -import { SettingsService } from '../services/settings.service'; +import { InstanceDto } from '@api/dto/instance.dto'; +import { SettingsDto } from '@api/dto/settings.dto'; +import { SettingsService } from '@api/services/settings.service'; export class SettingsController { constructor(private readonly settingsService: SettingsService) {} diff --git a/src/api/controllers/template.controller.ts b/src/api/controllers/template.controller.ts index b55100c7..d9b62045 100644 --- a/src/api/controllers/template.controller.ts +++ b/src/api/controllers/template.controller.ts @@ -1,6 +1,6 @@ -import { InstanceDto } from '../dto/instance.dto'; -import { TemplateDto } from '../dto/template.dto'; -import { TemplateService } from '../services/template.service'; +import { InstanceDto } from '@api/dto/instance.dto'; +import { TemplateDto } from '@api/dto/template.dto'; +import { TemplateService } from '@api/services/template.service'; export class TemplateController { constructor(private readonly templateService: TemplateService) {} diff --git a/src/api/controllers/webhook.controller.ts b/src/api/controllers/webhook.controller.ts index 0e79b2c9..036c70dc 100644 --- a/src/api/controllers/webhook.controller.ts +++ b/src/api/controllers/webhook.controller.ts @@ -1,11 +1,10 @@ +import { InstanceDto } from '@api/dto/instance.dto'; +import { WebhookDto } from '@api/dto/webhook.dto'; +import { WAMonitoringService } from '@api/services/monitor.service'; +import { WebhookService } from '@api/services/webhook.service'; +import { BadRequestException } from '@exceptions'; import { isURL } from 'class-validator'; -import { BadRequestException } from '../../exceptions'; -import { InstanceDto } from '../dto/instance.dto'; -import { WebhookDto } from '../dto/webhook.dto'; -import { WAMonitoringService } from '../services/monitor.service'; -import { WebhookService } from '../services/webhook.service'; - export class WebhookController { constructor(private readonly webhookService: WebhookService, private readonly waMonitor: WAMonitoringService) {} diff --git a/src/api/guards/auth.guard.ts b/src/api/guards/auth.guard.ts index a2d665d2..89b0874e 100644 --- a/src/api/guards/auth.guard.ts +++ b/src/api/guards/auth.guard.ts @@ -1,11 +1,10 @@ +import { InstanceDto } from '@api/dto/instance.dto'; +import { prismaRepository } from '@api/server.module'; +import { Auth, configService, Database } from '@config/env.config'; +import { Logger } from '@config/logger.config'; +import { ForbiddenException, UnauthorizedException } from '@exceptions'; import { NextFunction, Request, Response } from 'express'; -import { Auth, configService, Database } from '../../config/env.config'; -import { Logger } from '../../config/logger.config'; -import { ForbiddenException, UnauthorizedException } from '../../exceptions'; -import { InstanceDto } from '../dto/instance.dto'; -import { prismaRepository } from '../server.module'; - const logger = new Logger('GUARD'); async function apikey(req: Request, _: Response, next: NextFunction) { diff --git a/src/api/guards/instance.guard.ts b/src/api/guards/instance.guard.ts index df0e8bc6..9f8eb090 100644 --- a/src/api/guards/instance.guard.ts +++ b/src/api/guards/instance.guard.ts @@ -1,16 +1,10 @@ +import { InstanceDto } from '@api/dto/instance.dto'; +import { cache, waMonitor } from '@api/server.module'; +import { CacheConf, configService, Database } from '@config/env.config'; +import { BadRequestException, ForbiddenException, InternalServerErrorException, NotFoundException } from '@exceptions'; +import { prismaServer } from '@libs/prisma.connect'; import { NextFunction, Request, Response } from 'express'; -import { CacheConf, configService, Database } from '../../config/env.config'; -import { - BadRequestException, - ForbiddenException, - InternalServerErrorException, - NotFoundException, -} from '../../exceptions'; -import { prismaServer } from '../../libs/prisma.connect'; -import { InstanceDto } from '../dto/instance.dto'; -import { cache, waMonitor } from '../server.module'; - async function getInstance(instanceName: string) { try { const db = configService.get('DATABASE'); diff --git a/src/api/guards/telemetry.guard.ts b/src/api/guards/telemetry.guard.ts index c8599e39..f82c01ed 100644 --- a/src/api/guards/telemetry.guard.ts +++ b/src/api/guards/telemetry.guard.ts @@ -1,7 +1,6 @@ +import { sendTelemetry } from '@utils/sendTelemetry'; import { NextFunction, Request, Response } from 'express'; -import { sendTelemetry } from '../../utils/sendTelemetry'; - class Telemetry { public collectTelemetry(req: Request, res: Response, next: NextFunction): void { sendTelemetry(req.path); diff --git a/src/api/integrations/chatwoot/controllers/chatwoot.controller.ts b/src/api/integrations/chatwoot/controllers/chatwoot.controller.ts index bf9ac397..1abccc4b 100644 --- a/src/api/integrations/chatwoot/controllers/chatwoot.controller.ts +++ b/src/api/integrations/chatwoot/controllers/chatwoot.controller.ts @@ -1,15 +1,14 @@ +import { InstanceDto } from '@api/dto/instance.dto'; +import { ChatwootDto } from '@api/integrations/chatwoot/dto/chatwoot.dto'; +import { ChatwootService } from '@api/integrations/chatwoot/services/chatwoot.service'; +import { PrismaRepository } from '@api/repository/repository.service'; +import { waMonitor } from '@api/server.module'; +import { CacheService } from '@api/services/cache.service'; +import { CacheEngine } from '@cache/cacheengine'; +import { Chatwoot, ConfigService, HttpServer } from '@config/env.config'; +import { BadRequestException } from '@exceptions'; import { isURL } from 'class-validator'; -import { CacheEngine } from '../../../../cache/cacheengine'; -import { Chatwoot, ConfigService, HttpServer } from '../../../../config/env.config'; -import { BadRequestException } from '../../../../exceptions'; -import { InstanceDto } from '../../../dto/instance.dto'; -import { PrismaRepository } from '../../../repository/repository.service'; -import { waMonitor } from '../../../server.module'; -import { CacheService } from '../../../services/cache.service'; -import { ChatwootDto } from '../dto/chatwoot.dto'; -import { ChatwootService } from '../services/chatwoot.service'; - export class ChatwootController { constructor( private readonly chatwootService: ChatwootService, diff --git a/src/api/integrations/chatwoot/libs/postgres.client.ts b/src/api/integrations/chatwoot/libs/postgres.client.ts index 20e6515f..3e3e9685 100644 --- a/src/api/integrations/chatwoot/libs/postgres.client.ts +++ b/src/api/integrations/chatwoot/libs/postgres.client.ts @@ -1,12 +1,11 @@ +import { Chatwoot, configService } from '@config/env.config'; +import { Logger } from '@config/logger.config'; import postgresql from 'pg'; -import { Chatwoot, configService } from '../../../../config/env.config'; -import { Logger } from '../../../../config/logger.config'; - const { Pool } = postgresql; class Postgres { - private logger = new Logger(Postgres.name); + private logger = new Logger('Postgres'); private pool; private connected = false; diff --git a/src/api/integrations/chatwoot/routes/chatwoot.router.ts b/src/api/integrations/chatwoot/routes/chatwoot.router.ts index 20dc3183..f71e6294 100644 --- a/src/api/integrations/chatwoot/routes/chatwoot.router.ts +++ b/src/api/integrations/chatwoot/routes/chatwoot.router.ts @@ -1,12 +1,11 @@ +import { RouterBroker } from '@api/abstract/abstract.router'; +import { InstanceDto } from '@api/dto/instance.dto'; +import { ChatwootDto } from '@api/integrations/chatwoot/dto/chatwoot.dto'; +import { HttpStatus } from '@api/routes/index.router'; +import { chatwootController } from '@api/server.module'; +import { chatwootSchema, instanceSchema } from '@validate/validate.schema'; import { RequestHandler, Router } from 'express'; -import { chatwootSchema, instanceSchema } from '../../../../validate/validate.schema'; -import { RouterBroker } from '../../../abstract/abstract.router'; -import { InstanceDto } from '../../../dto/instance.dto'; -import { HttpStatus } from '../../../routes/index.router'; -import { chatwootController } from '../../../server.module'; -import { ChatwootDto } from '../dto/chatwoot.dto'; - export class ChatwootRouter extends RouterBroker { constructor(...guards: RequestHandler[]) { super(); @@ -43,5 +42,5 @@ export class ChatwootRouter extends RouterBroker { }); } - public readonly router = Router(); + public readonly router: Router = Router(); } diff --git a/src/api/integrations/chatwoot/services/chatwoot.service.ts b/src/api/integrations/chatwoot/services/chatwoot.service.ts index 07ae41bd..07bd1bcd 100644 --- a/src/api/integrations/chatwoot/services/chatwoot.service.ts +++ b/src/api/integrations/chatwoot/services/chatwoot.service.ts @@ -1,3 +1,14 @@ +import { InstanceDto } from '@api/dto/instance.dto'; +import { Options, Quoted, SendAudioDto, SendMediaDto, SendTextDto } from '@api/dto/sendMessage.dto'; +import { ChatwootDto } from '@api/integrations/chatwoot/dto/chatwoot.dto'; +import { postgresClient } from '@api/integrations/chatwoot/libs/postgres.client'; +import { chatwootImport } from '@api/integrations/chatwoot/utils/chatwoot-import-helper'; +import { PrismaRepository } from '@api/repository/repository.service'; +import { CacheService } from '@api/services/cache.service'; +import { WAMonitoringService } from '@api/services/monitor.service'; +import { Events } from '@api/types/wa.types'; +import { Chatwoot, ConfigService, HttpServer } from '@config/env.config'; +import { Logger } from '@config/logger.config'; import ChatwootClient, { ChatwootAPIConfig, contact, @@ -9,29 +20,17 @@ import ChatwootClient, { } from '@figuro/chatwoot-sdk'; import { request as chatwootRequest } from '@figuro/chatwoot-sdk/dist/core/request'; import { Chatwoot as ChatwootModel, Contact as ContactModel, Message as MessageModel } from '@prisma/client'; +import i18next from '@utils/i18n'; +import { sendTelemetry } from '@utils/sendTelemetry'; import axios from 'axios'; import { proto } from 'baileys'; import FormData from 'form-data'; import Jimp from 'jimp'; import Long from 'long'; -import mimeTypes from 'mime-types'; +import mime from 'mime'; import path from 'path'; import { Readable } from 'stream'; -import { Chatwoot, ConfigService, HttpServer } from '../../../../config/env.config'; -import { Logger } from '../../../../config/logger.config'; -import i18next from '../../../../utils/i18n'; -import { sendTelemetry } from '../../../../utils/sendTelemetry'; -import { ICache } from '../../../abstract/abstract.cache'; -import { InstanceDto } from '../../../dto/instance.dto'; -import { Options, Quoted, SendAudioDto, SendMediaDto, SendTextDto } from '../../../dto/sendMessage.dto'; -import { PrismaRepository } from '../../../repository/repository.service'; -import { WAMonitoringService } from '../../../services/monitor.service'; -import { Events } from '../../../types/wa.types'; -import { ChatwootDto } from '../dto/chatwoot.dto'; -import { postgresClient } from '../libs/postgres.client'; -import { chatwootImport } from '../utils/chatwoot-import-helper'; - interface ChatwootMessage { messageId?: number; inboxId?: number; @@ -41,7 +40,7 @@ interface ChatwootMessage { } export class ChatwootService { - private readonly logger = new Logger(ChatwootService.name); + private readonly logger = new Logger('ChatwootService'); private provider: any; @@ -49,7 +48,7 @@ export class ChatwootService { private readonly waMonitor: WAMonitoringService, private readonly configService: ConfigService, private readonly prismaRepository: PrismaRepository, - private readonly cache: ICache, + private readonly cache: CacheService, ) {} private pgClient = postgresClient.getChatwootConnection(); @@ -997,7 +996,7 @@ export class ChatwootService { public async sendAttachment(waInstance: any, number: string, media: any, caption?: string, options?: Options) { try { const parsedMedia = path.parse(decodeURIComponent(media)); - let mimeType = mimeTypes.lookup(parsedMedia?.ext) || ''; + let mimeType = mime.getType(parsedMedia?.ext) || ''; let fileName = parsedMedia?.name + parsedMedia?.ext; if (!mimeType) { @@ -1837,9 +1836,7 @@ export class ChatwootService { } if (!nameFile) { - nameFile = `${Math.random().toString(36).substring(7)}.${ - mimeTypes.extension(downloadBase64.mimetype) || '' - }`; + nameFile = `${Math.random().toString(36).substring(7)}.${mime.getExtension(downloadBase64.mimetype) || ''}`; } const fileData = Buffer.from(downloadBase64.base64, 'base64'); @@ -1927,8 +1924,8 @@ export class ChatwootService { if (adsMessage) { const imgBuffer = await axios.get(adsMessage.thumbnailUrl, { responseType: 'arraybuffer' }); - const extension = mimeTypes.extension(imgBuffer.headers['content-type']); - const mimeType = extension && mimeTypes.lookup(extension); + const extension = mime.getExtension(imgBuffer.headers['content-type']); + const mimeType = extension && mime.getType(extension); if (!mimeType) { this.logger.warn('mimetype of Ads message not found'); @@ -1936,7 +1933,7 @@ export class ChatwootService { } const random = Math.random().toString(36).substring(7); - const nameFile = `${random}.${mimeTypes.extension(mimeType)}`; + const nameFile = `${random}.${mime.getExtension(mimeType)}`; const fileData = Buffer.from(imgBuffer.data, 'binary'); const img = await Jimp.read(fileData); diff --git a/src/api/integrations/chatwoot/utils/chatwoot-import-helper.ts b/src/api/integrations/chatwoot/utils/chatwoot-import-helper.ts index cf4b3f89..e5f0dbc9 100644 --- a/src/api/integrations/chatwoot/utils/chatwoot-import-helper.ts +++ b/src/api/integrations/chatwoot/utils/chatwoot-import-helper.ts @@ -1,14 +1,13 @@ +import { InstanceDto } from '@api/dto/instance.dto'; +import { ChatwootDto } from '@api/integrations/chatwoot/dto/chatwoot.dto'; +import { postgresClient } from '@api/integrations/chatwoot/libs/postgres.client'; +import { ChatwootService } from '@api/integrations/chatwoot/services/chatwoot.service'; +import { Chatwoot, configService } from '@config/env.config'; +import { Logger } from '@config/logger.config'; import { inbox } from '@figuro/chatwoot-sdk'; import { Chatwoot as ChatwootModel, Contact, Message } from '@prisma/client'; import { proto } from 'baileys'; -import { InstanceDto } from '../../../../api/dto/instance.dto'; -import { Chatwoot, configService } from '../../../../config/env.config'; -import { Logger } from '../../../../config/logger.config'; -import { ChatwootDto } from '../dto/chatwoot.dto'; -import { postgresClient } from '../libs/postgres.client'; -import { ChatwootService } from '../services/chatwoot.service'; - type ChatwootUser = { user_type: string; user_id: number; @@ -28,7 +27,7 @@ type firstLastTimestamp = { type IWebMessageInfo = Omit & Partial>; class ChatwootImport { - private logger = new Logger(ChatwootImport.name); + private logger = new Logger('ChatwootImport'); private repositoryMessagesCache = new Map>(); private historyMessages = new Map(); private historyContacts = new Map(); diff --git a/src/api/integrations/dify/controllers/dify.controller.ts b/src/api/integrations/dify/controllers/dify.controller.ts index ce4e807b..faf0a486 100644 --- a/src/api/integrations/dify/controllers/dify.controller.ts +++ b/src/api/integrations/dify/controllers/dify.controller.ts @@ -1,8 +1,8 @@ -import { configService, Dify } from '../../../../config/env.config'; -import { BadRequestException } from '../../../../exceptions'; -import { InstanceDto } from '../../../dto/instance.dto'; -import { DifyDto, DifyIgnoreJidDto } from '../dto/dify.dto'; -import { DifyService } from '../services/dify.service'; +import { InstanceDto } from '@api/dto/instance.dto'; +import { DifyDto, DifyIgnoreJidDto } from '@api/integrations/dify/dto/dify.dto'; +import { DifyService } from '@api/integrations/dify/services/dify.service'; +import { configService, Dify } from '@config/env.config'; +import { BadRequestException } from '@exceptions'; export class DifyController { constructor(private readonly difyService: DifyService) {} diff --git a/src/api/integrations/dify/routes/dify.router.ts b/src/api/integrations/dify/routes/dify.router.ts index f3f61d12..2015d6a4 100644 --- a/src/api/integrations/dify/routes/dify.router.ts +++ b/src/api/integrations/dify/routes/dify.router.ts @@ -1,17 +1,16 @@ -import { RequestHandler, Router } from 'express'; - +import { RouterBroker } from '@api/abstract/abstract.router'; +import { InstanceDto } from '@api/dto/instance.dto'; +import { DifyDto, DifyIgnoreJidDto, DifySettingDto } from '@api/integrations/dify/dto/dify.dto'; +import { HttpStatus } from '@api/routes/index.router'; +import { difyController } from '@api/server.module'; import { difyIgnoreJidSchema, difySchema, difySettingSchema, difyStatusSchema, instanceSchema, -} from '../../../../validate/validate.schema'; -import { RouterBroker } from '../../../abstract/abstract.router'; -import { InstanceDto } from '../../../dto/instance.dto'; -import { HttpStatus } from '../../../routes/index.router'; -import { difyController } from '../../../server.module'; -import { DifyDto, DifyIgnoreJidDto, DifySettingDto } from '../dto/dify.dto'; +} from '@validate/validate.schema'; +import { RequestHandler, Router } from 'express'; export class DifyRouter extends RouterBroker { constructor(...guards: RequestHandler[]) { @@ -119,5 +118,5 @@ export class DifyRouter extends RouterBroker { }); } - public readonly router = Router(); + public readonly router: Router = Router(); } diff --git a/src/api/integrations/dify/services/dify.service.ts b/src/api/integrations/dify/services/dify.service.ts index 9a618b1b..a8d35521 100644 --- a/src/api/integrations/dify/services/dify.service.ts +++ b/src/api/integrations/dify/services/dify.service.ts @@ -1,15 +1,14 @@ +import { InstanceDto } from '@api/dto/instance.dto'; +import { DifyDto, DifyIgnoreJidDto, DifySettingDto } from '@api/integrations/dify/dto/dify.dto'; +import { PrismaRepository } from '@api/repository/repository.service'; +import { WAMonitoringService } from '@api/services/monitor.service'; +import { Auth, ConfigService, HttpServer, S3 } from '@config/env.config'; +import { Logger } from '@config/logger.config'; import { Dify, DifySession, DifySetting, Message } from '@prisma/client'; +import { sendTelemetry } from '@utils/sendTelemetry'; import axios from 'axios'; import { Readable } from 'stream'; -import { Auth, ConfigService, HttpServer, S3 } from '../../../../config/env.config'; -import { Logger } from '../../../../config/logger.config'; -import { sendTelemetry } from '../../../../utils/sendTelemetry'; -import { InstanceDto } from '../../../dto/instance.dto'; -import { PrismaRepository } from '../../../repository/repository.service'; -import { WAMonitoringService } from '../../../services/monitor.service'; -import { DifyDto, DifyIgnoreJidDto, DifySettingDto } from '../dto/dify.dto'; - export class DifyService { constructor( private readonly waMonitor: WAMonitoringService, @@ -19,7 +18,7 @@ export class DifyService { private userMessageDebounce: { [key: string]: { message: string; timeoutId: NodeJS.Timeout } } = {}; - private readonly logger = new Logger(DifyService.name); + private readonly logger = new Logger('DifyService'); public async create(instance: InstanceDto, data: DifyDto) { const instanceId = await this.prismaRepository.instance diff --git a/src/api/integrations/openai/controllers/openai.controller.ts b/src/api/integrations/openai/controllers/openai.controller.ts index 2ba5e91b..73489805 100644 --- a/src/api/integrations/openai/controllers/openai.controller.ts +++ b/src/api/integrations/openai/controllers/openai.controller.ts @@ -1,8 +1,8 @@ -import { configService, Openai } from '../../../../config/env.config'; -import { BadRequestException } from '../../../../exceptions'; -import { InstanceDto } from '../../../dto/instance.dto'; -import { OpenaiCredsDto, OpenaiDto, OpenaiIgnoreJidDto } from '../dto/openai.dto'; -import { OpenaiService } from '../services/openai.service'; +import { InstanceDto } from '@api/dto/instance.dto'; +import { OpenaiCredsDto, OpenaiDto, OpenaiIgnoreJidDto } from '@api/integrations/openai/dto/openai.dto'; +import { OpenaiService } from '@api/integrations/openai/services/openai.service'; +import { configService, Openai } from '@config/env.config'; +import { BadRequestException } from '@exceptions'; export class OpenaiController { constructor(private readonly openaiService: OpenaiService) {} diff --git a/src/api/integrations/openai/routes/openai.router.ts b/src/api/integrations/openai/routes/openai.router.ts index d41d8775..17c036ac 100644 --- a/src/api/integrations/openai/routes/openai.router.ts +++ b/src/api/integrations/openai/routes/openai.router.ts @@ -1,5 +1,13 @@ -import { RequestHandler, Router } from 'express'; - +import { RouterBroker } from '@api/abstract/abstract.router'; +import { InstanceDto } from '@api/dto/instance.dto'; +import { + OpenaiCredsDto, + OpenaiDto, + OpenaiIgnoreJidDto, + OpenaiSettingDto, +} from '@api/integrations/openai/dto/openai.dto'; +import { HttpStatus } from '@api/routes/index.router'; +import { openaiController } from '@api/server.module'; import { instanceSchema, openaiCredsSchema, @@ -7,12 +15,8 @@ import { openaiSchema, openaiSettingSchema, openaiStatusSchema, -} from '../../../../validate/validate.schema'; -import { RouterBroker } from '../../../abstract/abstract.router'; -import { InstanceDto } from '../../../dto/instance.dto'; -import { HttpStatus } from '../../../routes/index.router'; -import { openaiController } from '../../../server.module'; -import { OpenaiCredsDto, OpenaiDto, OpenaiIgnoreJidDto, OpenaiSettingDto } from '../dto/openai.dto'; +} from '@validate/validate.schema'; +import { RequestHandler, Router } from 'express'; export class OpenaiRouter extends RouterBroker { constructor(...guards: RequestHandler[]) { @@ -160,5 +164,5 @@ export class OpenaiRouter extends RouterBroker { }); } - public readonly router = Router(); + public readonly router: Router = Router(); } diff --git a/src/api/integrations/openai/services/openai.service.ts b/src/api/integrations/openai/services/openai.service.ts index 8846924a..1f7e1f02 100644 --- a/src/api/integrations/openai/services/openai.service.ts +++ b/src/api/integrations/openai/services/openai.service.ts @@ -1,18 +1,22 @@ +import { InstanceDto } from '@api/dto/instance.dto'; +import { + OpenaiCredsDto, + OpenaiDto, + OpenaiIgnoreJidDto, + OpenaiSettingDto, +} from '@api/integrations/openai/dto/openai.dto'; +import { PrismaRepository } from '@api/repository/repository.service'; +import { WAMonitoringService } from '@api/services/monitor.service'; +import { ConfigService, Language, S3 } from '@config/env.config'; +import { Logger } from '@config/logger.config'; import { Message, OpenaiBot, OpenaiCreds, OpenaiSession, OpenaiSetting } from '@prisma/client'; +import { sendTelemetry } from '@utils/sendTelemetry'; import axios from 'axios'; import { downloadMediaMessage } from 'baileys'; import FormData from 'form-data'; import OpenAI from 'openai'; import P from 'pino'; -import { ConfigService, Language, S3 } from '../../../../config/env.config'; -import { Logger } from '../../../../config/logger.config'; -import { sendTelemetry } from '../../../../utils/sendTelemetry'; -import { InstanceDto } from '../../../dto/instance.dto'; -import { PrismaRepository } from '../../../repository/repository.service'; -import { WAMonitoringService } from '../../../services/monitor.service'; -import { OpenaiCredsDto, OpenaiDto, OpenaiIgnoreJidDto, OpenaiSettingDto } from '../dto/openai.dto'; - export class OpenaiService { constructor( private readonly waMonitor: WAMonitoringService, @@ -24,7 +28,7 @@ export class OpenaiService { private client: OpenAI; - private readonly logger = new Logger(OpenaiService.name); + private readonly logger = new Logger('OpenaiService'); public async createCreds(instance: InstanceDto, data: OpenaiCredsDto) { const instanceId = await this.prismaRepository.instance diff --git a/src/api/integrations/rabbitmq/controllers/rabbitmq.controller.ts b/src/api/integrations/rabbitmq/controllers/rabbitmq.controller.ts index 773b02cb..cb5ec71a 100644 --- a/src/api/integrations/rabbitmq/controllers/rabbitmq.controller.ts +++ b/src/api/integrations/rabbitmq/controllers/rabbitmq.controller.ts @@ -1,8 +1,8 @@ -import { configService, Rabbitmq } from '../../../../config/env.config'; -import { BadRequestException } from '../../../../exceptions'; -import { InstanceDto } from '../../../dto/instance.dto'; -import { RabbitmqDto } from '../dto/rabbitmq.dto'; -import { RabbitmqService } from '../services/rabbitmq.service'; +import { InstanceDto } from '@api/dto/instance.dto'; +import { RabbitmqDto } from '@api/integrations/rabbitmq/dto/rabbitmq.dto'; +import { RabbitmqService } from '@api/integrations/rabbitmq/services/rabbitmq.service'; +import { configService, Rabbitmq } from '@config/env.config'; +import { BadRequestException } from '@exceptions'; export class RabbitmqController { constructor(private readonly rabbitmqService: RabbitmqService) {} diff --git a/src/api/integrations/rabbitmq/libs/amqp.server.ts b/src/api/integrations/rabbitmq/libs/amqp.server.ts index 34b1ae46..583d4715 100644 --- a/src/api/integrations/rabbitmq/libs/amqp.server.ts +++ b/src/api/integrations/rabbitmq/libs/amqp.server.ts @@ -1,9 +1,8 @@ +import { configService, Rabbitmq } from '@config/env.config'; +import { Logger } from '@config/logger.config'; import { JsonValue } from '@prisma/client/runtime/library'; import * as amqp from 'amqplib/callback_api'; -import { configService, Rabbitmq } from '../../../../config/env.config'; -import { Logger } from '../../../../config/logger.config'; - const logger = new Logger('AMQP'); let amqpChannel: amqp.Channel | null = null; diff --git a/src/api/integrations/rabbitmq/routes/rabbitmq.router.ts b/src/api/integrations/rabbitmq/routes/rabbitmq.router.ts index d1a0a891..983008e6 100644 --- a/src/api/integrations/rabbitmq/routes/rabbitmq.router.ts +++ b/src/api/integrations/rabbitmq/routes/rabbitmq.router.ts @@ -1,12 +1,11 @@ +import { RouterBroker } from '@api/abstract/abstract.router'; +import { InstanceDto } from '@api/dto/instance.dto'; +import { RabbitmqDto } from '@api/integrations/rabbitmq/dto/rabbitmq.dto'; +import { HttpStatus } from '@api/routes/index.router'; +import { rabbitmqController } from '@api/server.module'; +import { instanceSchema, rabbitmqSchema } from '@validate/validate.schema'; import { RequestHandler, Router } from 'express'; -import { instanceSchema, rabbitmqSchema } from '../../../../validate/validate.schema'; -import { RouterBroker } from '../../../abstract/abstract.router'; -import { InstanceDto } from '../../../dto/instance.dto'; -import { HttpStatus } from '../../../routes/index.router'; -import { rabbitmqController } from '../../../server.module'; -import { RabbitmqDto } from '../dto/rabbitmq.dto'; - export class RabbitmqRouter extends RouterBroker { constructor(...guards: RequestHandler[]) { super(); @@ -33,5 +32,5 @@ export class RabbitmqRouter extends RouterBroker { }); } - public readonly router = Router(); + public readonly router: Router = Router(); } diff --git a/src/api/integrations/rabbitmq/services/rabbitmq.service.ts b/src/api/integrations/rabbitmq/services/rabbitmq.service.ts index 53af10db..e4a165d6 100644 --- a/src/api/integrations/rabbitmq/services/rabbitmq.service.ts +++ b/src/api/integrations/rabbitmq/services/rabbitmq.service.ts @@ -1,15 +1,14 @@ +import { InstanceDto } from '@api/dto/instance.dto'; +import { RabbitmqDto } from '@api/integrations/rabbitmq/dto/rabbitmq.dto'; +import { initQueues } from '@api/integrations/rabbitmq/libs/amqp.server'; +import { WAMonitoringService } from '@api/services/monitor.service'; +import { Logger } from '@config/logger.config'; import { Rabbitmq } from '@prisma/client'; -import { Logger } from '../../../../config/logger.config'; -import { InstanceDto } from '../../../dto/instance.dto'; -import { WAMonitoringService } from '../../../services/monitor.service'; -import { RabbitmqDto } from '../dto/rabbitmq.dto'; -import { initQueues } from '../libs/amqp.server'; - export class RabbitmqService { constructor(private readonly waMonitor: WAMonitoringService) {} - private readonly logger = new Logger(RabbitmqService.name); + private readonly logger = new Logger('RabbitmqService'); public create(instance: InstanceDto, data: RabbitmqDto) { this.waMonitor.waInstances[instance.instanceName].setRabbitmq(data); diff --git a/src/api/integrations/s3/controllers/s3.controller.ts b/src/api/integrations/s3/controllers/s3.controller.ts index 132b6f76..e3bc6162 100644 --- a/src/api/integrations/s3/controllers/s3.controller.ts +++ b/src/api/integrations/s3/controllers/s3.controller.ts @@ -1,6 +1,6 @@ -import { InstanceDto } from '../../../dto/instance.dto'; -import { MediaDto } from '../dto/media.dto'; -import { S3Service } from '../services/s3.service'; +import { InstanceDto } from '@api/dto/instance.dto'; +import { MediaDto } from '@api/integrations/s3/dto/media.dto'; +import { S3Service } from '@api/integrations/s3/services/s3.service'; export class S3Controller { constructor(private readonly s3Service: S3Service) {} diff --git a/src/api/integrations/s3/libs/minio.server.ts b/src/api/integrations/s3/libs/minio.server.ts index 7be7c791..0aed54de 100644 --- a/src/api/integrations/s3/libs/minio.server.ts +++ b/src/api/integrations/s3/libs/minio.server.ts @@ -1,11 +1,10 @@ +import { ConfigService, S3 } from '@config/env.config'; +import { Logger } from '@config/logger.config'; +import { BadRequestException } from '@exceptions'; import * as MinIo from 'minio'; import { join } from 'path'; import { Readable, Transform } from 'stream'; -import { ConfigService, S3 } from '../../../../config/env.config'; -import { Logger } from '../../../../config/logger.config'; -import { BadRequestException } from '../../../../exceptions'; - const logger = new Logger('S3 Service'); const BUCKET = new ConfigService().get('S3'); diff --git a/src/api/integrations/s3/routes/s3.router.ts b/src/api/integrations/s3/routes/s3.router.ts index bdbabc1d..6ddde14a 100644 --- a/src/api/integrations/s3/routes/s3.router.ts +++ b/src/api/integrations/s3/routes/s3.router.ts @@ -1,11 +1,10 @@ +import { RouterBroker } from '@api/abstract/abstract.router'; +import { MediaDto } from '@api/integrations/s3/dto/media.dto'; +import { s3Schema, s3UrlSchema } from '@api/integrations/s3/validate/s3.schema'; +import { HttpStatus } from '@api/routes/index.router'; +import { s3Controller } from '@api/server.module'; import { RequestHandler, Router } from 'express'; -import { RouterBroker } from '../../../abstract/abstract.router'; -import { HttpStatus } from '../../../routes/index.router'; -import { s3Controller } from '../../../server.module'; -import { MediaDto } from '../dto/media.dto'; -import { s3Schema, s3UrlSchema } from '../validate/s3.schema'; - export class S3Router extends RouterBroker { constructor(...guards: RequestHandler[]) { super(); @@ -32,5 +31,5 @@ export class S3Router extends RouterBroker { }); } - public readonly router = Router(); + public readonly router: Router = Router(); } diff --git a/src/api/integrations/s3/services/s3.service.ts b/src/api/integrations/s3/services/s3.service.ts index 30ababbb..c7ecc421 100644 --- a/src/api/integrations/s3/services/s3.service.ts +++ b/src/api/integrations/s3/services/s3.service.ts @@ -1,14 +1,14 @@ -import { Logger } from '../../../../config/logger.config'; -import { BadRequestException } from '../../../../exceptions'; -import { InstanceDto } from '../../../dto/instance.dto'; -import { PrismaRepository } from '../../../repository/repository.service'; -import { MediaDto } from '../dto/media.dto'; -import { getObjectUrl } from '../libs/minio.server'; +import { InstanceDto } from '@api/dto/instance.dto'; +import { MediaDto } from '@api/integrations/s3/dto/media.dto'; +import { getObjectUrl } from '@api/integrations/s3/libs/minio.server'; +import { PrismaRepository } from '@api/repository/repository.service'; +import { Logger } from '@config/logger.config'; +import { BadRequestException } from '@exceptions'; export class S3Service { constructor(private readonly prismaRepository: PrismaRepository) {} - private readonly logger = new Logger(S3Service.name); + private readonly logger = new Logger('S3Service'); public async getMedia(instance: InstanceDto, query?: MediaDto) { try { diff --git a/src/api/integrations/sqs/controllers/sqs.controller.ts b/src/api/integrations/sqs/controllers/sqs.controller.ts index 7990a9bc..8aaa9c0b 100644 --- a/src/api/integrations/sqs/controllers/sqs.controller.ts +++ b/src/api/integrations/sqs/controllers/sqs.controller.ts @@ -1,8 +1,8 @@ -import { configService, Sqs } from '../../../../config/env.config'; -import { BadRequestException } from '../../../../exceptions'; -import { InstanceDto } from '../../../dto/instance.dto'; -import { SqsDto } from '../dto/sqs.dto'; -import { SqsService } from '../services/sqs.service'; +import { InstanceDto } from '@api/dto/instance.dto'; +import { SqsDto } from '@api/integrations/sqs/dto/sqs.dto'; +import { SqsService } from '@api/integrations/sqs/services/sqs.service'; +import { configService, Sqs } from '@config/env.config'; +import { BadRequestException } from '@exceptions'; export class SqsController { constructor(private readonly sqsService: SqsService) {} diff --git a/src/api/integrations/sqs/libs/sqs.server.ts b/src/api/integrations/sqs/libs/sqs.server.ts index 18507577..5ac34786 100644 --- a/src/api/integrations/sqs/libs/sqs.server.ts +++ b/src/api/integrations/sqs/libs/sqs.server.ts @@ -1,9 +1,8 @@ import { SQS } from '@aws-sdk/client-sqs'; +import { configService, Sqs } from '@config/env.config'; +import { Logger } from '@config/logger.config'; import { JsonValue } from '@prisma/client/runtime/library'; -import { configService, Sqs } from '../../../../config/env.config'; -import { Logger } from '../../../../config/logger.config'; - const logger = new Logger('SQS'); let sqs: SQS; diff --git a/src/api/integrations/sqs/routes/sqs.router.ts b/src/api/integrations/sqs/routes/sqs.router.ts index 3d740770..c6f911d7 100644 --- a/src/api/integrations/sqs/routes/sqs.router.ts +++ b/src/api/integrations/sqs/routes/sqs.router.ts @@ -1,12 +1,11 @@ +import { RouterBroker } from '@api/abstract/abstract.router'; +import { InstanceDto } from '@api/dto/instance.dto'; +import { SqsDto } from '@api/integrations/sqs/dto/sqs.dto'; +import { HttpStatus } from '@api/routes/index.router'; +import { sqsController } from '@api/server.module'; +import { instanceSchema, sqsSchema } from '@validate/validate.schema'; import { RequestHandler, Router } from 'express'; -import { instanceSchema, sqsSchema } from '../../../../validate/validate.schema'; -import { RouterBroker } from '../../../abstract/abstract.router'; -import { InstanceDto } from '../../../dto/instance.dto'; -import { HttpStatus } from '../../../routes/index.router'; -import { sqsController } from '../../../server.module'; -import { SqsDto } from '../dto/sqs.dto'; - export class SqsRouter extends RouterBroker { constructor(...guards: RequestHandler[]) { super(); @@ -33,5 +32,5 @@ export class SqsRouter extends RouterBroker { }); } - public readonly router = Router(); + public readonly router: Router = Router(); } diff --git a/src/api/integrations/sqs/services/sqs.service.ts b/src/api/integrations/sqs/services/sqs.service.ts index 30f15282..2da45c33 100644 --- a/src/api/integrations/sqs/services/sqs.service.ts +++ b/src/api/integrations/sqs/services/sqs.service.ts @@ -1,15 +1,14 @@ +import { InstanceDto } from '@api/dto/instance.dto'; +import { SqsDto } from '@api/integrations/sqs/dto/sqs.dto'; +import { initQueues } from '@api/integrations/sqs/libs/sqs.server'; +import { WAMonitoringService } from '@api/services/monitor.service'; +import { Logger } from '@config/logger.config'; import { Sqs } from '@prisma/client'; -import { Logger } from '../../../../config/logger.config'; -import { InstanceDto } from '../../../dto/instance.dto'; -import { WAMonitoringService } from '../../../services/monitor.service'; -import { SqsDto } from '../dto/sqs.dto'; -import { initQueues } from '../libs/sqs.server'; - export class SqsService { constructor(private readonly waMonitor: WAMonitoringService) {} - private readonly logger = new Logger(SqsService.name); + private readonly logger = new Logger('SqsService'); public create(instance: InstanceDto, data: SqsDto) { this.waMonitor.waInstances[instance.instanceName].setSqs(data); diff --git a/src/api/integrations/typebot/controllers/typebot.controller.ts b/src/api/integrations/typebot/controllers/typebot.controller.ts index a73771c1..b0260d1d 100644 --- a/src/api/integrations/typebot/controllers/typebot.controller.ts +++ b/src/api/integrations/typebot/controllers/typebot.controller.ts @@ -1,8 +1,8 @@ -import { configService, Typebot } from '../../../../config/env.config'; -import { BadRequestException } from '../../../../exceptions'; -import { InstanceDto } from '../../../dto/instance.dto'; -import { TypebotDto, TypebotIgnoreJidDto } from '../dto/typebot.dto'; -import { TypebotService } from '../services/typebot.service'; +import { InstanceDto } from '@api/dto/instance.dto'; +import { TypebotDto, TypebotIgnoreJidDto } from '@api/integrations/typebot/dto/typebot.dto'; +import { TypebotService } from '@api/integrations/typebot/services/typebot.service'; +import { configService, Typebot } from '@config/env.config'; +import { BadRequestException } from '@exceptions'; export class TypebotController { constructor(private readonly typebotService: TypebotService) {} diff --git a/src/api/integrations/typebot/routes/typebot.router.ts b/src/api/integrations/typebot/routes/typebot.router.ts index 842d76dd..c3d031c3 100644 --- a/src/api/integrations/typebot/routes/typebot.router.ts +++ b/src/api/integrations/typebot/routes/typebot.router.ts @@ -1,5 +1,8 @@ -import { RequestHandler, Router } from 'express'; - +import { RouterBroker } from '@api/abstract/abstract.router'; +import { InstanceDto } from '@api/dto/instance.dto'; +import { TypebotDto, TypebotIgnoreJidDto, TypebotSettingDto } from '@api/integrations/typebot/dto/typebot.dto'; +import { HttpStatus } from '@api/routes/index.router'; +import { typebotController } from '@api/server.module'; import { instanceSchema, typebotIgnoreJidSchema, @@ -7,12 +10,8 @@ import { typebotSettingSchema, typebotStartSchema, typebotStatusSchema, -} from '../../../../validate/validate.schema'; -import { RouterBroker } from '../../../abstract/abstract.router'; -import { InstanceDto } from '../../../dto/instance.dto'; -import { HttpStatus } from '../../../routes/index.router'; -import { typebotController } from '../../../server.module'; -import { TypebotDto, TypebotIgnoreJidDto, TypebotSettingDto } from '../dto/typebot.dto'; +} from '@validate/validate.schema'; +import { RequestHandler, Router } from 'express'; export class TypebotRouter extends RouterBroker { constructor(...guards: RequestHandler[]) { @@ -130,5 +129,5 @@ export class TypebotRouter extends RouterBroker { }); } - public readonly router = Router(); + public readonly router: Router = Router(); } diff --git a/src/api/integrations/typebot/services/typebot.service.ts b/src/api/integrations/typebot/services/typebot.service.ts index 80067718..bdcc6971 100644 --- a/src/api/integrations/typebot/services/typebot.service.ts +++ b/src/api/integrations/typebot/services/typebot.service.ts @@ -1,15 +1,14 @@ +import { InstanceDto } from '@api/dto/instance.dto'; +import { TypebotDto, TypebotIgnoreJidDto } from '@api/integrations/typebot/dto/typebot.dto'; +import { PrismaRepository } from '@api/repository/repository.service'; +import { WAMonitoringService } from '@api/services/monitor.service'; +import { Events } from '@api/types/wa.types'; +import { Auth, ConfigService, HttpServer, S3, Typebot } from '@config/env.config'; +import { Logger } from '@config/logger.config'; import { Instance, Message, Typebot as TypebotModel, TypebotSession } from '@prisma/client'; +import { sendTelemetry } from '@utils/sendTelemetry'; import axios from 'axios'; -import { Auth, ConfigService, HttpServer, S3, Typebot } from '../../../../config/env.config'; -import { Logger } from '../../../../config/logger.config'; -import { sendTelemetry } from '../../../../utils/sendTelemetry'; -import { InstanceDto } from '../../../dto/instance.dto'; -import { PrismaRepository } from '../../../repository/repository.service'; -import { WAMonitoringService } from '../../../services/monitor.service'; -import { Events } from '../../../types/wa.types'; -import { TypebotDto, TypebotIgnoreJidDto } from '../dto/typebot.dto'; - export class TypebotService { constructor( private readonly waMonitor: WAMonitoringService, @@ -19,7 +18,7 @@ export class TypebotService { private userMessageDebounce: { [key: string]: { message: string; timeoutId: NodeJS.Timeout } } = {}; - private readonly logger = new Logger(TypebotService.name); + private readonly logger = new Logger('TypebotService'); public async create(instance: InstanceDto, data: TypebotDto) { const instanceId = await this.prismaRepository.instance diff --git a/src/api/integrations/websocket/controllers/websocket.controller.ts b/src/api/integrations/websocket/controllers/websocket.controller.ts index a487f48a..f3e2899a 100644 --- a/src/api/integrations/websocket/controllers/websocket.controller.ts +++ b/src/api/integrations/websocket/controllers/websocket.controller.ts @@ -1,6 +1,6 @@ -import { InstanceDto } from '../../../dto/instance.dto'; -import { WebsocketDto } from '../dto/websocket.dto'; -import { WebsocketService } from '../services/websocket.service'; +import { InstanceDto } from '@api/dto/instance.dto'; +import { WebsocketDto } from '@api/integrations/websocket/dto/websocket.dto'; +import { WebsocketService } from '@api/integrations/websocket/services/websocket.service'; export class WebsocketController { constructor(private readonly websocketService: WebsocketService) {} diff --git a/src/api/integrations/websocket/libs/socket.server.ts b/src/api/integrations/websocket/libs/socket.server.ts index 948527ae..d4b67ee1 100644 --- a/src/api/integrations/websocket/libs/socket.server.ts +++ b/src/api/integrations/websocket/libs/socket.server.ts @@ -1,9 +1,8 @@ +import { configService, Cors, Websocket } from '@config/env.config'; +import { Logger } from '@config/logger.config'; import { Server } from 'http'; import { Server as SocketIO } from 'socket.io'; -import { configService, Cors, Websocket } from '../../../../config/env.config'; -import { Logger } from '../../../../config/logger.config'; - const logger = new Logger('Socket'); let io: SocketIO; diff --git a/src/api/integrations/websocket/routes/websocket.router.ts b/src/api/integrations/websocket/routes/websocket.router.ts index b8f86fcb..dcfc5456 100644 --- a/src/api/integrations/websocket/routes/websocket.router.ts +++ b/src/api/integrations/websocket/routes/websocket.router.ts @@ -1,12 +1,11 @@ +import { RouterBroker } from '@api/abstract/abstract.router'; +import { InstanceDto } from '@api/dto/instance.dto'; +import { WebsocketDto } from '@api/integrations/websocket/dto/websocket.dto'; +import { HttpStatus } from '@api/routes/index.router'; +import { websocketController } from '@api/server.module'; +import { instanceSchema, websocketSchema } from '@validate/validate.schema'; import { RequestHandler, Router } from 'express'; -import { instanceSchema, websocketSchema } from '../../../../validate/validate.schema'; -import { RouterBroker } from '../../../abstract/abstract.router'; -import { InstanceDto } from '../../../dto/instance.dto'; -import { HttpStatus } from '../../../routes/index.router'; -import { websocketController } from '../../../server.module'; -import { WebsocketDto } from '../dto/websocket.dto'; - export class WebsocketRouter extends RouterBroker { constructor(...guards: RequestHandler[]) { super(); @@ -33,5 +32,5 @@ export class WebsocketRouter extends RouterBroker { }); } - public readonly router = Router(); + public readonly router: Router = Router(); } diff --git a/src/api/integrations/websocket/services/websocket.service.ts b/src/api/integrations/websocket/services/websocket.service.ts index 0f0d2457..a4dbf8c5 100644 --- a/src/api/integrations/websocket/services/websocket.service.ts +++ b/src/api/integrations/websocket/services/websocket.service.ts @@ -1,14 +1,13 @@ +import { InstanceDto } from '@api/dto/instance.dto'; +import { WebsocketDto } from '@api/integrations/websocket/dto/websocket.dto'; +import { WAMonitoringService } from '@api/services/monitor.service'; +import { Logger } from '@config/logger.config'; import { Websocket } from '@prisma/client'; -import { Logger } from '../../../../config/logger.config'; -import { InstanceDto } from '../../../dto/instance.dto'; -import { WAMonitoringService } from '../../../services/monitor.service'; -import { WebsocketDto } from '../dto/websocket.dto'; - export class WebsocketService { constructor(private readonly waMonitor: WAMonitoringService) {} - private readonly logger = new Logger(WebsocketService.name); + private readonly logger = new Logger('WebsocketService'); public create(instance: InstanceDto, data: WebsocketDto) { this.waMonitor.waInstances[instance.instanceName].setWebsocket(data); diff --git a/src/api/provider/sessions.ts b/src/api/provider/sessions.ts index 7afc9c89..05668232 100644 --- a/src/api/provider/sessions.ts +++ b/src/api/provider/sessions.ts @@ -1,9 +1,8 @@ +import { Auth, ConfigService, ProviderSession } from '@config/env.config'; +import { Logger } from '@config/logger.config'; import axios from 'axios'; import { execSync } from 'child_process'; -import { Auth, ConfigService, ProviderSession } from '../../config/env.config'; -import { Logger } from '../../config/logger.config'; - type ResponseSuccess = { status: number; data?: any }; type ResponseProvider = Promise<[ResponseSuccess?, Error?]>; @@ -13,7 +12,7 @@ export class ProviderFiles { this.globalApiToken = this.configService.get('AUTHENTICATION').API_KEY.KEY; } - private readonly logger = new Logger(ProviderFiles.name); + private readonly logger = new Logger('ProviderFiles'); private baseUrl: string; private globalApiToken: string; diff --git a/src/api/repository/repository.service.ts b/src/api/repository/repository.service.ts index 9c9bbf0e..793bb0c8 100644 --- a/src/api/repository/repository.service.ts +++ b/src/api/repository/repository.service.ts @@ -1,8 +1,7 @@ +import { ConfigService } from '@config/env.config'; +import { Logger } from '@config/logger.config'; import { PrismaClient } from '@prisma/client'; -import { ConfigService } from '../../config/env.config'; -import { Logger } from '../../config/logger.config'; - export class Query { where?: T; sort?: 'asc' | 'desc'; @@ -15,7 +14,7 @@ export class PrismaRepository extends PrismaClient { super(); } - private readonly logger = new Logger(PrismaRepository.name); + private readonly logger = new Logger('PrismaRepository'); public async onModuleInit() { await this.$connect(); diff --git a/src/api/routes/chat.router.ts b/src/api/routes/chat.router.ts index 936c63f9..20126c1a 100644 --- a/src/api/routes/chat.router.ts +++ b/src/api/routes/chat.router.ts @@ -1,6 +1,24 @@ +import { RouterBroker } from '@api/abstract/abstract.router'; +import { + ArchiveChatDto, + BlockUserDto, + DeleteMessage, + getBase64FromMediaMessageDto, + MarkChatUnreadDto, + NumberDto, + PrivacySettingDto, + ProfileNameDto, + ProfilePictureDto, + ProfileStatusDto, + ReadMessageDto, + SendPresenceDto, + UpdateMessageDto, + WhatsAppNumberDto, +} from '@api/dto/chat.dto'; +import { InstanceDto } from '@api/dto/instance.dto'; +import { Query } from '@api/repository/repository.service'; +import { chatController } from '@api/server.module'; import { Contact, Message, MessageUpdate } from '@prisma/client'; -import { RequestHandler, Router } from 'express'; - import { archiveChatSchema, blockUserSchema, @@ -18,27 +36,9 @@ import { readMessageSchema, updateMessageSchema, whatsappNumberSchema, -} from '../../validate/validate.schema'; -import { RouterBroker } from '../abstract/abstract.router'; -import { - ArchiveChatDto, - BlockUserDto, - DeleteMessage, - getBase64FromMediaMessageDto, - MarkChatUnreadDto, - NumberDto, - PrivacySettingDto, - ProfileNameDto, - ProfilePictureDto, - ProfileStatusDto, - ReadMessageDto, - SendPresenceDto, - UpdateMessageDto, - WhatsAppNumberDto, -} from '../dto/chat.dto'; -import { InstanceDto } from '../dto/instance.dto'; -import { Query } from '../repository/repository.service'; -import { chatController } from '../server.module'; +} from '@validate/validate.schema'; +import { RequestHandler, Router } from 'express'; + import { HttpStatus } from './index.router'; export class ChatRouter extends RouterBroker { @@ -270,5 +270,5 @@ export class ChatRouter extends RouterBroker { }); } - public readonly router = Router(); + public readonly router: Router = Router(); } diff --git a/src/api/routes/group.router.ts b/src/api/routes/group.router.ts index 973d19c1..7086b117 100644 --- a/src/api/routes/group.router.ts +++ b/src/api/routes/group.router.ts @@ -1,20 +1,4 @@ -import { RequestHandler, Router } from 'express'; - -import { - AcceptGroupInviteSchema, - createGroupSchema, - getParticipantsSchema, - groupInviteSchema, - groupJidSchema, - groupSendInviteSchema, - toggleEphemeralSchema, - updateGroupDescriptionSchema, - updateGroupPictureSchema, - updateGroupSubjectSchema, - updateParticipantsSchema, - updateSettingsSchema, -} from '../../validate/validate.schema'; -import { RouterBroker } from '../abstract/abstract.router'; +import { RouterBroker } from '@api/abstract/abstract.router'; import { AcceptGroupInvite, CreateGroupDto, @@ -28,8 +12,24 @@ import { GroupToggleEphemeralDto, GroupUpdateParticipantDto, GroupUpdateSettingDto, -} from '../dto/group.dto'; -import { groupController } from '../server.module'; +} from '@api/dto/group.dto'; +import { groupController } from '@api/server.module'; +import { + AcceptGroupInviteSchema, + createGroupSchema, + getParticipantsSchema, + groupInviteSchema, + groupJidSchema, + groupSendInviteSchema, + toggleEphemeralSchema, + updateGroupDescriptionSchema, + updateGroupPictureSchema, + updateGroupSubjectSchema, + updateParticipantsSchema, + updateSettingsSchema, +} from '@validate/validate.schema'; +import { RequestHandler, Router } from 'express'; + import { HttpStatus } from './index.router'; export class GroupRouter extends RouterBroker { @@ -198,5 +198,5 @@ export class GroupRouter extends RouterBroker { }); } - public readonly router = Router(); + public readonly router: Router = Router(); } diff --git a/src/api/routes/index.router.ts b/src/api/routes/index.router.ts index 7edc1046..2429bf5d 100644 --- a/src/api/routes/index.router.ts +++ b/src/api/routes/index.router.ts @@ -1,21 +1,21 @@ +import { authGuard } from '@api/guards/auth.guard'; +import { instanceExistsGuard, instanceLoggedGuard } from '@api/guards/instance.guard'; +import Telemetry from '@api/guards/telemetry.guard'; +import { ChatwootRouter } from '@api/integrations/chatwoot/routes/chatwoot.router'; +import { DifyRouter } from '@api/integrations/dify/routes/dify.router'; +import { OpenaiRouter } from '@api/integrations/openai/routes/openai.router'; +import { RabbitmqRouter } from '@api/integrations/rabbitmq/routes/rabbitmq.router'; +import { S3Router } from '@api/integrations/s3/routes/s3.router'; +import { SqsRouter } from '@api/integrations/sqs/routes/sqs.router'; +import { TypebotRouter } from '@api/integrations/typebot/routes/typebot.router'; +import { WebsocketRouter } from '@api/integrations/websocket/routes/websocket.router'; +import { webhookController } from '@api/server.module'; +import { configService, WaBusiness } from '@config/env.config'; import { Router } from 'express'; import fs from 'fs'; import mime from 'mime'; import path from 'path'; -import { configService, WaBusiness } from '../../config/env.config'; -import { authGuard } from '../guards/auth.guard'; -import { instanceExistsGuard, instanceLoggedGuard } from '../guards/instance.guard'; -import Telemetry from '../guards/telemetry.guard'; -import { ChatwootRouter } from '../integrations/chatwoot/routes/chatwoot.router'; -import { DifyRouter } from '../integrations/dify/routes/dify.router'; -import { OpenaiRouter } from '../integrations/openai/routes/openai.router'; -import { RabbitmqRouter } from '../integrations/rabbitmq/routes/rabbitmq.router'; -import { S3Router } from '../integrations/s3/routes/s3.router'; -import { SqsRouter } from '../integrations/sqs/routes/sqs.router'; -import { TypebotRouter } from '../integrations/typebot/routes/typebot.router'; -import { WebsocketRouter } from '../integrations/websocket/routes/websocket.router'; -import { webhookController } from '../server.module'; import { ChatRouter } from './chat.router'; import { GroupRouter } from './group.router'; import { InstanceRouter } from './instance.router'; @@ -37,7 +37,7 @@ enum HttpStatus { INTERNAL_SERVER_ERROR = 500, } -const router = Router(); +const router: Router = Router(); const serverConfig = configService.get('SERVER'); const guards = [instanceExistsGuard, instanceLoggedGuard, authGuard['apikey']]; @@ -54,7 +54,7 @@ router.get('/assets/*', (req, res) => { const filePath = path.join(basePath, 'assets/', fileName); if (fs.existsSync(filePath)) { - res.set('Content-Type', mime.lookup(filePath) || 'text/css'); + res.set('Content-Type', mime.getType(filePath) || 'text/css'); res.send(fs.readFileSync(filePath)); } else { res.status(404).send('File not found'); diff --git a/src/api/routes/instance.router.ts b/src/api/routes/instance.router.ts index 21f8ef6b..7b81368d 100644 --- a/src/api/routes/instance.router.ts +++ b/src/api/routes/instance.router.ts @@ -1,10 +1,10 @@ +import { RouterBroker } from '@api/abstract/abstract.router'; +import { InstanceDto, SetPresenceDto } from '@api/dto/instance.dto'; +import { instanceController } from '@api/server.module'; +import { ConfigService } from '@config/env.config'; +import { instanceSchema, presenceOnlySchema } from '@validate/validate.schema'; import { RequestHandler, Router } from 'express'; -import { ConfigService } from '../../config/env.config'; -import { instanceSchema, presenceOnlySchema } from '../../validate/validate.schema'; -import { RouterBroker } from '../abstract/abstract.router'; -import { InstanceDto, SetPresenceDto } from '../dto/instance.dto'; -import { instanceController } from '../server.module'; import { HttpStatus } from './index.router'; export class InstanceRouter extends RouterBroker { @@ -95,5 +95,5 @@ export class InstanceRouter extends RouterBroker { }); } - public readonly router = Router(); + public readonly router: Router = Router(); } diff --git a/src/api/routes/label.router.ts b/src/api/routes/label.router.ts index e9dbdb5f..bfb4a085 100644 --- a/src/api/routes/label.router.ts +++ b/src/api/routes/label.router.ts @@ -1,9 +1,9 @@ +import { RouterBroker } from '@api/abstract/abstract.router'; +import { HandleLabelDto, LabelDto } from '@api/dto/label.dto'; +import { labelController } from '@api/server.module'; +import { handleLabelSchema } from '@validate/validate.schema'; import { RequestHandler, Router } from 'express'; -import { handleLabelSchema } from '../../validate/validate.schema'; -import { RouterBroker } from '../abstract/abstract.router'; -import { HandleLabelDto, LabelDto } from '../dto/label.dto'; -import { labelController } from '../server.module'; import { HttpStatus } from './index.router'; export class LabelRouter extends RouterBroker { @@ -32,5 +32,5 @@ export class LabelRouter extends RouterBroker { }); } - public readonly router = Router(); + public readonly router: Router = Router(); } diff --git a/src/api/routes/proxy.router.ts b/src/api/routes/proxy.router.ts index 5ffde824..e04c587b 100644 --- a/src/api/routes/proxy.router.ts +++ b/src/api/routes/proxy.router.ts @@ -1,10 +1,10 @@ +import { RouterBroker } from '@api/abstract/abstract.router'; +import { InstanceDto } from '@api/dto/instance.dto'; +import { ProxyDto } from '@api/dto/proxy.dto'; +import { proxyController } from '@api/server.module'; +import { instanceSchema, proxySchema } from '@validate/validate.schema'; import { RequestHandler, Router } from 'express'; -import { instanceSchema, proxySchema } from '../../validate/validate.schema'; -import { RouterBroker } from '../abstract/abstract.router'; -import { InstanceDto } from '../dto/instance.dto'; -import { ProxyDto } from '../dto/proxy.dto'; -import { proxyController } from '../server.module'; import { HttpStatus } from './index.router'; export class ProxyRouter extends RouterBroker { @@ -33,5 +33,5 @@ export class ProxyRouter extends RouterBroker { }); } - public readonly router = Router(); + public readonly router: Router = Router(); } diff --git a/src/api/routes/sendMessage.router.ts b/src/api/routes/sendMessage.router.ts index b8bee8e5..a61230f6 100644 --- a/src/api/routes/sendMessage.router.ts +++ b/src/api/routes/sendMessage.router.ts @@ -1,20 +1,4 @@ -import { RequestHandler, Router } from 'express'; - -import { - audioMessageSchema, - buttonMessageSchema, - contactMessageSchema, - listMessageSchema, - locationMessageSchema, - mediaMessageSchema, - pollMessageSchema, - reactionMessageSchema, - statusMessageSchema, - stickerMessageSchema, - templateMessageSchema, - textMessageSchema, -} from '../../validate/validate.schema'; -import { RouterBroker } from '../abstract/abstract.router'; +import { RouterBroker } from '@api/abstract/abstract.router'; import { SendAudioDto, SendButtonDto, @@ -28,8 +12,24 @@ import { SendStickerDto, SendTemplateDto, SendTextDto, -} from '../dto/sendMessage.dto'; -import { sendMessageController } from '../server.module'; +} from '@api/dto/sendMessage.dto'; +import { sendMessageController } from '@api/server.module'; +import { + audioMessageSchema, + buttonMessageSchema, + contactMessageSchema, + listMessageSchema, + locationMessageSchema, + mediaMessageSchema, + pollMessageSchema, + reactionMessageSchema, + statusMessageSchema, + stickerMessageSchema, + templateMessageSchema, + textMessageSchema, +} from '@validate/validate.schema'; +import { RequestHandler, Router } from 'express'; + import { HttpStatus } from './index.router'; export class MessageRouter extends RouterBroker { @@ -159,5 +159,5 @@ export class MessageRouter extends RouterBroker { }); } - public readonly router = Router(); + public readonly router: Router = Router(); } diff --git a/src/api/routes/settings.router.ts b/src/api/routes/settings.router.ts index ba505cea..214d5fd7 100644 --- a/src/api/routes/settings.router.ts +++ b/src/api/routes/settings.router.ts @@ -1,10 +1,10 @@ +import { RouterBroker } from '@api/abstract/abstract.router'; +import { InstanceDto } from '@api/dto/instance.dto'; +import { SettingsDto } from '@api/dto/settings.dto'; +import { settingsController } from '@api/server.module'; +import { settingsSchema } from '@validate/validate.schema'; import { RequestHandler, Router } from 'express'; -import { settingsSchema } from '../../validate/validate.schema'; -import { RouterBroker } from '../abstract/abstract.router'; -import { InstanceDto } from '../dto/instance.dto'; -import { SettingsDto } from '../dto/settings.dto'; -import { settingsController } from '../server.module'; import { HttpStatus } from './index.router'; export class SettingsRouter extends RouterBroker { @@ -33,5 +33,5 @@ export class SettingsRouter extends RouterBroker { }); } - public readonly router = Router(); + public readonly router: Router = Router(); } diff --git a/src/api/routes/template.router.ts b/src/api/routes/template.router.ts index 8eab843e..67607dc8 100644 --- a/src/api/routes/template.router.ts +++ b/src/api/routes/template.router.ts @@ -1,11 +1,11 @@ +import { RouterBroker } from '@api/abstract/abstract.router'; +import { InstanceDto } from '@api/dto/instance.dto'; +import { TemplateDto } from '@api/dto/template.dto'; +import { templateController } from '@api/server.module'; +import { ConfigService } from '@config/env.config'; +import { instanceSchema, templateSchema } from '@validate/validate.schema'; import { RequestHandler, Router } from 'express'; -import { ConfigService } from '../../config/env.config'; -import { instanceSchema, templateSchema } from '../../validate/validate.schema'; -import { RouterBroker } from '../abstract/abstract.router'; -import { InstanceDto } from '../dto/instance.dto'; -import { TemplateDto } from '../dto/template.dto'; -import { templateController } from '../server.module'; import { HttpStatus } from './index.router'; export class TemplateRouter extends RouterBroker { @@ -34,5 +34,5 @@ export class TemplateRouter extends RouterBroker { }); } - public readonly router = Router(); + public readonly router: Router = Router(); } diff --git a/src/api/routes/view.router.ts b/src/api/routes/view.router.ts index 255c2bdb..64b4b5ea 100644 --- a/src/api/routes/view.router.ts +++ b/src/api/routes/view.router.ts @@ -1,8 +1,7 @@ +import { RouterBroker } from '@api/abstract/abstract.router'; import express, { Router } from 'express'; import path from 'path'; -import { RouterBroker } from '../abstract/abstract.router'; - export class ViewsRouter extends RouterBroker { public readonly router: Router; diff --git a/src/api/routes/webhook.router.ts b/src/api/routes/webhook.router.ts index a442d43f..c17befa6 100644 --- a/src/api/routes/webhook.router.ts +++ b/src/api/routes/webhook.router.ts @@ -1,11 +1,11 @@ +import { RouterBroker } from '@api/abstract/abstract.router'; +import { InstanceDto } from '@api/dto/instance.dto'; +import { WebhookDto } from '@api/dto/webhook.dto'; +import { webhookController } from '@api/server.module'; +import { ConfigService } from '@config/env.config'; +import { instanceSchema, webhookSchema } from '@validate/validate.schema'; import { RequestHandler, Router } from 'express'; -import { ConfigService } from '../../config/env.config'; -import { instanceSchema, webhookSchema } from '../../validate/validate.schema'; -import { RouterBroker } from '../abstract/abstract.router'; -import { InstanceDto } from '../dto/instance.dto'; -import { WebhookDto } from '../dto/webhook.dto'; -import { webhookController } from '../server.module'; import { HttpStatus } from './index.router'; export class WebhookRouter extends RouterBroker { @@ -34,5 +34,5 @@ export class WebhookRouter extends RouterBroker { }); } - public readonly router = Router(); + public readonly router: Router = Router(); } diff --git a/src/api/server.module.ts b/src/api/server.module.ts index 0e9ae391..8bb23ca1 100644 --- a/src/api/server.module.ts +++ b/src/api/server.module.ts @@ -1,7 +1,8 @@ -import { CacheEngine } from '../cache/cacheengine'; -import { Chatwoot, configService, ProviderSession } from '../config/env.config'; -import { eventEmitter } from '../config/event.config'; -import { Logger } from '../config/logger.config'; +import { CacheEngine } from '@cache/cacheengine'; +import { Chatwoot, configService, ProviderSession } from '@config/env.config'; +import { eventEmitter } from '@config/event.config'; +import { Logger } from '@config/logger.config'; + import { ChatController } from './controllers/chat.controller'; import { GroupController } from './controllers/group.controller'; import { InstanceController } from './controllers/instance.controller'; diff --git a/src/api/services/auth.service.ts b/src/api/services/auth.service.ts index 84779237..3a7825f8 100644 --- a/src/api/services/auth.service.ts +++ b/src/api/services/auth.service.ts @@ -1,5 +1,5 @@ -import { BadRequestException } from '../../exceptions'; -import { PrismaRepository } from '../repository/repository.service'; +import { PrismaRepository } from '@api/repository/repository.service'; +import { BadRequestException } from '@exceptions'; export class AuthService { constructor(private readonly prismaRepository: PrismaRepository) {} diff --git a/src/api/services/cache.service.ts b/src/api/services/cache.service.ts index b528b157..a160b1d2 100644 --- a/src/api/services/cache.service.ts +++ b/src/api/services/cache.service.ts @@ -1,10 +1,9 @@ +import { ICache } from '@api/abstract/abstract.cache'; +import { Logger } from '@config/logger.config'; import { BufferJSON } from 'baileys'; -import { Logger } from '../../config/logger.config'; -import { ICache } from '../abstract/abstract.cache'; - export class CacheService { - private readonly logger = new Logger(CacheService.name); + private readonly logger = new Logger('CacheService'); constructor(private readonly cache: ICache) { if (cache) { diff --git a/src/api/services/channel.service.ts b/src/api/services/channel.service.ts index 8d4cc7cf..da41b67d 100644 --- a/src/api/services/channel.service.ts +++ b/src/api/services/channel.service.ts @@ -1,3 +1,25 @@ +import { InstanceDto } from '@api/dto/instance.dto'; +import { ProxyDto } from '@api/dto/proxy.dto'; +import { SettingsDto } from '@api/dto/settings.dto'; +import { WebhookDto } from '@api/dto/webhook.dto'; +import { ChatwootDto } from '@api/integrations/chatwoot/dto/chatwoot.dto'; +import { ChatwootService } from '@api/integrations/chatwoot/services/chatwoot.service'; +import { DifyService } from '@api/integrations/dify/services/dify.service'; +import { OpenaiService } from '@api/integrations/openai/services/openai.service'; +import { RabbitmqDto } from '@api/integrations/rabbitmq/dto/rabbitmq.dto'; +import { getAMQP, removeQueues } from '@api/integrations/rabbitmq/libs/amqp.server'; +import { SqsDto } from '@api/integrations/sqs/dto/sqs.dto'; +import { getSQS, removeQueues as removeQueuesSQS } from '@api/integrations/sqs/libs/sqs.server'; +import { TypebotService } from '@api/integrations/typebot/services/typebot.service'; +import { WebsocketDto } from '@api/integrations/websocket/dto/websocket.dto'; +import { getIO } from '@api/integrations/websocket/libs/socket.server'; +import { PrismaRepository, Query } from '@api/repository/repository.service'; +import { waMonitor } from '@api/server.module'; +import { Events, wa } from '@api/types/wa.types'; +import { Auth, Chatwoot, ConfigService, HttpServer, Log, Rabbitmq, Sqs, Webhook, Websocket } from '@config/env.config'; +import { Logger } from '@config/logger.config'; +import { ROOT_DIR } from '@config/path.config'; +import { NotFoundException } from '@exceptions'; import { Contact, Message } from '@prisma/client'; import axios from 'axios'; import { WASocket } from 'baileys'; @@ -6,38 +28,6 @@ import EventEmitter2 from 'eventemitter2'; import { join } from 'path'; import { v4 } from 'uuid'; -import { - Auth, - Chatwoot, - ConfigService, - HttpServer, - Log, - Rabbitmq, - Sqs, - Webhook, - Websocket, -} from '../../config/env.config'; -import { Logger } from '../../config/logger.config'; -import { ROOT_DIR } from '../../config/path.config'; -import { NotFoundException } from '../../exceptions'; -import { InstanceDto } from '../dto/instance.dto'; -import { ProxyDto } from '../dto/proxy.dto'; -import { SettingsDto } from '../dto/settings.dto'; -import { WebhookDto } from '../dto/webhook.dto'; -import { ChatwootDto } from '../integrations/chatwoot/dto/chatwoot.dto'; -import { ChatwootService } from '../integrations/chatwoot/services/chatwoot.service'; -import { DifyService } from '../integrations/dify/services/dify.service'; -import { OpenaiService } from '../integrations/openai/services/openai.service'; -import { RabbitmqDto } from '../integrations/rabbitmq/dto/rabbitmq.dto'; -import { getAMQP, removeQueues } from '../integrations/rabbitmq/libs/amqp.server'; -import { SqsDto } from '../integrations/sqs/dto/sqs.dto'; -import { getSQS, removeQueues as removeQueuesSQS } from '../integrations/sqs/libs/sqs.server'; -import { TypebotService } from '../integrations/typebot/services/typebot.service'; -import { WebsocketDto } from '../integrations/websocket/dto/websocket.dto'; -import { getIO } from '../integrations/websocket/libs/socket.server'; -import { PrismaRepository, Query } from '../repository/repository.service'; -import { waMonitor } from '../server.module'; -import { Events, wa } from '../types/wa.types'; import { CacheService } from './cache.service'; export class ChannelStartupService { @@ -48,7 +38,7 @@ export class ChannelStartupService { public readonly chatwootCache: CacheService, ) {} - public readonly logger = new Logger(ChannelStartupService.name); + public readonly logger = new Logger('ChannelStartupService'); public client: WASocket; public readonly instance: wa.Instance = {}; diff --git a/src/api/services/channels/whatsapp.baileys.service.ts b/src/api/services/channels/whatsapp.baileys.service.ts index addbfde4..b48368fb 100644 --- a/src/api/services/channels/whatsapp.baileys.service.ts +++ b/src/api/services/channels/whatsapp.baileys.service.ts @@ -1,6 +1,83 @@ +import { + ArchiveChatDto, + BlockUserDto, + DeleteMessage, + getBase64FromMediaMessageDto, + LastMessage, + MarkChatUnreadDto, + NumberBusiness, + OnWhatsAppDto, + PrivacySettingDto, + ReadMessageDto, + SendPresenceDto, + UpdateMessageDto, + WhatsAppNumberDto, +} from '@api/dto/chat.dto'; +import { + AcceptGroupInvite, + CreateGroupDto, + GetParticipant, + GroupDescriptionDto, + GroupInvite, + GroupJid, + GroupPictureDto, + GroupSendInvite, + GroupSubjectDto, + GroupToggleEphemeralDto, + GroupUpdateParticipantDto, + GroupUpdateSettingDto, +} from '@api/dto/group.dto'; +import { InstanceDto, SetPresenceDto } from '@api/dto/instance.dto'; +import { HandleLabelDto, LabelDto } from '@api/dto/label.dto'; +import { + ContactMessage, + MediaMessage, + Options, + SendAudioDto, + SendContactDto, + SendListDto, + SendLocationDto, + SendMediaDto, + SendPollDto, + SendReactionDto, + SendStatusDto, + SendStickerDto, + SendTextDto, + StatusMessage, +} from '@api/dto/sendMessage.dto'; +import { chatwootImport } from '@api/integrations/chatwoot/utils/chatwoot-import-helper'; +import * as s3Service from '@api/integrations/s3/libs/minio.server'; +import { ProviderFiles } from '@api/provider/sessions'; +import { PrismaRepository } from '@api/repository/repository.service'; +import { waMonitor } from '@api/server.module'; +import { CacheService } from '@api/services/cache.service'; +import { ChannelStartupService } from '@api/services/channel.service'; +import { Events, MessageSubtype, TypeMediaMessage, wa } from '@api/types/wa.types'; +import { CacheEngine } from '@cache/cacheengine'; +import { + CacheConf, + Chatwoot, + ConfigService, + configService, + ConfigSessionPhone, + Database, + Dify, + Log, + Openai, + ProviderSession, + QrCode, + S3, + Typebot, +} from '@config/env.config'; +import { INSTANCE_DIR } from '@config/path.config'; +import { BadRequestException, InternalServerErrorException, NotFoundException } from '@exceptions'; import ffmpegPath from '@ffmpeg-installer/ffmpeg'; import { Boom } from '@hapi/boom'; import { Instance } from '@prisma/client'; +import { makeProxyAgent } from '@utils/makeProxyAgent'; +import useMultiFileAuthStatePrisma from '@utils/use-multi-file-auth-state-prisma'; +import { AuthStateProvider } from '@utils/use-multi-file-auth-state-provider-files'; +import { useMultiFileAuthStateRedisDb } from '@utils/use-multi-file-auth-state-redis-db'; import axios from 'axios'; import makeWASocket, { AnyMessageContent, @@ -49,7 +126,6 @@ import { existsSync, readFileSync } from 'fs'; import Long from 'long'; import mime from 'mime'; import NodeCache from 'node-cache'; -import { getMIMEType } from 'node-mime-types'; import { release } from 'os'; import { join } from 'path'; import P from 'pino'; @@ -59,84 +135,6 @@ import sharp from 'sharp'; import { PassThrough } from 'stream'; import { v4 } from 'uuid'; -import { CacheEngine } from '../../../cache/cacheengine'; -import { - CacheConf, - Chatwoot, - ConfigService, - configService, - ConfigSessionPhone, - Database, - Dify, - Log, - Openai, - ProviderSession, - QrCode, - S3, - Typebot, -} from '../../../config/env.config'; -import { INSTANCE_DIR } from '../../../config/path.config'; -import { BadRequestException, InternalServerErrorException, NotFoundException } from '../../../exceptions'; -import { makeProxyAgent } from '../../../utils/makeProxyAgent'; -import useMultiFileAuthStatePrisma from '../../../utils/use-multi-file-auth-state-prisma'; -import { AuthStateProvider } from '../../../utils/use-multi-file-auth-state-provider-files'; -import { useMultiFileAuthStateRedisDb } from '../../../utils/use-multi-file-auth-state-redis-db'; -import { - ArchiveChatDto, - BlockUserDto, - DeleteMessage, - getBase64FromMediaMessageDto, - LastMessage, - MarkChatUnreadDto, - NumberBusiness, - OnWhatsAppDto, - PrivacySettingDto, - ReadMessageDto, - SendPresenceDto, - UpdateMessageDto, - WhatsAppNumberDto, -} from '../../dto/chat.dto'; -import { - AcceptGroupInvite, - CreateGroupDto, - GetParticipant, - GroupDescriptionDto, - GroupInvite, - GroupJid, - GroupPictureDto, - GroupSendInvite, - GroupSubjectDto, - GroupToggleEphemeralDto, - GroupUpdateParticipantDto, - GroupUpdateSettingDto, -} from '../../dto/group.dto'; -import { InstanceDto, SetPresenceDto } from '../../dto/instance.dto'; -import { HandleLabelDto, LabelDto } from '../../dto/label.dto'; -import { - ContactMessage, - MediaMessage, - Options, - SendAudioDto, - SendContactDto, - SendListDto, - SendLocationDto, - SendMediaDto, - SendPollDto, - SendReactionDto, - SendStatusDto, - SendStickerDto, - SendTextDto, - StatusMessage, -} from '../../dto/sendMessage.dto'; -import { chatwootImport } from '../../integrations/chatwoot/utils/chatwoot-import-helper'; -import * as s3Service from '../../integrations/s3/libs/minio.server'; -import { ProviderFiles } from '../../provider/sessions'; -import { PrismaRepository } from '../../repository/repository.service'; -import { waMonitor } from '../../server.module'; -import { Events, MessageSubtype, TypeMediaMessage, wa } from '../../types/wa.types'; -import { CacheService } from './../cache.service'; -import { ChannelStartupService } from './../channel.service'; - const groupMetadataCache = new CacheService(new CacheEngine(configService, 'groups').getEngine()); export class BaileysStartupService extends ChannelStartupService { @@ -1015,7 +1013,7 @@ export class BaileysStartupService extends ChannelStartupService { await this.contactHandle['contacts.upsert']( contacts - .filter((c) => !!c.notify ?? !!c.name) + .filter((c) => !!c.notify || !!c.name) .map((c) => ({ id: c.id, name: c.name ?? c.notify, @@ -1156,7 +1154,7 @@ export class BaileysStartupService extends ChannelStartupService { const { buffer, mediaType, fileName, size } = media; - const mimetype = mime.lookup(fileName).toString(); + const mimetype = mime.getType(fileName).toString(); const fullName = join(`${this.instance.id}`, received.key.remoteJid, mediaType, fileName); @@ -2319,7 +2317,7 @@ export class BaileysStartupService extends ChannelStartupService { if (mediaMessage.mimetype) { mimetype = mediaMessage.mimetype; } else { - mimetype = getMIMEType(mediaMessage.fileName); + mimetype = mime.getType(mediaMessage.fileName); if (!mimetype && isURL(mediaMessage.media)) { let config: any = { @@ -2983,7 +2981,7 @@ export class BaileysStartupService extends ChannelStartupService { ); const typeMessage = getContentType(msg.message); - const ext = mime.extension(mediaMessage?.['mimetype']); + const ext = mime.getExtension(mediaMessage?.['mimetype']); const fileName = mediaMessage?.['fileName'] || `${msg.key.id}.${ext}` || `${v4()}.${ext}`; diff --git a/src/api/services/channels/whatsapp.business.service.ts b/src/api/services/channels/whatsapp.business.service.ts index d4e24765..6e0c4e60 100644 --- a/src/api/services/channels/whatsapp.business.service.ts +++ b/src/api/services/channels/whatsapp.business.service.ts @@ -1,14 +1,4 @@ -import axios from 'axios'; -import { arrayUnique, isURL } from 'class-validator'; -import EventEmitter2 from 'eventemitter2'; -import FormData from 'form-data'; -import { createReadStream } from 'fs'; -import { getMIMEType } from 'node-mime-types'; -import { join } from 'path'; - -import { Chatwoot, ConfigService, Database, Dify, Openai, S3, Typebot, WaBusiness } from '../../../config/env.config'; -import { BadRequestException, InternalServerErrorException } from '../../../exceptions'; -import { NumberBusiness } from '../../dto/chat.dto'; +import { NumberBusiness } from '@api/dto/chat.dto'; import { ContactMessage, MediaMessage, @@ -22,13 +12,22 @@ import { SendReactionDto, SendTemplateDto, SendTextDto, -} from '../../dto/sendMessage.dto'; -import * as s3Service from '../../integrations/s3/libs/minio.server'; -import { ProviderFiles } from '../../provider/sessions'; -import { PrismaRepository } from '../../repository/repository.service'; -import { Events, wa } from '../../types/wa.types'; -import { CacheService } from './../cache.service'; -import { ChannelStartupService } from './../channel.service'; +} from '@api/dto/sendMessage.dto'; +import * as s3Service from '@api/integrations/s3/libs/minio.server'; +import { ProviderFiles } from '@api/provider/sessions'; +import { PrismaRepository } from '@api/repository/repository.service'; +import { CacheService } from '@api/services/cache.service'; +import { ChannelStartupService } from '@api/services/channel.service'; +import { Events, wa } from '@api/types/wa.types'; +import { Chatwoot, ConfigService, Database, Dify, Openai, S3, Typebot, WaBusiness } from '@config/env.config'; +import { BadRequestException, InternalServerErrorException } from '@exceptions'; +import axios from 'axios'; +import { arrayUnique, isURL } from 'class-validator'; +import EventEmitter2 from 'eventemitter2'; +import FormData from 'form-data'; +import { createReadStream } from 'fs'; +import mime from 'mime'; +import { join } from 'path'; export class BusinessStartupService extends ChannelStartupService { constructor( @@ -1059,11 +1058,11 @@ export class BusinessStartupService extends ChannelStartupService { }; if (isURL(mediaMessage.media)) { - mimetype = getMIMEType(mediaMessage.media); + mimetype = mime.getType(mediaMessage.media); prepareMedia.id = mediaMessage.media; prepareMedia.type = 'link'; } else { - mimetype = getMIMEType(mediaMessage.fileName); + mimetype = mime.getType(mediaMessage.fileName); const id = await this.getIdMedia(prepareMedia); prepareMedia.id = id; prepareMedia.type = 'id'; @@ -1109,11 +1108,11 @@ export class BusinessStartupService extends ChannelStartupService { }; if (isURL(audio)) { - mimetype = getMIMEType(audio); + mimetype = mime.getType(audio); prepareMedia.id = audio; prepareMedia.type = 'link'; } else { - mimetype = getMIMEType(prepareMedia.fileName); + mimetype = mime.getType(prepareMedia.fileName); const id = await this.getIdMedia(prepareMedia); prepareMedia.id = id; prepareMedia.type = 'id'; diff --git a/src/api/services/monitor.service.ts b/src/api/services/monitor.service.ts index 5fbf1726..f9fb2fa2 100644 --- a/src/api/services/monitor.service.ts +++ b/src/api/services/monitor.service.ts @@ -1,16 +1,16 @@ +import { InstanceDto } from '@api/dto/instance.dto'; +import { ProviderFiles } from '@api/provider/sessions'; +import { PrismaRepository } from '@api/repository/repository.service'; +import { Integration } from '@api/types/wa.types'; +import { CacheConf, Chatwoot, ConfigService, Database, DelInstance, ProviderSession } from '@config/env.config'; +import { Logger } from '@config/logger.config'; +import { INSTANCE_DIR, STORE_DIR } from '@config/path.config'; +import { NotFoundException } from '@exceptions'; import { execSync } from 'child_process'; import EventEmitter2 from 'eventemitter2'; import { rmSync } from 'fs'; import { join } from 'path'; -import { CacheConf, Chatwoot, ConfigService, Database, DelInstance, ProviderSession } from '../../config/env.config'; -import { Logger } from '../../config/logger.config'; -import { INSTANCE_DIR, STORE_DIR } from '../../config/path.config'; -import { NotFoundException } from '../../exceptions'; -import { InstanceDto } from '../dto/instance.dto'; -import { ProviderFiles } from '../provider/sessions'; -import { PrismaRepository } from '../repository/repository.service'; -import { Integration } from '../types/wa.types'; import { CacheService } from './cache.service'; import { BaileysStartupService } from './channels/whatsapp.baileys.service'; import { BusinessStartupService } from './channels/whatsapp.business.service'; @@ -35,7 +35,7 @@ export class WAMonitoringService { private readonly db: Partial = {}; private readonly redis: Partial = {}; - private readonly logger = new Logger(WAMonitoringService.name); + private readonly logger = new Logger('WAMonitoringService'); public readonly waInstances: Record = {}; private readonly providerSession = Object.freeze(this.configService.get('PROVIDER')); diff --git a/src/api/services/proxy.service.ts b/src/api/services/proxy.service.ts index e65d6758..69ba87b4 100644 --- a/src/api/services/proxy.service.ts +++ b/src/api/services/proxy.service.ts @@ -1,14 +1,14 @@ +import { InstanceDto } from '@api/dto/instance.dto'; +import { ProxyDto } from '@api/dto/proxy.dto'; +import { Logger } from '@config/logger.config'; import { Proxy } from '@prisma/client'; -import { Logger } from '../../config/logger.config'; -import { InstanceDto } from '../dto/instance.dto'; -import { ProxyDto } from '../dto/proxy.dto'; import { WAMonitoringService } from './monitor.service'; export class ProxyService { constructor(private readonly waMonitor: WAMonitoringService) {} - private readonly logger = new Logger(ProxyService.name); + private readonly logger = new Logger('ProxyService'); public create(instance: InstanceDto, data: ProxyDto) { this.waMonitor.waInstances[instance.instanceName].setProxy(data); diff --git a/src/api/services/settings.service.ts b/src/api/services/settings.service.ts index 565962bd..5b7ab1b8 100644 --- a/src/api/services/settings.service.ts +++ b/src/api/services/settings.service.ts @@ -1,12 +1,13 @@ -import { Logger } from '../../config/logger.config'; -import { InstanceDto } from '../dto/instance.dto'; -import { SettingsDto } from '../dto/settings.dto'; +import { InstanceDto } from '@api/dto/instance.dto'; +import { SettingsDto } from '@api/dto/settings.dto'; +import { Logger } from '@config/logger.config'; + import { WAMonitoringService } from './monitor.service'; export class SettingsService { constructor(private readonly waMonitor: WAMonitoringService) {} - private readonly logger = new Logger(SettingsService.name); + private readonly logger = new Logger('SettingsService'); public async create(instance: InstanceDto, data: SettingsDto) { await this.waMonitor.waInstances[instance.instanceName].setSettings(data); diff --git a/src/api/services/template.service.ts b/src/api/services/template.service.ts index e959be23..949f71c7 100644 --- a/src/api/services/template.service.ts +++ b/src/api/services/template.service.ts @@ -1,10 +1,10 @@ +import { InstanceDto } from '@api/dto/instance.dto'; +import { TemplateDto } from '@api/dto/template.dto'; +import { PrismaRepository } from '@api/repository/repository.service'; +import { ConfigService, WaBusiness } from '@config/env.config'; +import { Logger } from '@config/logger.config'; import axios from 'axios'; -import { ConfigService, WaBusiness } from '../../config/env.config'; -import { Logger } from '../../config/logger.config'; -import { InstanceDto } from '../dto/instance.dto'; -import { TemplateDto } from '../dto/template.dto'; -import { PrismaRepository } from '../repository/repository.service'; import { WAMonitoringService } from './monitor.service'; export class TemplateService { @@ -14,7 +14,7 @@ export class TemplateService { private readonly configService: ConfigService, ) {} - private readonly logger = new Logger(TemplateService.name); + private readonly logger = new Logger('TemplateService'); private businessId: string; private token: string; diff --git a/src/api/services/webhook.service.ts b/src/api/services/webhook.service.ts index 80df1688..d8f10932 100644 --- a/src/api/services/webhook.service.ts +++ b/src/api/services/webhook.service.ts @@ -1,16 +1,16 @@ +import { InstanceDto } from '@api/dto/instance.dto'; +import { WebhookDto } from '@api/dto/webhook.dto'; +import { PrismaRepository } from '@api/repository/repository.service'; +import { Logger } from '@config/logger.config'; import { Webhook } from '@prisma/client'; import axios from 'axios'; -import { Logger } from '../../config/logger.config'; -import { InstanceDto } from '../dto/instance.dto'; -import { WebhookDto } from '../dto/webhook.dto'; -import { PrismaRepository } from '../repository/repository.service'; import { WAMonitoringService } from './monitor.service'; export class WebhookService { constructor(private readonly waMonitor: WAMonitoringService, public readonly prismaRepository: PrismaRepository) {} - private readonly logger = new Logger(WebhookService.name); + private readonly logger = new Logger('WebhookService'); public create(instance: InstanceDto, data: WebhookDto) { this.waMonitor.waInstances[instance.instanceName].setWebhook(data); diff --git a/src/cache/cacheengine.ts b/src/cache/cacheengine.ts index dd3d18f1..47f1096e 100644 --- a/src/cache/cacheengine.ts +++ b/src/cache/cacheengine.ts @@ -1,6 +1,7 @@ -import { ICache } from '../api/abstract/abstract.cache'; -import { CacheConf, ConfigService } from '../config/env.config'; -import { Logger } from '../config/logger.config'; +import { ICache } from '@api/abstract/abstract.cache'; +import { CacheConf, ConfigService } from '@config/env.config'; +import { Logger } from '@config/logger.config'; + import { LocalCache } from './localcache'; import { RedisCache } from './rediscache'; diff --git a/src/cache/localcache.ts b/src/cache/localcache.ts index 54a51d90..130d4865 100644 --- a/src/cache/localcache.ts +++ b/src/cache/localcache.ts @@ -1,8 +1,7 @@ +import { ICache } from '@api/abstract/abstract.cache'; +import { CacheConf, CacheConfLocal, ConfigService } from '@config/env.config'; import NodeCache from 'node-cache'; -import { ICache } from '../api/abstract/abstract.cache'; -import { CacheConf, CacheConfLocal, ConfigService } from '../config/env.config'; - export class LocalCache implements ICache { private conf: CacheConfLocal; static localCache = new NodeCache(); diff --git a/src/cache/rediscache.client.ts b/src/cache/rediscache.client.ts index 350f05e2..45a0321f 100644 --- a/src/cache/rediscache.client.ts +++ b/src/cache/rediscache.client.ts @@ -1,10 +1,9 @@ +import { CacheConf, CacheConfRedis, configService } from '@config/env.config'; +import { Logger } from '@config/logger.config'; import { createClient, RedisClientType } from 'redis'; -import { CacheConf, CacheConfRedis, configService } from '../config/env.config'; -import { Logger } from '../config/logger.config'; - class Redis { - private logger = new Logger(Redis.name); + private logger = new Logger('Redis'); private client: RedisClientType = null; private conf: CacheConfRedis; private connected = false; diff --git a/src/cache/rediscache.ts b/src/cache/rediscache.ts index c4e98968..67c21c37 100644 --- a/src/cache/rediscache.ts +++ b/src/cache/rediscache.ts @@ -1,13 +1,13 @@ +import { ICache } from '@api/abstract/abstract.cache'; +import { CacheConf, CacheConfRedis, ConfigService } from '@config/env.config'; +import { Logger } from '@config/logger.config'; import { BufferJSON } from 'baileys'; import { RedisClientType } from 'redis'; -import { ICache } from '../api/abstract/abstract.cache'; -import { CacheConf, CacheConfRedis, ConfigService } from '../config/env.config'; -import { Logger } from '../config/logger.config'; import { redisClient } from './rediscache.client'; export class RedisCache implements ICache { - private readonly logger = new Logger(RedisCache.name); + private readonly logger = new Logger('RedisCache'); private client: RedisClientType; private conf: CacheConfRedis; diff --git a/src/config/logger.config.ts b/src/config/logger.config.ts index c52d3ccc..bc27db5c 100644 --- a/src/config/logger.config.ts +++ b/src/config/logger.config.ts @@ -58,7 +58,11 @@ enum Background { export class Logger { private readonly configService = configService; - constructor(private context = 'Logger') {} + private context: string; + + constructor(context = 'Logger') { + this.context = context; + } private instance = null; diff --git a/src/exceptions/400.exception.ts b/src/exceptions/400.exception.ts index 2ea3a7a4..123696cb 100644 --- a/src/exceptions/400.exception.ts +++ b/src/exceptions/400.exception.ts @@ -1,4 +1,4 @@ -import { HttpStatus } from '../api/routes/index.router'; +import { HttpStatus } from '@api/routes/index.router'; export class BadRequestException { constructor(...objectError: any[]) { diff --git a/src/exceptions/401.exception.ts b/src/exceptions/401.exception.ts index f5383e0e..8ff9076c 100644 --- a/src/exceptions/401.exception.ts +++ b/src/exceptions/401.exception.ts @@ -1,4 +1,4 @@ -import { HttpStatus } from '../api/routes/index.router'; +import { HttpStatus } from '@api/routes/index.router'; export class UnauthorizedException { constructor(...objectError: any[]) { diff --git a/src/exceptions/403.exception.ts b/src/exceptions/403.exception.ts index 53d8f05c..f1f39998 100644 --- a/src/exceptions/403.exception.ts +++ b/src/exceptions/403.exception.ts @@ -1,4 +1,4 @@ -import { HttpStatus } from '../api/routes/index.router'; +import { HttpStatus } from '@api/routes/index.router'; export class ForbiddenException { constructor(...objectError: any[]) { diff --git a/src/exceptions/404.exception.ts b/src/exceptions/404.exception.ts index f2fd5c28..16f912e4 100644 --- a/src/exceptions/404.exception.ts +++ b/src/exceptions/404.exception.ts @@ -1,4 +1,4 @@ -import { HttpStatus } from '../api/routes/index.router'; +import { HttpStatus } from '@api/routes/index.router'; export class NotFoundException { constructor(...objectError: any[]) { diff --git a/src/exceptions/500.exception.ts b/src/exceptions/500.exception.ts index c5111f6d..316223e5 100644 --- a/src/exceptions/500.exception.ts +++ b/src/exceptions/500.exception.ts @@ -1,4 +1,4 @@ -import { HttpStatus } from '../api/routes/index.router'; +import { HttpStatus } from '@api/routes/index.router'; export class InternalServerErrorException { constructor(...objectError: any[]) { diff --git a/src/libs/prisma.connect.ts b/src/libs/prisma.connect.ts index 73b1cd21..849d26e2 100644 --- a/src/libs/prisma.connect.ts +++ b/src/libs/prisma.connect.ts @@ -1,8 +1,7 @@ +import { configService, Database } from '@config/env.config'; +import { Logger } from '@config/logger.config'; import { PrismaClient } from '@prisma/client'; -import { configService, Database } from '../config/env.config'; -import { Logger } from '../config/logger.config'; - const logger = new Logger('Prisma'); const db = configService.get('DATABASE'); diff --git a/src/main.ts b/src/main.ts index 15676249..d96291e4 100644 --- a/src/main.ts +++ b/src/main.ts @@ -1,24 +1,23 @@ import 'express-async-errors'; +import { initAMQP, initGlobalQueues } from '@api/integrations/rabbitmq/libs/amqp.server'; +import { initSQS } from '@api/integrations/sqs/libs/sqs.server'; +import { initIO } from '@api/integrations/websocket/libs/socket.server'; +import { ProviderFiles } from '@api/provider/sessions'; +import { PrismaRepository } from '@api/repository/repository.service'; +import { HttpStatus, router } from '@api/routes/index.router'; +import { waMonitor } from '@api/server.module'; +import { Auth, configService, Cors, HttpServer, ProviderSession, Rabbitmq, Sqs, Webhook } from '@config/env.config'; +import { onUnexpectedError } from '@config/error.config'; +import { Logger } from '@config/logger.config'; +import { ROOT_DIR } from '@config/path.config'; +import { ServerUP } from '@utils/server-up'; import axios from 'axios'; import compression from 'compression'; import cors from 'cors'; import express, { json, NextFunction, Request, Response, urlencoded } from 'express'; import { join } from 'path'; -import { initAMQP, initGlobalQueues } from './api/integrations/rabbitmq/libs/amqp.server'; -import { initSQS } from './api/integrations/sqs/libs/sqs.server'; -import { initIO } from './api/integrations/websocket/libs/socket.server'; -import { ProviderFiles } from './api/provider/sessions'; -import { PrismaRepository } from './api/repository/repository.service'; -import { HttpStatus, router } from './api/routes/index.router'; -import { waMonitor } from './api/server.module'; -import { Auth, configService, Cors, HttpServer, ProviderSession, Rabbitmq, Sqs, Webhook } from './config/env.config'; -import { onUnexpectedError } from './config/error.config'; -import { Logger } from './config/logger.config'; -import { ROOT_DIR } from './config/path.config'; -import { ServerUP } from './utils/server-up'; - function initWA() { waMonitor.loadInstance(); } diff --git a/src/utils/i18n.ts b/src/utils/i18n.ts index 8e23181d..b26a5ef0 100644 --- a/src/utils/i18n.ts +++ b/src/utils/i18n.ts @@ -1,9 +1,8 @@ +import { ConfigService, Language } from '@config/env.config'; import fs from 'fs'; import i18next from 'i18next'; import path from 'path'; -import { ConfigService, Language } from '../config/env.config'; - const languages = ['en', 'pt-BR', 'es']; const translationsPath = path.join(__dirname, 'translations'); const configService: ConfigService = new ConfigService(); diff --git a/src/utils/server-up.ts b/src/utils/server-up.ts index e06caea7..326b3be4 100644 --- a/src/utils/server-up.ts +++ b/src/utils/server-up.ts @@ -1,10 +1,9 @@ +import { configService, SslConf } from '@config/env.config'; import { Express } from 'express'; import { readFileSync } from 'fs'; import * as http from 'http'; import * as https from 'https'; -import { configService, SslConf } from '../config/env.config'; - export class ServerUP { static #app: Express; diff --git a/src/utils/use-multi-file-auth-state-prisma.ts b/src/utils/use-multi-file-auth-state-prisma.ts index 8790b3a5..b7b6e1b2 100644 --- a/src/utils/use-multi-file-auth-state-prisma.ts +++ b/src/utils/use-multi-file-auth-state-prisma.ts @@ -1,11 +1,10 @@ +import { CacheService } from '@api/services/cache.service'; +import { INSTANCE_DIR } from '@config/path.config'; +import { prismaServer } from '@libs/prisma.connect'; import { AuthenticationState, BufferJSON, initAuthCreds, WAProto as proto } from 'baileys'; import fs from 'fs/promises'; import path from 'path'; -import { CacheService } from '../api/services/cache.service'; -import { INSTANCE_DIR } from '../config/path.config'; -import { prismaServer } from '../libs/prisma.connect'; - const prisma = prismaServer; // const fixFileName = (file: string): string | undefined => { diff --git a/src/utils/use-multi-file-auth-state-provider-files.ts b/src/utils/use-multi-file-auth-state-provider-files.ts index ec4d7e6c..4dfa2fb2 100644 --- a/src/utils/use-multi-file-auth-state-provider-files.ts +++ b/src/utils/use-multi-file-auth-state-provider-files.ts @@ -34,18 +34,17 @@ * └──────────────────────────────────────────────────────────────────────────────┘ */ +import { ProviderFiles } from '@api/provider/sessions'; +import { Logger } from '@config/logger.config'; import { AuthenticationCreds, AuthenticationState, BufferJSON, initAuthCreds, proto, SignalDataTypeMap } from 'baileys'; import { isNotEmpty } from 'class-validator'; -import { ProviderFiles } from '../api/provider/sessions'; -import { Logger } from '../config/logger.config'; - export type AuthState = { state: AuthenticationState; saveCreds: () => Promise }; export class AuthStateProvider { constructor(private readonly providerFiles: ProviderFiles) {} - private readonly logger = new Logger(AuthStateProvider.name); + private readonly logger = new Logger('AuthStateProvider'); public async authStateProvider(instance: string): Promise { const [, error] = await this.providerFiles.create(instance); 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 d077b894..837f8092 100644 --- a/src/utils/use-multi-file-auth-state-redis-db.ts +++ b/src/utils/use-multi-file-auth-state-redis-db.ts @@ -1,8 +1,7 @@ +import { CacheService } from '@api/services/cache.service'; +import { Logger } from '@config/logger.config'; import { AuthenticationCreds, AuthenticationState, initAuthCreds, proto, SignalDataTypeMap } from 'baileys'; -import { CacheService } from '../api/services/cache.service'; -import { Logger } from '../config/logger.config'; - export async function useMultiFileAuthStateRedisDb( instanceName: string, cache: CacheService, @@ -10,7 +9,7 @@ export async function useMultiFileAuthStateRedisDb( state: AuthenticationState; saveCreds: () => Promise; }> { - const logger = new Logger(useMultiFileAuthStateRedisDb.name); + const logger = new Logger('useMultiFileAuthStateRedisDb'); const writeData = async (data: any, key: string): Promise => { try { diff --git a/src/validate/instance.schema.ts b/src/validate/instance.schema.ts index 646883f1..de5be2b9 100644 --- a/src/validate/instance.schema.ts +++ b/src/validate/instance.schema.ts @@ -1,8 +1,7 @@ +import { Integration } from '@api/types/wa.types'; import { JSONSchema7 } from 'json-schema'; import { v4 } from 'uuid'; -import { Integration } from '../api/types/wa.types'; - const isNotEmpty = (...propertyNames: string[]): JSONSchema7 => { const properties = {}; propertyNames.forEach( diff --git a/src/validate/validate.schema.ts b/src/validate/validate.schema.ts index 9321718a..22d910f9 100644 --- a/src/validate/validate.schema.ts +++ b/src/validate/validate.schema.ts @@ -1,10 +1,4 @@ // Integrations Schema -export * from '../api/integrations/chatwoot/validate/chatwoot.schema'; -export * from '../api/integrations/dify/validate/dify.schema'; -export * from '../api/integrations/openai/validate/openai.schema'; -export * from '../api/integrations/rabbitmq/validate/rabbitmq.schema'; -export * from '../api/integrations/sqs/validate/sqs.schema'; -export * from '../api/integrations/typebot/validate/typebot.schema'; export * from './chat.schema'; export * from './group.schema'; export * from './instance.schema'; @@ -15,3 +9,9 @@ export * from './settings.schema'; export * from './template.schema'; export * from './webhook.schema'; export * from './websocket.schema'; +export * from '@api/integrations/chatwoot/validate/chatwoot.schema'; +export * from '@api/integrations/dify/validate/dify.schema'; +export * from '@api/integrations/openai/validate/openai.schema'; +export * from '@api/integrations/rabbitmq/validate/rabbitmq.schema'; +export * from '@api/integrations/sqs/validate/sqs.schema'; +export * from '@api/integrations/typebot/validate/typebot.schema'; diff --git a/tsconfig.json b/tsconfig.json index 156bb77c..be16fc49 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -3,7 +3,7 @@ "experimentalDecorators": true, "emitDecoratorMetadata": true, "declaration": true, - "target": "ES6", + "target": "es2020", "module": "commonjs", "rootDir": "./", "resolveJsonModule": true, @@ -16,7 +16,17 @@ "skipLibCheck": true, "strictNullChecks": false, "incremental": true, - "noImplicitAny": false + "noImplicitAny": false, + "baseUrl": ".", + "paths": { + "@api/*": ["./src/api/*"], + "@cache/*": ["./src/cache/*"], + "@config/*": ["./src/config/*"], + "@exceptions": ["./src/exceptions"], + "@libs/*": ["./src/libs/*"], + "@utils/*": ["./src/utils/*"], + "@validate/*": ["./src/validate/*"] + } }, "exclude": ["node_modules", "./test", "./dist", "./prisma"], "include": [ diff --git a/tsup.config.ts b/tsup.config.ts new file mode 100644 index 00000000..8ea3c3a7 --- /dev/null +++ b/tsup.config.ts @@ -0,0 +1,11 @@ +import { defineConfig } from 'tsup'; + +export default defineConfig({ + entry: ['src'], + outDir: 'dist', + splitting: false, + sourcemap: true, + clean: true, + minify: true, + format: ['cjs', 'esm'], +});