-
Notifications
You must be signed in to change notification settings - Fork 275
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
7 changed files
with
720 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
/node_modules | ||
/instances/* | ||
!/instances/.gitkeep |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
FROM node:20-bullseye-slim | ||
|
||
WORKDIR /worker | ||
|
||
LABEL API_VERSION="0.0.1" | ||
LABEL MANTAINER="https://github.com/code-chat-br" | ||
LABEL REPOSITORY="https://github.com/code-chat-br/whatsapp-api" | ||
|
||
COPY package*.json ./ | ||
|
||
RUN apt-get update && apt-get install -y git && npm install | ||
|
||
COPY ./index.mjs . | ||
|
||
RUN mkdir instances | ||
|
||
ENV DOCKER_ENV=true | ||
|
||
ENTRYPOINT [ "npm", "start" ] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,36 @@ | ||
# Implementação de um Worker HTTP para Gerenciamento de Sessões na API de WhatsApp | ||
|
||
Desenvolvi um protótipo inicial de um worker HTTP para a API de WhatsApp disponível em "https://github.com/code-chat-br/whatsapp-api". Este worker é responsável pelo gerenciamento dos arquivos de conexão das sessões do WhatsApp. Ele escuta as requisições HTTP na porta 5656 e oferece funcionalidades para receber, salvar e recuperar os arquivos de sessão. A seguir, apresento uma descrição mais detalhada do funcionamento e das responsabilidades desse worker: | ||
|
||
1. **Escuta de Requisições HTTP**: | ||
- O worker foi configurado para ouvir requisições HTTP na porta 5656. Qualquer requisição enviada para essa porta será tratada pelo worker. | ||
|
||
2. **Recebimento de Arquivos de Sessão**: | ||
- Quando uma sessão de WhatsApp é iniciada ou atualizada, o worker recebe os arquivos de conexão correspondentes através de requisições HTTP POST. Esses arquivos contêm informações necessárias para manter a conexão ativa e permitir a comunicação contínua com o WhatsApp. | ||
|
||
3. **Armazenamento de Arquivos de Sessão**: | ||
- Após receber os arquivos de sessão, o worker os armazena em um local seguro no servidor. O armazenamento é feito de maneira organizada para garantir que os arquivos possam ser facilmente recuperados e identificados. | ||
|
||
4. **Recuperação de Arquivos de Sessão**: | ||
- O worker também oferece uma funcionalidade de recuperação dos arquivos de sessão. Quando solicitado através de uma requisição HTTP GET, ele localiza e retorna os arquivos de sessão específicos, permitindo que a conexão com o WhatsApp seja restaurada ou mantida. | ||
|
||
5. **Segurança e Confiabilidade**: | ||
- não implementado | ||
|
||
6. **Requisitos de Rede**: | ||
- É fundamental que este worker permaneça na mesma rede que a aplicação principal para assegurar a comunicação eficiente e segura entre os componentes. Se estiver utilizando o Docker Swarm, o worker deve estar na mesma rede do Swarm para garantir o correto funcionamento e a integração dos serviços. | ||
|
||
Como este é um protótipo inicial, é importante destacar que o sistema está sujeito a melhorias e otimizações. A implementação atual serve como base para futuras expansões e refinamentos, garantindo um gerenciamento eficiente e seguro das sessões do WhatsApp, facilitando a integração e o uso contínuo da API de WhatsApp em aplicações que necessitam de comunicação automatizada e confiável. | ||
|
||
--- | ||
|
||
# Discurssões | ||
|
||
As discurções sobre esse worker devem ser realizadas [aqui](https://github.com/code-chat-br/whatsapp-api/discussions/131). | ||
|
||
--- | ||
# Docker | ||
|
||
- [Dockerfile](./Dockerfile) | ||
- [docker-compose](./docker-compose.yaml) | ||
- [codechat/worher:develop](https://hub.docker.com/r/codechat/worker/tags) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
version: '3.8' | ||
|
||
networks: | ||
public-network: | ||
driver: bridge | ||
# external: true | ||
|
||
services: | ||
worker_sessions: | ||
image: codechat/worker:develop | ||
container_name: codechat_worker | ||
restart: unless-stopped | ||
ports: | ||
- 5656:5656 | ||
volumes: | ||
- instances_connecteds:/worker/instances | ||
|
||
volumes: | ||
instances_connecteds: | ||
driver: local |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,126 @@ | ||
/** | ||
* ┌──────────────────────────────────────────────────────────────────────────────┐ | ||
* │ @author jrCleber │ | ||
* │ @filename /workers/session/index.js │ | ||
* │ Developed by: Cleber Wilson │ | ||
* │ Creation date: Mai 28, 2024 │ | ||
* │ Contact: [email protected] │ | ||
* ├──────────────────────────────────────────────────────────────────────────────┤ | ||
* │ @copyright © Cleber Wilson 2022. All rights reserved. │ | ||
* │ Licensed under the Apache License, Version 2.0 │ | ||
* │ │ | ||
* │ @license "https://github.com/code-chat-br/whatsapp-api/blob/main/LICENSE" │ | ||
* │ │ | ||
* │ You may not use this file except in compliance with the License. │ | ||
* │ You may obtain a copy of the License at │ | ||
* │ │ | ||
* │ http://www.apache.org/licenses/LICENSE-2.0 │ | ||
* │ │ | ||
* │ Unless required by applicable law or agreed to in writing, software │ | ||
* │ distributed under the License is distributed on an "AS IS" BASIS, │ | ||
* │ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. │ | ||
* │ │ | ||
* │ See the License for the specific language governing permissions and │ | ||
* │ limitations under the License. │ | ||
* ├──────────────────────────────────────────────────────────────────────────────┤ | ||
* │ @important │ | ||
* │ For any future changes to the code in this file, it is recommended to │ | ||
* │ contain, together with the modification, the information of the developer │ | ||
* │ who changed it and the date of modification. │ | ||
* └──────────────────────────────────────────────────────────────────────────────┘ | ||
*/ | ||
|
||
import { | ||
existsSync, | ||
mkdirSync, | ||
readFileSync, | ||
readdirSync, | ||
rmSync, | ||
writeFileSync, | ||
} from 'fs'; | ||
import { join } from 'path'; | ||
import express, { json, urlencoded } from 'express'; | ||
import { execSync } from 'child_process'; | ||
|
||
const HostPort = process.env.PORT; | ||
|
||
const app = express(); | ||
|
||
const logger = (...value) => | ||
console.log(`Pid: ${process.pid} -`, `Date ${new Date().toISOString()} -`, ...value); | ||
|
||
app.listen(5656, logger(`Server ON: Port - 5656 `)); | ||
app.use(urlencoded({ extended: true }), json()); | ||
|
||
const INSTANCE_PATH = 'instances'; | ||
|
||
if (!existsSync(INSTANCE_PATH)) { | ||
mkdirSync(INSTANCE_PATH, { recursive: true }); | ||
} | ||
|
||
app.options('/session/ping', function (req, res) { | ||
logger('Http - Path: ', req.path); | ||
res.status(200).json({ pong: true }); | ||
}); | ||
|
||
app.post('/session', function (req, res) { | ||
const body = req.body; | ||
|
||
const path = join(INSTANCE_PATH, body.instance); | ||
|
||
if (!existsSync(path)) { | ||
mkdirSync(path, { recursive: true }); | ||
} | ||
|
||
res.status(202).send(); | ||
}); | ||
|
||
app.post(`/session/:instance/:key`, function (req, res) { | ||
const { instance, key } = req.params; | ||
const body = req.body; | ||
|
||
const path = join(INSTANCE_PATH, instance, key + '.json'); | ||
|
||
writeFileSync(path, body.data || {}, { encoding: 'utf8' }); | ||
|
||
res.status(202).send(); | ||
}); | ||
|
||
app.get('/session/:instance/:key', function (req, res) { | ||
const { instance, key } = req.params; | ||
|
||
const path = join(INSTANCE_PATH, instance, key + '.json'); | ||
|
||
if (existsSync(path)) { | ||
const data = readFileSync(path, { encoding: 'utf8' }); | ||
res.status(200).send(data); | ||
} | ||
|
||
res.status(200).send(); | ||
}); | ||
|
||
app.delete('/session/:instance/:key', function (req, res) { | ||
const { instance, key } = req.params; | ||
|
||
const path = join(INSTANCE_PATH, instance, key + '.json'); | ||
|
||
rmSync(path, { recursive: true }); | ||
|
||
res.status(200).send(); | ||
}); | ||
|
||
app.delete(`/session/:instance`, function (req, res) { | ||
const { instance } = req.params; | ||
|
||
const path = join(INSTANCE_PATH, instance); | ||
|
||
execSync(`rm -rf ${path}`); | ||
|
||
res.status(200).send(); | ||
}); | ||
|
||
app.get('/session/list-instances', function (req, res) { | ||
const files = readdirSync(INSTANCE_PATH); | ||
|
||
res.status(200).json(files); | ||
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
{ | ||
"name": "session", | ||
"version": "0.0.1", | ||
"main": "index.js", | ||
"scripts": { | ||
"start": "node index.mjs", | ||
"start:dev": "clear && node index.mjs" | ||
}, | ||
"dependencies": { | ||
"express": "^4.19.2", | ||
"path": "^0.12.7" | ||
}, | ||
"devDependencies": { | ||
"@types/node": "^20.12.13" | ||
} | ||
} |
Oops, something went wrong.