@spreeloop/orange_money
Version:
A orange money api integration package
128 lines • 5.05 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.getTransferStatus = exports.DisbursementStep = void 0;
const joi_1 = __importDefault(require("joi"));
const https_1 = require("../../utils/https");
const disbursement_service_1 = require("../implementations/disbursement_service");
const status_1 = require("../utils/status");
const utils_1 = require("../utils/utils");
const GetTransferStatusRequestSchema = joi_1.default.object({
token: joi_1.default.string().required(),
messageId: joi_1.default.string().required(),
}).required();
var DisbursementStep;
(function (DisbursementStep) {
DisbursementStep["TransferSent"] = "2";
DisbursementStep["InitializingTransfer"] = "1";
})(DisbursementStep = exports.DisbursementStep || (exports.DisbursementStep = {}));
/**
* Retrieves the transfer status of a transaction.
*
* @param {DisbursementServiceConfig} configs - The disbursement service config.
* @param {GetTransferStatusRequest} params - The parameters for retrieving the transfer status.
* @return {GetTransferStatusResponse} - The method response containing the transfer status.
*/
async function getTransferStatus({ configs, params, endPoint, }) {
const logger = configs.logger;
logger.info(`getTransferStatus is running with params : ${JSON.stringify(params)}`);
const { error: configsValidationError, value: configsValues } = disbursement_service_1.DisbursementServiceConfigSchema.validate(configs);
if (configsValidationError) {
logger.error(`Invalid DisbursementServiceConfig request parameters. params : ${JSON.stringify(configsValidationError.details)}`);
return { error: configsValidationError.details };
}
const { error: paramsValidationError, value: paramsValue } = GetTransferStatusRequestSchema.validate(params);
if (paramsValidationError) {
logger.error(`Invalid getTransferStatus request parameters. params : ${JSON.stringify(paramsValidationError)}`);
return { error: paramsValidationError };
}
const headers = {
Authorization: `Bearer ${paramsValue.token}`,
};
const body = {
customerkey: configsValues.customerKey,
customersecret: configsValues.customerSecret,
};
const response = await (0, https_1.getRequest)({
logger: configsValues.logger,
route: endPoint,
headers: headers,
data: body,
rejectUnauthorized: false,
});
if (!response.response) {
return { error: response.error };
}
const data = response.response.data;
if (typeof data === 'string') {
// Handle string response.
return { error: data };
}
else if ('result' in data) {
// Remove the customer secret from the raw data, because
// it is a very sensitive secret.
if (data.parameters) {
data.parameters.customer_secret = null;
}
const rawStatus = 'status' in data.result ? data.result.status : data.result.data.status;
const status = (0, utils_1.getStatusFromProviderRawStatus)(rawStatus);
if (data.RefundStep === DisbursementStep.InitializingTransfer) {
return {
data: {
status: status === status_1.DisbursementStatus.succeeded
? status_1.DisbursementStatus.pending
: status,
refundStep: data.RefundStep,
},
raw: data,
};
}
return {
data: {
status: status,
refundStep: data.RefundStep,
},
raw: data,
};
}
else if ('ErrorCode' in data) {
if (data.parameters) {
data.parameters.customer_secret = null;
}
if (data.ErrorCode === 5019) {
return {
data: {
status: status_1.DisbursementStatus.failed,
refundStep: data.RefundStep,
},
raw: data,
};
}
configsValues.logger.error(`Unexpected ErrorCode : ${JSON.stringify(data)}`);
return {
data: {
status: status_1.DisbursementStatus.pending,
refundStep: data.RefundStep,
},
raw: data,
};
}
else if (data.RefundStep === DisbursementStep.InitializingTransfer) {
if (data.parameters) {
data.parameters.customer_secret = null;
}
return {
data: {
status: status_1.DisbursementStatus.pending,
refundStep: data.RefundStep,
},
raw: data,
};
}
// By default, assume we failed to retrieve the disbursement status.
return { error: data };
}
exports.getTransferStatus = getTransferStatus;
//# sourceMappingURL=get_transfer_status.js.map