import type { IRocketChatRecord } from './IRocketChatRecord'; import type { IUser } from './IUser'; import type { IServerEventAbacActionPerformed, IServerEventAbacAttributeChanged, IServerEventAbacAttributeStoreSwitched, IServerEventAbacObjectAttributeChanged, IServerEventAbacObjectAttributesRemoved, IServerEventAbacSubjectAttributeChanged, } from './ServerAudit/IAuditServerAbacAction'; import type { IServerEventSettingsChanged } from './ServerAudit/IAuditServerSettingEvent'; import type { IServerEventUserChanged } from './ServerAudit/IAuditUserChangedEvent'; export enum ServerEventType { FAILED_LOGIN_ATTEMPT = 'failed-login-attempt', LOGIN = 'login', } export interface IServerEvent extends IRocketChatRecord { t: ServerEventType | keyof IServerEvents; ts: Date; // @deprecated ip: string; // @deprecated u?: Partial>; actor?: IAuditServerActor; data?: AuditServerEventPayloadItem[]; } export interface IAuditServerUserActor { type: 'user'; _id: string; username: string; ip: string; useragent: string; } export interface IAuditServerSystemActor { type: 'system'; reason?: string; } export interface IAuditServerAppActor { type: 'app'; _id: string; reason?: string; } export type IAuditServerActor = IAuditServerUserActor | IAuditServerSystemActor | IAuditServerAppActor; interface IAuditServerEvent { _id: string; t: string; ts: Date; actor: IAuditServerActor; } type AuditServerEventPayloadItem = { key: string; value: unknown; }; export interface IAuditServerEventType extends IAuditServerEvent { data: E[]; } export interface IServerEvents { 'abac.subject.attribute.changed': IServerEventAbacSubjectAttributeChanged; 'abac.object.attribute.changed': IServerEventAbacObjectAttributeChanged; 'abac.attribute.changed': IServerEventAbacAttributeChanged; 'abac.action.performed': IServerEventAbacActionPerformed; 'abac.object.attributes.removed': IServerEventAbacObjectAttributesRemoved; 'abac.attribute.store.switched': IServerEventAbacAttributeStoreSwitched; 'settings.changed': IServerEventSettingsChanged; 'user.changed': IServerEventUserChanged; } type KeyValuePair = { key: string; value: any }; type ArrayToObject = { [K in T[number] as K['key']]: K['value']; }; export type ExtractDataToParams> = T extends IAuditServerEventType ? ArrayToObject : never;