UNPKG

@spreeloop/orange_money

Version:
124 lines 6.24 kB
"use strict"; 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