@nackamoto/medusa-paypal-payment
Version:
Paypal payment provider for Medusa
76 lines • 4.38 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.PAYPAL_CURRENCY_CODES = void 0;
exports.convertAmount = convertAmount;
const utils_1 = require("@medusajs/utils");
/**
* The supported paypal currency codes and their options prefering paypal
* docuementation over ISO-4217.
*
* https://developer.paypal.com/api/rest/reference/currency-codes/#link-currencycodes
*
* https://en.wikipedia.org/wiki/ISO_4217#Active_codes
*/
exports.PAYPAL_CURRENCY_CODES = {
AUD: {},
BRL: {},
CAD: {},
CNY: {},
CZK: {},
DKK: {},
EUR: {},
HKD: {},
HUF: { decimal: false },
ILS: {},
JPY: { decimal: false },
MYR: {},
MXN: {},
TWD: { decimal: false },
NZD: {},
NOK: {},
PHP: {},
PLN: {},
GBP: {},
RUB: {},
SGD: {},
SEK: {},
CHF: {},
THB: {},
USD: {},
};
/**
* Converts an amount to the format required by Paypal based on currency.
* https://developer.paypal.com/docs/api/orders/v2/
*
* @param {BigNumberInput} amount - The amount to be converted.
* @param {string} currency - The 3-character ISO-4217 currency code
*
* @returns {{ currency_code: string, value: string }} An object containing the
* amount as a string value and the supported currency code.
*
* @throws {Error} If the currency is not supported by Paypal or if the amount
* stringification is over the 32 character limit of the Paypal API.
*
* @example
* const amount = 10;
* const currency = "usd";
* const { value, currency_code } = convertAmount(amount, currency);
* console.log(amountString); // "10.00"
* console.log(currencyCode); // "USD"
*
*/
function convertAmount(amount, currency) {
const currency_ = currency.toUpperCase();
if (!(currency_ in exports.PAYPAL_CURRENCY_CODES)) {
throw new Error(`Currency ${currency} is not supported by Paypal`);
}
const currency_code = currency_;
const currencyOptions = exports.PAYPAL_CURRENCY_CODES[currency_code];
const precision = currencyOptions?.decimal === false ? 0 : currencyOptions?.places ?? 2;
const value = new utils_1.BigNumber(amount, { precision }).numeric.toFixed(precision);
if (value.length > 32) {
throw new Error(`Amount string exceeds 32 character limit: ${value}`);
}
return { value, currencyCode: currency_code };
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWF0dGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9wcm92aWRlcnMvcGF5cGFsLXBheW1lbnQvZm9ybWF0dGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUF1RUEsc0NBeUJDO0FBL0ZELDJDQUE0QztBQVM1Qzs7Ozs7OztHQU9HO0FBQ1UsUUFBQSxxQkFBcUIsR0FBRztJQUNuQyxHQUFHLEVBQUUsRUFBRTtJQUNQLEdBQUcsRUFBRSxFQUFFO0lBQ1AsR0FBRyxFQUFFLEVBQUU7SUFDUCxHQUFHLEVBQUUsRUFBRTtJQUNQLEdBQUcsRUFBRSxFQUFFO0lBQ1AsR0FBRyxFQUFFLEVBQUU7SUFDUCxHQUFHLEVBQUUsRUFBRTtJQUNQLEdBQUcsRUFBRSxFQUFFO0lBQ1AsR0FBRyxFQUFFLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRTtJQUN2QixHQUFHLEVBQUUsRUFBRTtJQUNQLEdBQUcsRUFBRSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUU7SUFDdkIsR0FBRyxFQUFFLEVBQUU7SUFDUCxHQUFHLEVBQUUsRUFBRTtJQUNQLEdBQUcsRUFBRSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUU7SUFDdkIsR0FBRyxFQUFFLEVBQUU7SUFDUCxHQUFHLEVBQUUsRUFBRTtJQUNQLEdBQUcsRUFBRSxFQUFFO0lBQ1AsR0FBRyxFQUFFLEVBQUU7SUFDUCxHQUFHLEVBQUUsRUFBRTtJQUNQLEdBQUcsRUFBRSxFQUFFO0lBQ1AsR0FBRyxFQUFFLEVBQUU7SUFDUCxHQUFHLEVBQUUsRUFBRTtJQUNQLEdBQUcsRUFBRSxFQUFFO0lBQ1AsR0FBRyxFQUFFLEVBQUU7SUFDUCxHQUFHLEVBQUUsRUFBRTtDQUNDLENBQUM7QUFNWDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FvQkc7QUFDSCxTQUFnQixhQUFhLENBQzNCLE1BQXNCLEVBQ3RCLFFBQWdCO0lBRWhCLE1BQU0sU0FBUyxHQUFHLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUV6QyxJQUFJLENBQUMsQ0FBQyxTQUFTLElBQUksNkJBQXFCLENBQUMsRUFBRSxDQUFDO1FBQzFDLE1BQU0sSUFBSSxLQUFLLENBQUMsWUFBWSxRQUFRLDZCQUE2QixDQUFDLENBQUM7SUFDckUsQ0FBQztJQUVELE1BQU0sYUFBYSxHQUFHLFNBQStCLENBQUM7SUFFdEQsTUFBTSxlQUFlLEdBQ25CLDZCQUFxQixDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBRXZDLE1BQU0sU0FBUyxHQUNiLGVBQWUsRUFBRSxPQUFPLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGVBQWUsRUFBRSxNQUFNLElBQUksQ0FBQyxDQUFDO0lBRXhFLE1BQU0sS0FBSyxHQUFHLElBQUksaUJBQVMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7SUFFOUUsSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLEVBQUUsRUFBRSxDQUFDO1FBQ3RCLE1BQU0sSUFBSSxLQUFLLENBQUMsNkNBQTZDLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDeEUsQ0FBQztJQUVELE9BQU8sRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxDQUFDO0FBQ2hELENBQUMifQ==