74 lines
2.1 KiB
TypeScript
74 lines
2.1 KiB
TypeScript
import type { UiMessage } from "@/data/dto/chat";
|
|
import type { PendingChatUnlockKind } from "@/lib/navigation/chat_unlock_session";
|
|
|
|
export type ChatUpgradeReason = "weekly_limit" | "insufficient_credits";
|
|
|
|
export interface ChatUnlockPaywallRequest {
|
|
messageId: string;
|
|
kind: PendingChatUnlockKind;
|
|
reason: string;
|
|
creditBalance: number;
|
|
requiredCredits: number;
|
|
shortfallCredits: number;
|
|
}
|
|
|
|
export interface ChatState {
|
|
messages: UiMessage[];
|
|
isReplyingAI: boolean;
|
|
pendingReplyCount: number;
|
|
upgradePromptVisible: boolean;
|
|
upgradeReason: ChatUpgradeReason | null;
|
|
canSendMessage: boolean;
|
|
cannotSendReason: string | null;
|
|
creditBalance: number;
|
|
creditsCharged: number;
|
|
requiredCredits: number;
|
|
shortfallCredits: number;
|
|
isLoadingMore: boolean;
|
|
hasMore: boolean;
|
|
historyOffset: number;
|
|
/** history 加载完成标志(initial load —— local → network → save 跑完)
|
|
* - guestSession.initializing / user sessions initializing 走 always barrier
|
|
* - 不被 `loadMoreHistoryActor` 设置(翻页是另一码事)
|
|
*/
|
|
historyLoaded: boolean;
|
|
paymentUnlockPending: boolean;
|
|
unlockHistoryPromptVisible: boolean;
|
|
lockedHistoryCount: number;
|
|
isUnlockingHistory: boolean;
|
|
unlockHistoryError: string | null;
|
|
isUnlockingMessage: boolean;
|
|
unlockingMessageId: string | null;
|
|
unlockingMessageKind: PendingChatUnlockKind | null;
|
|
unlockMessageError: string | null;
|
|
unlockPaywallRequest: ChatUnlockPaywallRequest | null;
|
|
}
|
|
|
|
export const initialState: ChatState = {
|
|
messages: [],
|
|
isReplyingAI: false,
|
|
pendingReplyCount: 0,
|
|
upgradePromptVisible: false,
|
|
upgradeReason: null,
|
|
canSendMessage: true,
|
|
cannotSendReason: null,
|
|
creditBalance: 0,
|
|
creditsCharged: 0,
|
|
requiredCredits: 0,
|
|
shortfallCredits: 0,
|
|
isLoadingMore: false,
|
|
hasMore: true,
|
|
historyOffset: 0,
|
|
historyLoaded: false,
|
|
paymentUnlockPending: false,
|
|
unlockHistoryPromptVisible: false,
|
|
lockedHistoryCount: 0,
|
|
isUnlockingHistory: false,
|
|
unlockHistoryError: null,
|
|
isUnlockingMessage: false,
|
|
unlockingMessageId: null,
|
|
unlockingMessageKind: null,
|
|
unlockMessageError: null,
|
|
unlockPaywallRequest: null,
|
|
};
|