UNPKG

send-crypto

Version:

A minimal JavaScript library / wallet for sending crypto assets

90 lines 6.92 kB
import * as base64 from "base64-js"; /** * Remove 0x prefix from a hex string. If the input doesn't have a 0x prefix, * it's returned unchanged. * * @param hex The hex value to be prefixed. */ export const strip0x = (hex) => { return hex.substring(0, 2) === "0x" ? hex.slice(2) : hex; }; /** * Convert a Uint8Array to a hex string (with no "0x"-prefix). */ export const toHex = (array) => array.reduce((str, byte) => str + byte.toString(16).padStart(2, "0"), ""); /** * Add a 0x prefix to a hex value, converting to a string first. If the input * is already prefixed, it's returned unchanged. * * @param hexInput The hex value to be prefixed. */ export const Ox = (hexInput, { prefix } = { prefix: "0x" }) => { let hexString = hexInput instanceof Uint8Array ? toHex(hexInput) : typeof hexInput === "number" ? hexInput.toString(16) : hexInput; if (hexString.length % 2 === 1) { hexString = "0" + hexString; } return hexString.substring(0, 2) === prefix ? hexString : `${prefix}${hexString}`; }; /** * Convert a hex string to a Uint8Array. */ export const fromHex = (hexString) => { // Strip "0x" prefix. hexString = strip0x(hexString); // Pad the hex string. if (hexString.length % 2) { hexString = "0" + hexString; } // Split the string into bytes. const match = hexString.match(/.{1,2}/g); if (!match) { return new Uint8Array(); } // Parse each byte and create a Uint8Array. return new Uint8Array(match.map((byte) => parseInt(byte, 16))); }; /** * https://stackoverflow.com/questions/2450954/how-to-randomize-shuffle-a-javascript-array/12646864#12646864 * Randomize array element order in-place. * Using Durstenfeld shuffle algorithm. */ export const shuffleArray = (...arrayIn) => { const array = arrayIn.length === 1 && Array.isArray(arrayIn[0]) ? arrayIn[0] : arrayIn; for (let i = array.length - 1; i > 0; i--) { const j = Math.floor(Math.random() * (i + 1)); [array[i], array[j]] = [array[j], array[i]]; } return array; }; export const toUTF8String = (input) => { let TextDecoderConstructor = // @ts-expect-error (window is not defined) (window || {}).TextDecoder || require("util").TextDecoder; const textDecoder = new TextDecoderConstructor(); return textDecoder.decode(input); }; export const fromUTF8String = (input) => { let TextEncoderConstructor = // @ts-expect-error (window is not defined) (window || {}).TextEncoder || require("util").TextEncoder; const textEncoder = new TextEncoderConstructor(); return textEncoder.encode(input); }; /** * Convert a base64 string to a Uint8Array. */ export const fromBase64 = (base64String) => { return base64.toByteArray(base64String); }; export const toBase64 = (input) => { return base64.fromByteArray(input); }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxNQUFNLE1BQU0sV0FBVyxDQUFDO0FBRXBDOzs7OztHQUtHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLENBQUMsR0FBVyxFQUFVLEVBQUU7SUFDM0MsT0FBTyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztBQUM3RCxDQUFDLENBQUM7QUFFRjs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLEtBQUssR0FBRyxDQUFDLEtBQWlCLEVBQVUsRUFBRSxDQUMvQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUU5RTs7Ozs7R0FLRztBQUNILE1BQU0sQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUNkLFFBQXNDLEVBQ3RDLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQ3ZCLEVBQUU7SUFDUixJQUFJLFNBQVMsR0FDVCxRQUFRLFlBQVksVUFBVTtRQUMxQixDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQztRQUNqQixDQUFDLENBQUMsT0FBTyxRQUFRLEtBQUssUUFBUTtZQUM5QixDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7WUFDdkIsQ0FBQyxDQUFDLFFBQVEsQ0FBQztJQUVuQixJQUFJLFNBQVMsQ0FBQyxNQUFNLEdB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