UNPKG

check-ethereum-scanner

Version:

Safety checks for new Ethereum tokens

45 lines (37 loc) 1.16 kB
'use strict' const { Buffer } = require('buffer') module.exports = function base64 (alphabet) { // The alphabet is only used to know: // 1. If padding is enabled (must contain '=') // 2. If the output must be url-safe (must contain '-' and '_') // 3. If the input of the output function is valid // The alphabets from RFC 4648 are always used. const padding = alphabet.indexOf('=') > -1 const url = alphabet.indexOf('-') > -1 && alphabet.indexOf('_') > -1 return { encode (input) { let output = '' if (typeof input === 'string') { output = Buffer.from(input).toString('base64') } else { output = input.toString('base64') } if (url) { output = output.replace(/\+/g, '-').replace(/\//g, '_') } const pad = output.indexOf('=') if (pad > 0 && !padding) { output = output.substring(0, pad) } return output }, decode (input) { for (const char of input) { if (alphabet.indexOf(char) < 0) { throw new Error('invalid base64 character') } } return Buffer.from(input, 'base64') } } }