gestiona_fierbase
- Ruta de Configuración:
IA_Configuracion/skills/gestiona_fierbase/
Skill: Gestiona Fierbase (gestiona_fierbase)
Este skill interactúa con el microservicio local infra-firebase (corriendo en el puerto 3200 o de manera centralizada a través del API Gateway en http://localhost:3000/api/fb) para configurar credenciales, gestionar la base de datos Firestore, controlar Firebase Auth y desplegar en Firebase Hosting de manera programática a través de una interfaz REST.
Importante: Todas las operaciones de Firebase se deben realizar a través de este microservicio (infra-firebase) en lugar de llamar directamente a la CLI local de firebase por comandos del sistema.
Cuándo activar
Activa esta habilidad cuando se solicite:
- “inicializa firebase / fierbase para el proyecto…”
- “añade Firestore para guardar datos…”, “crea un documento en la colección…”
- “busca leads en Firestore”, “consulta usuarios…”
- “registra un nuevo usuario”, “crea usuario en Firebase Auth”
- “despliega la carpeta build/dist en Firebase Hosting”
- “ejecuta un despliegue y guarda logs”
Instrucciones de Uso y Automatización
Paso 1: Verificar el Estado del Servidor (Health Check)
El servidor corre por defecto en el puerto 3200 (mapeado a través del Gateway central en /api/fb). Comprueba si está activo a través del Gateway:
try { $r = Invoke-RestMethod -Uri "http://localhost:3000/api/fb/ping" -TimeoutSec 3; $r.status } catch { "OFFLINE" }Si no está activo, inicialízalo usando la skill gestiona_infraestructura o arráncalo de forma individual:
Start-Process -FilePath "node" -ArgumentList "server.js" -WorkingDirectory "C:\Users\jjtei\Desktop\IA_Infraestructura\infra-firebase" -WindowStyle HiddenStart-Sleep -Seconds 2Paso 2: Configurar Credenciales e Inicialización (POST /api/config)
Antes de realizar operaciones con Firebase, debes inyectar la configuración del proyecto o Service Account a través del microservicio:
# Comprobar la configuración actual$config = Invoke-RestMethod -Uri "http://localhost:3000/api/fb/api/config"$config | Format-List
# Registrar configuración (Token de Firebase o Service Account)$body = @{ projectId = "tu-proyecto-firebase"# # Opción A: Usar Token CI firebaseToken = "1//0xxxxxxxxx..."# # Opción B: Usar Service Account serviceAccountKeyPath = "C:\Users\jjtei\Desktop\credenciales-firebase.json"} | ConvertTo-Json
$res = Invoke-RestMethod -Uri "http://localhost:3000/api/fb/api/config" -Method Post -Body $body -ContentType "application/json"$res | Format-ListNota: El microservicio intentará leer de forma automática un archivo serviceAccountKey.json en su raíz o las variables de entorno del sistema si no se le especifican estos campos.
Paso 3: Operaciones con Firestore (Base de Datos)
A. Crear o Actualizar un Documento
Permite guardar datos en una colección. Si el ID no se provee, Firestore generará uno automáticamente.
$body = @{ collection = "leads" id = "lead_001" # Opcional data = @{ nombre = "Joel Juana" email = "joel@example.com" fecha = (Get-Date -Format "yyyy-MM-dd HH:mm:ss") } merge = $true} | ConvertTo-Json
$res = Invoke-RestMethod -Uri "http://localhost:3000/api/fb/api/firestore/document" -Method Post -Body $body -ContentType "application/json"$res | Format-ListB. Obtener y Borrar Documento
# Obtener un lead específico$doc = Invoke-RestMethod -Uri "http://localhost:3000/api/fb/api/firestore/document/leads/lead_001"$doc.data | Format-List
# Eliminar el leadInvoke-RestMethod -Uri "http://localhost:3000/api/fb/api/firestore/document/leads/lead_001" -Method DeleteC. Realizar Consultas Filtradas (Query)
Puedes enviar un array de filtros (field, operator, value):
$body = @{ collection = "leads" filters = @( @{ field = "email"; operator = "=="; value = "joel@example.com" } ) limit = 10} | ConvertTo-Json
$res = Invoke-RestMethod -Uri "http://localhost:3000/api/fb/api/firestore/query" -Method Post -Body $body -ContentType "application/json"$res.results | Format-TablePaso 4: Operaciones de Autenticación (Firebase Auth)
A. Registrar un Usuario Nuevo
$body = @{ email = "usuario@proyectos.com" password = "SuperPassword123" displayName = "Desarrollador IA"} | ConvertTo-Json
$res = Invoke-RestMethod -Uri "http://localhost:3000/api/fb/api/auth/user" -Method Post -Body $body -ContentType "application/json"$res | Format-ListB. Listar y Eliminar Usuarios
# Listar hasta 50 usuarios registrados$list = Invoke-RestMethod -Uri "http://localhost:3000/api/fb/api/auth/users?maxResults=50"$list.users | Format-Table
# Eliminar un usuario por su UID$uid = "xxxx-uid-generado-xxxx"Invoke-RestMethod -Uri "http://localhost:3000/api/fb/api/auth/user/$uid" -Method DeletePaso 5: Despliegue de Hosting (POST /api/hosting/deploy)
Para publicar un proyecto en Firebase Hosting de forma desatendida, compila tu proyecto localmente (npm run build o equivalente) y envía la ruta física de la carpeta compilada al microservicio:
$body = @{ folderPath = "C:\Users\jjtei\Desktop\Proyectos_IA\mi-proyecto-web\dist" projectId = "tu-proyecto-firebase" # Opcional si ya se configuró} | ConvertTo-Json
$res = Invoke-RestMethod -Uri "http://localhost:3000/api/fb/api/hosting/deploy" -Method Post -Body $body -ContentType "application/json"$res | Format-List# El resultado incluirá el 'deployUrl' (ej. https://tu-proyecto.web.app)Paso 6: Orquestación Secuencial (Workflow)
El microservicio permite enviar una lista de pasos en un único batch mediante /api/workflow para agilizar operaciones complejas:
$body = @{ steps = @( @{ action = "firestore.set" collection = "auditoria" id = "ultimo_despliegue" data = @{ estado = "iniciado"; autor = "IA Agent" } }, @{ action = "hosting.deploy" folderPath = "C:\Users\jjtei\Desktop\Proyectos_IA\mi-proyecto-web\dist" } )} | ConvertTo-Json
$res = Invoke-RestMethod -Uri "http://localhost:3000/api/fb/api/workflow" -Method Post -Body $body -ContentType "application/json"$res.resultsPaso 7: Apagar el Servidor (Liberar Recursos)
Cuando finalicen todas las tareas de la base de datos o el despliegue, apaga el microservicio a través del Gateway:
Invoke-RestMethod -Uri "http://localhost:3000/api/fb/api/shutdown" -Method PostOrquestación e Integración de Flujos
El flujo de despliegue integrado con subdominios y repositorio remoto es el siguiente:
graph TD A[Crea Proyecto / crea_proyecto] -->|1. Genera Scaffolding| B[Proyecto Local] B -->|2. Compila en carpeta dist/build| B B -->|3. Llama a deploy indicando ruta carpeta| C[infra-firebase /api/fb] C -->|4. Sube archivos a Firebase Hosting| D[Firebase Cloud] D -->|5. Retorna URL de hosting web.app| C C -->|6. Pide CNAME apuntando a web.app| E[infra-domain-manager /api/dns] E -->|7. Registra DNS Cloudflare| F[Subdominio con SSL Activo] B -->|8. Sube cambios finales del código| G[infra-github /api/git]Protocolo de Coordinación:
- Inicialización: El agente de
crea_proyectogenera la estructura base. - Construcción: El agente ejecuta
npm run builden el directorio local del proyecto. - Despliegue a Firebase: Se utiliza
gestiona_fierbase(a través de/api/fb/api/hosting/deploy) para desplegar la carpeta compilada. - Dominio: Se asocia un subdominio llamando a
gestiona_dominios(/api/dns/cname) para que apunte al subdominioweb.appdevuelto en el deploy. - Versiones: Se guarda el código final y su configuración con
gestiona_github(/api/git/postso/api/git/workflow).