import { TraceID } from "./tracecontext"; /** * traceIDToString converts a trace ID to a string using the custom base 32 encoding * that Encore uses. */ export function traceIDToString(traceID: TraceID): string { return encoreBase32Encoding(traceID); } /** * Custom Base32 encoder using a character set "0123456789abcdefghijklmnopqrstuv". */ function encoreBase32Encoding(data: Uint8Array): string { const charset = "0123456789abcdefghijklmnopqrstuv"; let output = ""; let buffer = 0; let bufferLength = 0; // eslint-disable-next-line @typescript-eslint/prefer-for-of for (let i = 0; i < data.length; i++) { buffer = (buffer << 8) | data[i]; bufferLength += 8; while (bufferLength >= 5) { output += charset[(buffer >> (bufferLength - 5)) & 0x1f]; bufferLength -= 5; } } // Handle remaining data in buffer, if any if (bufferLength > 0) { output += charset[(buffer << (5 - bufferLength)) & 0x1f]; } return output; }