graphql-types-credit-card
Version:
GraphQL Normalized Credit Card Type
50 lines (46 loc) • 1.07 kB
JavaScript
const { GraphQLScalarType } = require('graphql')
const cc = require('credit-card')
function parse (value) {
const {
card,
validCardNumber,
validCvv: validCVV,
validExpiryMonth,
validExpiryYear,
isExpired
} = cc.validate(getPayload())
if (validCardNumber) {
return Object.assign(card, {
validCVV,
validExpiryMonth,
validExpiryYear,
isExpired
})
}
function getPayload () {
switch (typeof value) {
case 'string':
case 'number': {
const number = value.toString().replace(/\D/g, '')
const cardType = cc.determineCardType(number)
return {
number,
cardType
}
}
default: return Object.assign({}, value, {
number: value.number.toString().replace(/\D/g, ''),
cardType: value.cardType || value.type
})
}
}
}
module.exports = new GraphQLScalarType({
name: 'CreditCard',
description: 'Valid US credit card',
serialize: parse,
parseValue: parse,
parseLiteral (ast) {
return parse(ast.value)
}
})