import bcrypt from 'bcryptjs'; import define from '../../define.js'; import { UserProfiles, Users } from '@/models/index.js'; import { doPostSuspend } from '@/services/suspend-user.js'; import { publishUserEvent } from '@/services/stream.js'; import { createDeleteAccountJob } from '@/queue/index.js'; export const meta = { requireCredential: true, secure: true, } as const; export const paramDef = { type: 'object', properties: { password: { type: 'string' }, }, required: ['password'], } as const; // eslint-disable-next-line import/no-default-export export default define(meta, paramDef, async (ps, user) => { const profile = await UserProfiles.findOneByOrFail({ userId: user.id }); const userDetailed = await Users.findOneByOrFail({ id: user.id }); if (userDetailed.isDeleted) { return; } // Compare password const same = await bcrypt.compare(ps.password, profile.password!); if (!same) { throw new Error('incorrect password'); } // 物理削除する前にDelete activityを送信する await doPostSuspend(user).catch(e => {}); createDeleteAccountJob(user, { soft: false, }); await Users.update(user.id, { isDeleted: true, }); // Terminate streaming publishUserEvent(user.id, 'terminate', {}); });