Picsur/shared/src/dto/sys-preferences.enum.ts
2022-12-25 23:25:39 +01:00

79 lines
2.5 KiB
TypeScript

import { z } from 'zod';
import { URLRegex } from '../util/common-regex';
import { IsEntityID } from '../validators/entity-id.validator';
import { IsValidMS } from '../validators/ms.validator';
import { IsPosInt } from '../validators/positive-int.validator';
import { PrefValueTypeStrings } from './preferences.dto';
// This enum is only here to make accessing the values easier, and type checking in the backend
export enum SysPreference {
HostOverride = 'host_override',
JwtSecret = 'jwt_secret',
JwtExpiresIn = 'jwt_expires_in',
BCryptStrength = 'bcrypt_strength',
SaveDerivatives = 'save_derivatives',
RemoveDerivativesAfter = 'remove_derivatives_after',
AllowEditing = 'allow_editing',
ConversionTimeLimit = 'conversion_time_limit',
ConversionMemoryLimit = 'conversion_memory_limit',
EnableTracking = 'enable_tracking',
TrackingUrl = 'tracking_url',
TrackingId = 'tracking_id',
EnableTelemetry = 'enable_telemetry',
}
export type SysPreferences = SysPreference[];
export const SysPreferenceList: string[] = Object.values(SysPreference);
// Syspref Value types
export const SysPreferenceValueTypes: {
[key in SysPreference]: PrefValueTypeStrings;
} = {
[SysPreference.HostOverride]: 'string',
[SysPreference.JwtSecret]: 'string',
[SysPreference.JwtExpiresIn]: 'string',
[SysPreference.BCryptStrength]: 'number',
[SysPreference.RemoveDerivativesAfter]: 'string',
[SysPreference.SaveDerivatives]: 'boolean',
[SysPreference.AllowEditing]: 'boolean',
[SysPreference.ConversionTimeLimit]: 'string',
[SysPreference.ConversionMemoryLimit]: 'number',
[SysPreference.EnableTracking]: 'boolean',
[SysPreference.TrackingUrl]: 'string',
[SysPreference.TrackingId]: 'string',
[SysPreference.EnableTelemetry]: 'boolean',
};
export const SysPreferenceValidators: {
[key in SysPreference]: z.ZodTypeAny;
} = {
[SysPreference.HostOverride]: z.string().regex(URLRegex).or(z.literal('')),
[SysPreference.JwtSecret]: z.boolean(),
[SysPreference.JwtExpiresIn]: IsValidMS(),
[SysPreference.BCryptStrength]: IsPosInt(),
[SysPreference.RemoveDerivativesAfter]: IsValidMS(),
[SysPreference.SaveDerivatives]: z.boolean(),
[SysPreference.AllowEditing]: z.boolean(),
[SysPreference.ConversionTimeLimit]: IsValidMS(),
[SysPreference.ConversionMemoryLimit]: IsPosInt(),
[SysPreference.EnableTracking]: z.boolean(),
[SysPreference.TrackingUrl]: z.string().regex(URLRegex).or(z.literal('')),
[SysPreference.TrackingId]: IsEntityID().or(z.literal('')),
[SysPreference.EnableTelemetry]: z.boolean(),
};