promptparse
Version:
All-in-one JS library for PromptPay & EMVCo QR Codes
1 lines • 8.69 kB
Source Map (JSON)
{"version":3,"sources":["/home/runner/work/promptparse/promptparse/dist/chunk-5XXOZ4VK.mjs","../src/generate/index.ts","../src/generate/bot/BOTBarcode.ts","../src/generate/promptpay/SlipVerify.ts","../src/utils/encoder.ts","../src/generate/truemoney/TrueMoney.ts","../src/generate/truemoney/TrueMoneySlipVerify.ts"],"names":["BOTBarcode","ProxyType","__export","anyId","billPayment","encode","tag","withCrcTag","generate_exports","botBarcode","slipVerify","trueMoney","trueMoneySlipVerify","billerId","ref1","ref2","amount","toString","sendingBank","transRef","payload","encodeTag81","message","split","map","c","charCodeAt","padStart","join","toUpperCase","mobileNo","tag29","push","Number","toFixed","eventType","transactionId","date"],"mappings":"AAAA,SACEA,UAAU,EACVC,SAAS,EACTC,QAAQ,EACRC,KAAK,EACLC,WAAW,EACXC,MAAM,EACNC,GAAG,EACHC,UAAU,QACL,uBAAuB;AAE9B,wBAAwB;ACXxB,IAAAC,mBAAA,CAAA;AAAAN,SAAAM,kBAAA;IAAAP,WAAA;eAAAA;;IAAAE,OAAA;eAAAA;;IAAAC,aAAA;eAAAA;;IAAAK,YAAA;eAAAA;;IAAAC,YAAA;eAAAA;;IAAAC,WAAA;eAAAA;;IAAAC,qBAAA;eAAAA;;AAAA;ADuBA,iCAAiC;AEF1B,SAASH,WAAW,KAA+B;QAA7BI,WAAF,MAAEA,UAAUC,OAAZ,MAAYA,MAAMC,OAAlB,MAAkBA,MAAMC,SAAxB,MAAwBA;IACjD,OAAO,IAAIhB,WAAWa,UAAUC,MAAMC,MAAMC,QAAQC,QAAA;AACtD;AFKA,uCAAuC;AGXhC,SAASP,WAAW,KAAwB;QAAtBQ,cAAF,MAAEA,aAAaC,WAAf,MAAeA;IACxC,IAAMC,UAAU;QACdd,IACE,MACAD,OAAO;YACLC,IAAI,MAAM;YACVA,IAAI,MAAMY;YACVZ,IAAI,MAAMa;SACX;QAEHb,IAAI,MAAM;KACZ;IAEA,OAAOC,WAAWF,OAAOe,UAAU;AACrC;AHaA,uBAAuB;AIlChB,SAASC,YAAYC,OAAA;IAC1B,OAAOA,QACJC,KAAA,CAAM,IACNC,GAAA,CAAI,SAACC;eAAMA,EAAEC,UAAA,CAAW,GAAGT,QAAA,CAAS,IAAIU,QAAA,CAAS,GAAG;OACpDC,IAAA,CAAK,IACLC,WAAA;AACL;AJiCA,sCAAsC;AK1B/B,SAASlB,UAAU,KAA4B;QAA1BmB,WAAF,MAAEA,UAAUd,SAAZ,MAAYA,QAAQM,UAApB,MAAoBA;IAC5C,IAAMS,QAAQ1B,OAAO;QACnBC,IAAI,MAAM;QACVA,IAAI,MAAM,QAAgB,OAARwB;KACnB;IAED,IAAMV,UAAU;QACdd,IAAI,MAAM;QACVA,IAAI,MAAM,CAACU,SAAS,OAAO;QAC3BV,IAAI,MAAMyB;QACVzB,IAAI,MAAM;QACVA,IAAI,MAAM;KACZ;IAEA,IAAIU,QAAQ;QACVI,QAAQY,IAAA,CAAK1B,IAAI,MAAM2B,OAAOjB,QAAQkB,OAAA,CAAQ;IAChD;IAEA,IAAIZ,SAAS;QACXF,QAAQY,IAAA,CAAK1B,IAAI,MAAMe,YAAYC;IACrC;IAEA,OAAOf,WAAWF,OAAOe,UAAU;AACrC;ALyBA,gDAAgD;AM/CzC,SAASR,oBAAoB,KAIpC;QAHEuB,YADkC,MAClCA,WACAC,gBAFkC,MAElCA,eACAC,OAHkC,MAGlCA;IAEA,IAAMjB,UAAU;QACdd,IACE,MACAD,OAAO;YACLC,IAAI,MAAM;YACVA,IAAI,MAAM;YACVA,IAAI,MAAM6B;YACV7B,IAAI,MAAM8B;YACV9B,IAAI,MAAM+B;SACX;KAEL;IAEA,OAAO9B,WAAWF,OAAOe,UAAU,MAAM;AAC3C;ANiDA,SACEX,UAAU,EACVC,UAAU,EACVC,SAAS,EACTC,mBAAmB,EACnBJ,gBAAgB,GAChB","sourcesContent":["import {\n BOTBarcode,\n ProxyType,\n __export,\n anyId,\n billPayment,\n encode,\n tag,\n withCrcTag\n} from \"./chunk-5EIJJBFC.mjs\";\n\n// src/generate/index.ts\nvar generate_exports = {};\n__export(generate_exports, {\n ProxyType: () => ProxyType,\n anyId: () => anyId,\n billPayment: () => billPayment,\n botBarcode: () => botBarcode,\n slipVerify: () => slipVerify,\n trueMoney: () => trueMoney,\n trueMoneySlipVerify: () => trueMoneySlipVerify\n});\n\n// src/generate/bot/BOTBarcode.ts\nfunction botBarcode({ billerId, ref1, ref2, amount }) {\n return new BOTBarcode(billerId, ref1, ref2, amount).toString();\n}\n\n// src/generate/promptpay/SlipVerify.ts\nfunction slipVerify({ sendingBank, transRef }) {\n const payload = [\n tag(\n \"00\",\n encode([\n tag(\"00\", \"000001\"),\n tag(\"01\", sendingBank),\n tag(\"02\", transRef)\n ])\n ),\n tag(\"51\", \"TH\")\n ];\n return withCrcTag(encode(payload), \"91\");\n}\n\n// src/utils/encoder.ts\nfunction encodeTag81(message) {\n return message.split(\"\").map((c) => c.charCodeAt(0).toString(16).padStart(4, \"0\")).join(\"\").toUpperCase();\n}\n\n// src/generate/truemoney/TrueMoney.ts\nfunction trueMoney({ mobileNo, amount, message }) {\n const tag29 = encode([\n tag(\"00\", \"A000000677010111\"),\n tag(\"03\", `14000${mobileNo}`)\n ]);\n const payload = [\n tag(\"00\", \"01\"),\n tag(\"01\", !amount ? \"11\" : \"12\"),\n tag(\"29\", tag29),\n tag(\"53\", \"764\"),\n tag(\"58\", \"TH\")\n ];\n if (amount) {\n payload.push(tag(\"54\", Number(amount).toFixed(2)));\n }\n if (message) {\n payload.push(tag(\"81\", encodeTag81(message)));\n }\n return withCrcTag(encode(payload), \"63\");\n}\n\n// src/generate/truemoney/TrueMoneySlipVerify.ts\nfunction trueMoneySlipVerify({\n eventType,\n transactionId,\n date\n}) {\n const payload = [\n tag(\n \"00\",\n encode([\n tag(\"00\", \"01\"),\n tag(\"01\", \"01\"),\n tag(\"02\", eventType),\n tag(\"03\", transactionId),\n tag(\"04\", date)\n ])\n )\n ];\n return withCrcTag(encode(payload), \"91\", false);\n}\n\nexport {\n botBarcode,\n slipVerify,\n trueMoney,\n trueMoneySlipVerify,\n generate_exports\n};\n","export * from './bot/BOTBarcode'\nexport * from './promptpay/AnyID'\nexport * from './promptpay/BillPayment'\nexport * from './promptpay/SlipVerify'\nexport * from './truemoney/TrueMoney'\nexport * from './truemoney/TrueMoneySlipVerify'\n","import { BOTBarcode } from '@/lib/BOTBarcode'\n\nexport interface BOTBarcodeConfig {\n /** Biller ID (Tax ID + Suffix) */\n billerId: string\n\n /** Reference No. 1 / Customer No. */\n ref1: string\n\n /** Reference No. 2 */\n ref2?: string | null\n\n /** Transaction amount */\n amount?: number | null\n}\n\n/**\n * Generate BOT Barcode\n *\n * @returns Barcode Payload\n */\nexport function botBarcode({ billerId, ref1, ref2, amount }: BOTBarcodeConfig) {\n return new BOTBarcode(billerId, ref1, ref2, amount).toString()\n}\n","import { encode, tag, withCrcTag } from '@/lib/tlv'\n\nexport interface SlipVerifyConfig {\n /** Bank code */\n sendingBank: string\n\n /** Transaction reference */\n transRef: string\n}\n\n/**\n * Generate Slip Verify QR Code\n *\n * This also called \"Mini-QR\" that embedded in slip used for verify transactions\n *\n * @returns QR Code Payload\n */\nexport function slipVerify({ sendingBank, transRef }: SlipVerifyConfig) {\n const payload = [\n tag(\n '00',\n encode([\n tag('00', '000001'),\n tag('01', sendingBank),\n tag('02', transRef),\n ]),\n ),\n tag('51', 'TH'),\n ]\n\n return withCrcTag(encode(payload), '91')\n}\n","/**\n * Generate an `UCS-2`-like? Hex string for Tag 81\n *\n * This method is equivalent to:\n *\n * `Buffer.from(message, 'utf16le').swap16().toString('hex').toUpperCase()`\n *\n * @param message - Message\n * @returns Hex string of provided message\n */\nexport function encodeTag81(message: string) {\n return message\n .split('')\n .map((c) => c.charCodeAt(0).toString(16).padStart(4, '0'))\n .join('')\n .toUpperCase()\n}\n","import { encode, tag, withCrcTag } from '@/lib/tlv'\nimport { encodeTag81 } from '@/utils/encoder'\n\nexport interface TrueMoneyConfig {\n /** Mobile number */\n mobileNo: string\n\n /** Transaction amount */\n amount?: number\n\n /** Personal message (Tag 81) */\n message?: string\n}\n\n/**\n * Generate QR Code for TrueMoney Wallet\n *\n * This QR Code can also be scanned with other apps,\n * just like a regular e-Wallet PromptPay QR\n * but `Personal Message (Tag 81)` will be ignored.\n *\n * @returns QR Code Payload\n */\nexport function trueMoney({ mobileNo, amount, message }: TrueMoneyConfig) {\n const tag29 = encode([\n tag('00', 'A000000677010111'),\n tag('03', `14000${mobileNo}`),\n ])\n\n const payload = [\n tag('00', '01'),\n tag('01', !amount ? '11' : '12'),\n tag('29', tag29),\n tag('53', '764'),\n tag('58', 'TH'),\n ]\n\n if (amount) {\n payload.push(tag('54', Number(amount).toFixed(2)))\n }\n\n if (message) {\n payload.push(tag('81', encodeTag81(message)))\n }\n\n return withCrcTag(encode(payload), '63')\n}\n","import { encode, tag, withCrcTag } from '@/lib/tlv'\n\nexport interface TrueMoneySlipVerifyConfig {\n /** Event Type (Example: P2P) */\n eventType: string\n\n /** Transaction ID */\n transactionId: string\n\n /** Date (DDMMYYYY) */\n date: string\n}\n\n/**\n * Generate TrueMoney Slip Verify QR Code\n *\n * Same as a regular Slip Verify QR but with some differences\n * - Tag 00 and 01 are set to '01'\n * - Tag 51 does not exist\n * - Additional tags that are TrueMoney-specific\n * - CRC checksum are case-sensitive\n *\n * @returns QR Code Payload\n */\nexport function trueMoneySlipVerify({\n eventType,\n transactionId,\n date,\n}: TrueMoneySlipVerifyConfig) {\n const payload = [\n tag(\n '00',\n encode([\n tag('00', '01'),\n tag('01', '01'),\n tag('02', eventType),\n tag('03', transactionId),\n tag('04', date),\n ]),\n ),\n ]\n\n return withCrcTag(encode(payload), '91', false)\n}\n"]}