@qrph/qrph
Version:
Library for parsing and encoding QRPH strings.
54 lines (48 loc) • 1.62 kB
text/typescript
import type { UnstructuredEMVQRData } from "@qrph/emv-qr";
import { constants, encodeEMVQR } from "@qrph/emv-qr";
import type { QRPHData } from "./schema.js";
const pointOfInitiationMethodMap = {
static: "11",
dynamic: "12",
};
export const encodeQRPH = (data: QRPHData): UnstructuredEMVQRData => {
const root: UnstructuredEMVQRData = {
[]:
pointOfInitiationMethodMap[data.pointOfInitiationMethod],
[]: data.merchantCategoryCode,
[]: data.transactionCurrency,
[]: data.countryCode,
[]: data.merchantName,
[]: data.merchantCity,
};
if (data.transactionAmount) {
root[constants.ID.IDTransactionAmount] = data.transactionAmount;
}
if (data.postalCode) {
root[constants.ID.IDPostalCode] = data.postalCode;
}
const recipient = {
"00": data.recipient.type,
"01": data.recipient.bankCode,
"03": data.recipient.accountNumber,
};
const recipientKey = data.recipient.type === "com.p2pqrpay" ? "27" : "28";
return {
...data._raw,
...root,
[]: {
...(data._raw[recipientKey] as Record<string, string>),
...recipient,
},
};
};
/**
* Encode a QRPH data object to a string to be used in a QR code.
*
* @param data - The QRPH data object to encode.
* @returns The encoded QRPH string.
*/
export const encodeQRPHToText = (data: QRPHData): string => {
const emvQRData = encodeQRPH(data);
return encodeEMVQR(emvQRData);
};