From 6c5d7e9e898262fb795f8a05e9869eaba48464cb Mon Sep 17 00:00:00 2001 From: syuilo Date: Sat, 23 Sep 2023 15:19:21 +0900 Subject: [PATCH] wip --- .../backend/src/core/ModerationLogService.ts | 5 ++- packages/backend/src/core/RoleService.ts | 2 +- .../server/api/endpoints/admin/update-meta.ts | 10 ++++- packages/backend/src/types.ts | 43 +++++++++++++++++++ packages/misskey-js/etc/misskey-js.api.md | 13 +++++- 5 files changed, 68 insertions(+), 5 deletions(-) diff --git a/packages/backend/src/core/ModerationLogService.ts b/packages/backend/src/core/ModerationLogService.ts index 0f18fa3754..f7f9063d92 100644 --- a/packages/backend/src/core/ModerationLogService.ts +++ b/packages/backend/src/core/ModerationLogService.ts @@ -9,6 +9,7 @@ import type { ModerationLogsRepository } from '@/models/_.js'; import type { MiUser } from '@/models/User.js'; import { IdService } from '@/core/IdService.js'; import { bindThis } from '@/decorators.js'; +import { ModerationLogPayloads, moderationLogTypes } from '@/types.js'; @Injectable() export class ModerationLogService { @@ -21,13 +22,13 @@ export class ModerationLogService { } @bindThis - public async log(moderator: { id: MiUser['id'] }, type: string, info?: Record) { + public async log(moderator: { id: MiUser['id'] }, type: T, info?: ModerationLogPayloads[T]) { await this.moderationLogsRepository.insert({ id: this.idService.genId(), createdAt: new Date(), userId: moderator.id, type: type, - info: info ?? {}, + info: (info as any) ?? {}, }); } } diff --git a/packages/backend/src/core/RoleService.ts b/packages/backend/src/core/RoleService.ts index 07c88a4d06..25f3896fd6 100644 --- a/packages/backend/src/core/RoleService.ts +++ b/packages/backend/src/core/RoleService.ts @@ -416,7 +416,7 @@ export class RoleService implements OnApplicationShutdown { roleId: roleId, roleName: role.name, userId: userId, - expiresAt: expiresAt, + expiresAt: expiresAt ? expiresAt.toISOString() : null, }); } } diff --git a/packages/backend/src/server/api/endpoints/admin/update-meta.ts b/packages/backend/src/server/api/endpoints/admin/update-meta.ts index a337be27e1..04c517e947 100644 --- a/packages/backend/src/server/api/endpoints/admin/update-meta.ts +++ b/packages/backend/src/server/api/endpoints/admin/update-meta.ts @@ -441,8 +441,16 @@ export default class extends Endpoint { // eslint- set.manifestJsonOverride = ps.manifestJsonOverride; } + const before = await this.metaService.fetch(true); + await this.metaService.update(set); - this.moderationLogService.log(me, 'updateMeta'); + + const after = await this.metaService.fetch(true); + + this.moderationLogService.log(me, 'updateMeta', { + before, + after, + }); }); } } diff --git a/packages/backend/src/types.ts b/packages/backend/src/types.ts index 0a28d88d08..bbcf513fb5 100644 --- a/packages/backend/src/types.ts +++ b/packages/backend/src/types.ts @@ -26,3 +26,46 @@ export const noteVisibilities = ['public', 'home', 'followers', 'specified'] as export const mutedNoteReasons = ['word', 'manual', 'spam', 'other'] as const; export const ffVisibility = ['public', 'followers', 'private'] as const; + +export const moderationLogTypes = ['updateMeta', 'suspend', 'unsuspend', 'userNoteUpdated', 'addEmoji', 'roleAssigned', 'roleUnassigned', 'roleUpdated', 'roleDeleted'] as const; + +export type ModerationLogPayloads = { + updateMeta: { + before: any | null; + after: any | null; + }; + suspend: { + targetId: string; + }; + unsuspend: { + targetId: string; + }; + userNoteUpdated: { + userId: string; + before: string | null; + after: string | null; + }; + addEmoji: { + emojiId: string; + }; + roleAssigned: { + userId: string; + roleId: string; + roleName: string; + expiresAt: string | null; + }; + roleUnassigned: { + userId: string; + roleId: string; + roleName: string; + }; + roleUpdated: { + roleId: string; + before: any; + after: any; + }; + roleDeleted: { + roleId: string; + roleName: string; + }; +}; diff --git a/packages/misskey-js/etc/misskey-js.api.md b/packages/misskey-js/etc/misskey-js.api.md index 5cd679bce5..8837e81fc5 100644 --- a/packages/misskey-js/etc/misskey-js.api.md +++ b/packages/misskey-js/etc/misskey-js.api.md @@ -2278,7 +2278,8 @@ declare namespace entities { Invite, InviteLimit, UserSorting, - OriginType + OriginType, + ModerationLog } } export { entities } @@ -2516,6 +2517,16 @@ type MessagingMessage = { groupId: UserGroup['id'] | null; }; +// @public (undocumented) +type ModerationLog = { + id: ID; + createdAt: DateString; + type: string; + info: Record; + userId: User['id']; + user: UserDetailed | null; +}; + // @public (undocumented) export const mutedNoteReasons: readonly ["word", "manual", "spam", "other"];