diff --git a/CHANGELOG.md b/CHANGELOG.md index 8be10801..52203203 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,9 +1,14 @@ # 1.5.3 (develop) +### Feature + +* Swagger documentation + ### Fixed * Remove rabbitmq queues when delete instances * Improvement in restart instance to completely redo the connection +* Update node version: v20 # 1.5.2 (2023-09-28 17:56) diff --git a/Dockerfile b/Dockerfile index 61d40a2a..6d53a27b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM node:16.18-alpine +FROM node:20.7.0-alpine LABEL version="1.5.2" description="Api to control whatsapp features through http requests." LABEL maintainer="Davidson Gomes" git="https://github.com/DavidsonGomes" diff --git a/package.json b/package.json index 2bb30860..34b7e855 100644 --- a/package.json +++ b/package.json @@ -78,7 +78,9 @@ "sharp": "^0.30.7", "socket.io": "^4.7.1", "socks-proxy-agent": "^8.0.1", - "uuid": "^9.0.0" + "swagger-ui-express": "^5.0.0", + "uuid": "^9.0.0", + "yamljs": "^0.3.0" }, "devDependencies": { "@types/compression": "^1.7.2", diff --git a/public/images/codechat-logo.png b/public/images/evolution-logo.png similarity index 100% rename from public/images/codechat-logo.png rename to public/images/evolution-logo.png diff --git a/src/docs/swagger.conf.ts b/src/docs/swagger.conf.ts new file mode 100644 index 00000000..7ce42bae --- /dev/null +++ b/src/docs/swagger.conf.ts @@ -0,0 +1,17 @@ +import { Router } from 'express'; +import { join } from 'path'; +import swaggerUi from 'swagger-ui-express'; +import YAML from 'yamljs'; + +const document = YAML.load(join(process.cwd(), 'src', 'docs', 'swagger.yaml')); + +const router = Router(); + +export const swaggerRouter = router.use('/docs', swaggerUi.serve).get( + '/docs', + swaggerUi.setup(document, { + customCssUrl: '/css/dark-theme-swagger.css', + customSiteTitle: 'Evolution API', + customfavIcon: '/images/logo.svg', + }), +); diff --git a/src/docs/swagger.yaml b/src/docs/swagger.yaml new file mode 100644 index 00000000..77693bcc --- /dev/null +++ b/src/docs/swagger.yaml @@ -0,0 +1,1282 @@ +openapi: 3.0.0 +info: + title: Evolution API + description: | +
+
+ +
+ + [![Whatsapp Group](https://img.shields.io/badge/Group-WhatsApp-%2322BC18)](https://evolution-api.com/whatsapp) + [![Discord Community](https://img.shields.io/badge/Discord-Community-blue)](https://evolution-api.com/discord) + [![Postman Collection](https://img.shields.io/badge/Postman-Collection-orange)](https://evolution-api.com/postman) + [![Documentation](https://img.shields.io/badge/Documentation-Official-green)](https://doc.evolution-api.com) + [![License](https://img.shields.io/badge/license-GPL--3.0-orange)](./LICENSE) + [![Support](https://img.shields.io/badge/Donation-picpay-green)](https://app.picpay.com/user/davidsongomes1998) + [![Support](https://img.shields.io/badge/Buy%20me-coffe-orange)](https://bmc.link/evolutionapi) + +
+ +
+ + + This project is based on the [evolution](https://github.com/code-chat-br/whatsapp-api). The original project is an implementation of [Baileys](https://github.com/WhiskeySockets/Baileys), serving as a Restful API service that controls WhatsApp functions.
+ The code allows the creation of multiservice chats, service bots, or any other system that utilizes WhatsApp. The documentation provides instructions on how to set up and use the project, as well as additional information about its features and configuration options. +
+ + [![Run in Postman](https://run.pstmn.io/button.svg)](https://god.gw.postman.com/run-collection/26869335-5546d063-156b-4529-915f-909dd628c090?action=collection%2Ffork&source=rip_markdown&collection-url=entityId%3D26869335-5546d063-156b-4529-915f-909dd628c090%26entityType%3Dcollection%26workspaceId%3D339a4ee7-378b-45c9-b5b8-fd2c0a9c2442) + version: 1.5.2 + contact: + name: DavidsonGomes + email: contato@agenciadgcode.com + url: https://img.shields.io/badge/license-GPL--3.0-orange + license: + name: GNU General Public License v3.0 + url: https://github.com/EvolutionAPI/evolution-api/blob/main/LICENSE +servers: [] +components: + securitySchemes: + apikeyAuth: + type: apiKey + in: header + name: apikey + bearerAuth: + type: http + scheme: bearer + bearerFormat: JWT +security: + - bearerAuth: [] +tags: + - name: Instance Controller + - name: Send Message Controller + - name: Chat Controller + - name: Group Controller + - name: Profile Settings + - name: JWT + - name: Settings + - name: Webhook + - name: Websocket + - name: RabbitMQ + - name: Chatwoot + - name: Typebot + - name: Proxy + - name: Chama AI +paths: + /instance/create: + post: + tags: + - Instance Controller + summary: Create Instance + requestBody: + content: + application/json: + schema: + type: object + properties: + instanceName: + type: string + description: Name of the instance (optional). + token: + type: string + description: Token of the instance (optional). + qrcode: + type: boolean + description: QR Code of the instance (optional). + example: + instanceName: 'exampleInstance' + token: '87F3F7D0-4B8A-45D0-8618-7399E4AD6469' + qrcode: true + security: + - apikeyAuth: [] + responses: + '200': + description: Successful response + content: + application/json: {} + /instance/fetchInstances: + get: + tags: + - Instance Controller + summary: Fetch Instances + security: + - apikeyAuth: [] + parameters: + - name: instanceName + in: query + schema: + type: string + description: Retrieve one or all instances (optional). + example: 'evolution' + responses: + '200': + description: Successful response + content: + application/json: + schema: + type: array + items: + type: object + properties: + instance: + type: object + properties: + instanceName: + type: string + owner: + type: string + profileName: + type: string + profilePictureUrl: + type: string + profileStatus: + type: string + status: + type: string + serverUrl: + type: string + apikey: + type: string + /instance/connect/{instanceName}: + get: + tags: + - Instance Controller + summary: Instance Connect + parameters: + - name: instanceName + in: path + required: true + schema: + type: string + description: Connect to your instance. + example: 'evolution' + responses: + '200': + description: Successful response + content: + application/json: + schema: + type: object + properties: + code: + type: string + base64: + type: string + description: The QR Code as a string. + /instance/connectionState/{instanceName}: + get: + tags: + - Instance Controller + summary: Connection Status + parameters: + - name: instanceName + in: path + required: true + schema: + type: string + description: Check the connection state of your instance. + example: 'evolution' + responses: + '200': + description: Successful response + content: + application/json: {} + /instance/logout/{instanceName}: + delete: + tags: + - Instance Controller + summary: Logout Instance + parameters: + - name: instanceName + in: path + required: true + schema: + type: string + description: Logout from your instance. + example: 'evolution' + responses: + '200': + description: Successful response + content: + application/json: {} + /instance/delete/{instanceName}: + delete: + tags: + - Instance Controller + summary: Delete Instance + parameters: + - name: instanceName + in: path + required: true + schema: + type: string + description: Delete your instance. + example: 'evolution' + responses: + '200': + description: Successful response + content: + application/json: {} + + /message/sendText/{instanceName}: + post: + tags: + - Send Message Controller + summary: Send a text message to a specified instance. + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + number: + type: string + description: The recipient's phone number. + example: '1234567890' + textMessage: + type: object + properties: + text: + type: string + description: The content of the text message. + example: 'Hello, World!' + options: + type: object + properties: + delay: + type: integer + description: Delay time before sending the message. + presence: + type: string + enum: ['composing', 'recording', 'paused'] + description: Indicates the sender's action/status. + required: + - number + - textMessage + parameters: + - name: instanceName + in: path + required: true + schema: + type: string + description: The name of the instance to which the message should be sent. + example: 'evolution' + responses: + '200': + description: Successful response + content: + application/json: {} + /message/sendMedia/{instanceName}: + post: + tags: + - Send Message Controller + summary: Send a media message (image, video, document, audio) to a specified instance. + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + number: + type: string + description: The recipient's phone number. + example: '1234567890' + mediaMessage: + type: object + properties: + mediatype: + type: string + enum: ['image', 'document', 'video', 'audio'] + description: Type of the media content. + fileName: + type: string + description: Name of the media file (optional). + caption: + type: string + description: Caption to accompany the media. + media: + type: string + description: URL of the media content. + required: + - mediatype + - media + options: + type: object + properties: + delay: + type: integer + description: Delay time before sending the message. + presence: + type: string + enum: ['composing', 'recording', 'paused'] + description: Indicates the sender's action/status. + parameters: + - name: instanceName + in: path + required: true + schema: + type: string + description: The name of the instance to which the media message should be sent. + example: 'evolution' + responses: + '200': + description: Successful response + content: + application/json: {} + /message/sendMediaFile/{instanceName}: + post: + tags: + - Send Message Controller + summary: Send a media file (image, video, document, audio) directly to a specified instance. + requestBody: + required: true + content: + multipart/form-data: + schema: + type: object + properties: + number: + type: string + description: The recipient's phone number. + example: '1234567890' + caption: + type: string + description: Caption to accompany the media (optional). + attachment: + type: string + format: binary + description: The media file to be sent. + mediatype: + type: string + enum: ['image', 'document', 'video', 'audio'] + description: Type of the media content. + presence: + type: string + enum: ['composing', 'recording', 'paused'] + description: Indicates the sender's action/status (optional). + delay: + type: integer + description: Delay time before sending the message (optional). + required: + - number + - attachment + - mediatype + parameters: + - name: instanceName + in: path + required: true + schema: + type: string + description: The name of the instance to which the media file should be sent. + example: 'evolution' + responses: + '200': + description: Successful response + content: + application/json: {} + /message/sendLocation/{instanceName}: + post: + tags: + - Send Message Controller + summary: Send a location to a specified instance. + description: This endpoint allows users to share a location message. + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + number: + type: string + description: The recipient's phone number. + example: '1234567890' + locationMessage: + type: object + properties: + name: + type: string + description: Name or title of the location. + address: + type: string + description: Detailed address of the location. + latitude: + type: number + description: Latitude of the location. + format: float + longitude: + type: number + description: Longitude of the location. + format: float + options: + type: object + properties: + delay: + type: integer + description: Delay time before sending the message. + presence: + type: string + enum: ['composing', 'recording', 'paused'] + description: Indicates the sender's action/status. + required: + - number + - locationMessage.latitude + - locationMessage.longitude + parameters: + - name: instanceName + in: path + required: true + schema: + type: string + description: The name of the instance to which the location should be sent. + example: 'evolution' + responses: + '200': + description: Successful response + content: + application/json: {} + /message/sendContact/{instanceName}: + post: + tags: + - Send Message Controller + summary: Send contact details to a specified instance. + description: This endpoint allows users to share one or multiple contact details. + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + number: + type: string + description: The recipient's phone number. + example: '1234567890' + contactMessage: + type: array + items: + type: object + properties: + fullName: + type: string + description: Full name of the contact. + wuid: + type: string + description: Unique identifier for the contact. + phoneNumber: + type: string + description: Phone number of the contact. + required: + - fullName + - wuid + - phoneNumber + options: + type: object + properties: + delay: + type: integer + description: Delay time before sending the contact. + presence: + type: string + enum: ['composing', 'recording', 'paused'] + description: Indicates the sender's action/status. + required: + - number + parameters: + - name: instanceName + in: path + required: true + schema: + type: string + description: The name of the instance to which the contacts should be sent. + example: 'evolution' + responses: + '200': + description: Successful response + content: + application/json: {} + /message/sendReaction/{instanceName}: + post: + tags: + - Send Message Controller + summary: Send a reaction to a specified instance. + description: This endpoint allows users to send a reaction to a message. + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + reactionMessage: + type: object + properties: + key: + type: object + properties: + remoteJid: + type: string + description: The ID of the recipient of the original message. + fromMe: + type: boolean + description: Indicates if the reaction was sent from the user. + id: + type: string + description: The ID of the original message. + reaction: + type: string + maxLength: 1 + description: Reaction character (e.g., emoji). + required: + - key.remoteJid + - key.fromMe + - key.id + - reaction + parameters: + - name: instanceName + in: path + required: true + schema: + type: string + description: The name of the instance to which the reaction should be sent. + example: 'evolution' + responses: + '200': + description: Successful response + content: + application/json: {} + /message/sendWhatsAppAudio/{instanceName}: + post: + tags: + - Send Message Controller + summary: Send an audio message via WhatsApp to a specified instance. + description: This endpoint allows users to share an audio message. + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + number: + type: string + description: The recipient's phone number. + example: '1234567890' + audioMessage: + type: object + properties: + audio: + type: string + description: URL of the audio file to be sent. + required: + - audio + options: + type: object + properties: + delay: + type: integer + description: Delay time before sending the audio message. + required: + - number + - audioMessage.audio + parameters: + - name: instanceName + in: path + required: true + schema: + type: string + description: The name of the instance to which the audio should be sent. + example: 'evolution' + responses: + '200': + description: Successful response + content: + application/json: {} + /message/sendWhatsAppAudioFile/{instanceName}: + post: + tags: + - Send Message Controller + summary: Upload and send a WhatsApp audio file to a specified instance. + description: This endpoint allows users to upload and send an audio file via WhatsApp. + requestBody: + required: true + content: + multipart/form-data: + schema: + type: object + properties: + number: + type: string + description: The recipient's phone number. + example: '1234567890' + attachment: + type: string + description: Audio file to be sent. + format: binary + delay: + type: integer + description: Delay time before sending the audio message. + example: 5 + required: + - number + - attachment + parameters: + - name: instanceName + in: path + required: true + schema: + type: string + description: The name of the instance to which the reaction should be sent. + example: 'evolution' + responses: + '200': + description: Successful response + content: + application/json: {} + + /chat/whatsappNumbers/{instanceName}: + post: + tags: + - Chat Controller + summary: Provide a list of WhatsApp numbers associated with a given instance. + description: This endpoint returns information on the WhatsApp numbers associated with the specified instance. + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + numbers: + type: array + items: + type: string + description: WhatsApp phone number. + example: + - '1234567890' + required: + - numbers + parameters: + - name: instanceName + in: path + required: true + schema: + type: string + description: The name of the instance to which the reaction should be sent. + example: 'evolution' + responses: + '200': + description: Successful response + content: + application/json: {} + /chat/markMessageAsRead/{instanceName}: + put: + tags: + - Chat Controller + summary: Mark specific messages as read for a given instance. + description: This endpoint allows users to mark messages as read for a particular instance. + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + readMessages: + type: array + items: + type: object + properties: + remoteJid: + type: string + description: ID of the recipient of the message. + fromMe: + type: boolean + description: Indicates if the message was sent from the user. + id: + type: string + description: Unique ID of the message. + required: + - remoteJid + - fromMe + - id + required: + - readMessages + parameters: + - name: instanceName + in: path + required: true + schema: + type: string + description: The name of the instance to which the reaction should be sent. + example: 'evolution' + responses: + '200': + description: Successful response + content: + application/json: {} + /chat/archiveChat/{instanceName}: + put: + tags: + - Chat Controller + summary: Archive specific chats for a given instance. + description: This endpoint allows users to archive specific chats based on the last message. + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + lastMessage: + type: object + properties: + key: + type: object + properties: + remoteJid: + type: string + description: ID of the recipient of the last message. + fromMe: + type: boolean + description: Indicates if the last message was sent from the user. + id: + type: string + description: Unique ID of the last message. + required: + - remoteJid + - fromMe + - id + archive: + type: boolean + description: Indicates whether to archive the chat. + example: true + required: + - lastMessage + - archive + parameters: + - name: instanceName + in: path + required: true + schema: + type: string + description: The name of the instance to which the reaction should be sent. + example: 'evolution' + responses: + '200': + description: Successful response + content: + application/json: {} + /chat/deleteMessageForEveryone/{instanceName}: + delete: + tags: + - Chat Controller + summary: Delete a message for everyone in a given instance. + description: This endpoint allows users to delete a message for everyone in the chat. + parameters: + - name: instanceName + in: path + required: true + schema: + type: string + description: The name of the instance to which the reaction should be sent. + example: 'evolution' + responses: + '200': + description: Successful response + content: + application/json: {} + /chat/fetchProfilePictureUrl/{instanceName}: + post: + tags: + - Chat Controller + summary: Retrieve the profile picture URL of a specific number. + description: This endpoint fetches the profile picture URL associated with the given phone number for the specified instance. + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + number: + type: string + description: WhatsApp phone number whose profile picture URL needs to be fetched. + required: + - number + parameters: + - name: instanceName + in: path + required: true + schema: + type: string + description: The name of the instance to which the reaction should be sent. + example: 'evolution' + responses: + '200': + description: Successful response + content: + application/json: {} + /chat/findContacts/{instanceName}: + post: + tags: + - Chat Controller + summary: Retrieve contact details using an ID. + description: This endpoint retrieves contact details associated with the given ID for the specified instance. + requestBody: + content: + application/json: + schema: + type: object + properties: + where: + type: object + properties: + id: + type: string + description: Unique ID of the contact to be fetched. + required: + - id + parameters: + - name: instanceName + in: path + required: true + schema: + type: string + description: The name of the instance to which the reaction should be sent. + example: 'evolution' + responses: + '200': + description: Successful response + content: + application/json: {} + /chat/getBase64FromMediaMessage/{instanceName}: + post: + tags: + - Chat Controller + summary: Convert media message content to Base64. + description: This endpoint retrieves the Base64 representation of the content of a media message for the specified instance. + requestBody: + content: + application/json: + schema: + type: object + properties: + key: + type: object + properties: + id: + type: string + description: Unique ID of the media message to be converted. + required: + - id + parameters: + - name: instanceName + in: path + required: true + schema: + type: string + description: The name of the instance to which the reaction should be sent. + example: 'evolution' + responses: + '200': + description: Successful response + content: + application/json: {} + /chat/findMessages/{instanceName}: + post: + tags: + - Chat Controller + summary: Search for messages based on specific criteria. + description: This endpoint retrieves messages that match the provided criteria for the specified instance. + requestBody: + content: + application/json: + schema: + type: object + properties: + where: + type: object + properties: + key: + type: object + properties: + remoteJid: + type: string + description: ID of the recipient of the message. + fromMe: + type: boolean + description: Indicates if the message was sent from the user. + id: + type: string + description: Unique ID of the message. + required: + - remoteJid + - fromMe + - id + message: + type: object + required: + - key + limit: + type: integer + description: Maximum number of messages to retrieve. + parameters: + - name: instanceName + in: path + required: true + schema: + type: string + description: The name of the instance to which the reaction should be sent. + example: 'evolution' + responses: + '200': + description: Successful response + content: + application/json: {} + /chat/findStatusMessage/{instanceName}: + post: + tags: + - Chat Controller + summary: Search for status messages using an ID. + description: This endpoint retrieves status messages associated with the given ID for the specified instance. + requestBody: + content: + application/json: + schema: + type: object + properties: + where: + type: object + properties: + id: + type: string + description: Unique ID of the status message to be fetched. + required: + - id + parameters: + - name: instanceName + in: path + required: true + schema: + type: string + description: The name of the instance to which the reaction should be sent. + example: 'evolution' + responses: + '200': + description: Successful response + content: + application/json: {} + /chat/findChats/{instanceName}: + get: + tags: + - Chat Controller + summary: List all chats associated with a specific instance. + description: This endpoint retrieves a list of all chats associated with the specified instance. + parameters: + - name: instanceName + in: path + required: true + schema: + type: string + description: The name of the instance to which the reaction should be sent. + example: 'evolution' + responses: + '200': + description: Successful response + content: + application/json: {} + + /group/create/{instanceName}: + post: + tags: + - Group Controller + summary: Create a new WhatsApp group. + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + subject: + type: string + description: '- required - The name of the group.' + description: + type: string + description: '- optional - A brief description or summary of the group.' + participants: + type: array + items: + type: string + description: '- required - List of participant phone numbers.' + parameters: + - name: instanceName + in: path + schema: + type: string + required: true + description: '- required' + example: 'evolution' + responses: + '200': + description: Successful response + content: + application/json: {} + /group/updateGroupPicture/{instanceName}: + put: + tags: + - Group Controller + summary: Update the group's display picture. + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + image: + type: string + description: '- required - URL of the new group picture.' + parameters: + - name: groupJid + in: query + schema: + type: string + description: '- required - The unique identifier of the group.' + example: '120363046555718472@g.us' + - name: instanceName + in: path + schema: + type: string + required: true + description: '- required' + example: 'evolution' + responses: + '200': + description: Successful response + content: + application/json: {} + /group/findGroupInfos/{instanceName}: + get: + tags: + - Group Controller + summary: Retrieve details about a specific group. + parameters: + - name: groupJid + in: query + schema: + type: string + description: '- required - The unique identifier of the group.' + example: '120363046555718472@g.us' + - name: instanceName + in: path + schema: + type: string + required: true + description: '- required' + example: 'evolution' + responses: + '200': + description: Successful response + content: + application/json: {} + /group/participants/{instanceName}: + get: + tags: + - Group Controller + summary: Retrieve a list of participants in a specific group. + parameters: + - name: groupJid + in: query + schema: + type: string + description: '- required - The unique identifier of the group.' + example: '120363046555718472@g.us' + - name: instanceName + in: path + schema: + type: string + required: true + description: '- required' + example: 'evolution' + responses: + '200': + description: Successful response + content: + application/json: {} + /group/inviteCode/{instanceName}: + get: + tags: + - Group Controller + summary: Retrieve the group's invite link. + parameters: + - name: groupJid + in: query + schema: + type: string + description: '- required - The unique identifier of the group.' + example: '120363046555718472@g.us' + - name: instanceName + in: path + schema: + type: string + required: true + description: '- required' + example: 'evolution' + responses: + '200': + description: Successful response + content: + application/json: {} + /group/revokeInviteCode/{instanceName}: + put: + tags: + - Group Controller + summary: Invalidate the existing group invite link. + requestBody: + content: {} + parameters: + - name: groupJid + in: query + schema: + type: string + description: '- required - The unique identifier of the group.' + example: '120363046555718472@g.us' + - name: instanceName + in: path + schema: + type: string + required: true + description: '- required' + example: 'evolution' + responses: + '200': + description: Successful response + content: + application/json: {} + /group/updateParticipant/{instanceName}: + put: + tags: + - Group Controller + summary: Update the status or role of a participant in the group. + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + action: + type: string + enum: ['add', 'remove', 'promote', 'demote'] + description: '- required - The action to be taken on the participant.' + participants: + type: array + items: + type: string + description: '- required - List of participant phone numbers to be updated.' + parameters: + - name: instanceName + in: path + schema: + type: string + required: true + description: '- required' + example: 'evolution' + responses: + '200': + description: Successful response + content: + application/json: {} + /group/leaveGroup/{instanceName}: + delete: + tags: + - Group Controller + summary: Exit from the specified WhatsApp group. + parameters: + - name: instanceName + in: path + schema: + type: string + required: true + description: '- required' + example: 'evolution' + responses: + '200': + description: Successful response + content: + application/json: {} + + /instance/refreshToken/: + put: + tags: + - JWT + summary: Refresh an expired JWT token. + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + oldToken: + type: string + description: '- required - The expired JWT token.' + responses: + '200': + description: Successful response + content: + application/json: {} + + /webhook/set/{instanceName}: + post: + tags: + - Webhook + summary: Set up or modify the webhook for an instance. + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + enabled: + type: boolean + description: 'Indicates whether the webhook is active.' + url: + type: string + format: uri + description: 'The endpoint URL where the webhook data will be sent.' + parameters: + - name: instanceName + in: path + schema: + type: string + required: true + description: '- required' + example: 'evolution' + responses: + '200': + description: Successful response + content: + application/json: {} + /webhook/find/{instanceName}: + get: + tags: + - Webhook + summary: Retrieve the webhook settings for a specific instance. + parameters: + - name: instanceName + in: path + schema: + type: string + required: true + description: '- required' + example: 'evolution' + responses: + '200': + description: Successful response + content: + application/json: {} \ No newline at end of file diff --git a/src/main.ts b/src/main.ts index e239f83a..3dcd0f2d 100644 --- a/src/main.ts +++ b/src/main.ts @@ -10,6 +10,7 @@ import { Auth, configService, Cors, HttpServer, Rabbitmq, Webhook } from './conf import { onUnexpectedError } from './config/error.config'; import { Logger } from './config/logger.config'; import { ROOT_DIR } from './config/path.config'; +import { swaggerRouter } from './docs/swagger.conf'; import { initAMQP } from './libs/amqp.server'; import { initIO } from './libs/socket.server'; import { ServerUP } from './utils/server-up'; @@ -51,6 +52,7 @@ function bootstrap() { app.use('/store', express.static(join(ROOT_DIR, 'store'))); app.use('/', router); + app.use(swaggerRouter); app.use( (err: Error, req: Request, res: Response, next: NextFunction) => { diff --git a/src/whatsapp/routers/index.router.ts b/src/whatsapp/routers/index.router.ts index f67c936a..e35d21e4 100644 --- a/src/whatsapp/routers/index.router.ts +++ b/src/whatsapp/routers/index.router.ts @@ -40,6 +40,7 @@ router status: HttpStatus.OK, message: 'Welcome to the Evolution API, it is working!', version: packageJson.version, + documentation: `${req.protocol}://${req.get('host')}/docs`, }); }) .use('/instance', new InstanceRouter(configService, ...guards).router)