import { createWebSocketBaseUrl } from "@/lib/api/websocket" import { getImVisitorId, type ImMessage } from "@/lib/api/im" import { readKefuWidgetConfig } from "@/lib/kefu-widget-config" import type { RealtimeConversationPatch, RealtimeMessageCreatedPayload, } from "@/lib/im-realtime-state" export type ImRealtimeEnvelope = { type: string topic?: string data?: RealtimeMessageCreatedPayload & RealtimeConversationPatch payload?: RealtimeMessageCreatedPayload & RealtimeConversationPatch } export function createImRealtimeConnection() { const config = readKefuWidgetConfig() const apiBaseUrl = (config.apiBaseUrl || "").trim() const baseUrl = apiBaseUrl ? apiBaseUrl.replace(/^http/, "ws").replace(/\/$/, "") : createWebSocketBaseUrl() const externalId = encodeURIComponent(getImVisitorId()) const externalSource = encodeURIComponent( (config.externalSource ?? "web_chat").trim() || "web_chat" ) const channelId = encodeURIComponent(config.channelId || "") const externalName = (config.subject ?? "").trim() const nameQuery = externalName !== "" ? `&externalName=${encodeURIComponent(externalName)}` : "" return new WebSocket( `${baseUrl}/api/ws/open?externalId=${externalId}&externalSource=${externalSource}&channelId=${channelId}${nameQuery}` ) }