feat: add customer session refresh functionality and improve session management

- Introduced RealtimeCustomerSessionRefreshPayload and RealtimeCustomerSessionRefreshEvent types for handling session refresh events.
- Updated ws_service to verify customer session and handle session refresh notifications.
- Enhanced API client to manage customer session tokens and expiration.
- Implemented customer session validation and storage in session storage.
- Added functions to exchange and ensure customer sessions.
- Updated IM real-time connection to include customer session tokens in WebSocket requests.
- Modified SDK and widget configurations to support external IDs and user tokens.
This commit is contained in:
mlogclub
2026-04-28 19:56:27 +08:00
parent bfc9b317dc
commit 14e3df64f1
18 changed files with 590 additions and 47 deletions
+14 -1
View File
@@ -5,12 +5,14 @@ import { create } from "zustand"
import {
closeImConversation,
createOrMatchImConversation,
ensureCustomerSession,
fetchImMessages,
fetchImWidgetConfig,
markImMessageRead,
sendImMessage,
uploadImAttachment,
uploadImImage,
applyCustomerSessionRefresh,
type ImAsset,
type ImConversation,
type ImMessage,
@@ -159,11 +161,17 @@ export const useKefuChatStore = create<KefuChatStore>((set, get) => {
return
}
const payload = event.data ?? event.payload
if (event.type === "customer_session.refresh") {
applyCustomerSessionRefresh(payload)
return
}
const conversationId = get().conversation?.id
if (!conversationId) {
return
}
const payload = event.data ?? event.payload
if (event.type === "resyncRequired") {
void get().refreshMessages()
return
@@ -281,6 +289,11 @@ export const useKefuChatStore = create<KefuChatStore>((set, get) => {
themeColor: widgetConfig.themeColor || "#2563eb",
})
await ensureCustomerSession()
if (bootstrapToken !== token || !get().isOpen) {
return
}
let currentConversation = get().conversation
if (!get().initialized || !currentConversation) {
currentConversation = await createOrMatchImConversation()