const { ObjectId, waitForDb } = require('../app/src/infrastructure/mongodb') const UserUpdater = require('../app/src/Features/User/UserUpdater') const UserGetter = require('../app/src/Features/User/UserGetter') waitForDb() .then(removeEmail) .catch(error => { console.error(error) process.exit(1) }) .then(() => { console.log('Done.') process.exit() }) async function removeEmail() { const userId = process.argv[2] let email = process.argv[3] if (!ObjectId.isValid(userId)) { throw new Error(`user ID ${userId} is not valid`) } if (!email) { throw new Error('no email provided') } // email arg can be within double quotes for arg so that we can handle // malformed emails with spaces email = email.replace(/"/g, '') console.log( `\nBegin request to remove email "${email}" from user "${userId}"\n` ) const userWithEmail = await UserGetter.promises.getUserByAnyEmail(email, { _id: 1, }) if (!userWithEmail) { throw new Error(`no user found with email "${email}"`) } if (userWithEmail._id.toString() !== userId) { throw new Error( `email does not belong to user. Belongs to ${userWithEmail._id}` ) } const auditLog = { initiatorId: undefined, ipAddress: '0.0.0.0', extraInfo: { script: true, }, } const skipParseEmail = true await UserUpdater.promises.removeEmailAddress( userId, email, auditLog, skipParseEmail ) }