# Internet Banking - Aplicación Web Segura Aplicación web de Internet Banking construida con **Next.js 14 (App Router)**, **TypeScript**, **TailwindCSS + daisyUI**, y **Zustand** para gestión de estado. El backend está desarrollado en **Java 25 Spring Boot** y protegido por **Kong Gateway**. ## 🚀 Características - ✅ **Autenticación segura** con tokens JWT en cookies HTTP-only - ✅ **Server Components** de Next.js para máximo rendimiento - ✅ **Middleware de autenticación** server-side - ✅ **Sistema de logs** centralizado (escribe en archivo .txt) - ✅ **Encriptación Kong** para datos sensibles - ✅ **UI moderna** con TailwindCSS y daisyUI - ✅ **TypeScript** para type-safety completo - ✅ **Zustand** para estado cliente (no Redux) - ✅ **Sin useEffect/useContext** innecesarios (server-first) # Internet Banking (Next.js) This repository contains a Next.js application scaffolded with `create-next-app`. ## Getting started 1. Install dependencies: ```bash npm install ``` 2. Run the development server: ```bash npm run dev # then open http://localhost:3000 ``` ## Requisitos - Node.js 18 LTS o superior ## Instalación y ejecución 1. Instala las dependencias: ```bash npm install ``` 2. Ejecuta el servidor de desarrollo: ```bash npm run dev # luego abre http://localhost:3000 ``` ## Dependencias Las dependencias actuales (según `package.json`): ### Runtime - `next` 15.5.6 - `react` 19.1.0 - `react-dom` 19.1.0 - `daisyui` 5.4.5 - `react-icons` 5.5.0 - `zustand` 5.0.8 ### Desarrollo - `typescript` 5 - `@types/node` 20 - `@types/react` 19 - `@types/react-dom` 19 - `eslint` 9 - `@eslint/eslintrc` 3 - `eslint-config-next` 15.5.6 - `tailwindcss` 4.1.17 - `@tailwindcss/postcss` 4.1.17 ## Notas - Para ejecutar el linter localmente: ```bash npm run lint ``` ## 🤖 Infraestructura de Ingeniería AI-Native (Agentes y Esquema MCP) Esta aplicación está diseñada desde sus cimientos para el desarrollo asistido por **Agentes de Inteligencia Artificial Autónomos** mediante el protocolo **MCP (Model Context Protocol)**, asegurando consistencia arquitectónica, memoria persistente entre sesiones y navegación contextual ultra-rápida. ### 1. El Esquema de Servidores MCP (mcp_config.json) Para iniciar el entorno de desarrollo con soporte de IA y permitir que los agentes se auto-direccionen, debes registrar los siguientes servidores en el archivo de configuración global de tu entorno de ejecución (ej. `~/.gemini/antigravity/mcp_config.json`): ```json { "mcpServers": { "engram": { "command": "engram", "args": [ "mcp", "--tools=agent" ] }, "graphify": { "command": "d:\\Jess\\agent\\graphify\\.venv\\Scripts\\python.exe", "args": [ "-m", "graphify.serve", "d:/Jess/agent/frontend-ai/graphify-out/graph.json" ] } } } ``` * **Engram (Memoria Persistente)**: Servidor escrito en Go que expone herramientas para almacenar decisiones, resúmenes de sesión (`mem_save`) y recuperar contexto de sesiones previas (`mem_search`, `mem_context`), evitando la pérdida de contexto sobre las reglas de negocio críticas o decisiones pasadas. * **Graphify (Grafo del Repositorio)**: Servidor que mapea todo el código, layouts de Next.js, API routes y documentación en un grafo semántico. Permite al agente responder preguntas de arquitectura mediante consultas directas en lugar de hacer lecturas completas de archivos, optimizando drásticamente la ventana de contexto. --- ### 2. Reglas de Comportamiento para Agentes de IA (AGENTS.md / CLAUDE.md) Cualquier agente que trabaje en esta base de código está **estrictamente obligado** a seguir las siguientes directrices y reglas operativas integradas en el proyecto: #### 🔐 Seguridad y Autenticación Primero 1. **Nunca escribirás claves o credenciales en texto plano**: El agente tiene estrictamente prohibido commitear archivos `.env` o variables con valores reales. Siempre utilizará variables de entorno. 2. **Respeto absoluto por el Middleware Server-Side**: Para proteger cualquier ruta o recurso, el agente DEBE usar el middleware centralizado `serverRequireAuth` desde `lib/auth/middleware.ts` en los Server Components. Bajo ninguna circunstancia omitirá este paso o creará validaciones ad-hoc. 3. **Cookies HTTP-Only y Secure**: Los tokens JWT nunca deben tocar el `localStorage` o `sessionStorage` del cliente. Si el agente diseña flujos de autenticación en el cliente, debe delegar el almacenamiento y la gestión de la cookie al navegador y al backend. 4. **Encriptación de Datos Sensibles**: Cualquier dato altamente confidencial (ej. números de cuenta, saldos, datos personales) que viaje por el cliente debe encriptarse usando el módulo placeholder de Kong Gateway (`lib/cypher/encrypt.ts`). #### 📝 Sistema de Logs Centralizado * El agente **debe loguear activamente** todas las acciones críticas (inicios de sesión, accesos denegados, errores de comunicación con el backend, llamadas a la API) usando los módulos `server-logger` y `client-logger`. * Todos los logs generados en componentes del cliente **deben enrutarse** hacia la API local `POST /api/logs` para asegurar que queden guardados en el archivo centralizado `logs/app.log`. #### 🏗️ Desarrollo Incremental y Verificabilidad * El agente debe mantener el archivo `STATE.md` y `ENGRAM.md` actualizados en cada punto de control (Checkpoint) para evitar la degradación de la memoria y la ventana de contexto del modelo. * Después de realizar cualquier cambio estructural en el código, el agente ejecutará localmente `graphify update .` para asegurar que el grafo de conocimiento del proyecto refleje los nuevos módulos inmediatamente. ## 🏗️ Estructura del Proyecto ``` internet-banking/ ├── app/ # Next.js App Router │ ├── page.tsx # Página principal │ ├── layout.tsx # Layout principal │ ├── ClientAuthProvider.tsx # Provider para hidratación de auth │ ├── globals.css # Estilos globales │ ├── about/ # Sección "Acerca de" │ │ ├── page.tsx │ │ ├── layout.tsx │ │ ├── components/ │ │ │ ├── aboutHeader.tsx │ │ │ └── aboutContent.tsx │ │ ├── service/ │ │ │ └── fetchAbout.ts │ │ └── hooks/ │ │ └── useAboutData.ts │ ├── login/ # Página de login │ │ ├── page.tsx │ │ └── LoginForm.tsx │ ├── dashboard/ # Dashboard protegido │ │ └── page.tsx │ ├── model/ # Modelos TypeScript │ │ └── cuenta.ts │ └── api/ # API Routes │ ├── logs/ │ │ └── route.ts # POST /api/logs │ └── auth/ │ ├── me/ │ │ └── route.ts # GET /api/auth/me │ └── logout/ │ └── route.ts # POST /api/auth/logout ├── components/ │ └── ui/ # Componentes UI reutilizables │ ├── button.tsx │ ├── input.tsx │ ├── header.tsx │ └── table.tsx ├── lib/ │ ├── auth/ # Autenticación │ │ ├── middleware.ts # Middleware server-side │ │ └── client/ │ │ └── useAuthStore.ts # Zustand store │ ├── logger/ # Sistema de logs │ │ ├── server-logger.ts # Logger server-side │ │ └── client-logger.ts # Logger client-side │ └── cypher/ # Encriptación Kong │ ├── encrypt.ts │ └── decrypt.ts ├── logs/ │ └── app.log # Archivo de logs (no en git) ├── middleware.ts # Next.js Edge Middleware ├── package.json ├── tsconfig.json ├── tailwind.config.ts ├── next.config.js └── README.md ``` ## 🔐 Autenticación ### Flujo de Autenticación 1. **Login**: Usuario envía credenciales a `POST /api/auth/login` 2. **Backend**: Spring Boot valida y devuelve tokens en cookies HTTP-only: - `access_token`: Token de acceso (corta duración) - `refresh_token`: Token de refresco (larga duración) 3. **Frontend**: Cookies se establecen automáticamente (HTTP-only, Secure, SameSite=strict) 4. **Validación**: Cada petición a rutas protegidas valida el token server-side 5. **Logout**: `POST /api/auth/logout` limpia cookies ### Middleware de Autenticación #### Server-Side (lib/auth/middleware.ts) ```typescript // Proteger una página (Server Component) import { serverRequireAuth } from '@/lib/auth/middleware'; export default async function ProtectedPage() { const user = await serverRequireAuth(); // Redirige si no autenticado return
Hola {user?.name}
}