feat(chat): render role-bound payment guidance
This commit is contained in:
@@ -13,6 +13,41 @@ import {
|
||||
import { ChatImageSchema, ChatLockDetailSchema } from "../chat_payloads";
|
||||
import { ChatActionSchema } from "../chat_action";
|
||||
|
||||
export const PaymentGuidanceSceneSchema = z.enum([
|
||||
"vip",
|
||||
"insufficientCredits",
|
||||
"chatInterrupted",
|
||||
"voiceLocked",
|
||||
"imageLocked",
|
||||
"privateMessageLocked",
|
||||
"historyLocked",
|
||||
"privateZoneLocked",
|
||||
"unknownLock",
|
||||
"whyPay",
|
||||
"leavingAfterCredits",
|
||||
"paymentIssue",
|
||||
"externalRisk",
|
||||
"purchaseOptions",
|
||||
]);
|
||||
|
||||
export const PaymentGuidanceSchema = z
|
||||
.object({
|
||||
guidanceId: z.string().min(1),
|
||||
characterId: z.string().min(1),
|
||||
characterName: z.string().min(1),
|
||||
scene: PaymentGuidanceSceneSchema,
|
||||
mode: z.enum(["guide", "careOnly", "issueSupport", "riskReminder"]),
|
||||
title: z.string().nullable().default(null),
|
||||
copy: z.string().min(1),
|
||||
ctaLabel: z.string().nullable().default(null),
|
||||
purchaseOptions: z.array(z.enum(["vip", "topup"])).readonly(),
|
||||
target: z.enum(["subscription", "giftCatalog"]).nullable().default(null),
|
||||
ruleId: z.string().min(1),
|
||||
})
|
||||
.readonly();
|
||||
|
||||
export type PaymentGuidance = z.output<typeof PaymentGuidanceSchema>;
|
||||
|
||||
export const CommercialActionSchema = z
|
||||
.object({
|
||||
actionId: z.string().min(1),
|
||||
@@ -42,6 +77,7 @@ export const ChatSendResponseSchema = z
|
||||
requiredCredits: numberOrZero,
|
||||
shortfallCredits: numberOrZero,
|
||||
commercialAction: CommercialActionSchema.nullish().default(null),
|
||||
paymentGuidance: PaymentGuidanceSchema.nullish().default(null),
|
||||
chatAction: ChatActionSchema.nullish().default(null),
|
||||
})
|
||||
.readonly();
|
||||
|
||||
@@ -9,6 +9,7 @@ import {
|
||||
numberOrZero,
|
||||
recordOrEmpty,
|
||||
} from "../../nullable-defaults";
|
||||
import { PaymentGuidanceSchema } from "./chat_send_response";
|
||||
|
||||
export const UnlockHistoryCostsByMessageSchema = recordOrEmpty(z.number());
|
||||
|
||||
@@ -33,6 +34,7 @@ export const UnlockHistoryResponseSchema = z
|
||||
shortfallCredits: numberOrZero,
|
||||
costsByMessage: UnlockHistoryCostsByMessageSchema,
|
||||
messageIds: arrayOrEmpty(z.string()),
|
||||
paymentGuidance: PaymentGuidanceSchema.nullish().default(null),
|
||||
})
|
||||
.readonly();
|
||||
|
||||
|
||||
@@ -8,6 +8,7 @@ import {
|
||||
} from "../../nullable-defaults";
|
||||
import { ChatLockTypeSchema } from "../chat_lock_type";
|
||||
import { ChatImageSchema } from "../chat_payloads";
|
||||
import { PaymentGuidanceSchema } from "./chat_send_response";
|
||||
|
||||
/**
|
||||
* 单条历史付费 / 私密消息解锁响应。
|
||||
@@ -28,6 +29,7 @@ export const UnlockPrivateResponseSchema = z
|
||||
creditsCharged: numberOrZero,
|
||||
requiredCredits: numberOrZero,
|
||||
shortfallCredits: numberOrZero,
|
||||
paymentGuidance: PaymentGuidanceSchema.nullish().default(null),
|
||||
})
|
||||
.readonly();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user