UNPKG

skailan-conversations

Version:

Servicio de conversaciones y mensajería para Skailan

94 lines 3.36 kB
import express from "express"; import { tenantResolver } from "@skailan/core/dist/shared/middlewares/tenantResolver"; import channelRoutes from "./api/routes/channels.routes"; import conversationRoutes from "./api/routes/conversationRoutes"; import tagRoutes from "./api/routes/tagRoutes"; import aiRoutes from "./api/routes/aiRoutes"; import unifiedWebhookRoutes from "./api/routes/unifiedWebhookRoutes"; import messageRoutes from "./api/routes/messageRoutes"; import http from "http"; import { Server } from "socket.io"; import Redis from "ioredis"; const app = express(); const PORT = process.env.PORT || 3007; // Using 3007 const httpServer = http.createServer(app); const io = new Server(httpServer, { cors: { origin: "*", // TODO: Restringir esto en producción methods: ["GET", "POST"], }, }); // Configuración de Redis para Pub/Sub const redis = new Redis({ port: Number(process.env.REDIS_PORT) || 6379, host: process.env.REDIS_HOST || "localhost", password: process.env.REDIS_PASSWORD || undefined, }); redis.on("connect", () => { console.log("Conectado a Redis para Pub/Sub"); }); redis.on("error", (err) => { console.error("Error de conexión a Redis:", err); }); // Suscribirse a un canal de Redis para eventos entre servicios redis.subscribe("inter-service-events", (err, count) => { if (err) { console.error("Error al suscribirse a Redis:", err.message); } else { console.log(`Suscrito a ${count} canal(es) de Redis`); } }); redis.on("message", (channel, message) => { console.log(`Mensaje recibido de Redis en el canal ${channel}: ${message}`); try { const event = JSON.parse(message); // Emitir el evento a todos los clientes conectados a Socket.IO io.emit(event.type, event.payload); } catch (e) { console.error("Error al parsear el mensaje de Redis:", e); } }); io.on("connection", (socket) => { console.log("a user connected"); socket.on("disconnect", () => { console.log("user disconnected"); }); // Ejemplo de emisión de evento socket.emit("message", "Welcome to the chat!"); }); app.use(express.json()); app.use(tenantResolver); app.get("/", (req, res) => { res.send("Conversations Service API is running!"); }); app.use("/channels", channelRoutes); app.use("/conversations", conversationRoutes); app.use("/tags", tagRoutes); app.use("/ai", aiRoutes); app.use("/messages", messageRoutes); app.use("/", unifiedWebhookRoutes); app.get("/test-tenant", async (req, res) => { try { const organizationId = req.organization?.id; // organizationId is now attached by the tenantResolver from @skailan/core if (!organizationId) { return res.status(400).json({ error: "Organization ID not found." }); } if (req.tenantPrisma) { res.status(200).json({ message: `Tenant Prisma client initialized for organization: ${organizationId}`, }); } else { res.status(500).json({ error: "Prisma client not initialized." }); } } catch (error) { res.status(500).json({ error: error.message || "Error testing tenant." }); } }); httpServer.listen(PORT, () => { console.log(`Conversations Service running on port ${PORT}`); }); //# sourceMappingURL=index.js.map