iso8583_esm
Version:
A javascript library for messaging in iso 8583 messaging format.
87 lines (86 loc) • 2.84 kB
JavaScript
import { DefaultError } from './errors';
/**
* Module for validating field data types.
* @module DataTypes
*/
function isQuoted(s) {
if (!s)
return false;
return (s[0] === "'" && s[s.length - 1] === "'") || (s[0] === '"' && s[s.length - 1] === '"');
}
/**
* @method
* @param {object} format The field format configuration
* @param {string} data String of data on a field of ISO 8583 message
* @param {string} field an ISO 8583 field
* @returns {boolean} true
* @returns {object} {error: 'some error'}
* @example checkDataType({
ContentType: 'n',
Label: 'Primary account number (PAN)',
LenType: 'llvar',
MaxLen: 19,
MinLen: 1
}, "4462881486386377", 3) -> true
* @example checkDataType({
ContentType: 'n',
Label: 'Primary account number (PAN)',
LenType: 'llvar',
MaxLen: 19,
MinLen: 1
}, "446288148638637X", 3) -> { error: 'while processing field 3 : provided data is not of type n'}
*/
export function checkDataType(format, _data, field) {
let data = _data;
// @ts-ignore
if (isQuoted(_data))
data = _data?.slice(1, -1);
if (!data)
return new DefaultError(`field ${field} is empty`);
const regex = {
a: /[A-Z]/i,
n: /[0-9]/i,
b: /[0-9ABCDEF]/i,
p: /[*#]/i,
an: /[0-9a-z]/i,
ans: /[0-9a-z-!@$%^&*()_+|~=`{}\[\]:";'<>?,.\/ ]/i,
ns: /[0-9-!@$%^&*()_+|~=`{}\[\]:";'<>?,.\/ ]/i,
s: /[-!@$%^&*()_+|~=`{}\[\]:";'<>?,.\/ ]/i,
anp: /[0-9a-z*#\x20]/i,
'x+n': /[0-9]/i,
};
const type = format?.ContentType;
switch (type) {
case 'a':
case 'n':
case 'b':
case 'an':
case 'ans':
case 'ns':
case 's':
case 'p':
case 'anp':
for (let i = 0; i < data.length; i++)
if (!data[i].match(regex[type]))
return new DefaultError('while processing field ' + field + ": provided data is not of type '" + type + "'");
return true;
case 'x+n': {
let state = false;
if (data[0].match(/[c,d]/i)) {
for (let i = 2; i < data.length; i++) {
if (data[i].length === 1 && data[i].match(regex[type]))
state = true;
else
return new DefaultError('while processing field ' + field + ": provided data is not of type '" + type + "'");
}
}
else
return new DefaultError('while processing field ' + field + ": provided data is not of type '" + type + "'");
return state;
}
case 'z':
return true;
default:
return new DefaultError('type ' + type + ' is not implemented on field ' + field);
}
}