The catalogue row alone was not enough; the feature was invisible in three places and mislabelled in a fourth. PlanConfigurator rendered every key that was not "console" as "Single sign-on", so the staff checkbox granting vulnerability scanning was labelled single sign-on. Feature wording was duplicated between the staff configurator and the purchase form and the copies had drifted, so it now lives in adminsite/lib/features.ts and both read from it. The customer licence panel showed raw keys; it now labels them. Pricing gains a comparison row. The add-on block with a monthly price is deliberately NOT added: that is a pricing decision, and the Paddle price IDs for the new catalogue rows have to be pasted in before it can be sold anyway.
28 lines
996 B
TypeScript
28 lines
996 B
TypeScript
/* Human wording for licence feature keys.
|
|
*
|
|
* One place, because there were two and they disagreed: the staff configurator
|
|
* rendered every key that was not "console" as "Single sign-on", so adding a
|
|
* third feature silently mislabelled the checkbox that grants it. A map with a
|
|
* fallback degrades to the raw key, which is ugly but never wrong.
|
|
*
|
|
* Keys must match shared/license/license.go. */
|
|
export const FEATURE_LABEL: Record<string, string> = {
|
|
console: "Browser console",
|
|
oidc: "Single sign-on",
|
|
vuln_scanning: "Vulnerability scanning",
|
|
};
|
|
|
|
export const FEATURE_DESC: Record<string, string> = {
|
|
console: "In-browser SSH, RDP and VNC sessions",
|
|
oidc: "OIDC sign-in for your whole team",
|
|
vuln_scanning: "Package inventory matched against distribution security advisories",
|
|
};
|
|
|
|
export function featureLabel(key: string): string {
|
|
return FEATURE_LABEL[key] ?? key;
|
|
}
|
|
|
|
export function featureDesc(key: string): string {
|
|
return FEATURE_DESC[key] ?? "";
|
|
}
|