export function makeClientUuid(): string { const cryptoApi = globalThis.crypto if (cryptoApi?.randomUUID) { return cryptoApi.randomUUID() } const bytes = new Uint8Array(16) if (cryptoApi?.getRandomValues) { cryptoApi.getRandomValues(bytes) } else { for (let i = 0; i < bytes.length; i += 1) { bytes[i] = Math.floor(Math.random() * 256) } } bytes[6] = (bytes[6] & 0x0f) | 0x40 bytes[8] = (bytes[8] & 0x3f) | 0x80 const hex = Array.from(bytes, byte => byte.toString(16).padStart(2, '0')) return [ hex.slice(0, 4).join(''), hex.slice(4, 6).join(''), hex.slice(6, 8).join(''), hex.slice(8, 10).join(''), hex.slice(10, 16).join(''), ].join('-') } export function makeClientMessageId(): string { return `client-${makeClientUuid()}` } export function makeClientRequestId(): string { return `request-${makeClientUuid()}` } export function makeDeviceId(): string { return `device_${makeClientUuid()}` }