# Conector FoxPro 1.1.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. - Tablas que el origen escribe todo el día: no se recopian más de una vez cada `limits.minReloadSeconds` (60 por defecto). - 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: usa el Node instalado en el servidor (Exilaser tiene Node 24); si no hay, copiar `node.exe` portable (Node 20+ x64) a `C:\api_project\foxpro\node\node.exe`. 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 " 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 (19 pruebas). - `npm run token`: genera token + hash.