request-password-reset.js 857 Bytes
/**
 * 请求密码重置:只有已注册邮箱可以接收重置验证码。
 */

import { AuthError } from './errors.js'

/**
 * @param {Object} deps
 * @param {import('./index.js').UserRepo} deps.userRepo
 * @param {(args: { email: string, purpose: 'reset', locale?: string, ip?: string }) => Promise<{ ok: true }>} deps.sendCode
 * @returns {(args: { email: string, locale?: string, ip?: string }) => Promise<{ ok: true }>}
 */
export function makeRequestPasswordReset({ userRepo, sendCode }) {
  return async function requestPasswordReset({ email, locale, ip }) {
    const normalized = String(email).trim().toLowerCase()
    const user = await userRepo.findByEmail(normalized)
    if (!user) throw new AuthError({ code: 'USER_NOT_FOUND' })

    return sendCode({
      email: normalized,
      purpose: 'reset',
      locale,
      ip,
    })
  }
}