send-crypto
Version:
A minimal JavaScript library / wallet for sending crypto assets
90 lines • 6.92 kB
JavaScript
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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