diff --git a/bindings/nodejs/lib/utils/index.ts b/bindings/nodejs/lib/utils/index.ts index c15676adf4..296753ff95 100644 --- a/bindings/nodejs/lib/utils/index.ts +++ b/bindings/nodejs/lib/utils/index.ts @@ -4,3 +4,34 @@ export * from './utf8'; export * from './utils'; export * from '../types/utils'; + +/** + * Converts a byte array to a hexadecimal string. + * + * @param {Uint8Array} byteArray - The bytes to encode. + * @param {boolean} [prefix=false] - Whether to include the '0x' prefix in the resulting hexadecimal string. + * @returns {string} The hexadecimal representation of the input byte array. + */ +export const bytesToHex = (bytes: ArrayLike, prefix = false) => { + const hexArray = Array.from(bytes, (byte) => + byte.toString(16).padStart(2, '0'), + ); + const hexString = hexArray.join(''); + return prefix ? '0x' + hexString : hexString; +}; + +/** + * Converts a hexadecimal string to a Uint8Array byte array. + * + * @param {string} hexString - The hexadecimal string to be converted. + * @returns {Uint8Array} The Uint8Array byte array representation of the input hexadecimal string. + * @throws {Error} Will throw an error if the input string is not a valid hexadecimal string. + */ +export const hexToBytes = (hexString: string) => { + const hex = hexString.replace(/^0x/, ''); + const bytes = []; + for (let i = 0; i < hex.length; i += 2) { + bytes.push(parseInt(hex.substr(i, 2), 16)); + } + return new Uint8Array(bytes); +}; diff --git a/bindings/nodejs/lib/utils/utf8.ts b/bindings/nodejs/lib/utils/utf8.ts index 905659d104..b01e6151c2 100644 --- a/bindings/nodejs/lib/utils/utf8.ts +++ b/bindings/nodejs/lib/utils/utf8.ts @@ -11,7 +11,7 @@ export const utf8ToBytes = (utf8: string) => { /** Convert hex encoded string to UTF8 string */ export const hexToUtf8 = (hex: HexEncodedString) => - decodeURIComponent(hex.replace('0x', '').replace(/[0-9a-f]{2}/g, '%$&')); + decodeURIComponent(hex.replace(/^0x/, '').replace(/[0-9a-f]{2}/g, '%$&')); /** Convert UTF8 string to hex encoded string */ export const utf8ToHex = (utf8: string) =>