jose/lib/help/base64url.js
2020-02-03 14:07:28 +01:00

45 lines
1.1 KiB
JavaScript

const fromBase64 = (base64) => {
return base64.replace(/=/g, '').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 decodeToBuffer = (input) => {
return Buffer.from(input, 'base64')
}
const decode = (input, encoding = 'utf8') => {
return decodeToBuffer(input).toString(encoding)
}
const b64uJSON = {
encode: (input) => {
return encode(JSON.stringify(input))
},
decode: (input, encoding = 'utf8') => {
return JSON.parse(decode(input, encoding))
}
}
b64uJSON.decode.try = (input, encoding = 'utf8') => {
try {
return b64uJSON.decode(input, encoding)
} catch (err) {
return decode(input, encoding)
}
}
const encodeBN = (bn) => encodeBuffer(bn.toBuffer())
module.exports.decode = decode
module.exports.decodeToBuffer = decodeToBuffer
module.exports.encode = encode
module.exports.encodeBuffer = encodeBuffer
module.exports.JSON = b64uJSON
module.exports.encodeBN = encodeBN