// Constants for username generation const WORDS = { adjectives: [ "azure", "crimson", "golden", "silver", "violet", "emerald", "cobalt", "amber", "coral", "jade", "cyber", "digital", "quantum", "neural", "binary", "cosmic", "stellar", "atomic", "crypto", "nano", "swift", "brave", "clever", "wise", "noble", "rapid", "bright", "sharp", "keen", "bold", "dynamic", "epic", "mega", "ultra", "hyper", "super", "prime", "elite", "alpha", "omega", "pixel", "vector", "sonic", "laser", "matrix", "nexus", "proxy", "cloud", "data", "tech", ], nouns: [ "coder", "hacker", "dev", "ninja", "guru", "wizard", "admin", "mod", "chief", "boss", "wolf", "eagle", "phoenix", "dragon", "tiger", "falcon", "shark", "lion", "hawk", "bear", "byte", "bit", "node", "stack", "cache", "chip", "core", "net", "web", "app", "star", "nova", "pulsar", "comet", "nebula", "quasar", "cosmos", "orbit", "astro", "solar", "mind", "soul", "spark", "pulse", "force", "power", "wave", "storm", "flash", "surge", ], prefixes: [ "the", "mr", "ms", "dr", "pro", "master", "lord", "captain", "chief", "agent", ], } as const // Helper function to get random element from array const getRandomElement = (array: readonly T[]): T => { return array[Math.floor(Math.random() * array.length)] } // Username pattern generators const usernamePatterns = { basic: (): string => { const adjective = getRandomElement(WORDS.adjectives) const noun = getRandomElement(WORDS.nouns) const number = Math.floor(Math.random() * 10000) return `${adjective}${noun}${number}` }, prefixed: (): string => { const prefix = getRandomElement(WORDS.prefixes) const noun = getRandomElement(WORDS.nouns) const number = Math.floor(Math.random() * 100) return `${prefix}${noun}${number}` }, doubleAdjective: (): string => { const adj1 = getRandomElement(WORDS.adjectives) const adj2 = getRandomElement(WORDS.adjectives) const noun = getRandomElement(WORDS.nouns) return `${adj1}${adj2}${noun}` }, doubleNoun: (): string => { const noun1 = getRandomElement(WORDS.nouns) const noun2 = getRandomElement(WORDS.nouns) const number = Math.floor(Math.random() * 100) return `${noun1}${number}${noun2}` }, } export function generateUsername(): string { const patterns = Object.values(usernamePatterns) const selectedPattern = getRandomElement(patterns) return selectedPattern() } export async function generateUniqueUsername( checkExists: (username: string) => Promise ): Promise { const MAX_ATTEMPTS = 10 let attempts = 0 let username = generateUsername() while ((await checkExists(username)) && attempts < MAX_ATTEMPTS) { username = generateUsername() attempts++ } if (attempts >= MAX_ATTEMPTS) { // Add a large random number to ensure uniqueness username = generateUsername() + Math.floor(Math.random() * 1000000) } return username }