import type Issue from '@server/entity/Issue'; import type IssueComment from '@server/entity/IssueComment'; import type Media from '@server/entity/Media'; import type { MediaRequest } from '@server/entity/MediaRequest'; import type { User } from '@server/entity/User'; import type { NotificationAgentConfig } from '@server/lib/settings'; import type { Notification } from '..'; export interface NotificationPayload { event?: string; subject: string; notifySystem: boolean; notifyAdmin: boolean; notifyUser?: User; media?: Media; image?: string; message?: string; extra?: { name: string; value: string }[]; request?: MediaRequest; issue?: Issue; comment?: IssueComment; } export abstract class BaseAgent { protected settings?: T; public constructor(settings?: T) { this.settings = settings; } protected abstract getSettings(): T; } export interface NotificationAgent { shouldSend(): boolean; send(type: Notification, payload: NotificationPayload): Promise; }