UNPKG

promptparse

Version:

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

185 lines 7.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_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 _iterable_to_array(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); } 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 _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, __export, __publicField, checksum, decode, encode, get, withCrcTag } from "./chunk-TM2THQCK.mjs"; // src/validate/index.ts var validate_exports = {}; __export(validate_exports, { 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/SlipVerify.ts function slipVerify(payload) { 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/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, slipVerify, trueMoneySlipVerify, validate_exports }; //# sourceMappingURL=chunk-TK4VXCDG.mjs.map