import { CategoryRequest } from "../services/category.service"; export enum CategoryProviderType { Mock = "mock", DV = "dv", IAS = "ias", } export enum CategoryRating { Safe = "safe", Unsafe = "unsafe", Unknown = "unknown", BadRequest = "badRequest", } export enum BrandSafetySeverity { High = "high", Medium = "medium", Low = "low", } export enum FraudSeverity { High = "high", Medium = "medium", } export function stringToBrandSafetySeverity( value: string, defaultSeverity: BrandSafetySeverity ): BrandSafetySeverity { if ((Object.values(BrandSafetySeverity) as string[]).includes(value)) { return value as BrandSafetySeverity; } return defaultSeverity; } export function stringToFraudSeverity( value: string, defaultSeverity: FraudSeverity ): FraudSeverity { if ((Object.values(FraudSeverity) as string[]).includes(value)) { return value as FraudSeverity; } return defaultSeverity; } export interface ICategoryProvider { getCategories(categoryRequest: CategoryRequest): Promise; isRequestValid(categoryRequest: CategoryRequest): boolean; decode(value: string): ICategoryValue; needUserAgent(): boolean; } export interface ICategoryValue { toSegmentList(): string[]; getBrandSafety(severity: BrandSafetySeverity): CategoryRating; getPublisherFraud(severity: FraudSeverity): CategoryRating; getDeviceFraud(): CategoryRating; getRefreshTTL(): number; isBlockedBySegment(stringSegment: string): boolean; isBrandSuitable(stringSegment: string, passUnknown: boolean): boolean; } export class EmptyCategoryValue implements ICategoryValue { constructor(private rating: CategoryRating = CategoryRating.Unknown) {} toSegmentList(): string[] { return []; } getBrandSafety(_level: BrandSafetySeverity): CategoryRating { return this.rating; } getPublisherFraud(_level: FraudSeverity): CategoryRating { return this.rating; } getRefreshTTL(): number { return 0; } isBlockedBySegment(_stringSegment: string): boolean { return false; } isBrandSuitable(_stringSegment: string, passUnknown: boolean): boolean { return passUnknown; } getDeviceFraud(): CategoryRating { return this.rating; } } export type CategoryProviderValue = { ttl: number; encodedValue: string; };