const { sha512 } = require('js-sha512'); const ERRORS = { TYPE: 'Password must be a string', LENGTH: 'Password must be between 6 and 50 characters long', CHARACTER: 'Password must only contain letters, numbers and symbols', }; const generateHash = phrase => phrase && sha512(phrase.trim()); const matchesHash = (phrase, hash) => phrase && sha512(phrase.trim()) === hash.trim(); const validatePassword = (phrase, i18n) => { if (typeof phrase !== 'string') { return i18n ? i18n('passwordTypeError') : ERRORS.TYPE; } const trimmed = phrase.trim(); if (trimmed.length < 6 || trimmed.length > 50) { return i18n ? i18n('passwordLengthError') : ERRORS.LENGTH; } // Restrict characters to letters, numbers and symbols const characterRegex = /^[a-zA-Z0-9-!()._`~@#$%^&*+=[\]{}|<>,;: ]+$/; if (!characterRegex.test(trimmed)) { return i18n ? i18n('passwordCharacterError') : ERRORS.CHARACTER; } return null; }; module.exports = { generateHash, matchesHash, validatePassword, };