@spreeloop/orange_money
Version:
A orange money api integration package
124 lines • 6.24 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.initializeOmPayment = void 0;
const https_1 = require("../../utils/https");
const routes_1 = require("../routes/routes");
const constants_1 = require("../utils/constants");
const joi_schema_1 = require("../utils/joi_schema");
const utils_1 = require("../utils/utils");
/**
* Initiates the payment.
*
* @param {InitializeOmPaymentRequest} mobileInitParams - The mobile initialization parameters.
* @param {string} endPoint - The init payment end point.
* @param {OrangeMoneyPaymentParams} paymentConfig - The mobile payment config parameters.
* - {TargetEnvironment} paymentConfig.targetEnvironment - The target environment.
* - {string} paymentConfig.apiUserName - The api user name.
* - {string} paymentConfig.xAuthToken - The x-auth-token.
* - {string} paymentConfig.apiPassword - The api password.
* - {string} [paymentConfig.orangeMoneyVersion] - The orange money version.
* - {LoggerInterface} paymentConfig.logger - The logger interface.
* @return {Promise<InitializeOrangeMoneyResponse>} The promise that resolves to the mobile payment initialization response.
*/
async function initializeOmPayment({ mobileInitParams, paymentConfig, endPoint, }) {
var _a, _b, _c;
const logger = paymentConfig.logger;
const paymentParams = {
mobileInitParams: mobileInitParams,
paymentConfig: paymentConfig,
endPoint: endPoint,
};
const response = await initializeOmPaymentInternal(paymentParams);
if (response.schemaErrorMessage) {
logger.warn(`[ORANGE MONEY] Initialization failed with error data: ${JSON.stringify(response.schemaErrorMessage)}`);
return {
raw: response.schemaErrorMessage,
error: constants_1.ApiErrorType.failedToInitiateThePayment,
};
}
const requestResponse = (_a = response.requestResult) === null || _a === void 0 ? void 0 : _a.response;
if (requestResponse && (0, https_1.isSuccessfulCodeResponse)(requestResponse.status)) {
logger.info(`[ORANGE MONEY] Initialization successful with result ${JSON.stringify(requestResponse.data)}`);
return {
data: {
payToken: mobileInitParams.payToken,
},
raw: requestResponse.data,
};
}
if (requestResponse &&
requestResponse.status === https_1.RequestStatusCode.expectationFailed) {
const errorData = requestResponse.data.data;
logger.warn(`[ORANGE MONEY] Initialization failed failed. Reason: ${errorData.inittxnmessage}`);
return {
raw: requestResponse.data,
error: getApiErrorMessage(errorData.inittxnmessage),
};
}
logger.warn(`[ORANGE MONEY] Initialization failed with error data: ${JSON.stringify((_b = response.requestResult) === null || _b === void 0 ? void 0 : _b.error)}`);
return {
error: constants_1.ApiErrorType.failedToInitiateThePayment,
raw: (_c = response.requestResult) === null || _c === void 0 ? void 0 : _c.error,
};
}
exports.initializeOmPayment = initializeOmPayment;
/**
* Makes a payment request using the provided parameters.
*
* @param {Object} params - An object containing the following parameters:
* - {MobileInitPaymentParams} mobileInitParams: The mobile initialization parameters.
* - {PaymentConfig} paymentConfig - The mobile payment config parameters.
* - {string} endPoint: The init payment end point.
* @return {Promise} A promise that resolves to the payment request response.
*/
const initializeOmPaymentInternal = async (params) => {
const routes = new routes_1.Routes(params.paymentConfig.orangeMoneyVersion);
const headers = {
[constants_1.ApiKey.keyAuthorization]: `Bearer ${params.mobileInitParams.accessToken}`,
[constants_1.ApiKey.keyContentType]: constants_1.ConstantRequestField.typeJson,
[constants_1.ApiKey.keyXAuthToken]: params.paymentConfig.xAuthToken,
};
const body = {
[constants_1.ApiKey.keySubscriberMsisdn]: params.mobileInitParams.subscriberNumber,
[constants_1.ApiKey.keyChannelUserMsisdn]: params.mobileInitParams.channelUserNumber,
[constants_1.ApiKey.keyAmount]: params.mobileInitParams.amount.toString(),
[constants_1.ApiKey.keyDescription]: params.mobileInitParams.description,
[constants_1.ApiKey.keyMobileOrderId]: params.mobileInitParams.transactionId,
[constants_1.ApiKey.keyPin]: params.mobileInitParams.pinCode,
[constants_1.ApiKey.keyMobilePayToken]: params.mobileInitParams.payToken,
[constants_1.ApiKey.keyMobileNotifUrl]: params.mobileInitParams.notifUrl,
};
const dataValidation = (0, utils_1.validateData)(body, joi_schema_1.initPaymentBodySchema);
if (!dataValidation.isValidData) {
return { schemaErrorMessage: dataValidation.message };
}
params.paymentConfig.logger.info(`Initiate the ORANGE MONEY Payment with data: ${JSON.stringify(body)}\nroute: ${routes.mobileInitPayment()}`);
const response = await (0, https_1.postRequest)({
logger: params.paymentConfig.logger,
headers: headers,
data: body,
route: routes.mobileInitPayment(),
});
return { requestResult: response };
};
/**
* Maps an API error message to the corresponding API error type.
*
* @param {string} message - the error message to map
* @return {ApiErrorType} the corresponding API error type
*/
const getApiErrorMessage = (message) => {
switch (message) {
case constants_1.OrangeMoneyErrorMessage.beneficiaryNotFound:
return constants_1.ApiErrorType.invalidOrangeMoneyNumber;
case constants_1.OrangeMoneyErrorMessage.insufficientFunds:
return constants_1.ApiErrorType.insufficientFunds;
case constants_1.OrangeMoneyErrorMessage.accountLocked:
return constants_1.ApiErrorType.accountLocked;
case constants_1.OrangeMoneyErrorMessage.invalidPaymentAmount:
return constants_1.ApiErrorType.invalidPaymentAmount;
default:
return constants_1.ApiErrorType.failedToInitiateThePayment;
}
};
//# sourceMappingURL=initialize_om_payment.js.map