/** * Player Identifier Management * * Generates and manages a unique player identifier (UUID) that is stored * in localStorage. This identifier is used to sync game states across * different domains (hoerdle.de and hördle.de). */ const STORAGE_KEY = 'hoerdle_player_id'; /** * Generate a UUID v4 */ function generatePlayerId(): string { // UUID v4 format: xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) { const r = Math.random() * 16 | 0; const v = c === 'x' ? r : (r & 0x3 | 0x8); return v.toString(16); }); } /** * Get or create a player identifier * * If no identifier exists in localStorage, a new UUID is generated and stored. * The same identifier is used across all domains (hoerdle.de and hördle.de). * * @returns Player identifier (UUID v4) */ export function getOrCreatePlayerId(): string { if (typeof window === 'undefined') { // Server-side: return empty string (not used on server) return ''; } let playerId = localStorage.getItem(STORAGE_KEY); if (!playerId) { playerId = generatePlayerId(); localStorage.setItem(STORAGE_KEY, playerId); } return playerId; } /** * Get the current player identifier without creating a new one * * @returns Player identifier or null if not set */ export function getPlayerId(): string | null { if (typeof window === 'undefined') { return null; } return localStorage.getItem(STORAGE_KEY); }