fix: restore web widget realtime replies (HH-556) (#136)

* fix: restore web widget realtime replies (HH-556)

* fix: make realtime delivery durable (HH-556)

* fix: make realtime message outbox atomic (HH-556)

---------

Co-authored-by: Rogee <rogee@ipao.vip>
This commit is contained in:
Rogee
2026-08-23 22:35:10 +08:00
committed by GitHub
co-authored by rogee
parent 17244bcc9d
commit 60a6ac4785
13 changed files with 987 additions and 136 deletions
+5 -1
View File
@@ -786,11 +786,14 @@ func Bootstrap(env string) (*App, error) {
}
})
eventPublisher := wspkg.NewEventPublisher(wsHub, nil, wsRelay)
eventPublisher.SetWorkerPool(workerPool)
presenceTracker := wspkg.NewPresenceTracker(rdb, wsRelay)
// Bridge channel dispatcher events to the WebSocket EventPublisher so that
// message/conversation/contact events reach connected WS/SSE clients.
channelDispatcher.Register(wsevent.New(eventPublisher))
realtimeBridge := wsevent.New(eventPublisher)
channelDispatcher.Register(realtimeBridge)
messageService.SetRealtimeEventBridge(realtimeBridge)
// Widget service + handler (M11 — WebWidget channel completion)
// hubTypingAdapter delegates typing events to the WS hub's direct broadcast,
@@ -802,6 +805,7 @@ func Bootstrap(env string) (*App, error) {
widgetService := service.NewWidgetService(inboxRepo, contactRepo, contactInboxRepo, conversationRepo, messageRepo, widgetTypingAdapter, widgetThemeConfigRepo, preChatFormRepo, widgetFileUploadRepo, widgetOfflineMessageRepo, inboxMemberRepo, tagRepo, campaignRepo)
widgetService.SetWorkerPool(workerPool)
widgetService.SetDispatcher(channelDispatcher)
widgetService.SetRealtimeEventBridge(realtimeBridge)
widgetHandler := widget.NewHandler(widgetService)
// Upload: DirectUpload repo + service + handler (account-level + widget direct uploads)