import { hash128 } from './murmur3_128'; export type Hash64 = { hex: string, dec: string }; /** * Use instead of parseInt, to not lose precision when converting big integers (greater than 2^53 - 1) */ function hex2dec(s: string): string { let i, j, digits = [0], carry; for (i = 0; i < s.length; i += 1) { carry = parseInt(s.charAt(i), 16); for (j = digits.length - 1; j >= 0; j -= 1) { digits[j] = digits[j] * 16 + carry; carry = digits[j] / 10 | 0; digits[j] %= 10; } while (carry > 0) { digits.unshift(carry % 10); carry = carry / 10 | 0; } } return digits.join(''); } /** * Gets the higher 64 bits of the x64 version of Murmur3 for 128bits, as decimal and hexadecimal number strings. * Used for MySegments channel V2 notifications. * @param str - The string to hash */ export function hash64(str: string): Hash64 { const hex = hash128(str).slice(0, 16); return { hex, // BoundedFetchRequest notification dec: hex2dec(hex) // KeyList notification }; }