afrimomo-sdk
Version:
A unified SDK for African payment providers
122 lines • 4.81 kB
JavaScript
;
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