Skip to content

Live Chat — Production Readiness Audit

FieldValue
Date2026-09-17
StatusGo — production-readiness remediations closed (catalog 1.0.1); complete migrate + staging smoke before production opt-in embeds
ScopeFree Communication Marketplace module live-chat catalog 1.0.1 (not default-included)
CompanionLive Chat deployment · Developer guide · User guide · API

Executive summary

Live Chat ships catalog, tenant inbox, public widget script (CORS-open for credential-less embeds), soft Lead link, public DTO hardening, session revoke on key regen, Pest + Playwright coverage.

GateResult
Catalog free opt-in live-chat 1.0.1 (not default-included)Pass
Permissions view / reply / assign / manage + default rolesPass
Session token SHA-256; CSRF exempt; inactive widget 404Pass
Entitlement check on public + tenant paths; tenant isolationPass
Soft Leads (no hard module dep)Pass
Rate limits live-chat-widget + tighter live-chat-widget-sessionPass
CORS for credential-less third-party embeds (LiveChatPublicCors)Pass
Public responses strip agent/Lead/IP PIIPass
Regenerate key invalidates visitor sessionsPass
Session TTL (7 days) + scheduled visitor purge (90 days)Pass
Module cancel/deactivate flips widgets inactivePass
PlatformAudit + LogsActivity; UtcDateTime on last_message_atPass
Pest public entitlement / CORS / IDOR / regen / TTL / 413Pass
Playwright test:e2e:live-chat human workflowPass
Docs hubs (user / developer / API / deploy / entitlements / roadmap)Pass

Go / No-Go: Go for merge after CI green. Ops must migrate through 1.0.1 and complete staging smoke (including a third-party Origin embed) before customer traffic.


Locked-decision matrix

DecisionBackendFrontendDocs
Free Communication opt-in (not default-included)PassPassPass
Soft Lead link (no hard module dep)PassPassPass
Agent inbox (WhatsApp-style), not Team ChatPassPassPass
Media + Help Desk escalatePassPassPass (invoice share / bots still deferred)
Visitor Echo (realtime)PassPassPass
Captcha / Turnstile (beyond throttle + TTL)DeferredDeferredDeferred
Mobile shellOut of scopeOut of scopeOut of scope

Catalog version path

MigrationEffect
2026_09_17_003600Tables: widgets, visitors, conversations, messages
2026_09_17_003610Register live-chat 1.0.0 (free, not default-included)
2026_09_17_003620Permissions + default role grants
2026_09_17_003630Catalog 1.0.0 → 1.0.1 (production-readiness remediations)
2026_09_17_003700Expand schema + catalog 1.0.1 → 1.3.0

Production: migrate only. CatalogSeeder seeds live-chat 1.3.0 for local fresh seeds.


Findings (2026-09-17 remediations)

IDSeverityFindingResolution
LC-01CriticalCORS pinned to SPA — embeds failedLiveChatPublicCors reflects Origin for api/public/live-chat/*; Pest OPTIONS + GET
LC-02HighPublic APIs leaked agent/Lead/IP PIILiveChatPublicConversationResource / LiveChatPublicMessageResource; no sender load on visitor poll
LC-03HighKey regen left sessions validrevokeVisitorSessions() on regenerate + deactivate
LC-04HighNo public entitlement PestPublic bootstrap 403 after cancel + widgets inactive
LC-05MediumThrottle-only; no session expiry7-day session TTL; tighter session-create limiter (10/min)
LC-06MediumNo visitor retentionlive-chat:purge-visitors --days=90 daily
LC-07MediumNo audit / activity logPlatformAuditService + LogsActivity on widget/conversation
LC-08Mediumlast_message_at default datetimeUtcDateTime cast
LC-09MediumCancel left widgets activedeactivateLiveChatIfNeeded on cancel/deactivate
LC-10MediumSilent query failuresFrontend ErrorState + retry on widget / list / messages
LC-11MediumPest security gapsCORS, IDOR, regen, TTL, 413, public entitlement
LC-12LowMaxBodyBytes only on some POSTsAll public POSTs

Ops (not code blockers)

IDSeverityFindingOwner
O1MediumCompanion CI Quality Gates on Live Chat PRsEng
O2LowServe public/widgets/live-chat.js from API host (or CDN); APP_URL reachableOps
O3LowEnsure Forge scheduler runs live-chat:purge-visitorsOps

Deploy order

  1. Backend — migrate through 2026_09_17_003630; scheduler includes live-chat:purge-visitors
  2. Frontend — SPA with query error states
  3. Docs — this readiness page + live-chat
  4. Staging smoke below before production opt-in traffic

Suggested merge order: Backend → Frontend → Docs.


Pre-flight checklist

#CheckOwnerPass?
1Migrations through 2026_09_17_003630 (catalog 1.0.1)Ops
2Catalog live-chat = 1.0.1; Marketplace install (not default-included)Ops
3APP_URL reachable; widget script served; public CORS verified from foreign OriginOps
4Rate limiters live-chat-widget + live-chat-widget-session activeOps
5Scheduler: live-chat:purge-visitors --days=90Ops
6Pest LiveChatModuleTest greenEng
7Playwright test:e2e:live-chat greenQA
8Leads entitled only if soft-link testedOps

Staging smoke (human)

  1. Marketplace → install Live Chat (free)
  2. Staff with live-chat.view sees /live-chat; without module → gate
  3. Widget settings: greeting, prechat required, save; copy embed snippet
  4. From a third-party origin (or browser DevTools Origin), bootstrap + session + message succeed (CORS)
  5. Confirm public message/conversation JSON has no assignee, lead, visitor IP, or sender email
  6. Agent reply / claim / close; inbound notification → deep-link
  7. Soft-link / unlink Lead when Leads entitled; hide when not
  8. Regenerate public key → old embed key fails; old visitor sessions rejected
  9. Deactivate widget / uninstall module → public API 404/403; widgets inactive after cancel
  10. Prechat validation when required; empty reply blocked; oversized body → 413

Rollback

LayerAction
FrontendRedeploy previous SPA
Backend codeRedeploy previous release; keep additive migrations
Module disableMarketplace uninstall / cancel
SchemaDo not roll back Live Chat migrations without a data plan

Monitoring

  • Throttle denials on live-chat-widget / live-chat-widget-session
  • Public 401/403/404 rates on /api/public/live-chat/*
  • Notification type live-chat.inbound
  • live-chat:purge-visitors daily output / failures
  • Application logs for tenancy init failures on public paths

Sign-off

RoleNameDateDecision
Eng☐ Ready
QA☐ Ready
Ops☐ Ready

Release decision: Go — merge companions after CI green; complete staging smoke and migrate to 1.0.1 before production opt-in embeds.

Official documentation for the EloSync SaaS Platform.