46 lines
1.4 KiB
JavaScript
46 lines
1.4 KiB
JavaScript
const { JWTClaimInvalid } = require('../errors')
|
|
|
|
const isNotString = val => typeof val !== 'string' || val.length === 0
|
|
const isNotArrayOfStrings = val => !Array.isArray(val) || val.length === 0 || val.some(isNotString)
|
|
const isRequired = (Err, value, label, claim) => {
|
|
if (value === undefined) {
|
|
throw new Err(`${label} is missing`, claim, 'missing')
|
|
}
|
|
}
|
|
const isString = (Err, value, label, claim, required = false) => {
|
|
if (required) {
|
|
isRequired(Err, value, label, claim)
|
|
}
|
|
|
|
if (value !== undefined && isNotString(value)) {
|
|
throw new Err(`${label} must be a string`, claim, 'invalid')
|
|
}
|
|
}
|
|
const isTimestamp = (value, label, required = false) => {
|
|
if (required && value === undefined) {
|
|
throw new JWTClaimInvalid(`"${label}" claim is missing`, label, 'missing')
|
|
}
|
|
|
|
if (value !== undefined && (typeof value !== 'number')) {
|
|
throw new JWTClaimInvalid(`"${label}" claim must be a JSON numeric value`, label, 'invalid')
|
|
}
|
|
}
|
|
const isStringOrArrayOfStrings = (value, label, required = false) => {
|
|
if (required && value === undefined) {
|
|
throw new JWTClaimInvalid(`"${label}" claim is missing`, label, 'missing')
|
|
}
|
|
|
|
if (value !== undefined && (isNotString(value) && isNotArrayOfStrings(value))) {
|
|
throw new JWTClaimInvalid(`"${label}" claim must be a string or array of strings`, label, 'invalid')
|
|
}
|
|
}
|
|
|
|
module.exports = {
|
|
isNotArrayOfStrings,
|
|
isRequired,
|
|
isNotString,
|
|
isString,
|
|
isTimestamp,
|
|
isStringOrArrayOfStrings
|
|
}
|