const fromBase64 = (base64) => { return base64.replace(/=/g, '').replace(/\+/g, '-').replace(/\//g, '_') } const toBase64 = (base64url) => { return base64url.replace(/-/g, '+').replace(/_/g, '/') } const encode = (input, encoding = 'utf8') => { return fromBase64(Buffer.from(input, encoding).toString('base64')) } const encodeBuffer = (buf) => { return fromBase64(buf.toString('base64')) } const decode = (input, encoding = 'utf8') => { return Buffer.from(toBase64(input), 'base64').toString(encoding) } const decodeToBuffer = (input) => { return Buffer.from(toBase64(input), 'base64') } const b64uJSON = { encode: (input) => { return encode(JSON.stringify(input)) }, decode: (input) => { return JSON.parse(decode(input)) } } b64uJSON.decode.try = (input) => { try { return b64uJSON.decode(input) } catch (err) { return decode(input) } } module.exports.decode = decode module.exports.decodeToBuffer = decodeToBuffer module.exports.encode = encode module.exports.encodeBuffer = encodeBuffer module.exports.JSON = b64uJSON