np-payment-sdk
Version:
Unified Payment SDK for Nepal (eSewa, Khalti, ConnectIPS, IME Pay, Mobile Banking)
166 lines (165 loc) • 5.54 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.FlutterwaveGateway = void 0;
const flutterwave_node_v3_1 = __importDefault(require("flutterwave-node-v3"));
/**
* Flutterwave payment gateway implementation (real)
*/
class FlutterwaveGateway {
constructor(config) {
this.config = config;
this.flw = new flutterwave_node_v3_1.default(config.publicKey, config.secretKey);
}
/**
* Initiate a payment (card charge)
*/
async pay(params) {
try {
const payload = {
card_number: params.cardNumber,
cvv: params.cvv,
expiry_month: params.expiryMonth,
expiry_year: params.expiryYear,
currency: params.currency,
amount: params.amount,
fullname: params.fullname,
email: params.email,
tx_ref: params.transactionId || `flw_tx_${Date.now()}`,
redirect_url: params.returnUrl,
};
const response = await this.flw.Charge.card(payload);
let message = response.message;
if (typeof message !== 'string')
message = 'Flutterwave payment initiated';
return {
gateway: 'flutterwave',
status: response.status === 'success' ? 'success' : 'failure',
params: response,
message: message,
};
}
catch (err) {
if (err instanceof Error) {
return {
gateway: 'flutterwave',
status: 'failure',
params: { error: err.message },
message: err.message || 'Flutterwave payment failed',
};
}
return {
gateway: 'flutterwave',
status: 'failure',
params: { error: String(err) },
message: 'Flutterwave payment failed',
};
}
}
/**
* Verify a payment
*/
async verify(params) {
try {
const response = await this.flw.Transaction.verify({ id: params.transactionId });
return {
gateway: 'flutterwave',
status: response.data.status === 'successful' ? 'success' : 'failure',
params: response.data,
message: 'Flutterwave payment verification',
};
}
catch (err) {
if (err instanceof Error) {
return {
gateway: 'flutterwave',
status: 'failure',
params: { error: err.message },
message: err.message || 'Flutterwave verification failed',
};
}
return {
gateway: 'flutterwave',
status: 'failure',
params: { error: String(err) },
message: 'Flutterwave verification failed',
};
}
}
/**
* Refund a payment
*/
async refund(params) {
try {
const response = await this.flw.Refund.refund({
id: params.transactionId,
amount: params.amount,
secKey: this.config.secretKey,
});
let refundMessage = response.message;
if (typeof refundMessage !== 'string')
refundMessage = 'Flutterwave refund processed';
return {
gateway: 'flutterwave',
status: response.status === 'success' ? 'success' : 'failure',
params: response,
message: refundMessage,
};
}
catch (err) {
if (err instanceof Error) {
return {
gateway: 'flutterwave',
status: 'failure',
params: { error: err.message },
message: err.message || 'Flutterwave refund failed',
};
}
return {
gateway: 'flutterwave',
status: 'failure',
params: { error: String(err) },
message: 'Flutterwave refund failed',
};
}
}
/**
* Create a subscription (not implemented)
*/
// eslint-disable-next-line @typescript-eslint/no-unused-vars
async subscribe(_params) {
return {
gateway: 'flutterwave',
status: 'cancelled',
params: {},
message: 'Flutterwave subscription not implemented',
};
}
/**
* Create an invoice (not implemented)
*/
// eslint-disable-next-line @typescript-eslint/no-unused-vars
async createInvoice(_params) {
return {
gateway: 'flutterwave',
status: 'cancelled',
params: {},
message: 'Flutterwave invoice not implemented',
};
}
/**
* Wallet operations (not supported)
*/
// eslint-disable-next-line @typescript-eslint/no-unused-vars
async wallet(_params) {
return {
gateway: 'flutterwave',
status: 'failure',
params: {},
message: 'Flutterwave does not support wallet operations',
};
}
}
exports.FlutterwaveGateway = FlutterwaveGateway;