UNPKG

pix-utils

Version:

Set of tools to parse, generate and validate payments of Brazil Instant Payment System (Pix)

52 lines 6.34 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.extractElements = exports.extractMandatoryElements = exports.parsePix = void 0; 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); } exports.parsePix = parsePix; 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), }; } exports.extractMandatoryElements = extractMandatoryElements; function extractElements(emvElements) { const basicElements = extractMandatoryElements(emvElements); 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) }); } 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) }); } 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'); } exports.extractElements = extractElements; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3BhcnNlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwyQ0FBZ0Q7QUFDaEQsK0JBQW1DO0FBQ25DLDZDQUF3QztBQUN4QyxxREFLNkI7QUFDN0IsdURBSzhCO0FBRTlCLHFFQUFrRTtBQUNsRSx5Q0FBb0Q7QUFFcEQsU0FBZ0IsUUFBUSxDQUFDLE1BQWM7SUFDckMsaUJBQWlCO0lBQ2pCLE1BQU0sV0FBVyxHQUFHLElBQUEscUJBQVEsRUFBQyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ2xELElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTztRQUFFLE9BQU8sSUFBQSx5Q0FBbUIsRUFBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBRXpFLGlCQUFpQjtJQUNqQixNQUFNLEdBQUcsR0FBRyxJQUFBLGdCQUFVLEVBQUMsTUFBTSxDQUFDLENBQUM7SUFDL0IsSUFBSSxHQUFHLEtBQUssV0FBVyxDQUFDLE1BQU0sQ0FBQyx3QkFBUyxDQUFDLE9BQU8sQ0FBQztRQUMvQyxPQUFPLElBQUEseUNBQW1CLEVBQUMsYUFBYSxDQUFDLENBQUM7SUFFNUMsbUJBQW1CO0lBQ25CLE1BQU0sUUFBUSxHQUFHLGVBQWUsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUU5QyxJQUFJLElBQUEsMEJBQWUsRUFBQyxRQUFRLENBQUM7UUFBRSxPQUFPLElBQUEseUNBQW1CLEVBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBRTVFLE9BQU8sSUFBQSw2QkFBaUIsRUFBQyxRQUFRLENBQWUsQ0FBQztBQUNuRCxDQUFDO0FBaEJELDRCQWdCQztBQUVELFNBQWdCLHdCQUF3QixDQUN0QyxXQUFzQjtJQUV0QixPQUFPO1FBQ0wsb0JBQW9CLEVBQUUsV0FBVyxDQUFDLE1BQU0sQ0FBQyx3QkFBUyxDQUFDLE9BQU8sQ0FBQztRQUMzRCxtQkFBbUIsRUFBRSxXQUFXLENBQUMsTUFBTSxDQUFDLHdCQUFTLENBQUMsd0JBQXdCLENBQUM7UUFDM0UsV0FBVyxFQUFFLFdBQVcsQ0FBQyxNQUFNLENBQUMsd0JBQVMsQ0FBQyxnQkFBZ0IsQ0FBQztRQUMzRCxZQUFZLEVBQUUsV0FBVyxDQUFDLE1BQU0sQ0FBQyx3QkFBUyxDQUFDLGlCQUFpQixDQUFDO1FBQzdELFlBQVksRUFBRSxXQUFXLENBQUMsTUFBTSxDQUFDLHdCQUFTLENBQUMsaUJBQWlCLENBQUM7S0FDOUQsQ0FBQztBQUNKLENBQUM7QUFWRCw0REFVQztBQUVELFNBQWdCLGVBQWUsQ0FDN0IsV0FBc0I7SUFFdEIsTUFBTSxhQUFhLEdBQUcsd0JBQXdCLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDNUQsSUFBSSxJQUFBLGdCQUFLLEVBQUMsV0FBVyxFQUFFLFFBQVEsQ0FBQyxFQUFFO1FBQ2hDLE1BQU0sWUFBWSxHQUFHLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyx3QkFBUyxDQUFDLHNCQUFzQixDQUFDLENBQUM7UUFDM0UsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEUscUNBQ0UsSUFBSSxFQUFFLDRCQUFjLENBQUMsTUFBTSxJQUN4QixhQUFhLEtBQ2hCLE1BQU0sRUFBRSxXQUFXLENBQUMsU0FBUyxDQUMzQiwyQkFBWSxDQUFDLGNBQWMsRUFDM0Isd0JBQVMsQ0FBQyxPQUFPLENBQ2xCLEVBQ0QsaUJBQWlCLEVBQ2pCLGFBQWEsRUFBRSxXQUFXLENBQUMsU0FBUyxDQUNsQywyQkFBWSxDQUFDLGdCQUFnQixFQUM3Qix3QkFBUyxDQUFDLE9BQU8sQ0FDbEIsRUFDRCxJQUFJLEVBQUUsV0FBVyxDQUFDLFNBQVMsQ0FDekIsc0NBQXVCLENBQUMsUUFBUSxFQUNoQyx3QkFBUyxDQUFDLG1CQUFtQixDQUM5QixFQUNELEdBQUcsRUFBRSxXQUFXLENBQUMsU0FBUyxDQUFDLDJCQUFZLENBQUMsV0FBVyxFQUFFLHdCQUFTLENBQUMsT0FBTyxDQUFDLElBQ3ZFO0tBQ0g7SUFDRCxJQUFJLElBQUEsZ0JBQUssRUFBQyxXQUFXLEVBQUUsU0FBUyxDQUFDLEVBQUU7UUFDakMscUNBQ0UsSUFBSSxFQUFFLDRCQUFjLENBQUMsT0FBTyxJQUN6QixhQUFhLEtBQ2hCLEdBQUcsRUFBRSxXQUFXLENBQUMsU0FBUyxDQUFDLDJCQUFZLENBQUMsV0FBVyxFQUFFLHdCQUFTLENBQUMsT0FBTyxDQUFDLElBQ3ZFO0tBQ0g7SUFDRCxJQUFJLENBQUMsSUFBQSxnQkFBSyxFQUFDLFdBQVcsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUEsZ0JBQUssRUFBQyxXQUFXLEVBQUUsT0FBTyxDQUFDO1FBQzVELE9BQU8sSUFBQSx5Q0FBbUIsRUFBQyxhQUFhLENBQUMsQ0FBQztJQUU1QyxPQUFPLElBQUEseUNBQW1CLEVBQUMsT0FBTyxDQUFDLENBQUM7QUFDdEMsQ0FBQztBQXJDRCwwQ0FxQ0MifQ==