UNPKG

promptparse

Version:

All-in-one JS library for PromptPay & EMVCo QR Codes

334 lines 13 kB
function _array_like_to_array(arr, len) { if (len == null || len > arr.length) len = arr.length; for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i]; return arr2; } function _array_with_holes(arr) { if (Array.isArray(arr)) return arr; } function _array_without_holes(arr) { if (Array.isArray(arr)) return _array_like_to_array(arr); } function _class_call_check(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for(var i = 0; i < props.length; i++){ var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _create_class(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } function _define_property(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } function _iterable_to_array(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); } function _iterable_to_array_limit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for(_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true){ _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally{ try { if (!_n && _i["return"] != null) _i["return"](); } finally{ if (_d) throw _e; } } return _arr; } function _non_iterable_rest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _non_iterable_spread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _object_spread(target) { for(var i = 1; i < arguments.length; i++){ var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === "function") { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function(key) { _define_property(target, key, source[key]); }); } return target; } function _sliced_to_array(arr, i) { return _array_with_holes(arr) || _iterable_to_array_limit(arr, i) || _unsupported_iterable_to_array(arr, i) || _non_iterable_rest(); } function _to_consumable_array(arr) { return _array_without_holes(arr) || _iterable_to_array(arr) || _unsupported_iterable_to_array(arr) || _non_iterable_spread(); } function _unsupported_iterable_to_array(o, minLen) { if (!o) return; if (typeof o === "string") return _array_like_to_array(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(n); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen); } import { BOTBarcode, ProxyType, __export, __publicField, checksum, decode, encode, get, withCrcTag } from "./chunk-5EIJJBFC.mjs"; // src/validate/index.ts var validate_exports = {}; __export(validate_exports, { anyId: function() { return anyId; }, bcelOneProof: function() { return bcelOneProof; }, billPayment: function() { return billPayment; }, slipVerify: function() { return slipVerify; }, trueMoneySlipVerify: function() { return trueMoneySlipVerify; } }); // src/lib/EMVCoQR.ts var EMVCoQR = /*#__PURE__*/ function() { "use strict"; function EMVCoQR(payload, tags) { _class_call_check(this, EMVCoQR); __publicField(this, "payload"); __publicField(this, "tags"); this.payload = payload; this.tags = tags; } _create_class(EMVCoQR, [ { key: "getTag", value: function getTag(tagId, subTagId) { return get(this.tags, tagId, subTagId); } }, { key: "getTagValue", value: function getTagValue(tagId, subTagId) { var _this_getTag; return (_this_getTag = this.getTag(tagId, subTagId)) === null || _this_getTag === void 0 ? void 0 : _this_getTag.value; } }, { key: "getTags", value: function getTags() { return this.tags; } }, { /* c8 ignore next 3 */ key: "getPayload", value: function getPayload() { return this.payload; } }, { key: "validate", value: function validate(crcTagId) { var tags = _to_consumable_array(this.tags).filter(function(f) { return f.id != crcTagId; }); var expected = withCrcTag(encode(tags), crcTagId); return this.payload === expected; } } ]); return EMVCoQR; }(); // src/lib/parser.ts function parse(payload) { var strict = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : false, subTags = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : true; if (!payload.match(/^\d{4}.+/)) { return null; } if (strict) { var expected = payload.slice(-4).toUpperCase(); var calculated = checksum(payload.slice(0, -4)); if (expected != calculated) return null; } var tags = decode(payload); if (tags.length == 0) { return null; } if (subTags) { var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined; try { for(var _iterator = tags[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){ var tag = _step.value; if (typeof tag.value !== "string" || !tag.value.match(/^\d{4}.+/)) { continue; } var sub = decode(tag.value); if (sub.every(function(val) { return val.length > 0 && val.length === val.value.length; })) { tag.subTags = sub; } } } catch (err) { _didIteratorError = true; _iteratorError = err; } finally{ try { if (!_iteratorNormalCompletion && _iterator.return != null) { _iterator.return(); } } finally{ if (_didIteratorError) { throw _iteratorError; } } } } return new EMVCoQR(payload, tags); } function parseBarcode(payload) { return BOTBarcode.fromString(payload); } // src/validate/bcel/BCELOneProof.ts function bcelOneProof(payload) { var ppqr = parse(payload, true); var type = ppqr === null || ppqr === void 0 ? void 0 : ppqr.getTagValue("33", "02"); var ticket = ppqr === null || ppqr === void 0 ? void 0 : ppqr.getTagValue("33", "03"); var fccref = ppqr === null || ppqr === void 0 ? void 0 : ppqr.getTagValue("33", "04"); if ((ppqr === null || ppqr === void 0 ? void 0 : ppqr.getTagValue("00")) !== "01" && (ppqr === null || ppqr === void 0 ? void 0 : ppqr.getTagValue("01")) !== "11" && (ppqr === null || ppqr === void 0 ? void 0 : ppqr.getTagValue("33", "00")) !== "BCEL" && (ppqr === null || ppqr === void 0 ? void 0 : ppqr.getTagValue("33", "00")) !== "ONEPROOF") { return null; } return { type: type, ticket: ticket, fccref: fccref }; } // src/validate/promptpay/AnyID.ts function anyId(payload) { var ppqr = parse(payload, true); var aidType = ppqr === null || ppqr === void 0 ? void 0 : ppqr.getTagValue("00"); var tag29Aid = ppqr === null || ppqr === void 0 ? void 0 : ppqr.getTagValue("29", "00"); if (aidType !== "01" || tag29Aid !== "A000000677010111") { return null; } var proxyTypeEntry = Object.entries(ProxyType).find(function(param) { var _param = _sliced_to_array(param, 2), id = _param[1]; return (ppqr === null || ppqr === void 0 ? void 0 : ppqr.getTagValue("29", id)) !== void 0; }); if (!proxyTypeEntry) { return null; } var _proxyTypeEntry = _sliced_to_array(proxyTypeEntry, 2), type = _proxyTypeEntry[0], subTagId = _proxyTypeEntry[1]; var target = ppqr.getTagValue("29", subTagId); if (type === "MSISDN" && target.length == 13 && target.startsWith("0066")) { target = "0" + target.slice(-9); } var amountStr = ppqr === null || ppqr === void 0 ? void 0 : ppqr.getTagValue("54"); var amount = amountStr !== void 0 ? parseFloat(amountStr) : void 0; return _object_spread({ type: type, target: target }, amount !== void 0 && { amount: amount }); } // src/validate/promptpay/BillPayment.ts function billPayment(payload) { var ppqr = parse(payload, true); var aidType = ppqr === null || ppqr === void 0 ? void 0 : ppqr.getTagValue("00"); var tag30Aid = ppqr === null || ppqr === void 0 ? void 0 : ppqr.getTagValue("30", "00"); var billerId = ppqr === null || ppqr === void 0 ? void 0 : ppqr.getTagValue("30", "01"); var ref1 = ppqr === null || ppqr === void 0 ? void 0 : ppqr.getTagValue("30", "02"); if (aidType !== "01" || tag30Aid !== "A000000677010112" || !billerId || !ref1) { return null; } var ref2 = ppqr === null || ppqr === void 0 ? void 0 : ppqr.getTagValue("30", "03"); var ref3 = ppqr === null || ppqr === void 0 ? void 0 : ppqr.getTagValue("62", "07"); var amountStr = ppqr === null || ppqr === void 0 ? void 0 : ppqr.getTagValue("54"); var amount = amountStr !== void 0 ? parseFloat(amountStr) : void 0; return _object_spread({ billerId: billerId, ref1: ref1 }, ref2 !== void 0 && { ref2: ref2 }, ref3 !== void 0 && { ref3: ref3 }, amount !== void 0 && { amount: amount }); } // src/validate/promptpay/SlipVerify.ts function slipVerify(payload) { var crcAutoFix = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : true; if (crcAutoFix) { var idx = payload.lastIndexOf("9104"); if (idx != -1) { var crc = payload.substring(idx + 4); if (crc.length > 0 && crc.length < 4) { payload = payload.substring(0, idx + 4) + crc.padStart(4, "0"); } } } var ppqr = parse(payload, true); var apiType = ppqr === null || ppqr === void 0 ? void 0 : ppqr.getTagValue("00", "00"); var sendingBank = ppqr === null || ppqr === void 0 ? void 0 : ppqr.getTagValue("00", "01"); var transRef = ppqr === null || ppqr === void 0 ? void 0 : ppqr.getTagValue("00", "02"); if (apiType !== "000001" || !sendingBank || !transRef) { return null; } return { sendingBank: sendingBank, transRef: transRef }; } // src/validate/truemoney/TrueMoneySlipVerify.ts function trueMoneySlipVerify(payload) { var ppqr = parse(payload, true); var eventType = ppqr === null || ppqr === void 0 ? void 0 : ppqr.getTagValue("00", "02"); var transactionId = ppqr === null || ppqr === void 0 ? void 0 : ppqr.getTagValue("00", "03"); var date = ppqr === null || ppqr === void 0 ? void 0 : ppqr.getTagValue("00", "04"); if ((ppqr === null || ppqr === void 0 ? void 0 : ppqr.getTagValue("00", "00")) !== "01" && (ppqr === null || ppqr === void 0 ? void 0 : ppqr.getTagValue("00", "01")) !== "01") { return null; } return { eventType: eventType, transactionId: transactionId, date: date }; } export { EMVCoQR, parse, parseBarcode, bcelOneProof, anyId, billPayment, slipVerify, trueMoneySlipVerify, validate_exports }; //# sourceMappingURL=chunk-MWOLRUVR.mjs.map