19 lines
871 B
TypeScript
19 lines
871 B
TypeScript
/** UUID v4 for operation identifiers; retries keep the caller's existing key. */
|
|
export function createOperationKey(): string {
|
|
const secureRandom = globalThis.crypto;
|
|
if (typeof secureRandom?.randomUUID === 'function')
|
|
return secureRandom.randomUUID();
|
|
if (typeof secureRandom?.getRandomValues !== 'function') {
|
|
throw new Error(
|
|
'O navegador não disponibiliza geração criptográfica segura. Reabra o portal no endereço HTTPS configurado.',
|
|
);
|
|
}
|
|
const bytes = secureRandom.getRandomValues(new Uint8Array(16));
|
|
bytes[6] = (bytes[6] & 0x0f) | 0x40;
|
|
bytes[8] = (bytes[8] & 0x3f) | 0x80;
|
|
const hex = Array.from(bytes, (byte) =>
|
|
byte.toString(16).padStart(2, '0'),
|
|
).join('');
|
|
return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20)}`;
|
|
}
|