All four projects, their internal modules, and every inter-project connection. Render with any Mermaid-compatible viewer (VS Code, GitHub, Obsidian, etc.)
| Direction | Target | Protocol | Payload |
|---|---|---|---|
| → | ice-internal-api | REST POST + AES encrypt | Visitor token, survey checks, campaign/skill config, chatbot data |
| → | ice-nodejs | Socket.IO v2.4.0 | Chat init, message, dispose, survey trigger |
| ← | ice-nodejs | Socket.IO emit | Operator joined, message received, queue position |
| ← | ice-internal-api | AES-encrypted JSON | Survey questions, skill config, bot stories |
| Direction | Target | Protocol | Payload |
|---|---|---|---|
| ← | ice-visitor | Socket.IO | Visitor chat events |
| ← | ice-mvc-admin | Socket.IO | Agent accept/transfer/dispose, supervisor joins |
| → | ice-internal-api | REST POST | SaveVisitorInformationFromApi — visitor identity persistence |
| → | SQL Server | mssql stored procs | Chat history, user state, queue data |
| ↔ | Redis | pub/sub + BRPOP | Session store, worker coordination, logout queue |
| → | Google Translate | HTTPS API | Real-time message translation (7 languages) |
| → | Twilio | HTTPS API | SMS-to-Chat relay |
| → | HTTPS API | DM channel routing | |
| → | FCM | HTTPS API | Mobile agent push notifications |
| Direction | Target | Protocol | Payload |
|---|---|---|---|
| ← | ice-visitor | REST POST (AES) | All visitor REST calls → VisitorController (91 edges) |
| ← | ice-mvc-admin | REST POST | Operator/Admin CRUD → OperatorController, config controllers |
| ← | ice-nodejs | REST POST | Visitor info save → VisitorController |
| → | SQL Server | ADO.NET stored procs | All business data via tbl_* entities + usersBase / TicketsBase |
| ↔ | Redis | StackExchange.Redis | Live monitoring triggers, operator status cache |
| Direction | Target | Protocol | Payload |
|---|---|---|---|
| → | ice-internal-api | REST POST | All admin config, operator actions, email ticket ops |
| → | ice-nodejs | Socket.IO client | Agent accept/decline/transfer chat, supervisor monitor/join |
| ← | ice-nodejs | Socket.IO emit | Real-time visitor queue, new chat alerts, messages |
| ← | ice-internal-api | JSON responses | User lists, skill lists, canned responses, reports |
ice-nodejs writes real-time chat state via dalayer.js (mssql package, stored procs).
ice-internal-api writes all configuration/ticket data via FutureViewClassLibrary (ADO.NET, stored procs).
They do not communicate through the DB — no polling. But they share the same schema, so a stored procedure or table change affects both projects simultaneously.
| Project | Package | Version |
|---|---|---|
| ice-nodejs | socket.io (server) | 2.0.2 |
| ice-visitor | socket.io-client | 2.4.0 |
| ice-mvc-admin | socket.io-client | (same major 2.x) |
A 2.x client cannot connect to a 3.x/4.x server. Upgrade both sides together or not at all.
UtilService.encryptRequest() and decryptResponse() use crypto-js AES on every request body and response. Network inspection will show ciphertext, not JSON. Decryption happens in UtilService before any component sees the data.
Multi-worker clustering means one process cannot directly emit to a socket on another process. Redis pub/sub (socket.io-redis adapter) solves this — any worker can emit to any client. The logout channel and login-list key (DB 15) are the two critical Redis keys for session management.