UNPKG

pix-utils

Version:

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

59 lines 7.67 kB
"use strict"; 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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