@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
JavaScript
;
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