import logger from '../../logger'; import type { NotificationAgent, NotificationPayload } from './agents/agent'; export enum Notification { NONE = 0, MEDIA_PENDING = 2, MEDIA_APPROVED = 4, MEDIA_AVAILABLE = 8, MEDIA_FAILED = 16, TEST_NOTIFICATION = 32, MEDIA_DECLINED = 64, MEDIA_AUTO_APPROVED = 128, } export const hasNotificationType = ( types: Notification | Notification[], value: number ): boolean => { let total = 0; // If we are not checking any notifications, bail out and return true if (types === 0) { return true; } if (Array.isArray(types)) { // Combine all notification values into one total = types.reduce((a, v) => a + v, 0); } else { total = types; } // Test notifications don't need to be enabled if (!(value & Notification.TEST_NOTIFICATION)) { value += Notification.TEST_NOTIFICATION; } return !!(value & total); }; class NotificationManager { private activeAgents: NotificationAgent[] = []; public registerAgents = (agents: NotificationAgent[]): void => { this.activeAgents = [...this.activeAgents, ...agents]; logger.info('Registered notification agents', { label: 'Notifications' }); }; public sendNotification( type: Notification, payload: NotificationPayload ): void { logger.info(`Sending notification(s) for ${Notification[type]}`, { label: 'Notifications', subject: payload.subject, }); this.activeAgents.forEach((agent) => { if (agent.shouldSend()) { agent.send(type, payload); } }); } } const notificationManager = new NotificationManager(); export default notificationManager;