UNPKG

afrimomo-sdk

Version:

A unified SDK for African payment providers

122 lines 4.81 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __exportStar = (this && this.__exportStar) || function(m, exports) { for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.PayChangu = void 0; const baseService_1 = require("@afrimomo-sdk/utils/baseService"); const logger_1 = require("@afrimomo-sdk/utils/logger"); const network_1 = require("@afrimomo-sdk/services/paychangu/network"); __exportStar(require("./types"), exports); class PayChangu extends baseService_1.BaseService { networkManager; constructor(secretKey) { super(); this.networkManager = new network_1.PayChanguNetworkManager(secretKey); } async initiatePayment(paymentData, accountInfo) { try { const { currency, price } = this.convertToPreferredCurrency(Number(paymentData.purchase_amount), paymentData.purchase_currency, "MWK"); const paychanguPurchaseData = { meta: { response: "Response", uuid: paymentData.account_id, }, currency: currency.toString(), amount: price.toString(), tx_ref: this.generateTransactionId(), email: accountInfo.email, first_name: accountInfo.first_name, last_name: accountInfo.last_name, callback_url: process.env.PAYCHANGU_RETURN_URL || "", return_url: process.env.PAYCHANGU_RETURN_URL || "", customization: { title: paymentData.item_title, description: paymentData.description, }, }; logger_1.logger.info("PayChangu: initiating payment", { paychanguPurchaseData }); const response = await this.networkManager.initiatePayment(paychanguPurchaseData); if (!response || response.status !== "success") { return { type: "error", payload: { HasError: true, StackTraceError: response, }, }; } const finalPaymentData = { ...paymentData, purchase_amount: price.toString(), purchase_currency: currency.toString(), }; return { type: "success", payload: { InitialPaymentData: finalPaymentData, SpecialPaymentData: response.data, HasError: false, }, }; } catch (error) { logger_1.logger.error("PayChangu: payment initiation failed", error); return { type: "error", payload: { HasError: true, StackTraceError: error, }, }; } } async getTransactionById(transactionId) { try { logger_1.logger.info("PayChangu: getting transaction by ID", { transactionId }); const verificationResponse = await this.networkManager.verifyPayment(transactionId); if (!verificationResponse || verificationResponse.status !== "success") { return { HasError: true, StackTraceError: verificationResponse, }; } return { HasError: false, ...verificationResponse, }; } catch (error) { logger_1.logger.error("PayChangu: transaction verification failed", error); return { HasError: true, StackTraceError: error, }; } } async refreshPaymentSession(paymentData, accountInfo) { return this.initiatePayment(paymentData, accountInfo); } generateTransactionId() { return `TX_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`; } convertToPreferredCurrency(amount, fromCurrency, toCurrency) { return { currency: toCurrency, price: amount, }; } } exports.PayChangu = PayChangu; //# sourceMappingURL=index.js.map