UNPKG

@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
"use strict"; 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