@boostengine/payments 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/adapters/base.adapter.ts","../src/utils/crypto.ts","../src/utils/errors.ts","../src/adapters/razorpay.adapter.ts","../src/adapters/cashfree.adapter.ts","../src/adapters/phonepe.adapter.ts","../src/adapters/paytm.adapter.ts","../src/adapters/stripe.adapter.ts","../src/adapters/cod.adapter.ts","../src/manager.ts"],"names":["crypto"],"mappings":"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","file":"index.cjs","sourcesContent":["import {\n GatewayName,\n UnifiedCreateOrderOptions,\n UnifiedOrderResult,\n UnifiedPaymentVerificationOptions,\n UnifiedPaymentVerificationResult,\n UnifiedRefundOptions,\n UnifiedRefundResult,\n WebhookVerificationOptions,\n WebhookVerificationResult,\n} from '../types';\n\nexport abstract class BasePaymentAdapter {\n public abstract readonly name: GatewayName;\n\n /**\n * Create an order or payment session on the gateway.\n */\n public abstract createOrder(options: UnifiedCreateOrderOptions): Promise<UnifiedOrderResult>;\n\n /**\n * Verify checkout completion signature or status query.\n */\n public abstract verifyPayment(\n options: UnifiedPaymentVerificationOptions\n ): Promise<UnifiedPaymentVerificationResult>;\n\n /**\n * Initiate a refund back to the customer.\n */\n public abstract refund(options: UnifiedRefundOptions): Promise<UnifiedRefundResult>;\n\n /**\n * Verify server-to-server webhook authenticity and parse payload.\n */\n public abstract verifyWebhook(\n options: WebhookVerificationOptions\n ): Promise<WebhookVerificationResult>;\n\n /**\n * Safe helper to extract single string header value from request headers.\n */\n protected getHeader(\n headers: Record<string, string | string[] | undefined>,\n name: string\n ): string | undefined {\n const direct = headers[name] ?? headers[name.toLowerCase()] ?? headers[name.toUpperCase()];\n if (Array.isArray(direct)) return direct[0];\n return direct;\n }\n\n /**\n * Helper to perform HTTP JSON requests with standard error extraction.\n */\n protected async fetchJson<T = any>(\n url: string,\n options: {\n method?: 'GET' | 'POST' | 'PATCH' | 'DELETE';\n headers?: Record<string, string>;\n body?: any;\n } = {}\n ): Promise<T> {\n const { method = 'GET', headers = {}, body } = options;\n const requestHeaders: Record<string, string> = {\n Accept: 'application/json',\n ...headers,\n };\n\n let serializedBody: string | undefined;\n if (body !== undefined) {\n if (typeof body === 'string') {\n serializedBody = body;\n } else if (headers['Content-Type'] === 'application/x-www-form-urlencoded') {\n serializedBody = new URLSearchParams(body).toString();\n } else {\n requestHeaders['Content-Type'] = 'application/json';\n serializedBody = JSON.stringify(body);\n }\n }\n\n const res = await fetch(url, {\n method,\n headers: requestHeaders,\n body: serializedBody,\n });\n\n const text = await res.text();\n let data: any;\n try {\n data = JSON.parse(text);\n } catch {\n data = text;\n }\n\n if (!res.ok) {\n const errMsg =\n data?.message ||\n data?.error?.description ||\n data?.error?.message ||\n data?.description ||\n (typeof data === 'string' ? data : `HTTP ${res.status} ${res.statusText}`);\n throw new Error(`[${this.name.toUpperCase()} API Error] ${errMsg}`);\n }\n\n return data as T;\n }\n}\n","import crypto from 'crypto';\n\n/**\n * Computes HMAC-SHA256 hex digest.\n */\nexport function hmacSha256(data: string | Buffer, secret: string): string {\n return crypto.createHmac('sha256', secret).update(data).digest('hex');\n}\n\n/**\n * Computes standard SHA-256 hex digest.\n */\nexport function sha256(data: string | Buffer): string {\n return crypto.createHash('sha256').update(data).digest('hex');\n}\n\n/**\n * Encodes string into Base64.\n */\nexport function base64Encode(data: string | object): string {\n const str = typeof data === 'string' ? data : JSON.stringify(data);\n return Buffer.from(str, 'utf8').toString('base64');\n}\n\n/**\n * Decodes Base64 into utf-8 string.\n */\nexport function base64Decode(encoded: string): string {\n return Buffer.from(encoded, 'base64').toString('utf8');\n}\n\n/**\n * Constant-time safe string comparison to prevent timing attacks on signatures.\n */\nexport function safeCompare(a: string, b: string): boolean {\n try {\n const bufA = Buffer.from(a, 'utf8');\n const bufB = Buffer.from(b, 'utf8');\n if (bufA.length !== bufB.length) return false;\n return crypto.timingSafeEqual(bufA, bufB);\n } catch {\n return false;\n }\n}\n","import { GatewayName } from '../types';\n\nexport class PaymentError extends Error {\n public readonly gateway?: GatewayName;\n public readonly statusCode?: number;\n public readonly rawError?: any;\n\n constructor(message: string, options?: { gateway?: GatewayName; statusCode?: number; rawError?: any }) {\n super(message);\n this.name = 'PaymentError';\n this.gateway = options?.gateway;\n this.statusCode = options?.statusCode;\n this.rawError = options?.rawError;\n Object.setPrototypeOf(this, PaymentError.prototype);\n }\n}\n\nexport class GatewayNotConfiguredError extends PaymentError {\n constructor(gateway: GatewayName) {\n super(`Payment gateway '${gateway}' is not configured in PaymentManager.`, { gateway, statusCode: 400 });\n this.name = 'GatewayNotConfiguredError';\n Object.setPrototypeOf(this, GatewayNotConfiguredError.prototype);\n }\n}\n\nexport class SignatureVerificationError extends PaymentError {\n constructor(gateway: GatewayName, details?: string) {\n super(`Invalid webhook/payment signature for gateway '${gateway}'. ${details || ''}`.trim(), {\n gateway,\n statusCode: 401,\n });\n this.name = 'SignatureVerificationError';\n Object.setPrototypeOf(this, SignatureVerificationError.prototype);\n }\n}\n","import { BasePaymentAdapter } from './base.adapter';\nimport {\n GatewayName,\n RazorpayConfig,\n UnifiedCreateOrderOptions,\n UnifiedOrderResult,\n UnifiedPaymentVerificationOptions,\n UnifiedPaymentVerificationResult,\n UnifiedRefundOptions,\n UnifiedRefundResult,\n WebhookVerificationOptions,\n WebhookVerificationResult,\n} from '../types';\nimport { hmacSha256, safeCompare } from '../utils/crypto';\nimport { PaymentError } from '../utils/errors';\n\nexport class RazorpayAdapter extends BasePaymentAdapter {\n public readonly name: GatewayName = 'razorpay';\n private readonly baseUrl = 'https://api.razorpay.com/v1';\n\n constructor(private readonly config: RazorpayConfig) {\n super();\n if (!config.keyId || !config.keySecret) {\n throw new PaymentError('Razorpay keyId and keySecret are required.', { gateway: 'razorpay' });\n }\n }\n\n private getAuthHeader(): string {\n const creds = `${this.config.keyId}:${this.config.keySecret}`;\n return `Basic ${Buffer.from(creds).toString('base64')}`;\n }\n\n public async createOrder(options: UnifiedCreateOrderOptions): Promise<UnifiedOrderResult> {\n // Razorpay requires amount in subunits (paise for INR, cents for USD)\n const amountInSubunits = Math.round(options.amount * 100);\n\n const payload = {\n amount: amountInSubunits,\n currency: options.currency.toUpperCase(),\n receipt: options.receipt,\n notes: {\n customer_name: options.customer.name,\n customer_email: options.customer.email,\n customer_phone: options.customer.phone,\n ...options.notes,\n },\n };\n\n const res = await this.fetchJson(`${this.baseUrl}/orders`, {\n method: 'POST',\n headers: {\n Authorization: this.getAuthHeader(),\n },\n body: payload,\n });\n\n return {\n gateway: 'razorpay',\n orderId: options.receipt,\n gatewayOrderId: res.id,\n amount: options.amount,\n currency: options.currency.toUpperCase(),\n status: 'CREATED',\n rawResponse: res,\n };\n }\n\n public async verifyPayment(\n options: UnifiedPaymentVerificationOptions\n ): Promise<UnifiedPaymentVerificationResult> {\n if (!options.paymentId) {\n throw new PaymentError('Razorpay payment verification requires paymentId.', { gateway: 'razorpay' });\n }\n\n let isSignatureValid = false;\n if (options.signature) {\n // Standard frontend signature check: HMAC_SHA256(orderId + \"|\" + paymentId, secret)\n const expectedSignature = hmacSha256(\n `${options.orderId}|${options.paymentId}`,\n this.config.keySecret\n );\n isSignatureValid = safeCompare(expectedSignature, options.signature);\n }\n\n // Query payment status directly from Razorpay to guarantee certainty\n const payment = await this.fetchJson(`${this.baseUrl}/payments/${options.paymentId}`, {\n method: 'GET',\n headers: {\n Authorization: this.getAuthHeader(),\n },\n });\n\n const isCaptured = payment.status === 'captured' || payment.status === 'authorized';\n\n return {\n gateway: 'razorpay',\n isSuccessful: (options.signature ? isSignatureValid : true) && isCaptured,\n paymentId: payment.id,\n orderId: options.orderId,\n amount: payment.amount / 100,\n currency: payment.currency,\n paymentMethod: payment.method,\n rawResponse: payment,\n };\n }\n\n public async refund(options: UnifiedRefundOptions): Promise<UnifiedRefundResult> {\n const payload: Record<string, any> = {\n notes: { reason: options.reason || 'Merchant requested refund' },\n };\n if (options.amount) {\n payload.amount = Math.round(options.amount * 100);\n }\n\n const res = await this.fetchJson(`${this.baseUrl}/payments/${options.paymentId}/refund`, {\n method: 'POST',\n headers: {\n Authorization: this.getAuthHeader(),\n },\n body: payload,\n });\n\n return {\n gateway: 'razorpay',\n refundId: res.id,\n paymentId: options.paymentId,\n amount: res.amount / 100,\n status: res.status === 'processed' ? 'SUCCESS' : 'PENDING',\n rawResponse: res,\n };\n }\n\n public async verifyWebhook(\n options: WebhookVerificationOptions\n ): Promise<WebhookVerificationResult> {\n const secret = options.webhookSecret || this.config.webhookSecret;\n if (!secret) {\n return {\n isValid: false,\n gateway: 'razorpay',\n error: 'Razorpay webhookSecret is not configured.',\n };\n }\n\n const signature = this.getHeader(options.headers, 'x-razorpay-signature');\n\n if (!signature || typeof signature !== 'string') {\n return {\n isValid: false,\n gateway: 'razorpay',\n error: 'Missing X-Razorpay-Signature header.',\n };\n }\n\n const rawString =\n typeof options.rawBody === 'string'\n ? options.rawBody\n : options.rawBody.toString('utf8');\n\n const expectedSignature = hmacSha256(rawString, secret);\n const isValid = safeCompare(expectedSignature, signature);\n\n let parsedData: any;\n try {\n parsedData = JSON.parse(rawString);\n } catch {\n parsedData = null;\n }\n\n return {\n isValid,\n gateway: 'razorpay',\n event: parsedData?.event,\n data: parsedData?.payload,\n };\n }\n}\n","import { BasePaymentAdapter } from './base.adapter';\nimport {\n CashfreeConfig,\n GatewayName,\n UnifiedCreateOrderOptions,\n UnifiedOrderResult,\n UnifiedPaymentVerificationOptions,\n UnifiedPaymentVerificationResult,\n UnifiedRefundOptions,\n UnifiedRefundResult,\n WebhookVerificationOptions,\n WebhookVerificationResult,\n} from '../types';\nimport { hmacSha256, safeCompare } from '../utils/crypto';\nimport { PaymentError } from '../utils/errors';\n\nexport class CashfreeAdapter extends BasePaymentAdapter {\n public readonly name: GatewayName = 'cashfree';\n private readonly baseUrl: string;\n private readonly apiVersion: string;\n\n constructor(private readonly config: CashfreeConfig) {\n super();\n if (!config.appId || !config.secretKey) {\n throw new PaymentError('Cashfree appId and secretKey are required.', { gateway: 'cashfree' });\n }\n this.baseUrl =\n config.env === 'PRODUCTION'\n ? 'https://api.cashfree.com/pg'\n : 'https://sandbox.cashfree.com/pg';\n this.apiVersion = config.apiVersion || '2023-08-01';\n }\n\n private getHeaders(): Record<string, string> {\n return {\n 'x-client-id': this.config.appId,\n 'x-client-secret': this.config.secretKey,\n 'x-api-version': this.apiVersion,\n 'Content-Type': 'application/json',\n };\n }\n\n public async createOrder(options: UnifiedCreateOrderOptions): Promise<UnifiedOrderResult> {\n const payload = {\n order_id: options.receipt,\n order_amount: options.amount,\n order_currency: options.currency.toUpperCase(),\n customer_details: {\n customer_id: options.customer.id || `cust_${Date.now()}`,\n customer_name: options.customer.name,\n customer_email: options.customer.email,\n customer_phone: options.customer.phone,\n },\n order_meta: {\n return_url: options.redirectUrl,\n notify_url: options.callbackUrl,\n },\n order_note: options.notes ? JSON.stringify(options.notes) : 'Order via Boost Payments',\n };\n\n const res = await this.fetchJson(`${this.baseUrl}/orders`, {\n method: 'POST',\n headers: this.getHeaders(),\n body: payload,\n });\n\n return {\n gateway: 'cashfree',\n orderId: options.receipt,\n gatewayOrderId: res.order_id,\n amount: options.amount,\n currency: options.currency.toUpperCase(),\n status: res.order_status === 'ACTIVE' ? 'CREATED' : 'PENDING',\n paymentSessionId: res.payment_session_id,\n rawResponse: res,\n };\n }\n\n public async verifyPayment(\n options: UnifiedPaymentVerificationOptions\n ): Promise<UnifiedPaymentVerificationResult> {\n const order = await this.fetchJson(`${this.baseUrl}/orders/${options.orderId}`, {\n method: 'GET',\n headers: this.getHeaders(),\n });\n\n const isSuccessful = order.order_status === 'PAID';\n let paymentMethod = 'unknown';\n let paymentId = options.paymentId || order.order_id;\n\n if (isSuccessful) {\n try {\n const payments = await this.fetchJson(`${this.baseUrl}/orders/${options.orderId}/payments`, {\n method: 'GET',\n headers: this.getHeaders(),\n });\n if (Array.isArray(payments) && payments.length > 0) {\n const latest = payments[0];\n paymentId = String(latest.cf_payment_id || paymentId);\n paymentMethod = latest.payment_group || (latest.payment_method ? Object.keys(latest.payment_method)[0] : 'online');\n }\n } catch {\n // Fallback to order details\n }\n }\n\n return {\n gateway: 'cashfree',\n isSuccessful,\n paymentId,\n orderId: order.order_id,\n amount: order.order_amount,\n currency: order.order_currency,\n paymentMethod,\n rawResponse: order,\n };\n }\n\n public async refund(options: UnifiedRefundOptions): Promise<UnifiedRefundResult> {\n if (!options.orderId) {\n throw new PaymentError('Cashfree refund requires orderId.', { gateway: 'cashfree' });\n }\n\n const payload = {\n refund_id: `rfnd_${Date.now()}`,\n refund_amount: options.amount,\n refund_note: options.reason || 'Merchant initiated refund',\n };\n\n const res = await this.fetchJson(`${this.baseUrl}/orders/${options.orderId}/refunds`, {\n method: 'POST',\n headers: this.getHeaders(),\n body: payload,\n });\n\n return {\n gateway: 'cashfree',\n refundId: res.refund_id,\n paymentId: options.paymentId,\n amount: res.refund_amount,\n status: res.refund_status === 'SUCCESS' ? 'SUCCESS' : 'PENDING',\n rawResponse: res,\n };\n }\n\n public async verifyWebhook(\n options: WebhookVerificationOptions\n ): Promise<WebhookVerificationResult> {\n const signature = this.getHeader(options.headers, 'x-webhook-signature');\n const timestamp = this.getHeader(options.headers, 'x-webhook-timestamp');\n\n const rawString =\n typeof options.rawBody === 'string'\n ? options.rawBody\n : options.rawBody.toString('utf8');\n\n let isValid = false;\n if (signature && timestamp) {\n const signedData = `${timestamp}${rawString}`;\n const expectedSignature = Buffer.from(\n hmacSha256(signedData, this.config.secretKey),\n 'hex'\n ).toString('base64');\n isValid = safeCompare(expectedSignature, signature);\n } else if (signature) {\n const expectedSignature = Buffer.from(\n hmacSha256(rawString, this.config.secretKey),\n 'hex'\n ).toString('base64');\n isValid = safeCompare(expectedSignature, signature);\n }\n\n let parsedData: any;\n try {\n parsedData = JSON.parse(rawString);\n } catch {\n parsedData = null;\n }\n\n return {\n isValid,\n gateway: 'cashfree',\n event: parsedData?.type,\n data: parsedData?.data,\n };\n }\n}\n","import { BasePaymentAdapter } from './base.adapter';\nimport {\n GatewayName,\n PhonePeConfig,\n UnifiedCreateOrderOptions,\n UnifiedOrderResult,\n UnifiedPaymentVerificationOptions,\n UnifiedPaymentVerificationResult,\n UnifiedRefundOptions,\n UnifiedRefundResult,\n WebhookVerificationOptions,\n WebhookVerificationResult,\n} from '../types';\nimport { base64Decode, base64Encode, sha256 } from '../utils/crypto';\nimport { PaymentError } from '../utils/errors';\n\nexport class PhonePeAdapter extends BasePaymentAdapter {\n public readonly name: GatewayName = 'phonepe';\n private readonly baseUrl: string;\n private readonly saltIndex: string;\n\n constructor(private readonly config: PhonePeConfig) {\n super();\n if (!config.merchantId || !config.saltKey) {\n throw new PaymentError('PhonePe merchantId and saltKey are required.', { gateway: 'phonepe' });\n }\n this.baseUrl =\n config.env === 'PRODUCTION'\n ? 'https://api.phonepe.com/apis/hermes'\n : 'https://api-preprod.phonepe.com/apis/pg-sandbox';\n this.saltIndex = config.saltIndex || '1';\n }\n\n private calculateXVerify(base64Payload: string, endpoint: string): string {\n const stringToHash = `${base64Payload}${endpoint}${this.config.saltKey}`;\n const hash = sha256(stringToHash);\n return `${hash}###${this.saltIndex}`;\n }\n\n public async createOrder(options: UnifiedCreateOrderOptions): Promise<UnifiedOrderResult> {\n const amountInPaise = Math.round(options.amount * 100);\n\n const payload = {\n merchantId: this.config.merchantId,\n merchantTransactionId: options.receipt,\n merchantUserId: options.customer.id || `MUID_${Date.now()}`,\n amount: amountInPaise,\n redirectUrl: options.redirectUrl || 'https://yourstore.com/order-success',\n redirectMode: 'POST',\n callbackUrl: options.callbackUrl || 'https://api.yourstore.com/webhooks/phonepe',\n mobileNumber: options.customer.phone.replace(/[^0-9]/g, '').slice(-10),\n paymentInstrument: {\n type: 'PAY_PAGE',\n },\n };\n\n const base64Payload = base64Encode(payload);\n const endpoint = '/pg/v1/pay';\n const xVerify = this.calculateXVerify(base64Payload, endpoint);\n\n const res = await this.fetchJson(`${this.baseUrl}${endpoint}`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'X-VERIFY': xVerify,\n },\n body: {\n request: base64Payload,\n },\n });\n\n const redirectUrl = res?.data?.instrumentResponse?.redirectInfo?.url;\n\n return {\n gateway: 'phonepe',\n orderId: options.receipt,\n gatewayOrderId: options.receipt,\n amount: options.amount,\n currency: options.currency.toUpperCase(),\n status: res.success ? 'CREATED' : 'FAILED',\n redirectUrl,\n rawResponse: res,\n };\n }\n\n public async verifyPayment(\n options: UnifiedPaymentVerificationOptions\n ): Promise<UnifiedPaymentVerificationResult> {\n const endpoint = `/pg/v1/status/${this.config.merchantId}/${options.orderId}`;\n const stringToHash = `${endpoint}${this.config.saltKey}`;\n const xVerify = `${sha256(stringToHash)}###${this.saltIndex}`;\n\n const res = await this.fetchJson(`${this.baseUrl}${endpoint}`, {\n method: 'GET',\n headers: {\n 'Content-Type': 'application/json',\n 'X-VERIFY': xVerify,\n 'X-MERCHANT-ID': this.config.merchantId,\n },\n });\n\n const isSuccessful = res.code === 'PAYMENT_SUCCESS';\n const amount = res.data?.amount ? res.data.amount / 100 : 0;\n const paymentId = res.data?.transactionId || options.orderId;\n\n return {\n gateway: 'phonepe',\n isSuccessful,\n paymentId,\n orderId: options.orderId,\n amount,\n currency: 'INR',\n paymentMethod: res.data?.paymentInstrument?.type || 'UPI',\n rawResponse: res,\n };\n }\n\n public async refund(options: UnifiedRefundOptions): Promise<UnifiedRefundResult> {\n const refundTxnId = `RF_${Date.now()}`;\n const amountInPaise = options.amount ? Math.round(options.amount * 100) : 0;\n\n const payload = {\n merchantId: this.config.merchantId,\n merchantTransactionId: refundTxnId,\n originalTransactionId: options.orderId || options.paymentId,\n amount: amountInPaise,\n callbackUrl: 'https://api.yourstore.com/webhooks/phonepe',\n };\n\n const base64Payload = base64Encode(payload);\n const endpoint = '/pg/v1/refund';\n const xVerify = this.calculateXVerify(base64Payload, endpoint);\n\n const res = await this.fetchJson(`${this.baseUrl}${endpoint}`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'X-VERIFY': xVerify,\n },\n body: {\n request: base64Payload,\n },\n });\n\n return {\n gateway: 'phonepe',\n refundId: refundTxnId,\n paymentId: options.paymentId,\n amount: options.amount || 0,\n status: res.success ? 'SUCCESS' : 'FAILED',\n rawResponse: res,\n };\n }\n\n public async verifyWebhook(\n options: WebhookVerificationOptions\n ): Promise<WebhookVerificationResult> {\n const rawString =\n typeof options.rawBody === 'string'\n ? options.rawBody\n : options.rawBody.toString('utf8');\n\n let parsed: any;\n try {\n parsed = JSON.parse(rawString);\n } catch {\n return { isValid: false, gateway: 'phonepe', error: 'Invalid JSON payload' };\n }\n\n if (!parsed.response) {\n return { isValid: false, gateway: 'phonepe', error: 'Missing response field in PhonePe callback' };\n }\n\n const decoded = JSON.parse(base64Decode(parsed.response));\n const isSuccess = decoded.code === 'PAYMENT_SUCCESS';\n\n return {\n isValid: true,\n gateway: 'phonepe',\n event: decoded.code,\n data: decoded.data,\n };\n }\n}\n","import { BasePaymentAdapter } from './base.adapter';\nimport {\n GatewayName,\n PaytmConfig,\n UnifiedCreateOrderOptions,\n UnifiedOrderResult,\n UnifiedPaymentVerificationOptions,\n UnifiedPaymentVerificationResult,\n UnifiedRefundOptions,\n UnifiedRefundResult,\n WebhookVerificationOptions,\n WebhookVerificationResult,\n} from '../types';\nimport { PaymentError } from '../utils/errors';\n\nexport class PaytmAdapter extends BasePaymentAdapter {\n public readonly name: GatewayName = 'paytm';\n private readonly baseUrl: string;\n\n constructor(private readonly config: PaytmConfig) {\n super();\n if (!config.mid || !config.merchantKey) {\n throw new PaymentError('Paytm mid and merchantKey are required.', { gateway: 'paytm' });\n }\n this.baseUrl =\n config.env === 'PRODUCTION'\n ? 'https://securegw.paytm.in'\n : 'https://securegw-stage.paytm.in';\n }\n\n public async createOrder(options: UnifiedCreateOrderOptions): Promise<UnifiedOrderResult> {\n const payload = {\n body: {\n requestType: 'Payment',\n mid: this.config.mid,\n websiteName: this.config.website || 'DEFAULT',\n orderId: options.receipt,\n callbackUrl: options.callbackUrl || 'https://api.yourstore.com/webhooks/paytm',\n txnAmount: {\n value: options.amount.toFixed(2),\n currency: 'INR',\n },\n userInfo: {\n custId: options.customer.id || `CUST_${Date.now()}`,\n mobile: options.customer.phone.replace(/[^0-9]/g, '').slice(-10),\n email: options.customer.email,\n },\n },\n };\n\n const url = `${this.baseUrl}/theia/api/v1/initiateTransaction?mid=${this.config.mid}&orderId=${options.receipt}`;\n const res = await this.fetchJson(url, {\n method: 'POST',\n body: payload,\n });\n\n const txnToken = res?.body?.txnToken;\n\n return {\n gateway: 'paytm',\n orderId: options.receipt,\n gatewayOrderId: options.receipt,\n amount: options.amount,\n currency: 'INR',\n status: txnToken ? 'CREATED' : 'FAILED',\n txnToken,\n rawResponse: res,\n };\n }\n\n public async verifyPayment(\n options: UnifiedPaymentVerificationOptions\n ): Promise<UnifiedPaymentVerificationResult> {\n const url = `${this.baseUrl}/v3/order/status`;\n const payload = {\n body: {\n mid: this.config.mid,\n orderId: options.orderId,\n },\n };\n\n const res = await this.fetchJson(url, {\n method: 'POST',\n body: payload,\n });\n\n const body = res?.body || {};\n const isSuccessful = body.resultInfo?.resultStatus === 'TXN_SUCCESS';\n\n return {\n gateway: 'paytm',\n isSuccessful,\n paymentId: body.txnId || options.orderId,\n orderId: options.orderId,\n amount: parseFloat(body.txnAmount || '0'),\n currency: 'INR',\n paymentMethod: body.paymentMode || 'ONLINE',\n rawResponse: res,\n };\n }\n\n public async refund(options: UnifiedRefundOptions): Promise<UnifiedRefundResult> {\n const refundRefId = `RF_${Date.now()}`;\n const url = `${this.baseUrl}/refund/apply`;\n const payload = {\n body: {\n mid: this.config.mid,\n txnType: 'REFUND',\n orderId: options.orderId,\n txnId: options.paymentId,\n refId: refundRefId,\n refundAmount: (options.amount || 0).toFixed(2),\n },\n };\n\n const res = await this.fetchJson(url, {\n method: 'POST',\n body: payload,\n });\n\n const body = res?.body || {};\n const isSuccess = body.resultInfo?.resultStatus === 'TXN_SUCCESS' || body.resultInfo?.resultStatus === 'PENDING';\n\n return {\n gateway: 'paytm',\n refundId: body.refundId || refundRefId,\n paymentId: options.paymentId,\n amount: options.amount || 0,\n status: isSuccess ? 'SUCCESS' : 'FAILED',\n rawResponse: res,\n };\n }\n\n public async verifyWebhook(\n options: WebhookVerificationOptions\n ): Promise<WebhookVerificationResult> {\n const rawString =\n typeof options.rawBody === 'string'\n ? options.rawBody\n : options.rawBody.toString('utf8');\n\n let parsed: any;\n try {\n parsed = JSON.parse(rawString);\n } catch {\n // Check if urlencoded form post\n const params = new URLSearchParams(rawString);\n parsed = Object.fromEntries(params.entries());\n }\n\n const isSuccess = parsed?.STATUS === 'TXN_SUCCESS' || parsed?.resultInfo?.resultStatus === 'TXN_SUCCESS';\n\n return {\n isValid: true,\n gateway: 'paytm',\n event: isSuccess ? 'TXN_SUCCESS' : 'TXN_FAILURE',\n data: parsed,\n };\n }\n}\n","import { BasePaymentAdapter } from './base.adapter';\nimport {\n GatewayName,\n StripeConfig,\n UnifiedCreateOrderOptions,\n UnifiedOrderResult,\n UnifiedPaymentVerificationOptions,\n UnifiedPaymentVerificationResult,\n UnifiedRefundOptions,\n UnifiedRefundResult,\n WebhookVerificationOptions,\n WebhookVerificationResult,\n} from '../types';\nimport { hmacSha256, safeCompare } from '../utils/crypto';\nimport { PaymentError } from '../utils/errors';\n\nexport class StripeAdapter extends BasePaymentAdapter {\n public readonly name: GatewayName = 'stripe';\n private readonly baseUrl = 'https://api.stripe.com/v1';\n\n constructor(private readonly config: StripeConfig) {\n super();\n if (!config.secretKey) {\n throw new PaymentError('Stripe secretKey is required.', { gateway: 'stripe' });\n }\n }\n\n private getAuthHeader(): Record<string, string> {\n return {\n Authorization: `Bearer ${this.config.secretKey}`,\n 'Content-Type': 'application/x-www-form-urlencoded',\n };\n }\n\n public async createOrder(options: UnifiedCreateOrderOptions): Promise<UnifiedOrderResult> {\n const amountInCents = Math.round(options.amount * 100);\n\n const body: Record<string, string> = {\n 'payment_method_types[0]': 'card',\n mode: 'payment',\n client_reference_id: options.receipt,\n customer_email: options.customer.email,\n 'line_items[0][price_data][currency]': options.currency.toLowerCase(),\n 'line_items[0][price_data][unit_amount]': String(amountInCents),\n 'line_items[0][price_data][product_data][name]': `Order #${options.receipt}`,\n 'line_items[0][quantity]': '1',\n success_url: options.redirectUrl || 'https://yourstore.com/order-success?session_id={CHECKOUT_SESSION_ID}',\n cancel_url: 'https://yourstore.com/cart',\n };\n\n const res = await this.fetchJson(`${this.baseUrl}/checkout/sessions`, {\n method: 'POST',\n headers: this.getAuthHeader(),\n body,\n });\n\n return {\n gateway: 'stripe',\n orderId: options.receipt,\n gatewayOrderId: res.id,\n amount: options.amount,\n currency: options.currency.toUpperCase(),\n status: 'CREATED',\n redirectUrl: res.url,\n rawResponse: res,\n };\n }\n\n public async verifyPayment(\n options: UnifiedPaymentVerificationOptions\n ): Promise<UnifiedPaymentVerificationResult> {\n const session = await this.fetchJson(`${this.baseUrl}/checkout/sessions/${options.orderId}`, {\n method: 'GET',\n headers: this.getAuthHeader(),\n });\n\n const isSuccessful = session.payment_status === 'paid';\n const amount = session.amount_total ? session.amount_total / 100 : 0;\n const paymentId = (session.payment_intent as string) || session.id;\n\n return {\n gateway: 'stripe',\n isSuccessful,\n paymentId,\n orderId: session.client_reference_id || session.id,\n amount,\n currency: (session.currency || 'USD').toUpperCase(),\n paymentMethod: 'card',\n rawResponse: session,\n };\n }\n\n public async refund(options: UnifiedRefundOptions): Promise<UnifiedRefundResult> {\n const body: Record<string, string> = {\n payment_intent: options.paymentId,\n };\n if (options.amount) {\n body.amount = String(Math.round(options.amount * 100));\n }\n if (options.reason) {\n body.reason = 'requested_by_customer';\n }\n\n const res = await this.fetchJson(`${this.baseUrl}/refunds`, {\n method: 'POST',\n headers: this.getAuthHeader(),\n body,\n });\n\n return {\n gateway: 'stripe',\n refundId: res.id,\n paymentId: options.paymentId,\n amount: res.amount / 100,\n status: res.status === 'succeeded' ? 'SUCCESS' : 'PENDING',\n rawResponse: res,\n };\n }\n\n public async verifyWebhook(\n options: WebhookVerificationOptions\n ): Promise<WebhookVerificationResult> {\n const secret = options.webhookSecret || this.config.webhookSecret;\n if (!secret) {\n return { isValid: false, gateway: 'stripe', error: 'Stripe webhookSecret is not configured.' };\n }\n\n const sigHeader = this.getHeader(options.headers, 'stripe-signature');\n\n if (!sigHeader || typeof sigHeader !== 'string') {\n return { isValid: false, gateway: 'stripe', error: 'Missing stripe-signature header.' };\n }\n\n // Parse timestamp & signatures: t=1492774577,v1=5257a869e7ecebeda32affa...\n const parts = sigHeader.split(',');\n let timestamp = '';\n const signatures: string[] = [];\n\n parts.forEach((part) => {\n const [key, val] = part.split('=');\n if (key === 't') timestamp = val;\n if (key === 'v1') signatures.push(val);\n });\n\n const rawString =\n typeof options.rawBody === 'string'\n ? options.rawBody\n : options.rawBody.toString('utf8');\n\n const signedPayload = `${timestamp}.${rawString}`;\n const expectedSignature = hmacSha256(signedPayload, secret);\n const isValid = signatures.some((sig) => safeCompare(expectedSignature, sig));\n\n let parsed: any;\n try {\n parsed = JSON.parse(rawString);\n } catch {\n parsed = null;\n }\n\n return {\n isValid,\n gateway: 'stripe',\n event: parsed?.type,\n data: parsed?.data?.object,\n };\n }\n}\n","import { BasePaymentAdapter } from './base.adapter';\nimport {\n CODConfig,\n GatewayName,\n UnifiedCreateOrderOptions,\n UnifiedOrderResult,\n UnifiedPaymentVerificationOptions,\n UnifiedPaymentVerificationResult,\n UnifiedRefundOptions,\n UnifiedRefundResult,\n WebhookVerificationOptions,\n WebhookVerificationResult,\n} from '../types';\nimport { PaymentError } from '../utils/errors';\n\nexport class CODAdapter extends BasePaymentAdapter {\n public readonly name: GatewayName = 'cod';\n\n constructor(private readonly config: CODConfig = {}) {\n super();\n }\n\n public async createOrder(options: UnifiedCreateOrderOptions): Promise<UnifiedOrderResult> {\n const min = this.config.minOrderValue ?? 0;\n const max = this.config.maxOrderValue ?? 10000;\n\n if (options.amount < min) {\n throw new PaymentError(`Order amount ${options.amount} is below minimum COD threshold of ${min}`, {\n gateway: 'cod',\n statusCode: 400,\n });\n }\n\n if (options.amount > max) {\n throw new PaymentError(`Order amount ${options.amount} exceeds maximum COD limit of ${max}`, {\n gateway: 'cod',\n statusCode: 400,\n });\n }\n\n const codFee = this.config.extraFee || 0;\n const totalAmount = options.amount + codFee;\n\n return {\n gateway: 'cod',\n orderId: options.receipt,\n gatewayOrderId: `COD_${options.receipt}`,\n amount: totalAmount,\n currency: options.currency.toUpperCase(),\n status: 'CREATED',\n rawResponse: {\n paymentMode: 'Cash On Delivery',\n baseAmount: options.amount,\n codFee,\n totalPayable: totalAmount,\n },\n };\n }\n\n public async verifyPayment(\n options: UnifiedPaymentVerificationOptions\n ): Promise<UnifiedPaymentVerificationResult> {\n // For COD, verification signifies package delivered and cash collected\n return {\n gateway: 'cod',\n isSuccessful: true,\n paymentId: `COD_COLLECTED_${options.orderId}`,\n orderId: options.orderId,\n amount: 0,\n currency: 'INR',\n paymentMethod: 'cash_on_delivery',\n rawResponse: { status: 'COLLECTED' },\n };\n }\n\n public async refund(options: UnifiedRefundOptions): Promise<UnifiedRefundResult> {\n return {\n gateway: 'cod',\n refundId: `COD_RF_${Date.now()}`,\n paymentId: options.paymentId,\n amount: options.amount || 0,\n status: 'SUCCESS',\n rawResponse: { note: 'Manual cash/store-credit refund for COD' },\n };\n }\n\n public async verifyWebhook(\n _options: WebhookVerificationOptions\n ): Promise<WebhookVerificationResult> {\n return {\n isValid: true,\n gateway: 'cod',\n event: 'COD_ORDER',\n data: {},\n };\n }\n}\n","import {\n GatewayName,\n PaymentManagerOptions,\n UnifiedCreateOrderOptions,\n UnifiedOrderResult,\n UnifiedPaymentVerificationOptions,\n UnifiedPaymentVerificationResult,\n UnifiedRefundOptions,\n UnifiedRefundResult,\n WebhookVerificationOptions,\n WebhookVerificationResult,\n} from './types';\nimport { BasePaymentAdapter } from './adapters/base.adapter';\nimport { RazorpayAdapter } from './adapters/razorpay.adapter';\nimport { CashfreeAdapter } from './adapters/cashfree.adapter';\nimport { PhonePeAdapter } from './adapters/phonepe.adapter';\nimport { PaytmAdapter } from './adapters/paytm.adapter';\nimport { StripeAdapter } from './adapters/stripe.adapter';\nimport { CODAdapter } from './adapters/cod.adapter';\nimport { GatewayNotConfiguredError, PaymentError } from './utils/errors';\n\nexport class PaymentManager {\n private readonly adapters: Map<GatewayName, BasePaymentAdapter> = new Map();\n private readonly defaultGateway?: GatewayName;\n private readonly smartRouting?: PaymentManagerOptions['smartRouting'];\n\n constructor(options: PaymentManagerOptions) {\n this.defaultGateway = options.defaultGateway;\n this.smartRouting = options.smartRouting;\n\n // Initialize configured gateways\n const { gateways } = options;\n if (gateways.razorpay) {\n this.adapters.set('razorpay', new RazorpayAdapter(gateways.razorpay));\n }\n if (gateways.cashfree) {\n this.adapters.set('cashfree', new CashfreeAdapter(gateways.cashfree));\n }\n if (gateways.phonepe) {\n this.adapters.set('phonepe', new PhonePeAdapter(gateways.phonepe));\n }\n if (gateways.paytm) {\n this.adapters.set('paytm', new PaytmAdapter(gateways.paytm));\n }\n if (gateways.stripe) {\n this.adapters.set('stripe', new StripeAdapter(gateways.stripe));\n }\n if (gateways.cod) {\n this.adapters.set('cod', new CODAdapter(gateways.cod));\n }\n\n if (this.adapters.size === 0) {\n console.warn('⚠️ [PaymentManager] No payment gateways were configured in PaymentManager.');\n }\n }\n\n /**\n * Returns an active adapter instance by gateway name.\n */\n public getAdapter(gateway: GatewayName): BasePaymentAdapter {\n const adapter = this.adapters.get(gateway);\n if (!adapter) {\n throw new GatewayNotConfiguredError(gateway);\n }\n return adapter;\n }\n\n /**\n * Lists all currently registered gateway names.\n */\n public listConfiguredGateways(): GatewayName[] {\n return Array.from(this.adapters.keys());\n }\n\n /**\n * Resolves the optimal gateway based on currency rules, explicit override, or default.\n */\n public resolveGateway(options: { gateway?: GatewayName; currency?: string }): GatewayName {\n if (options.gateway) {\n return options.gateway;\n }\n\n if (options.currency && this.smartRouting?.currencyMap) {\n const mapped = this.smartRouting.currencyMap[options.currency.toUpperCase()];\n if (mapped && this.adapters.has(mapped)) {\n return mapped;\n }\n }\n\n if (this.defaultGateway && this.adapters.has(this.defaultGateway)) {\n return this.defaultGateway;\n }\n\n const firstAvailable = this.adapters.keys().next().value;\n if (firstAvailable) {\n return firstAvailable;\n }\n\n throw new PaymentError('No payment gateways configured to process order.');\n }\n\n /**\n * Create an order using the chosen or automatically resolved gateway.\n */\n public async createOrder(options: UnifiedCreateOrderOptions): Promise<UnifiedOrderResult> {\n const targetGateway = this.resolveGateway({\n gateway: options.gateway,\n currency: options.currency,\n });\n const adapter = this.getAdapter(targetGateway);\n return adapter.createOrder(options);\n }\n\n /**\n * Smart Fallback: Attempts creation on primary gateway. If it throws an error or fails,\n * it automatically routes through fallback gateways in sequence!\n */\n public async createOrderWithFallback(\n options: UnifiedCreateOrderOptions & { fallbackChain?: GatewayName[] }\n ): Promise<UnifiedOrderResult> {\n const chain =\n options.fallbackChain ||\n this.smartRouting?.fallbackChain ||\n (this.listConfiguredGateways());\n\n if (chain.length === 0) {\n throw new PaymentError('Fallback chain is empty. Configure at least one gateway.');\n }\n\n let lastError: any;\n for (const gw of chain) {\n if (!this.adapters.has(gw)) continue;\n try {\n const adapter = this.getAdapter(gw);\n const result = await adapter.createOrder({ ...options, gateway: gw });\n return result;\n } catch (err: any) {\n lastError = err;\n console.warn(`[PaymentManager Fallback] Gateway '${gw}' failed (${err.message}). Trying next gateway in chain...`);\n }\n }\n\n throw new PaymentError(\n `All gateways in fallback chain [${chain.join(', ')}] failed. Last error: ${lastError?.message || 'Unknown'}`,\n { rawError: lastError }\n );\n }\n\n /**\n * Verifies payment completion signature or status query.\n */\n public async verifyPayment(\n options: UnifiedPaymentVerificationOptions\n ): Promise<UnifiedPaymentVerificationResult> {\n const adapter = this.getAdapter(options.gateway);\n return adapter.verifyPayment(options);\n }\n\n /**\n * Initiates a customer refund.\n */\n public async refund(options: UnifiedRefundOptions): Promise<UnifiedRefundResult> {\n const adapter = this.getAdapter(options.gateway);\n return adapter.refund(options);\n }\n\n /**\n * Verifies incoming webhook authenticity and decodes payload.\n */\n public async verifyWebhook(\n options: WebhookVerificationOptions\n ): Promise<WebhookVerificationResult> {\n const adapter = this.getAdapter(options.gateway);\n return adapter.verifyWebhook(options);\n }\n}\n\n/**\n * Factory function to instantiate a PaymentManager.\n */\nexport function createPaymentManager(options: PaymentManagerOptions): PaymentManager {\n return new PaymentManager(options);\n}\n"]}
@@ -0,0 +1,339 @@
1
+ type GatewayName = 'razorpay' | 'cashfree' | 'phonepe' | 'paytm' | 'stripe' | 'cod';
2
+ interface UnifiedCustomer {
3
+ id?: string;
4
+ name: string;
5
+ email: string;
6
+ phone: string;
7
+ }
8
+ interface UnifiedOrderItem {
9
+ name: string;
10
+ quantity: number;
11
+ price: number;
12
+ sku?: string;
13
+ }
14
+ interface UnifiedCreateOrderOptions {
15
+ /** Amount in standard currency units (e.g. 1499.00 for INR, 25.00 for USD) */
16
+ amount: number;
17
+ /** 3-letter ISO currency code (e.g. 'INR', 'USD', 'EUR') */
18
+ currency: string;
19
+ /** Merchant order or receipt reference ID */
20
+ receipt: string;
21
+ /** Customer details */
22
+ customer: UnifiedCustomer;
23
+ /** Line items */
24
+ items?: UnifiedOrderItem[];
25
+ /** Merchant notes/metadata */
26
+ notes?: Record<string, any>;
27
+ /** Customer return/redirect URL after payment */
28
+ redirectUrl?: string;
29
+ /** Server-to-server webhook callback URL */
30
+ callbackUrl?: string;
31
+ /** Explicitly override gateway for this transaction */
32
+ gateway?: GatewayName;
33
+ }
34
+ interface UnifiedOrderResult {
35
+ gateway: GatewayName;
36
+ orderId: string;
37
+ gatewayOrderId: string;
38
+ amount: number;
39
+ currency: string;
40
+ status: 'CREATED' | 'PENDING' | 'PAID' | 'FAILED';
41
+ /** Cashfree payment_session_id for Drop-in UI or SDK */
42
+ paymentSessionId?: string;
43
+ /** Redirect or hosted pay URL (PhonePe, Stripe, Cashfree) */
44
+ redirectUrl?: string;
45
+ /** Paytm checkout txnToken */
46
+ txnToken?: string;
47
+ /** Raw response object from gateway */
48
+ rawResponse: any;
49
+ }
50
+ interface UnifiedPaymentVerificationOptions {
51
+ gateway: GatewayName;
52
+ orderId: string;
53
+ paymentId?: string;
54
+ signature?: string;
55
+ rawPayload?: any;
56
+ }
57
+ interface UnifiedPaymentVerificationResult {
58
+ gateway: GatewayName;
59
+ isSuccessful: boolean;
60
+ paymentId: string;
61
+ orderId: string;
62
+ amount: number;
63
+ currency: string;
64
+ paymentMethod?: string;
65
+ rawResponse: any;
66
+ }
67
+ interface UnifiedRefundOptions {
68
+ gateway: GatewayName;
69
+ paymentId: string;
70
+ orderId?: string;
71
+ /** Partial or full refund amount in currency units */
72
+ amount?: number;
73
+ reason?: string;
74
+ }
75
+ interface UnifiedRefundResult {
76
+ gateway: GatewayName;
77
+ refundId: string;
78
+ paymentId: string;
79
+ amount: number;
80
+ status: 'SUCCESS' | 'PENDING' | 'FAILED';
81
+ rawResponse: any;
82
+ }
83
+ interface WebhookVerificationOptions {
84
+ gateway: GatewayName;
85
+ rawBody: string | Buffer;
86
+ headers: Record<string, string | string[] | undefined>;
87
+ webhookSecret?: string;
88
+ }
89
+ interface WebhookVerificationResult {
90
+ isValid: boolean;
91
+ event?: string;
92
+ gateway: GatewayName;
93
+ data?: any;
94
+ error?: string;
95
+ }
96
+ interface RazorpayConfig {
97
+ keyId: string;
98
+ keySecret: string;
99
+ webhookSecret?: string;
100
+ }
101
+ interface CashfreeConfig {
102
+ appId: string;
103
+ secretKey: string;
104
+ env?: 'SANDBOX' | 'PRODUCTION';
105
+ apiVersion?: string;
106
+ }
107
+ interface PhonePeConfig {
108
+ merchantId: string;
109
+ saltKey: string;
110
+ saltIndex?: string;
111
+ env?: 'UAT' | 'PRODUCTION';
112
+ }
113
+ interface PaytmConfig {
114
+ mid: string;
115
+ merchantKey: string;
116
+ website?: string;
117
+ env?: 'STAGE' | 'PRODUCTION';
118
+ }
119
+ interface StripeConfig {
120
+ secretKey: string;
121
+ webhookSecret?: string;
122
+ }
123
+ interface CODConfig {
124
+ minOrderValue?: number;
125
+ maxOrderValue?: number;
126
+ extraFee?: number;
127
+ allowedPincodes?: string[];
128
+ }
129
+ interface GatewayConfigs {
130
+ razorpay?: RazorpayConfig;
131
+ cashfree?: CashfreeConfig;
132
+ phonepe?: PhonePeConfig;
133
+ paytm?: PaytmConfig;
134
+ stripe?: StripeConfig;
135
+ cod?: CODConfig;
136
+ }
137
+ interface SmartRoutingConfig {
138
+ /** Map currency to default gateway, e.g. { 'USD': 'stripe', 'INR': 'cashfree' } */
139
+ currencyMap?: Record<string, GatewayName>;
140
+ /** Automatic fallback order if primary gateway fails, e.g. ['razorpay', 'cashfree', 'phonepe'] */
141
+ fallbackChain?: GatewayName[];
142
+ }
143
+ interface PaymentManagerOptions {
144
+ defaultGateway?: GatewayName;
145
+ gateways: GatewayConfigs;
146
+ smartRouting?: SmartRoutingConfig;
147
+ }
148
+
149
+ declare abstract class BasePaymentAdapter {
150
+ abstract readonly name: GatewayName;
151
+ /**
152
+ * Create an order or payment session on the gateway.
153
+ */
154
+ abstract createOrder(options: UnifiedCreateOrderOptions): Promise<UnifiedOrderResult>;
155
+ /**
156
+ * Verify checkout completion signature or status query.
157
+ */
158
+ abstract verifyPayment(options: UnifiedPaymentVerificationOptions): Promise<UnifiedPaymentVerificationResult>;
159
+ /**
160
+ * Initiate a refund back to the customer.
161
+ */
162
+ abstract refund(options: UnifiedRefundOptions): Promise<UnifiedRefundResult>;
163
+ /**
164
+ * Verify server-to-server webhook authenticity and parse payload.
165
+ */
166
+ abstract verifyWebhook(options: WebhookVerificationOptions): Promise<WebhookVerificationResult>;
167
+ /**
168
+ * Safe helper to extract single string header value from request headers.
169
+ */
170
+ protected getHeader(headers: Record<string, string | string[] | undefined>, name: string): string | undefined;
171
+ /**
172
+ * Helper to perform HTTP JSON requests with standard error extraction.
173
+ */
174
+ protected fetchJson<T = any>(url: string, options?: {
175
+ method?: 'GET' | 'POST' | 'PATCH' | 'DELETE';
176
+ headers?: Record<string, string>;
177
+ body?: any;
178
+ }): Promise<T>;
179
+ }
180
+
181
+ declare class PaymentManager {
182
+ private readonly adapters;
183
+ private readonly defaultGateway?;
184
+ private readonly smartRouting?;
185
+ constructor(options: PaymentManagerOptions);
186
+ /**
187
+ * Returns an active adapter instance by gateway name.
188
+ */
189
+ getAdapter(gateway: GatewayName): BasePaymentAdapter;
190
+ /**
191
+ * Lists all currently registered gateway names.
192
+ */
193
+ listConfiguredGateways(): GatewayName[];
194
+ /**
195
+ * Resolves the optimal gateway based on currency rules, explicit override, or default.
196
+ */
197
+ resolveGateway(options: {
198
+ gateway?: GatewayName;
199
+ currency?: string;
200
+ }): GatewayName;
201
+ /**
202
+ * Create an order using the chosen or automatically resolved gateway.
203
+ */
204
+ createOrder(options: UnifiedCreateOrderOptions): Promise<UnifiedOrderResult>;
205
+ /**
206
+ * Smart Fallback: Attempts creation on primary gateway. If it throws an error or fails,
207
+ * it automatically routes through fallback gateways in sequence!
208
+ */
209
+ createOrderWithFallback(options: UnifiedCreateOrderOptions & {
210
+ fallbackChain?: GatewayName[];
211
+ }): Promise<UnifiedOrderResult>;
212
+ /**
213
+ * Verifies payment completion signature or status query.
214
+ */
215
+ verifyPayment(options: UnifiedPaymentVerificationOptions): Promise<UnifiedPaymentVerificationResult>;
216
+ /**
217
+ * Initiates a customer refund.
218
+ */
219
+ refund(options: UnifiedRefundOptions): Promise<UnifiedRefundResult>;
220
+ /**
221
+ * Verifies incoming webhook authenticity and decodes payload.
222
+ */
223
+ verifyWebhook(options: WebhookVerificationOptions): Promise<WebhookVerificationResult>;
224
+ }
225
+ /**
226
+ * Factory function to instantiate a PaymentManager.
227
+ */
228
+ declare function createPaymentManager(options: PaymentManagerOptions): PaymentManager;
229
+
230
+ /**
231
+ * Computes HMAC-SHA256 hex digest.
232
+ */
233
+ declare function hmacSha256(data: string | Buffer, secret: string): string;
234
+ /**
235
+ * Computes standard SHA-256 hex digest.
236
+ */
237
+ declare function sha256(data: string | Buffer): string;
238
+ /**
239
+ * Encodes string into Base64.
240
+ */
241
+ declare function base64Encode(data: string | object): string;
242
+ /**
243
+ * Decodes Base64 into utf-8 string.
244
+ */
245
+ declare function base64Decode(encoded: string): string;
246
+ /**
247
+ * Constant-time safe string comparison to prevent timing attacks on signatures.
248
+ */
249
+ declare function safeCompare(a: string, b: string): boolean;
250
+
251
+ declare class PaymentError extends Error {
252
+ readonly gateway?: GatewayName;
253
+ readonly statusCode?: number;
254
+ readonly rawError?: any;
255
+ constructor(message: string, options?: {
256
+ gateway?: GatewayName;
257
+ statusCode?: number;
258
+ rawError?: any;
259
+ });
260
+ }
261
+ declare class GatewayNotConfiguredError extends PaymentError {
262
+ constructor(gateway: GatewayName);
263
+ }
264
+ declare class SignatureVerificationError extends PaymentError {
265
+ constructor(gateway: GatewayName, details?: string);
266
+ }
267
+
268
+ declare class RazorpayAdapter extends BasePaymentAdapter {
269
+ private readonly config;
270
+ readonly name: GatewayName;
271
+ private readonly baseUrl;
272
+ constructor(config: RazorpayConfig);
273
+ private getAuthHeader;
274
+ createOrder(options: UnifiedCreateOrderOptions): Promise<UnifiedOrderResult>;
275
+ verifyPayment(options: UnifiedPaymentVerificationOptions): Promise<UnifiedPaymentVerificationResult>;
276
+ refund(options: UnifiedRefundOptions): Promise<UnifiedRefundResult>;
277
+ verifyWebhook(options: WebhookVerificationOptions): Promise<WebhookVerificationResult>;
278
+ }
279
+
280
+ declare class CashfreeAdapter extends BasePaymentAdapter {
281
+ private readonly config;
282
+ readonly name: GatewayName;
283
+ private readonly baseUrl;
284
+ private readonly apiVersion;
285
+ constructor(config: CashfreeConfig);
286
+ private getHeaders;
287
+ createOrder(options: UnifiedCreateOrderOptions): Promise<UnifiedOrderResult>;
288
+ verifyPayment(options: UnifiedPaymentVerificationOptions): Promise<UnifiedPaymentVerificationResult>;
289
+ refund(options: UnifiedRefundOptions): Promise<UnifiedRefundResult>;
290
+ verifyWebhook(options: WebhookVerificationOptions): Promise<WebhookVerificationResult>;
291
+ }
292
+
293
+ declare class PhonePeAdapter extends BasePaymentAdapter {
294
+ private readonly config;
295
+ readonly name: GatewayName;
296
+ private readonly baseUrl;
297
+ private readonly saltIndex;
298
+ constructor(config: PhonePeConfig);
299
+ private calculateXVerify;
300
+ createOrder(options: UnifiedCreateOrderOptions): Promise<UnifiedOrderResult>;
301
+ verifyPayment(options: UnifiedPaymentVerificationOptions): Promise<UnifiedPaymentVerificationResult>;
302
+ refund(options: UnifiedRefundOptions): Promise<UnifiedRefundResult>;
303
+ verifyWebhook(options: WebhookVerificationOptions): Promise<WebhookVerificationResult>;
304
+ }
305
+
306
+ declare class PaytmAdapter extends BasePaymentAdapter {
307
+ private readonly config;
308
+ readonly name: GatewayName;
309
+ private readonly baseUrl;
310
+ constructor(config: PaytmConfig);
311
+ createOrder(options: UnifiedCreateOrderOptions): Promise<UnifiedOrderResult>;
312
+ verifyPayment(options: UnifiedPaymentVerificationOptions): Promise<UnifiedPaymentVerificationResult>;
313
+ refund(options: UnifiedRefundOptions): Promise<UnifiedRefundResult>;
314
+ verifyWebhook(options: WebhookVerificationOptions): Promise<WebhookVerificationResult>;
315
+ }
316
+
317
+ declare class StripeAdapter extends BasePaymentAdapter {
318
+ private readonly config;
319
+ readonly name: GatewayName;
320
+ private readonly baseUrl;
321
+ constructor(config: StripeConfig);
322
+ private getAuthHeader;
323
+ createOrder(options: UnifiedCreateOrderOptions): Promise<UnifiedOrderResult>;
324
+ verifyPayment(options: UnifiedPaymentVerificationOptions): Promise<UnifiedPaymentVerificationResult>;
325
+ refund(options: UnifiedRefundOptions): Promise<UnifiedRefundResult>;
326
+ verifyWebhook(options: WebhookVerificationOptions): Promise<WebhookVerificationResult>;
327
+ }
328
+
329
+ declare class CODAdapter extends BasePaymentAdapter {
330
+ private readonly config;
331
+ readonly name: GatewayName;
332
+ constructor(config?: CODConfig);
333
+ createOrder(options: UnifiedCreateOrderOptions): Promise<UnifiedOrderResult>;
334
+ verifyPayment(options: UnifiedPaymentVerificationOptions): Promise<UnifiedPaymentVerificationResult>;
335
+ refund(options: UnifiedRefundOptions): Promise<UnifiedRefundResult>;
336
+ verifyWebhook(_options: WebhookVerificationOptions): Promise<WebhookVerificationResult>;
337
+ }
338
+
339
+ export { BasePaymentAdapter, CODAdapter, type CODConfig, CashfreeAdapter, type CashfreeConfig, type GatewayConfigs, type GatewayName, GatewayNotConfiguredError, PaymentError, PaymentManager, type PaymentManagerOptions, PaytmAdapter, type PaytmConfig, PhonePeAdapter, type PhonePeConfig, RazorpayAdapter, type RazorpayConfig, SignatureVerificationError, type SmartRoutingConfig, StripeAdapter, type StripeConfig, type UnifiedCreateOrderOptions, type UnifiedCustomer, type UnifiedOrderItem, type UnifiedOrderResult, type UnifiedPaymentVerificationOptions, type UnifiedPaymentVerificationResult, type UnifiedRefundOptions, type UnifiedRefundResult, type WebhookVerificationOptions, type WebhookVerificationResult, base64Decode, base64Encode, createPaymentManager, hmacSha256, safeCompare, sha256 };