35 lines
930 B
JavaScript
35 lines
930 B
JavaScript
export function toBase64Url(buf) {
|
|
if (buf == null) return ''
|
|
if (typeof buf === 'string') return buf
|
|
const b = Buffer.isBuffer(buf) ? buf : Buffer.from(buf)
|
|
// Node supports 'base64url' on recent versions; keep fallback for safety.
|
|
try {
|
|
return b.toString('base64url')
|
|
} catch {
|
|
return b
|
|
.toString('base64')
|
|
.replace(/\+/g, '-')
|
|
.replace(/\//g, '_')
|
|
.replace(/=+$/g, '')
|
|
}
|
|
}
|
|
|
|
export function fromBase64Url(s) {
|
|
if (!s) return Buffer.alloc(0)
|
|
// Node supports 'base64url' on recent versions; keep fallback for safety.
|
|
try {
|
|
return Buffer.from(String(s), 'base64url')
|
|
} catch {
|
|
let v = String(s).replace(/-/g, '+').replace(/_/g, '/')
|
|
while (v.length % 4) v += '='
|
|
return Buffer.from(v, 'base64')
|
|
}
|
|
}
|
|
|
|
export function parseClientDataJSON(clientDataJSONB64Url) {
|
|
const json = fromBase64Url(clientDataJSONB64Url).toString('utf8')
|
|
return JSON.parse(json)
|
|
}
|
|
|
|
|