@sastatesla/payment-gateway-sdk
Version:
A unified interface for integrating multiple payment providers (e.g., Razorpay, Cashfree) in your Node.js application.
218 lines • 8.49 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.CashfreeProvider = void 0;
const cashfree_pg_1 = __importDefault(require("cashfree-pg"));
const validation_1 = require("../validations/validation");
const joiError_1 = require("../utils/joiError");
const sdkResponse_1 = require("../utils/sdkResponse");
const paymentProvider_1 = require("./paymentProvider");
class CashfreeProvider extends paymentProvider_1.PaymentProvider {
async initialize(config) {
try {
// @ts-ignore
this.cashfree = new cashfree_pg_1.default.PG({
clientId: config.clientId,
clientSecret: config.clientSecret,
env: config.env || "PROD"
});
}
catch (err) {
throw (0, sdkResponse_1.APIError)({
message: `[CashfreeProvider Initialize] ${err.message}`
});
}
}
constructor(config) {
super();
try {
// @ts-ignore
this.cashfree = new cashfree_pg_1.default.PG({
clientId: config.clientId,
clientSecret: config.clientSecret,
env: config.env || "PROD"
});
}
catch (err) {
throw (0, sdkResponse_1.APIError)({
message: `[CashfreeProvider Constructor] ${err.message}`
});
}
}
async charge(input) {
(0, joiError_1.validateOrThrow)(validation_1.chargeSchema, input, "charge");
try {
const orderRequest = {
order_id: input.metadata?.orderId || `order_${Date.now()}`,
order_amount: input.amount / 100,
order_currency: input.currency,
customer_details: {
customer_id: input.metadata?.customerId || `cust_${Date.now()}`,
customer_email: input.metadata?.email,
customer_phone: input.metadata?.phone
},
order_meta: input.metadata || {},
order_note: input.metadata?.note
};
const order = await this.cashfree.orders.create(orderRequest);
return {
...order,
amount: Number(order.order_amount) * 100,
createdAt: new Date(order.created_time).toISOString()
};
}
catch (err) {
throw (0, sdkResponse_1.APIError)({
message: `[Cashfree Charge] ${err.message}`
});
}
}
async refund(input) {
(0, joiError_1.validateOrThrow)(validation_1.refundSchema, input, "refund");
try {
const refundRequest = {
refund_amount: input.amount ? input.amount / 100 : undefined,
refund_id: input.transactionId || `refund_${Date.now()}`,
refund_note: input?.note
};
const refund = await this.cashfree.refunds.create(input.transactionId, refundRequest);
return {
...refund,
amount: Number(refund.refund_amount) * 100,
createdAt: new Date(refund.refund_time).toISOString()
};
}
catch (err) {
throw (0, sdkResponse_1.APIError)({
message: `[Cashfree Refund] ${err.message}`,
errorCode: err.code || "CASHFREE_REFUND_ERROR",
details: err
});
}
}
async getPaymentStatus(paymentId) {
(0, joiError_1.validateOrThrow)(validation_1.paymentStatusSchema, { paymentId }, "getPaymentStatus");
try {
const payment = await this.cashfree.payments.get(paymentId);
return { ...payment };
}
catch (err) {
throw (0, sdkResponse_1.APIError)({
message: `[Cashfree GetPaymentStatus] ${err.message}`
});
}
}
async listUserPayments(userId, filters) {
(0, joiError_1.validateOrThrow)(validation_1.listUserPaymentsSchema, { userId, filters }, "listUserPayments");
try {
const params = {
from_time: filters?.fromDate
? new Date(filters.fromDate).toISOString()
: undefined,
to_time: filters?.toDate
? new Date(filters.toDate).toISOString()
: undefined,
per_page: 100
};
const allPayments = await this.cashfree.orders.list(params);
const results = allPayments.data.filter((p) => p.customer_details &&
p.customer_details.customer_id === userId &&
(!filters?.status || p.order_status === filters.status));
return results.map((p) => ({
id: p.order_id,
status: p.order_status,
amount: Number(p.order_amount) * 100,
currency: p.order_currency,
createdAt: new Date(p.created_time).toISOString(),
...p
}));
}
catch (err) {
throw (0, sdkResponse_1.APIError)({
message: `[Cashfree ListUserPayments] ${err.message}`,
errorCode: err.code || "CASHFREE_LIST_USER_PAYMENTS_ERROR",
details: err
});
}
}
async listAllPayments(filters) {
(0, joiError_1.validateOrThrow)(validation_1.listAllPaymentsSchema, { filters }, "listAllPayments");
try {
const params = {
from_time: filters?.fromDate
? new Date(filters.fromDate).toISOString()
: undefined,
to_time: filters?.toDate
? new Date(filters.toDate).toISOString()
: undefined,
per_page: 100
};
const allPayments = await this.cashfree.orders.list(params);
let results = allPayments.data;
if (filters?.status) {
results = results.filter((p) => p.order_status === filters.status);
}
return results.map((p) => ({
id: p.order_id,
status: p.order_status,
amount: Number(p.order_amount) * 100,
currency: p.order_currency,
createdAt: new Date(p.created_time).toISOString(),
...p
}));
}
catch (err) {
throw (0, sdkResponse_1.APIError)({
message: `[Cashfree ListAllPayments] ${err.message}`,
errorCode: err.code || "CASHFREE_LIST_ALL_PAYMENTS_ERROR",
details: err
});
}
}
async getSettlementDetails(settlementId) {
(0, joiError_1.validateOrThrow)(validation_1.settlementDetailsSchema, { settlementId }, "getSettlementDetails");
try {
const settlement = await this.cashfree.settlements.get(settlementId);
return {
...settlement,
amount: Number(settlement.amount) * 100
};
}
catch (err) {
throw (0, sdkResponse_1.APIError)({
message: `[Cashfree GetSettlementDetails] ${err.message}`
});
}
}
async getRefundStatus(refundId) {
(0, joiError_1.validateOrThrow)(validation_1.refundStatusSchema, { refundId }, "getRefundStatus");
try {
const refund = await this.cashfree.refunds.get(refundId);
return {
...refund,
amount: Number(refund.refund_amount) * 100,
createdAt: new Date(refund.refund_time).toISOString()
};
}
catch (err) {
throw (0, sdkResponse_1.APIError)({
message: `[Cashfree GetRefundStatus] ${err.message}`
});
}
}
// Provider-specific method (not in abstract)
async fetchVirtualAccountDetails(accountId) {
try {
return await this.cashfree.virtualAccounts.get(accountId);
}
catch (err) {
throw (0, sdkResponse_1.APIError)({
message: `[Cashfree FetchVirtualAccountDetails] ${err.message}`
});
}
}
}
exports.CashfreeProvider = CashfreeProvider;
//# sourceMappingURL=cashfree.js.map