pix-utils
Version:
Set of tools to parse, generate and validate payments of Brazil Instant Payment System (Pix)
59 lines • 7.67 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.parsePix = parsePix;
exports.extractMandatoryElements = extractMandatoryElements;
exports.extractElements = extractElements;
const assembler_1 = require("./assembler");
const crc_1 = require("./crc");
const emvHandler_1 = require("./emvHandler");
const pixElements_1 = require("./types/pixElements");
const pixEmvSchema_1 = require("./types/pixEmvSchema");
const generateErrorObject_1 = require("./utils/generateErrorObject");
const validate_1 = require("./validate");
function parsePix(brCode) {
// Parse EMV Code
const emvElements = (0, emvHandler_1.parseEmv)({ emvCode: brCode });
if (!emvElements.isValid)
return (0, generateErrorObject_1.generateErrorObject)('invalid emv code');
// Validate CRC16
const crc = (0, crc_1.computeCRC)(brCode);
if (crc !== emvElements.getTag(pixEmvSchema_1.EmvSchema.TAG_CRC))
return (0, generateErrorObject_1.generateErrorObject)('invalid crc');
// Extract Elements
const elements = extractElements(emvElements);
if ((0, validate_1.hasElementError)(elements))
return (0, generateErrorObject_1.generateErrorObject)(elements.message);
return (0, assembler_1.generatePixObject)(elements);
}
function extractMandatoryElements(emvElements) {
return {
merchantCategoryCode: emvElements.getTag(pixEmvSchema_1.EmvSchema.TAG_MCC),
transactionCurrency: emvElements.getTag(pixEmvSchema_1.EmvSchema.TAG_TRANSACTION_CURRENCY),
countryCode: emvElements.getTag(pixEmvSchema_1.EmvSchema.TAG_COUNTRY_CODE),
merchantName: emvElements.getTag(pixEmvSchema_1.EmvSchema.TAG_MERCHANT_NAME),
merchantCity: emvElements.getTag(pixEmvSchema_1.EmvSchema.TAG_MERCHANT_CITY),
};
}
function extractElements(emvElements) {
const basicElements = extractMandatoryElements(emvElements);
const isRecurrence = (0, validate_1.isPix)(emvElements, 'recurrence');
if ((0, validate_1.isPix)(emvElements, 'static')) {
const amountNumber = +emvElements.getTag(pixEmvSchema_1.EmvSchema.TAG_TRANSACTION_AMOUNT);
const transactionAmount = !isNaN(amountNumber) ? amountNumber : 0;
return Object.assign(Object.assign({ type: pixElements_1.PixElementType.STATIC }, basicElements), { pixKey: emvElements.getSubTag(pixEmvSchema_1.EmvMaiSchema.TAG_MAI_PIXKEY, pixEmvSchema_1.EmvSchema.TAG_MAI), transactionAmount, infoAdicional: emvElements.getSubTag(pixEmvSchema_1.EmvMaiSchema.TAG_MAI_INFO_ADD, pixEmvSchema_1.EmvSchema.TAG_MAI), txid: emvElements.getSubTag(pixEmvSchema_1.EmvAdditionalDataSchema.TAG_TXID, pixEmvSchema_1.EmvSchema.TAG_ADDITIONAL_DATA), fss: emvElements.getSubTag(pixEmvSchema_1.EmvMaiSchema.TAG_MAI_FSS, pixEmvSchema_1.EmvSchema.TAG_MAI), urlRec: isRecurrence
? emvElements.getSubTag(pixEmvSchema_1.EmvMaiSchema.TAG_MAI_URL, pixEmvSchema_1.EmvSchema.TAG_UNRESERVED_TEMPLATE)
: undefined });
}
if ((0, validate_1.isPix)(emvElements, 'dynamic')) {
return Object.assign(Object.assign({ type: pixElements_1.PixElementType.DYNAMIC }, basicElements), { url: emvElements.getSubTag(pixEmvSchema_1.EmvMaiSchema.TAG_MAI_URL, pixEmvSchema_1.EmvSchema.TAG_MAI), urlRec: isRecurrence
? emvElements.getSubTag(pixEmvSchema_1.EmvMaiSchema.TAG_MAI_URL, pixEmvSchema_1.EmvSchema.TAG_UNRESERVED_TEMPLATE)
: undefined });
}
if (isRecurrence) {
return Object.assign(Object.assign({ type: pixElements_1.PixElementType.RECURRENCE }, basicElements), { url: undefined, urlRec: emvElements.getSubTag(pixEmvSchema_1.EmvMaiSchema.TAG_MAI_URL, pixEmvSchema_1.EmvSchema.TAG_UNRESERVED_TEMPLATE) });
}
if (!(0, validate_1.isPix)(emvElements, 'pix') || !(0, validate_1.isPix)(emvElements, 'valid'))
return (0, generateErrorObject_1.generateErrorObject)('invalid pix');
return (0, generateErrorObject_1.generateErrorObject)('error');
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3BhcnNlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQW1CQSw0QkFnQkM7QUFFRCw0REFVQztBQUVELDBDQWdFQztBQWpIRCwyQ0FBZ0Q7QUFDaEQsK0JBQW1DO0FBQ25DLDZDQUF3QztBQUN4QyxxREFLNkI7QUFDN0IsdURBSzhCO0FBRTlCLHFFQUFrRTtBQUNsRSx5Q0FBb0Q7QUFFcEQsU0FBZ0IsUUFBUSxDQUFDLE1BQWM7SUFDckMsaUJBQWlCO0lBQ2pCLE1BQU0sV0FBVyxHQUFHLElBQUEscUJBQVEsRUFBQyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ2xELElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTztRQUFFLE9BQU8sSUFBQSx5Q0FBbUIsRUFBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBRXpFLGlCQUFpQjtJQUNqQixNQUFNLEdBQUcsR0FBRyxJQUFBLGdCQUFVLEVBQUMsTUFBTSxDQUFDLENBQUM7SUFDL0IsSUFBSSxHQUFHLEtBQUssV0FBVyxDQUFDLE1BQU0sQ0FBQyx3QkFBUyxDQUFDLE9BQU8sQ0FBQztRQUMvQyxPQUFPLElBQUEseUNBQW1CLEVBQUMsYUFBYSxDQUFDLENBQUM7SUFFNUMsbUJBQW1CO0lBQ25CLE1BQU0sUUFBUSxHQUFHLGVBQWUsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUU5QyxJQUFJLElBQUEsMEJBQWUsRUFBQyxRQUFRLENBQUM7UUFBRSxPQUFPLElBQUEseUNBQW1CLEVBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBRTVFLE9BQU8sSUFBQSw2QkFBaUIsRUFBQyxRQUFRLENBQWUsQ0FBQztBQUNuRCxDQUFDO0FBRUQsU0FBZ0Isd0JBQXdCLENBQ3RDLFdBQXNCO0lBRXRCLE9BQU87UUFDTCxvQkFBb0IsRUFBRSxXQUFXLENBQUMsTUFBTSxDQUFDLHdCQUFTLENBQUMsT0FBTyxDQUFDO1FBQzNELG1C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