Skip to content

Commit c90d5c8

Browse files
committed
Merge: sync local with remote, keeping local changes
2 parents 214e0b1 + 2c296d0 commit c90d5c8

197 files changed

Lines changed: 27528 additions & 0 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.claude/settings.local.json

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
{
2+
"permissions": {
3+
"allow": [
4+
"Bash(pnpm install)",
5+
"Bash(npm install:*)",
6+
"Bash(git add:*)",
7+
"Bash(git commit:*)",
8+
"Bash(pnpm run build:*)",
9+
"Bash(npm run build:*)",
10+
"Bash(export PATH=\"$HOME/.local/share/pnpm:$PATH\")",
11+
"Bash(npm run db:generate:*)",
12+
"Bash(npx tsc:*)",
13+
"Bash(ls:*)",
14+
"Bash(bun add:*)",
15+
"Bash(npm cache clean:*)",
16+
"Bash(grep:*)",
17+
"Bash(bun run build:*)",
18+
"Bash(xargs cat:*)",
19+
"Bash(find:*)",
20+
"Bash(corepack enable:*)",
21+
"Bash(npx pnpm install)",
22+
"Bash(psql:*)",
23+
"Bash(lsof:*)",
24+
"Bash(ss:*)",
25+
"Bash(curl:*)",
26+
"Bash(pgrep:*)",
27+
"Bash(npx tsx:*)"
28+
]
29+
}
30+
}

.dockerignore

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
# Dependencies
2+
node_modules
3+
npm-debug.log
4+
yarn-error.log
5+
pnpm-debug.log
6+
7+
# Testing
8+
coverage
9+
.nyc_output
10+
11+
# Next.js
12+
.next
13+
out
14+
15+
# Production
16+
dist
17+
build
18+
19+
# Misc
20+
.DS_Store
21+
*.pem
22+
23+
# Debug
24+
lerna-debug.log*
25+
.pnpm-debug.log*
26+
27+
# Local env files
28+
.env
29+
.env*.local
30+
.env.local
31+
.env.development.local
32+
.env.test.local
33+
.env.production.local
34+
35+
# IDEs
36+
.vscode
37+
.idea
38+
*.swp
39+
*.swo
40+
*~
41+
42+
# Git
43+
.git
44+
.gitignore
45+
.gitattributes
46+
47+
# CI/CD
48+
.github
49+
.gitlab-ci.yml
50+
51+
# Documentation
52+
*.md
53+
!README.md
54+
55+
# Kubernetes
56+
kubernetes
57+
58+
# Docker
59+
Dockerfile
60+
.dockerignore
61+
docker-compose*.yml
62+
63+
# Drizzle
64+
drizzle
65+
66+
# WhatsApp sessions (will be mounted as volume)
67+
whatsapp_sessions
68+
69+
# Media files (will be mounted as volume)
70+
public/media
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
name: Build and Publish Docker Image
2+
3+
on:
4+
push:
5+
branches:
6+
- master
7+
8+
env:
9+
REGISTRY: ghcr.io
10+
IMAGE_NAME: darwinva97/wapi
11+
12+
jobs:
13+
build-and-push:
14+
runs-on: ubuntu-latest
15+
permissions:
16+
contents: read
17+
packages: write
18+
19+
steps:
20+
- name: Checkout repository
21+
uses: actions/checkout@v4
22+
23+
- name: Log in to Container Registry
24+
uses: docker/login-action@v3
25+
with:
26+
registry: ${{ env.REGISTRY }}
27+
username: ${{ github.actor }}
28+
password: ${{ secrets.GITHUB_TOKEN }}
29+
30+
- name: Extract metadata for Docker
31+
id: meta
32+
uses: docker/metadata-action@v5
33+
with:
34+
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
35+
tags: |
36+
type=raw,value=latest
37+
type=sha,prefix=
38+
39+
- name: Build and push Docker image
40+
uses: docker/build-push-action@v5
41+
with:
42+
context: .
43+
push: true
44+
tags: ${{ steps.meta.outputs.tags }}
45+
labels: ${{ steps.meta.outputs.labels }}

.npmrc

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
# pnpm configuration
2+
shamefully-hoist=true
3+
strict-peer-dependencies=false

.vscode/settings.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
{
2+
"editor.tabSize": 2
3+
}

CHANGELOG.md

Lines changed: 175 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,175 @@
1+
# Changelog
2+
3+
Todos los cambios notables de este proyecto serán documentados en este archivo.
4+
5+
El formato está basado en [Keep a Changelog](https://keepachangelog.com/es-ES/1.0.0/).
6+
7+
---
8+
9+
## [Unreleased] - Próximas Características
10+
11+
### 🎯 Planeado
12+
13+
#### Receiver Filter Avanzado
14+
Actualmente el `receiverFilter` solo soporta filtros JSON estáticos. Se planea extender esta funcionalidad:
15+
16+
- **Evaluación de JavaScript**: Permitir escribir código JavaScript que evalúe el mensaje entrante y retorne `true`/`false` para decidir si el webhook se dispara.
17+
```javascript
18+
// Ejemplo: solo mensajes que contengan "pedido" y no sean míos
19+
(msg) => !msg.key.fromMe && msg.message?.conversation?.includes("pedido")
20+
```
21+
22+
- **Plantillas de Petición HTTP**: Configurar una petición HTTP que se evalúe antes de enviar el webhook. Si la respuesta es truthy (status 2xx, body "true", etc.), el mensaje pasa.
23+
```json
24+
{
25+
"type": "http",
26+
"url": "https://mi-api.com/should-forward",
27+
"method": "POST",
28+
"body": "{{message}}",
29+
"expectStatus": 200
30+
}
31+
```
32+
33+
#### Más Ideas para el Roadmap
34+
35+
- **🖼️ Visualización de Media en Chats**
36+
- Ver imágenes, videos y stickers directamente en el chat del dashboard
37+
- Previews de documentos y audios
38+
- Galería de media por conversación
39+
- Descarga de archivos multimedia
40+
41+
- **📖 Documentación del Software**
42+
- Documentación técnica de la arquitectura
43+
- Guías de uso para usuarios finales
44+
- API Reference con OpenAPI/Swagger
45+
- Ejemplos de integración (n8n, Make, código)
46+
- Documentación inline con JSDoc/TSDoc
47+
48+
- **🔐 Sistema de Roles y Permisos (RBAC+)**
49+
50+
Sistema de control de acceso basado en roles con permisos granulares. Los roles funcionan como **plantillas de permisos mínimos** que pueden extenderse con permisos adicionales por usuario.
51+
52+
**Contextos de Permisos:**
53+
54+
| Contexto | Descripción | Ejemplo |
55+
|----------|-------------|---------|
56+
| `system` | Permisos globales del sistema | Crear usuarios, ver métricas globales |
57+
| `whatsapp:{id}` | Permisos sobre un WhatsApp específico | Gestionar conexiones, ver chats |
58+
59+
**Roles Predefinidos:**
60+
61+
| Rol | Scope | Descripción |
62+
|-----|-------|-------------|
63+
| `owner` | Sistema | Control total. Puede todo. |
64+
| `admin` | Sistema | Puede crear/gestionar WhatsApps y usuarios |
65+
| `manager` | WhatsApp | Gestiona conexiones de un WhatsApp asignado |
66+
| `user` | WhatsApp | Acceso de solo lectura a chats asignados |
67+
68+
**Permisos Granulares (Resources + Actions):**
69+
70+
```
71+
# Formato: resource:action
72+
73+
# Sistema
74+
system:users:create
75+
system:users:read
76+
system:users:update
77+
system:users:delete
78+
system:whatsapps:create
79+
system:metrics:read
80+
81+
# WhatsApp específico
82+
whatsapp:read
83+
whatsapp:update
84+
whatsapp:delete
85+
whatsapp:connections:create
86+
whatsapp:connections:read
87+
whatsapp:connections:update
88+
whatsapp:connections:delete
89+
whatsapp:chats:read
90+
whatsapp:chats:send
91+
whatsapp:contacts:read
92+
whatsapp:groups:read
93+
```
94+
95+
**Permisos de Recursos Específicos:**
96+
97+
Además de los permisos por tipo, se pueden asignar permisos a recursos específicos:
98+
```
99+
whatsapp:chats:read:* # Todos los chats
100+
whatsapp:chats:read:group:123456@g.us # Solo este grupo
101+
whatsapp:chats:read:contact:519999@s.whatsapp.net # Solo este contacto
102+
```
103+
104+
**Herencia de Roles:**
105+
```
106+
owner → admin + system:*
107+
admin → manager + system:users:* + system:whatsapps:create
108+
manager → user + whatsapp:connections:* + whatsapp:chats:send
109+
user → whatsapp:chats:read + whatsapp:contacts:read
110+
```
111+
112+
**Asignación de Permisos:**
113+
- Rol base (plantilla mínima)
114+
- Permisos adicionales por usuario
115+
- Permisos por contexto (sistema o WhatsApp específico)
116+
- Restricciones a recursos específicos (chats, grupos, contactos)
117+
118+
- **📊 Métricas y Estadísticas**
119+
- Logs de webhooks (exitosos/fallidos)
120+
- Tiempo de respuesta de webhooks
121+
122+
- **🔗 Transformadores de Payload**
123+
- Transformar el payload del webhook antes de enviarlo
124+
- Mapear campos a formato personalizado
125+
- Filtrar campos sensibles
126+
127+
- **⏰ Programación de Mensajes**
128+
- Enviar mensajes programados
129+
- Campañas de mensajes masivos
130+
- Rate limiting inteligente
131+
132+
- **🏷️ Etiquetas y Categorías**
133+
- Etiquetar conversaciones
134+
- Filtrar mensajes por etiquetas
135+
- Asignar conversaciones a usuarios
136+
137+
- **🔐 Seguridad Avanzada**
138+
- IP whitelist para webhooks
139+
- Rate limiting por conexión/token
140+
141+
- **📱 Multi-dispositivo**
142+
- Sincronización entre múltiples instancias
143+
- Failover automático
144+
145+
- **🤖 Integraciones**
146+
- Integración nativa con n8n
147+
- Integración con Zapier
148+
- SDK para Node.js/Python
149+
150+
- **💬 Respuestas Automáticas**
151+
- Autoresponder configurable
152+
- Horarios de atención
153+
- Mensajes de ausencia
154+
155+
---
156+
157+
## [0.1.0] - 2026-01-05
158+
159+
### Añadido
160+
- 📱 Gestión de múltiples cuentas WhatsApp via QR
161+
- 🔗 Sistema de conexiones (integraciones) bidireccionales
162+
- 📤 Sender API para envío de mensajes
163+
- 📥 Receiver webhooks para mensajes entrantes
164+
- 👥 Gestión de contactos y grupos
165+
- 💬 Chat en tiempo real con SSE
166+
- 🔐 Autenticación con Better Auth
167+
- 👤 Roles de usuario (admin/user)
168+
- 📊 Dashboard de administración
169+
170+
### Stack
171+
- Next.js 16 (App Router)
172+
- SQLite/Turso con Drizzle ORM
173+
- Baileys para WhatsApp
174+
- Better Auth
175+
- Tailwind CSS + shadcn/ui

0 commit comments

Comments
 (0)