import type { IAuditServerAppActor, IAuditServerSystemActor, IAuditServerUserActor, ISetting } from '@rocket.chat/core-typings'; import { ServerEvents } from '@rocket.chat/models'; import { settings } from '../../../app/settings/server/cached'; export const resetAuditedSettingByUser = (actor: Omit) => any>(fn: F, key: ISetting['_id']): ReturnType => { const { value, packageValue } = settings.getSetting(key) ?? {}; void ServerEvents.createAuditServerEvent( 'settings.changed', { id: key, previous: value, current: packageValue, }, { type: 'user', ...actor, }, ); return fn(key); }; export const updateAuditedByUser = (actor: Omit) => any>( fn: F, ...args: Parameters ): ReturnType => { const [key, value, ...rest] = args; const setting = settings.getSetting(key); const previous = setting?.value; void ServerEvents.createAuditServerEvent( 'settings.changed', { id: key, previous, current: value, }, { type: 'user', ...actor, }, ); return fn(key, value, ...rest); }; export const updateAuditedBySystem = (actor: Omit) => any>( fn: F, ...args: Parameters ): ReturnType => { const [key, value, ...rest] = args; const setting = settings.getSetting(key); const previous = setting?.value; void ServerEvents.createAuditServerEvent( 'settings.changed', { id: key, previous, current: value, }, { type: 'system', ...actor, }, ); return fn(key, value, ...rest); }; export const updateAuditedByApp = any>( actor: Omit, ) => (fn: F, ...args: Parameters): ReturnType => { const [key, value, ...rest] = args; const setting = settings.getSetting(key); const previous = setting?.value; void ServerEvents.createAuditServerEvent( 'settings.changed', { id: key, previous, current: value, }, { type: 'app', ...actor, }, ); return fn(key, value, ...rest); };