feat: version 4.10.0 -- Conectores de datos externos y conector FoxPro

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Milton Gonzalez
2026-10-29 11:32:08 -05:00
parent 28444b1485
commit d0f90542e9
23 changed files with 945 additions and 9 deletions
+44
View File
@@ -0,0 +1,44 @@
# Conector FoxPro 1.0.0
API de solo lectura para tablas FoxPro/Visual FoxPro (`.dbf` con memo `.fpt`), según el contrato
v1 de [`../README.md`](../README.md). Node.js sin servidor web adicional; única dependencia: `dbffile`.
- No abre los originales para leer registros: copia `DBF`+`FPT` a una carpeta temporal y lee la
copia, así no choca con los bloqueos de SAGA. Si FoxPro tiene la tabla en uso exclusivo → `423`.
- El índice `.cdx` no se usa (se recorre la tabla). Las tablas se guardan en caché y la caché se
renueva sola cuando cambia el archivo.
- Tipos soportados: C, N, F, Y, I, L, D, T, B, M. Otros (V, Q, W…) se omiten.
## Instalación en el Windows (`C:\api_project\foxpro`)
1. Copiar esta carpeta a `C:\api_project\foxpro` **con** `node_modules` (no requiere internet en el
server). Sin `config.json` ni `logs` de otro equipo.
2. Node: copiar `node.exe` portable (Node 20 LTS o superior, Windows x64) a
`C:\api_project\foxpro\node\node.exe`. Así no hay que instalar Node en el servidor.
3. Token: `node\node.exe scripts\generar-token.js`. El **TOKEN** se carga en el sistema; el
**tokenSha256** va en `config.json`.
4. `config.json` (a partir de `config.example.json`):
- `sources`: una entrada por carpeta (`nomina`, `clientes`…). Usar `path` con doble `\\`.
- `tables`: `"*"` (todas) o solo las tablas que se quieren exponer, con `fields` si se quiere
limitar columnas. `denyFields` oculta columnas sensibles (sueldo, claves).
- `encoding`: `cp1252` normalmente; si salen mal las tildes/eñes, probar `cp850`.
- `allowIps`: IP del backend de producción (`192.168.222.3`) y la de desarrollo si aplica.
5. Probar a mano: `node\node.exe src\server.js` y, desde el backend,
`curl -H "Authorization: Bearer <TOKEN>" http://192.168.0.253:8455/v1/health`.
6. Dejarlo como servicio (PowerShell como administrador):
`powershell -ExecutionPolicy Bypass -File .\scripts\instalar-servicio.ps1`
- Crea la tarea `LinkedCorp-Conector-FoxPro` (arranque con Windows, reinicio si cae) y la regla
de firewall del puerto 8455 solo para las IPs permitidas.
- Recomendado: `-Usuario 'DOMINIO\svc_conector' -Clave '...'` con una cuenta que tenga **solo
lectura** sobre las carpetas de datos (por defecto corre como SYSTEM).
7. Desinstalar: `scripts\desinstalar-servicio.ps1`.
TLS opcional: en `config.json` → `tls.pfx` con la ruta del `.pfx` y la clave en la variable de
entorno indicada en `tls.passphraseEnv`. Por la VPN WireGuard el tráfico ya va cifrado.
Logs: `logs\acceso-AAAA-MM-DD.log` (sin tokens ni valores buscados).
## Desarrollo
- `npm test`: crea una tabla DBF temporal, levanta el conector y valida el contrato (16 pruebas).
- `npm run token`: genera token + hash.