hive-keychain-commons
Version:
Platform-agnostic functions used in Hive Keychain mobile and extensions
51 lines (50 loc) • 2.17 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.AccountsUtils = void 0;
const HIVE_MIN_ACCOUNT_NAME_LENGTH = 3;
const HIVE_MAX_ACCOUNT_NAME_LENGTH = 16;
var UsernameValidation;
(function (UsernameValidation) {
UsernameValidation[UsernameValidation["too_short"] = 0] = "too_short";
UsernameValidation[UsernameValidation["too_long"] = 1] = "too_long";
UsernameValidation[UsernameValidation["invalid_segment_length"] = 2] = "invalid_segment_length";
UsernameValidation[UsernameValidation["invalid_first_character"] = 3] = "invalid_first_character";
UsernameValidation[UsernameValidation["invalid_last_character"] = 4] = "invalid_last_character";
UsernameValidation[UsernameValidation["invalid_middle_characters"] = 5] = "invalid_middle_characters";
UsernameValidation[UsernameValidation["valid"] = 6] = "valid";
})(UsernameValidation || (UsernameValidation = {}));
const validateUsername = (name) => {
const len = name.length;
if (len < HIVE_MIN_ACCOUNT_NAME_LENGTH)
return UsernameValidation.too_short;
if (len > HIVE_MAX_ACCOUNT_NAME_LENGTH)
return UsernameValidation.too_long;
let begin = 0;
while (true) {
let end = name.indexOf('.', begin);
if (end === -1)
end = len;
if (end - begin < 3)
return UsernameValidation.invalid_segment_length;
const segment = name.slice(begin, end);
// Check first character: must be a-z
if (!/^[a-z]/.test(segment[0]))
return UsernameValidation.invalid_first_character;
// Check last character: must be a-z or 0-9
if (!/[a-z0-9]$/.test(segment[segment.length - 1]))
return UsernameValidation.invalid_last_character;
// Check middle characters
for (let i = 1; i < segment.length - 1; i++) {
if (!/[a-z0-9-]/.test(segment[i]))
return UsernameValidation.invalid_middle_characters;
}
if (end === len)
break;
begin = end + 1;
}
return UsernameValidation.valid;
};
exports.AccountsUtils = {
UsernameValidation,
validateUsername,
};