UNPKG

@sastatesla/payment-gateway-sdk

Version:

A unified interface for integrating multiple payment providers (e.g., Razorpay, Cashfree) in your Node.js application.

206 lines 7.71 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.RazorpayProvider = void 0; const razorpay_1 = __importDefault(require("razorpay")); const validation_1 = require("../validations/validation"); const joiError_1 = require("../utils/joiError"); const sdkResponse_1 = require("../utils/sdkResponse"); const paymentProvider_1 = require("./paymentProvider"); class RazorpayProvider extends paymentProvider_1.PaymentProvider { async initialize(config) { try { this.razorpay = new razorpay_1.default({ key_id: config.keyId, key_secret: config.keySecret }); } catch (err) { throw (0, sdkResponse_1.APIError)({ message: `[RazorpayProvider Initialize] ${err.message}` }); } } constructor(config) { super(); try { this.razorpay = new razorpay_1.default({ key_id: config.keyId, key_secret: config.keySecret }); } catch (err) { throw (0, sdkResponse_1.APIError)({ message: `[RazorpayProvider Constructor] ${err.message}` }); } } async charge(input) { (0, joiError_1.validateOrThrow)(validation_1.chargeSchema, input, "charge"); try { const order = await this.razorpay.orders.create({ amount: input.amount, currency: input.currency, receipt: input.metadata?.receipt || `rcpt_${Date.now()}`, payment_capture: true, notes: input.metadata || {} }); return { ...order, amount: Number(order.amount), createdAt: new Date(order.created_at * 1000).toISOString() }; } catch (err) { throw (0, sdkResponse_1.APIError)({ message: `[Razorpay Charge] ${err.message}` }); } } async refund(input) { (0, joiError_1.validateOrThrow)(validation_1.refundSchema, input, "refund"); try { const params = {}; if (input.amount) params.amount = input.amount; const refund = await this.razorpay.payments.refund(input.transactionId, params); return { ...refund, amount: Number(refund.amount), createdAt: new Date(refund.created_at * 1000).toISOString() }; } catch (err) { throw (0, sdkResponse_1.APIError)({ message: `[Razorpay Refund] ${err.message}`, errorCode: err.code || "RAZORPAY_REFUND_ERROR", details: err }); } } async getPaymentStatus(transactionId) { (0, joiError_1.validateOrThrow)(validation_1.paymentStatusSchema, { transactionId }, "getPaymentStatus"); try { const payment = await this.razorpay.payments.fetch(transactionId); return { ...payment }; } catch (err) { throw (0, sdkResponse_1.APIError)({ message: `[Razorpay GetPaymentStatus] ${err.message}` }); } } async listUserPayments(userId, filters) { (0, joiError_1.validateOrThrow)(validation_1.listUserPaymentsSchema, { userId, filters }, "listUserPayments"); try { const params = { from: filters?.fromDate ? new Date(filters.fromDate).getTime() / 1000 : undefined, to: filters?.toDate ? new Date(filters.toDate).getTime() / 1000 : undefined, count: 100 }; const allPayments = await this.razorpay.payments.all(params); const results = allPayments.items.filter((p) => p.notes && p.notes.userId === userId && (!filters?.status || p.status === filters.status)); return results.map((p) => ({ id: p.id, status: p.status, amount: p.amount, currency: p.currency, createdAt: new Date(p.created_at * 1000).toISOString(), ...p })); } catch (err) { throw (0, sdkResponse_1.APIError)({ message: `[Razorpay ListUserPayments] ${err.message}`, errorCode: err.code || "RAZORPAY_LIST_USER_PAYMENTS_ERROR", details: err }); } } async listAllPayments(filters) { (0, joiError_1.validateOrThrow)(validation_1.listAllPaymentsSchema, { filters }, "listAllPayments"); try { const params = { from: filters?.fromDate ? new Date(filters.fromDate).getTime() / 1000 : undefined, to: filters?.toDate ? new Date(filters.toDate).getTime() / 1000 : undefined, count: 100 }; const allPayments = await this.razorpay.payments.all(params); let results = allPayments.items; if (filters?.status) { results = results.filter((p) => p.status === filters.status); } return results.map((p) => ({ id: p.id, status: p.status, amount: p.amount, currency: p.currency, createdAt: new Date(p.created_at * 1000).toISOString(), ...p })); } catch (err) { throw (0, sdkResponse_1.APIError)({ message: `[Razorpay ListAllPayments] ${err.message}`, errorCode: err.code || "RAZORPAY_LIST_ALL_PAYMENTS_ERROR", details: err }); } } async getSettlementDetails(settlementId) { (0, joiError_1.validateOrThrow)(validation_1.settlementDetailsSchema, { settlementId }, "getSettlementDetails"); try { const settlement = await this.razorpay.settlements.fetch(settlementId); return { ...settlement, amount: Number(settlement.amount) }; } catch (err) { throw (0, sdkResponse_1.APIError)({ message: `[Razorpay GetSettlementDetails] ${err.message}` }); } } async getRefundStatus(refundId) { (0, joiError_1.validateOrThrow)(validation_1.refundStatusSchema, { refundId }, "getRefundStatus"); try { const refund = await this.razorpay.refunds.fetch(refundId); return { ...refund, amount: Number(refund.amount), createdAt: new Date(refund.created_at * 1000).toISOString() }; } catch (err) { throw (0, sdkResponse_1.APIError)({ message: `[Razorpay GetRefundStatus] ${err.message}` }); } } // Provider-specific method (not in abstract) async fetchVirtualAccountDetails(accountId) { try { return await this.razorpay.virtualAccounts.fetch(accountId); } catch (err) { throw (0, sdkResponse_1.APIError)({ message: `[Razorpay FetchVirtualAccountDetails] ${err.message}` }); } } } exports.RazorpayProvider = RazorpayProvider; //# sourceMappingURL=razorpay.js.map