UNPKG

sfccxt

Version:

A JavaScript / Python / PHP cryptocurrency trading library with support for 130+ exchanges

119 lines (98 loc) 4.37 kB
"use strict"; /* ------------------------------------------------------------------------ */ const CryptoJS = require ('../../static_dependencies/crypto-js/crypto-js') const qs = require ('../../static_dependencies/qs/index') const BN = require ('../../static_dependencies/BN/bn') /* ------------------------------------------------------------------------ */ // global vars for base58 encoding const base58Alphabet = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz' let base58Decoder = null let base58Encoder = null /* ------------------------------------------------------------------------ */ module.exports = { json: (data, params = undefined) => JSON.stringify (data) , isJsonEncodedObject: object => ( (typeof object === 'string') && (object.length >= 2) && ((object[0] === '{') || (object[0] === '[')) ) , stringToBinary: string => CryptoJS.enc.Latin1.parse (string) , stringToBase64: string => CryptoJS.enc.Latin1.parse (string).toString (CryptoJS.enc.Base64) , base64ToBinary: string => CryptoJS.enc.Base64.parse (string) , base64ToString: string => CryptoJS.enc.Base64.parse (string).toString (CryptoJS.enc.Utf8) , binaryToBase64: binary => binary.toString (CryptoJS.enc.Base64) , base16ToBinary: string => CryptoJS.enc.Hex.parse (string) , binaryToBase16: binary => binary.toString (CryptoJS.enc.Hex) , binaryConcat: (...args) => args.reduce ((a, b) => a.concat (b)) , binaryConcatArray: (arr) => arr.reduce ((a, b) => a.concat (b)) , urlencode: object => qs.stringify (object) , urlencodeNested: object => qs.stringify (object) // implemented only in python , urlencodeWithArrayRepeat: object => qs.stringify (object, { arrayFormat: 'repeat' }) , rawencode: object => qs.stringify (object, { encode: false }) , encode: x => x , decode: x => x // Url-safe-base64 without equals signs, with + replaced by - and slashes replaced by underscores , urlencodeBase64: base64string => base64string.replace (/[=]+$/, '') .replace (/\+/g, '-') .replace (/\//g, '_') , numberToLE: (n, padding) => { const hexArray = new BN (n).toArray ('le', padding) return byteArrayToWordArray (hexArray) } , numberToBE: (n, padding) => { const hexArray = new BN (n).toArray ('be', padding) return byteArrayToWordArray (hexArray) } , base58ToBinary: (string) => { if (!base58Decoder) { base58Decoder = {} base58Encoder = {} for (let i = 0; i < 58; i++) { const c = base58Alphabet[i] const bigNum = new BN (i) base58Decoder[c] = bigNum base58Encoder[bigNum] = c } } let result = new BN (0) const base = new BN (58) for (let i = 0; i < string.length; i++) { const character = string[i] result.imul (base) result.iadd (base58Decoder[character]) } return byteArrayToWordArray (result.toArray ('be')) } , binaryToBase58: (wordArray) => { if (!base58Encoder) { base58Decoder = {} base58Encoder = {} for (let i = 0; i < 58; i++) { const c = base58Alphabet[i] const bigNum = new BN (i) base58Decoder[c] = bigNum base58Encoder[bigNum] = c } } const base = new BN (58) // hex is only compatible encoding between cryptojs and BN const hexString = wordArray.toString (CryptoJS.enc.Hex) let result = new BN (hexString, 16) let string = [] while (!result.isZero ()) { const { div, mod } = result.divmod (base) result = div string.push (base58Encoder[mod]) } return string.reverse ().join ('') } } function byteArrayToWordArray (ba) { const wa = [] for (let i = 0; i < ba.length; i++) { wa[(i / 4) | 0] |= ba[i] << (24 - 8 * i) } return CryptoJS.lib.WordArray.create (wa, ba.length) } module.exports['byteArrayToWordArray'] = byteArrayToWordArray /* ------------------------------------------------------------------------ */