You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
37 lines
1.0 KiB
37 lines
1.0 KiB
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<T extends NotificationAgentConfig> {
|
|
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<boolean>;
|
|
}
|