You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

68 lines
2.4 KiB

/** 内容协议 key:使用说明 */
export const PRIVACY_POLICY_KEY_USAGE_TUTORIAL = "web.usageTutorial";
/** 内容协议 key:AI 功能使用须知 */
export const PRIVACY_POLICY_KEY_AI_USE_NOTICE = "web.aiUseNotice";
/** 内容协议 key:用户协议 */
export const PRIVACY_POLICY_KEY_USER_TERMS = "web.userTerms";
/** 内容协议 key:隐私政策 */
export const PRIVACY_POLICY_KEY_PRIVACY_POLICY = "web.privacyPolicy";
/** 内容协议 key:“Popi.art”付费服务协议 */
export const PRIVACY_POLICY_KEY_PAYMENT_TERMS = "web.paymentTerms";
/** 内容协议 key:Popi 存证协议 */
export const PRIVACY_POLICY_KEY_EVIDENCE_PRESERVATION = "web.popiartEvidencePreservationAgreement";
/** 内容协议 key:Popi Future Creator 计划用户服务协议 */
export const PRIVACY_POLICY_KEY_FUTURE_CREATOR = "web.futureCreatorUserServiceAgreement";
export interface GetLatestPrivacyPolicyParams {
key: string;
}
export async function getLatestPrivacyPolicy({ key }: GetLatestPrivacyPolicyParams): Promise<unknown> {
const params = new URLSearchParams({ key });
const response = await fetch(`/api/content/privacy-policy/latest?${params.toString()}`, {
method: "GET",
});
const payload = (await response.json().catch(() => null)) as unknown;
if (!response.ok) {
const message =
typeof payload === "object" &&
payload !== null &&
"message" in payload &&
typeof payload.message === "string"
? payload.message
: "Failed to fetch latest privacy policy.";
throw new Error(message);
}
return payload;
}
interface PrivacyPolicyItem {
id: number;
title: string;
key: string;
type: number;
content: string;
status: number;
}
interface PrivacyPolicyResponse {
data?: PrivacyPolicyItem;
message?: string;
status?: string;
}
/** 按 key 拉取最新协议/说明,type 为 2 时在新标签页打开 content 链接 */
export async function openLatestPrivacyPolicyLink(key: string): Promise<void> {
const res = (await getLatestPrivacyPolicy({ key })) as PrivacyPolicyResponse;
if (res.status && res.status !== "0000") {
throw new Error(res.message || "Failed to fetch latest privacy policy.");
}
const item = res.data;
if (!item?.content || item.type !== 2) {
throw new Error(res.message || "Latest privacy policy link is unavailable.");
}
window.open(item.content, "_blank", "noopener,noreferrer");
}