feat: add country-level subscription risk controls

This commit is contained in:
JetSprow
2026-04-29 15:40:50 +10:00
parent 40ca3e27ad
commit 086934198a
8 changed files with 81 additions and 11 deletions

View File

@@ -43,6 +43,8 @@ export default async function AdminSettingsPage() {
subscriptionRiskCitySuspend: config.subscriptionRiskCitySuspend,
subscriptionRiskRegionWarning: config.subscriptionRiskRegionWarning,
subscriptionRiskRegionSuspend: config.subscriptionRiskRegionSuspend,
subscriptionRiskCountryWarning: config.subscriptionRiskCountryWarning,
subscriptionRiskCountrySuspend: config.subscriptionRiskCountrySuspend,
subscriptionRiskIpLimitPerHour: config.subscriptionRiskIpLimitPerHour,
subscriptionRiskTokenLimitPerHour: config.subscriptionRiskTokenLimitPerHour,
inviteRewardEnabled: config.inviteRewardEnabled,

View File

@@ -32,6 +32,8 @@ interface AppConfig {
subscriptionRiskCitySuspend: number;
subscriptionRiskRegionWarning: number;
subscriptionRiskRegionSuspend: number;
subscriptionRiskCountryWarning: number;
subscriptionRiskCountrySuspend: number;
subscriptionRiskIpLimitPerHour: number;
subscriptionRiskTokenLimitPerHour: number;
inviteRewardEnabled: boolean;
@@ -292,6 +294,28 @@ export function SettingsForm({ config, coupons }: { config: AppConfig; coupons:
defaultValue={config.subscriptionRiskRegionSuspend}
/>
</div>
<div className="space-y-2">
<Label htmlFor="subscriptionRiskCountryWarning"></Label>
<Input
id="subscriptionRiskCountryWarning"
name="subscriptionRiskCountryWarning"
type="number"
min={2}
max={100}
defaultValue={config.subscriptionRiskCountryWarning}
/>
</div>
<div className="space-y-2">
<Label htmlFor="subscriptionRiskCountrySuspend"></Label>
<Input
id="subscriptionRiskCountrySuspend"
name="subscriptionRiskCountrySuspend"
type="number"
min={2}
max={100}
defaultValue={config.subscriptionRiskCountrySuspend}
/>
</div>
<div className="space-y-2">
<Label htmlFor="subscriptionRiskIpLimitPerHour">IP /</Label>
<Input
@@ -316,7 +340,7 @@ export function SettingsForm({ config, coupons }: { config: AppConfig; coupons:
</div>
</div>
<p className="text-xs leading-5 text-muted-foreground">
24 4 5 2 /3 /IP 180 / 60 /
24 4 5 2 /3 /2 3 IP 180 / 60 /
</p>
</section>

View File

@@ -34,6 +34,10 @@ function reasonLabel(reason: SubscriptionRiskEvent["reason"]) {
return "省/地区异常警告";
case "REGION_VARIANCE_SUSPEND":
return "省/地区异常暂停";
case "COUNTRY_VARIANCE_WARNING":
return "国家异常警告";
case "COUNTRY_VARIANCE_SUSPEND":
return "国家异常暂停";
}
}

View File

@@ -63,6 +63,10 @@ function reasonLabel(reason: SubscriptionRiskEvent["reason"]) {
return "省/地区异常警告";
case "REGION_VARIANCE_SUSPEND":
return "省/地区异常暂停";
case "COUNTRY_VARIANCE_WARNING":
return "国家异常警告";
case "COUNTRY_VARIANCE_SUSPEND":
return "国家异常暂停";
}
}