UNPKG

better-payment

Version:

Unified payment gateway library for Turkish payment providers

757 lines (745 loc) 20.9 kB
import { f as PaymentProvider, g as PaymentProviderConfig, a as PaymentRequest, b as PaymentResponse, T as ThreeDSPaymentRequest, c as ThreeDSInitResponse, R as RefundRequest, d as RefundResponse, C as CancelRequest, e as CancelResponse, h as CheckoutFormRequest, i as CheckoutFormInitResponse, j as CheckoutFormRetrieveResponse, B as BinCheckResponse, k as BetterPayConfig, P as ProviderType } from './BetterPayConfig-Dwl6JEAi.mjs'; export { A as Address, s as BasketItem, p as BasketItemType, r as Buyer, o as Currency, q as PaymentCard, n as PaymentStatus, l as ProviderConfig, m as ProviderInstances } from './BetterPayConfig-Dwl6JEAi.mjs'; /** * Common types used across the library */ interface PaymentCard { cardHolderName: string; cardNumber: string; expireMonth: string; expireYear: string; cvc: string; registerCard?: boolean | number; } interface Address { contactName: string; city: string; country: string; address: string; zipCode?: string; } /** * Subscription Types * * İyzico abonelik ödeme sistemi için type tanımları */ /** * Abonelik durumları */ declare enum SubscriptionStatus { ACTIVE = "ACTIVE", PENDING = "PENDING", CANCELED = "CANCELED", EXPIRED = "EXPIRED", UNPAID = "UNPAID" } /** * Ödeme aralığı türleri */ declare enum PaymentInterval { DAILY = "DAILY", WEEKLY = "WEEKLY", MONTHLY = "MONTHLY", YEARLY = "YEARLY" } /** * Abonelik müşteri bilgileri */ interface SubscriptionCustomer { name: string; surname: string; email: string; gsmNumber: string; identityNumber: string; billingAddress: Address; shippingAddress?: Address; } /** * Abonelik başlatma isteği */ interface SubscriptionInitializeRequest { locale?: string; conversationId?: string; pricingPlanReferenceCode: string; subscriptionInitialStatus: SubscriptionStatus.ACTIVE | SubscriptionStatus.PENDING; customer: SubscriptionCustomer; paymentCard: PaymentCard; } /** * Abonelik başlatma yanıtı */ interface SubscriptionInitializeResponse { status: 'success' | 'failure'; systemTime?: number; errorCode?: string; errorMessage?: string; data?: { referenceCode: string; parentReferenceCode?: string; pricingPlanReferenceCode: string; customerReferenceCode: string; subscriptionStatus: SubscriptionStatus; trialDays?: number; trialStartDate?: number; trialEndDate?: number; createdDate: number; startDate: number; endDate?: number; }; } /** * Abonelik iptal isteği */ interface SubscriptionCancelRequest { subscriptionReferenceCode: string; } /** * Abonelik iptal yanıtı */ interface SubscriptionCancelResponse { status: 'success' | 'failure'; systemTime?: number; errorCode?: string; errorMessage?: string; data?: { referenceCode: string; subscriptionStatus: SubscriptionStatus; }; } /** * Abonelik yükseltme isteği */ interface SubscriptionUpgradeRequest { subscriptionReferenceCode: string; newPricingPlanReferenceCode: string; useTrial?: boolean; resetRecurrenceCount?: boolean; } /** * Abonelik yükseltme yanıtı */ interface SubscriptionUpgradeResponse { status: 'success' | 'failure'; systemTime?: number; errorCode?: string; errorMessage?: string; data?: { referenceCode: string; pricingPlanReferenceCode: string; subscriptionStatus: SubscriptionStatus; }; } /** * Abonelik detay sorgulama isteği */ interface SubscriptionRetrieveRequest { subscriptionReferenceCode: string; } /** * Abonelik detay sorgulama yanıtı */ interface SubscriptionRetrieveResponse { status: 'success' | 'failure'; systemTime?: number; errorCode?: string; errorMessage?: string; data?: { referenceCode: string; parentReferenceCode?: string; pricingPlanReferenceCode: string; pricingPlanName: string; customerReferenceCode: string; subscriptionStatus: SubscriptionStatus; trialDays?: number; trialStartDate?: number; trialEndDate?: number; createdDate: number; startDate: number; endDate?: number; }; } /** * Kart güncelleme isteği (Checkout Form ile) */ interface SubscriptionCardUpdateRequest { locale?: string; conversationId?: string; subscriptionReferenceCode: string; callbackUrl: string; } /** * Kart güncelleme yanıtı */ interface SubscriptionCardUpdateResponse { status: 'success' | 'failure'; systemTime?: number; errorCode?: string; errorMessage?: string; token?: string; checkoutFormContent?: string; tokenExpireTime?: number; paymentPageUrl?: string; } /** * Abonelik ürünü oluşturma isteği */ interface SubscriptionProductCreateRequest { locale?: string; conversationId?: string; name: string; description?: string; } /** * Abonelik ürünü yanıtı */ interface SubscriptionProductResponse { status: 'success' | 'failure'; systemTime?: number; errorCode?: string; errorMessage?: string; data?: { referenceCode: string; name: string; description?: string; createdDate: number; }; } /** * Fiyatlandırma planı oluşturma isteği */ interface PricingPlanCreateRequest { locale?: string; conversationId?: string; productReferenceCode: string; name: string; price: number; currency?: string; paymentInterval: PaymentInterval; paymentIntervalCount: number; trialPeriodDays?: number; recurrenceCount?: number; } /** * Fiyatlandırma planı yanıtı */ interface PricingPlanResponse { status: 'success' | 'failure'; systemTime?: number; errorCode?: string; errorMessage?: string; data?: { referenceCode: string; productReferenceCode: string; name: string; price: number; currency: string; paymentInterval: PaymentInterval; paymentIntervalCount: number; trialPeriodDays?: number; recurrenceCount?: number; createdDate: number; }; } /** * İyzico ödeme sağlayıcısı */ declare class Iyzico extends PaymentProvider { private client; constructor(config: PaymentProviderConfig); /** * İyzico status'ünü PaymentStatus'e çevir */ private mapStatus; /** * Genel request gönderme metodu */ private sendRequest; /** * Uygulama request'ini İyzico formatına çevir */ private mapToIyzicoRequest; /** * Checkout Form request'ini İyzico formatına çevir */ private mapToIyzicoCheckoutFormRequest; /** * Direkt ödeme (3D Secure olmadan) */ createPayment(request: PaymentRequest): Promise<PaymentResponse>; /** * 3D Secure ödeme başlat */ initThreeDSPayment(request: ThreeDSPaymentRequest): Promise<ThreeDSInitResponse>; /** * 3D Secure ödeme tamamla */ completeThreeDSPayment(callbackData: any): Promise<PaymentResponse>; /** * İade işlemi */ refund(request: RefundRequest): Promise<RefundResponse>; /** * İptal işlemi */ cancel(request: CancelRequest): Promise<CancelResponse>; /** * Ödeme sorgulama */ getPayment(paymentId: string): Promise<PaymentResponse>; /** * Checkout Form başlat */ initCheckoutForm(request: CheckoutFormRequest): Promise<CheckoutFormInitResponse>; /** * Checkout Form sonucunu sorgula */ retrieveCheckoutForm(token: string, conversationId?: string): Promise<CheckoutFormRetrieveResponse>; /** * =================== * SUBSCRIPTION METHODS * =================== */ /** * Abonelik başlat (NON3D) */ initializeSubscription(request: SubscriptionInitializeRequest): Promise<SubscriptionInitializeResponse>; /** * Aboneliği iptal et */ cancelSubscription(request: SubscriptionCancelRequest): Promise<SubscriptionCancelResponse>; /** * Aboneliği yükselt/güncelle */ upgradeSubscription(request: SubscriptionUpgradeRequest): Promise<SubscriptionUpgradeResponse>; /** * Abonelik detaylarını getir */ retrieveSubscription(request: SubscriptionRetrieveRequest): Promise<SubscriptionRetrieveResponse>; /** * Abonelik kartı güncelle (Checkout Form ile) */ updateSubscriptionCard(request: SubscriptionCardUpdateRequest): Promise<SubscriptionCardUpdateResponse>; /** * Abonelik ürünü oluştur */ createSubscriptionProduct(request: SubscriptionProductCreateRequest): Promise<SubscriptionProductResponse>; /** * Fiyatlandırma planı oluştur */ createPricingPlan(request: PricingPlanCreateRequest): Promise<PricingPlanResponse>; /** * BIN sorgulama */ binCheck(binNumber: string): Promise<BinCheckResponse>; } interface PayTRCallbackData { merchant_oid: string; status: string; total_amount: string; hash: string; failed_reason_code?: string; failed_reason_msg?: string; test_mode?: string; payment_type?: string; currency?: string; payment_amount?: string; merchant_id?: string; } /** * PayTR ödeme sağlayıcısı */ declare class PayTR extends PaymentProvider { private client; private merchantId; private merchantKey; private merchantSalt; constructor(config: PaymentProviderConfig & { merchantId: string; merchantSalt: string; }); /** * PayTR status'ünü PaymentStatus'e çevir */ private mapStatus; /** * Sepet itemlerini PayTR formatına çevir */ private convertBasketItems; /** * Direkt ödeme (PayTR'da iframe ile) * NOT: PayTR direkt ödeme yerine iframe kullanır */ createPayment(request: PaymentRequest): Promise<PaymentResponse>; /** * 3D Secure ödeme başlat (iframe) */ initThreeDSPayment(request: ThreeDSPaymentRequest): Promise<ThreeDSInitResponse>; /** * 3D Secure ödeme tamamla */ completeThreeDSPayment(callbackData: PayTRCallbackData): Promise<PaymentResponse>; /** * İade işlemi */ refund(request: RefundRequest): Promise<RefundResponse>; /** * İptal işlemi (PayTR'da iade ile aynı) */ cancel(request: CancelRequest): Promise<CancelResponse>; /** * Ödeme sorgulama * NOT: PayTR API'si ödeme sorgulama endpoint'i sunmuyor * Callback data'yı kullanarak durum kontrol edilmeli */ getPayment(paymentId: string): Promise<PaymentResponse>; } interface Akbank3DSCallbackRequest { /** Mağaza numarası */ MERCHANTID: string; /** Terminal ID */ TERMINALID: string; /** Sipariş numarası */ ORDERID: string; /** 3D güvenlik seviyesi */ SECURE3DSECURITYLEVEL: string; /** 3D Hash */ SECURE3DHASH: string; /** İşlem tutarı */ AMOUNT: string; /** Para birimi */ CURRENCY: string; /** İşlem sonucu */ ProcReturnCode?: string; /** Yanıt mesajı */ Response?: string; /** MD status */ mdStatus?: string; /** Cavv */ cavv?: string; /** Eci */ eci?: string; /** MD */ md?: string; /** XID */ xid?: string; } interface AkbankConfig { /** Mağaza numarası */ merchantId: string; /** Terminal ID */ terminalId: string; /** Store key (güvenlik anahtarı) */ storeKey: string; /** 3D Store key */ secure3DStoreKey?: string; /** Test modu */ testMode?: boolean; } /** * Akbank Sanal POS sağlayıcısı */ declare class Akbank extends PaymentProvider { private client; private merchantId; private terminalId; private storeKey; private secure3DStoreKey?; constructor(config: PaymentProviderConfig & AkbankConfig); /** * Akbank status'ünü PaymentStatus'e çevir */ private mapStatus; /** * Form data oluştur */ private createFormData; /** * Direkt ödeme (3D Secure olmadan) */ createPayment(request: PaymentRequest): Promise<PaymentResponse>; /** * 3D Secure ödeme başlat */ initThreeDSPayment(request: ThreeDSPaymentRequest): Promise<ThreeDSInitResponse>; /** * 3D Secure ödeme tamamla */ completeThreeDSPayment(callbackData: Akbank3DSCallbackRequest): Promise<PaymentResponse>; /** * İade işlemi */ refund(request: RefundRequest): Promise<RefundResponse>; /** * İptal işlemi */ cancel(request: CancelRequest): Promise<CancelResponse>; /** * Ödeme sorgulama */ getPayment(paymentId: string): Promise<PaymentResponse>; } /** * HTTP Request interface for framework-agnostic handling */ interface BetterPayRequest { method: string; url: string; headers: Record<string, string>; body?: any; } /** * HTTP Response interface for framework-agnostic handling */ interface BetterPayResponse { status: number; headers: Record<string, string>; body: any; } /** * BetterPayHandler - Otomatik API endpoint'leri için merkezi handler * * Better-auth'tan ilham alınarak tasarlanmıştır. Tüm ödeme işlemlerini * otomatik olarak HTTP endpoint'lerine çevirir. * * Desteklenen endpoint'ler: * - POST /api/pay/:provider/payment -> createPayment() * - POST /api/pay/:provider/payment/init-3ds -> initThreeDSPayment() * - POST /api/pay/:provider/payment/complete-3ds -> completeThreeDSPayment() * - POST /api/pay/:provider/refund -> refund() * - POST /api/pay/:provider/cancel -> cancel() * - GET /api/pay/:provider/payment/:id -> getPayment() * - POST /api/pay/:provider/callback -> 3DS callback handler * - GET /api/pay/health -> Health check * * @example * ```typescript * const betterPay = new BetterPay({ ... }); * const handler = new BetterPayHandler(betterPay); * * // Framework adapter kullanımı: * // Next.js: toNextJsHandler(handler) * // Express: toNodeHandler(handler) * ``` */ declare class BetterPayHandler { private betterPay; constructor(betterPay: BetterPay); /** * Ana request handler - tüm framework'ler için ortak */ handle(request: BetterPayRequest): Promise<BetterPayResponse>; /** * URL'den route bilgilerini parse et * * Pattern: /api/pay/:provider/:action * Örnekler: * - /api/pay/iyzico/payment * - /api/pay/paytr/payment/init-3ds * - /api/pay/iyzico/payment/123 */ private parseRoute; /** * Action'a göre ilgili provider metodunu çağır */ private handleAction; /** * POST /api/pay/:provider/payment - Ödeme oluştur */ private handleCreatePayment; /** * POST /api/pay/:provider/payment/init-3ds - 3DS ödeme başlat */ private handleInitThreeDS; /** * POST /api/pay/:provider/payment/complete-3ds - 3DS ödeme tamamla * POST /api/pay/:provider/callback - Provider callback (alias) */ private handleCompleteThreeDS; /** * POST /api/pay/:provider/refund - İade işlemi */ private handleRefund; /** * POST /api/pay/:provider/cancel - İptal işlemi */ private handleCancel; /** * GET /api/pay/:provider/payment/:id - Ödeme sorgula */ private handleGetPayment; /** * GET /api/pay/health - Health check */ private healthCheck; /** * Success response helper */ private successResponse; /** * Error response helper */ private errorResponse; } /** * BetterPay - Merkezi ödeme yönetim sınıfı * * Config dosyası ile tüm payment provider'ları tek yerden yönetmenizi sağlar. * * @example * ```typescript * const betterPay = new BetterPay({ * providers: { * iyzico: { * enabled: true, * config: { * apiKey: 'your-api-key', * secretKey: 'your-secret-key', * baseUrl: 'https://sandbox-api.iyzipay.com' * } * }, * paytr: { * enabled: true, * config: { * merchantId: 'your-merchant-id', * merchantKey: 'your-merchant-key', * merchantSalt: 'your-merchant-salt', * baseUrl: 'https://www.paytr.com' * } * } * }, * defaultProvider: 'iyzico' * }); * * // Kullanım şekilleri: * * // 1. Default provider kullanarak (defaultProvider: 'iyzico' olarak ayarlanmış) * const result = await betterPay.createPayment({ ... }); * * // 2. Belirli bir provider kullanarak (use metodu) * const result = await betterPay.use('paytr').createPayment({ ... }); * * // 3. Provider'a doğrudan erişim (önerilen yöntem) * const iyzicoResult = await betterPay.iyzico.createPayment({ ... }); * const paytrResult = await betterPay.paytr.createPayment({ ... }); * * // 4. Multi-provider kullanımı (aynı uygulamada farklı provider'lar) * const payment1 = await betterPay.iyzico.initThreeDSPayment({ ... }); * const payment2 = await betterPay.paytr.initThreeDSPayment({ ... }); * ``` */ declare class BetterPay { private config; private providers; private defaultProvider?; private _handler; constructor(config: BetterPayConfig); /** * HTTP handler for framework integrations * * Use this with framework adapters to create automatic API endpoints: * * @example * ```typescript * // Next.js App Router * import { toNextJsHandler } from 'better-pay/next-js'; * export const { GET, POST } = toNextJsHandler(betterPay.handler); * * // Express * import { toNodeHandler } from 'better-pay/node'; * app.all('/api/pay/*', toNodeHandler(betterPay)); * ``` */ get handler(): BetterPayHandler; /** * Provider'ları başlat */ private initializeProviders; /** * İyzico config validation */ private validateIyzicoConfig; /** * PayTR config validation */ private validatePayTRConfig; /** * Akbank config validation */ private validateAkbankConfig; /** * Belirli bir provider kullan */ use(providerType: ProviderType): PaymentProvider; /** * Default provider'ı getir */ private getDefaultProvider; /** * Aktif provider'ları listele */ getEnabledProviders(): ProviderType[]; /** * Belirli bir provider'ın aktif olup olmadığını kontrol et */ isProviderEnabled(providerType: ProviderType): boolean; /** * Default provider ile ödeme oluştur */ createPayment(request: PaymentRequest): Promise<PaymentResponse>; /** * Default provider ile 3DS ödeme başlat */ initThreeDSPayment(request: ThreeDSPaymentRequest): Promise<ThreeDSInitResponse>; /** * Default provider ile 3DS ödeme tamamla */ completeThreeDSPayment(callbackData: any): Promise<PaymentResponse>; /** * Default provider ile iade yap */ refund(request: RefundRequest): Promise<RefundResponse>; /** * Default provider ile ödeme iptal et */ cancel(request: CancelRequest): Promise<CancelResponse>; /** * Default provider ile ödeme sorgula */ getPayment(paymentId: string): Promise<PaymentResponse>; /** * İyzico provider'ına doğrudan erişim * * @example * ```typescript * const result = await betterPay.iyzico.createPayment({ ... }); * const checkout = await betterPay.iyzico.initCheckoutForm({ ... }); * ``` * * @throws Error if Iyzico provider is not enabled or configured */ get iyzico(): Iyzico; /** * PayTR provider'ına doğrudan erişim * * @example * ```typescript * const result = await betterPay.paytr.createPayment({ ... }); * ``` * * @throws Error if PayTR provider is not enabled or configured */ get paytr(): PayTR; /** * Akbank provider'ına doğrudan erişim * * @example * ```typescript * const result = await betterPay.akbank.createPayment({ ... }); * const threeDSResult = await betterPay.akbank.initThreeDSPayment({ ... }); * ``` * * @throws Error if Akbank provider is not enabled or configured */ get akbank(): Akbank; } export { Akbank, BetterPay, BetterPayConfig, BetterPayHandler, type BetterPayRequest, type BetterPayResponse, CancelRequest, CancelResponse, CheckoutFormInitResponse, CheckoutFormRequest, CheckoutFormRetrieveResponse, Iyzico, PayTR, PaymentProvider, PaymentProviderConfig, PaymentRequest, PaymentResponse, ProviderType, RefundRequest, RefundResponse, ThreeDSInitResponse, ThreeDSPaymentRequest };