UNPKG

promptparse

Version:

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

1 lines 11.3 kB
{"version":3,"sources":["/home/runner/work/promptparse/promptparse/dist/chunk-PBZUGBTQ.mjs","../src/generate/index.ts","../src/generate/promptpay/AnyID.ts","../src/utils/encoder.ts","../src/generate/TrueMoney.ts","../src/generate/TrueMoneySlipVerify.ts","../src/generate/SlipVerify.ts","../src/generate/BOTBarcode.ts"],"names":["BOTBarcode","__export","billPayment","encode","tag","withCrcTag","generate_exports","ProxyType","anyId","botBarcode","slipVerify","trueMoney","trueMoneySlipVerify","type","target","amount","replace","slice","tag29","payload","push","Number","toFixed","encodeTag81","message","split","map","c","charCodeAt","toString","padStart","join","toUpperCase","mobileNo","eventType","transactionId","date","sendingBank","transRef","billerId","ref1","ref2"],"mappings":"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","sourcesContent":["import {\n BOTBarcode,\n __export,\n billPayment,\n encode,\n tag,\n withCrcTag\n} from \"./chunk-TM2THQCK.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/promptpay/AnyID.ts\nvar ProxyType = /* @__PURE__ */ ((ProxyType2) => {\n ProxyType2[\"MSISDN\"] = \"01\";\n ProxyType2[\"NATID\"] = \"02\";\n ProxyType2[\"EWALLETID\"] = \"03\";\n ProxyType2[\"BANKACC\"] = \"04\";\n return ProxyType2;\n})(ProxyType || {});\nfunction anyId({ type, target, amount }) {\n if (type == \"MSISDN\") {\n target = (\"0000000000000\" + target.replace(/^0/, \"66\")).slice(-13);\n }\n const tag29 = encode([\n tag(\"00\", \"A000000677010111\"),\n tag(ProxyType[type], target)\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 return withCrcTag(encode(payload), \"63\");\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.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/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\n// src/generate/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/generate/BOTBarcode.ts\nfunction botBarcode({ billerId, ref1, ref2, amount }) {\n return new BOTBarcode(billerId, ref1, ref2, amount).toString();\n}\n\nexport {\n ProxyType,\n anyId,\n trueMoney,\n trueMoneySlipVerify,\n slipVerify,\n botBarcode,\n generate_exports\n};\n","export * from './promptpay/AnyID'\nexport * from './promptpay/BillPayment'\nexport * from './TrueMoney'\nexport * from './TrueMoneySlipVerify'\nexport * from './SlipVerify'\nexport * from './BOTBarcode'\n","import { encode, tag, withCrcTag } from '@/lib/tlv'\n\nexport enum ProxyType {\n /** Mobile number */\n 'MSISDN' = '01',\n\n /** National ID or Tax ID */\n 'NATID' = '02',\n\n /** E-Wallet ID */\n 'EWALLETID' = '03',\n\n /** Bank Account (Reserved) */\n 'BANKACC' = '04',\n}\n\nexport interface AnyIDConfig {\n /** Proxy type */\n type: keyof typeof ProxyType\n\n /** Recipient number */\n target: string\n\n /** Transaction amount */\n amount?: number\n}\n\n/**\n * Generate PromptPay AnyID (Tag 29) QR Code\n *\n * @returns QR Code Payload\n */\nexport function anyId({ type, target, amount }: AnyIDConfig) {\n if (type == 'MSISDN') {\n target = ('0000000000000' + target.replace(/^0/, '66')).slice(-13)\n }\n\n const tag29 = encode([\n tag('00', 'A000000677010111'),\n tag(ProxyType[type], target),\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 return withCrcTag(encode(payload), '63')\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","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","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"]}