| 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()}` |
| } |
|
|