ICE Platform — Architecture Mind Map

All four projects, their internal modules, and every inter-project connection. Render with any Mermaid-compatible viewer (VS Code, GitHub, Obsidian, etc.)


Mind Map Diagram

[Diagram]

Connection Reference Tables

ice-visitor connections

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

ice-nodejs connections

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
Twitter HTTPS API DM channel routing
FCM HTTPS API Mobile agent push notifications

ice-internal-api connections

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

ice-mvc-admin connections

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

Critical Architecture Notes

Shared Database — Both Node and .NET write to the same SQL Server

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.

Socket.IO Version Lock — Do not upgrade independently

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.

AES Encryption on all ice-visitor ↔ ice-internal-api traffic

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.

Redis as the inter-process backbone for ice-nodejs

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.