import { BackendSettings, Config } from "../types/config"; import { Notification } from "../types/notification"; export abstract class Backend { public abstract readonly name: string; protected abstract requiredFields: readonly (keyof C)[]; protected abstract notify(config: C, notification: Notification): void; #validate(config: Partial): C { for (const field of this.requiredFields) { if (config[field] === undefined) { throw new Error(`The '${String(field)}' configuration field of'${this.name}' consumer is required`) } } return config as C; } public remind(config: Config, notification: Notification) { const cfg = config.backend[this.name] as Partial; if (cfg.enable !== true) { return } this.notify(this.#validate(cfg), notification); } }