feat(chat): support ai photo viewing
This commit is contained in:
@@ -29,6 +29,13 @@ export interface IntimacyPayload {
|
||||
relationshipStage?: string;
|
||||
}
|
||||
|
||||
export interface PaywallStatusPayload {
|
||||
paywallTriggered: boolean;
|
||||
showUpgrade: boolean;
|
||||
imageType: string | null;
|
||||
imageUrl: string | null;
|
||||
}
|
||||
|
||||
export class ChatWebSocket {
|
||||
private ws: WebSocket | null = null;
|
||||
private reconnectTimer: ReturnType<typeof setTimeout> | null = null;
|
||||
@@ -38,6 +45,8 @@ export class ChatWebSocket {
|
||||
onTyping: ((isTyping: boolean) => void) | null = null;
|
||||
onSentence: ((payload: SentencePayload) => void) | null = null;
|
||||
onVoiceReady: ((index: number, audioUrl: string) => void) | null = null;
|
||||
onImage: ((imageUrl: string) => void) | null = null;
|
||||
onPaywallStatus: ((payload: PaywallStatusPayload) => void) | null = null;
|
||||
onIntimacyUpdate: ((payload: IntimacyPayload) => void) | null = null;
|
||||
onMoodUpdate: ((mood: string) => void) | null = null;
|
||||
onError: ((errorMessage: string) => void) | null = null;
|
||||
@@ -104,6 +113,12 @@ export class ChatWebSocket {
|
||||
relationshipStage?: string;
|
||||
mood?: string;
|
||||
error?: string;
|
||||
data?: {
|
||||
imageUrl?: string | null;
|
||||
paywallTriggered?: boolean;
|
||||
showUpgrade?: boolean;
|
||||
imageType?: string | null;
|
||||
};
|
||||
};
|
||||
try {
|
||||
payload = JSON.parse(data);
|
||||
@@ -128,6 +143,19 @@ export class ChatWebSocket {
|
||||
case "voice_ready":
|
||||
this.onVoiceReady?.(payload.index ?? 0, payload.audioUrl ?? "");
|
||||
break;
|
||||
case "image": {
|
||||
const imageUrl = payload.data?.imageUrl;
|
||||
if (imageUrl) this.onImage?.(imageUrl);
|
||||
break;
|
||||
}
|
||||
case "paywall_status":
|
||||
this.onPaywallStatus?.({
|
||||
paywallTriggered: payload.data?.paywallTriggered ?? false,
|
||||
showUpgrade: payload.data?.showUpgrade ?? false,
|
||||
imageType: payload.data?.imageType ?? null,
|
||||
imageUrl: payload.data?.imageUrl ?? null,
|
||||
});
|
||||
break;
|
||||
case "intimacy_update":
|
||||
this.onIntimacyUpdate?.({
|
||||
intimacyChange: payload.intimacyChange,
|
||||
|
||||
Reference in New Issue
Block a user