better-payment
Version:
Unified payment gateway library for Turkish payment providers
1 lines • 11.7 kB
Source Map (JSON)
{"version":3,"sources":["../../src/client/index.ts"],"names":[],"mappings":"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","file":"index.mjs","sourcesContent":["import {\n PaymentRequest,\n PaymentResponse,\n ThreeDSPaymentRequest,\n ThreeDSInitResponse,\n RefundRequest,\n RefundResponse,\n CancelRequest,\n CancelResponse,\n} from '../types';\nimport { ProviderType } from '../core/BetterPayConfig';\n\n/**\n * Client configuration\n */\nexport interface BetterPayClientConfig {\n /**\n * Base URL for API endpoints\n * @example '/api/pay'\n * @example 'https://api.example.com/pay'\n */\n baseUrl: string;\n\n /**\n * Custom fetch implementation (opsiyonel)\n * @default globalThis.fetch\n */\n fetch?: typeof fetch;\n\n /**\n * Default headers for all requests\n */\n headers?: Record<string, string>;\n}\n\n/**\n * Provider client for making payment requests\n */\nclass ProviderClient {\n constructor(\n private provider: ProviderType,\n private config: BetterPayClientConfig\n ) {}\n\n /**\n * Get fetch implementation\n */\n private get fetch(): typeof fetch {\n return this.config.fetch || globalThis.fetch;\n }\n\n /**\n * Build full URL for endpoint\n */\n private buildUrl(path: string): string {\n const baseUrl = this.config.baseUrl.replace(/\\/$/, '');\n const cleanPath = path.replace(/^\\//, '');\n return `${baseUrl}/${this.provider}/${cleanPath}`;\n }\n\n /**\n * Make HTTP request\n */\n private async request<T>(method: string, path: string, body?: any): Promise<T> {\n const url = this.buildUrl(path);\n\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n ...this.config.headers,\n };\n\n const options: RequestInit = {\n method,\n headers,\n };\n\n if (body && method !== 'GET') {\n options.body = JSON.stringify(body);\n }\n\n const response = await this.fetch(url, options);\n\n if (!response.ok) {\n const error: any = await response.json().catch(() => ({\n message: `HTTP ${response.status}: ${response.statusText}`,\n }));\n throw new Error(error.message || 'Request failed');\n }\n\n return response.json() as Promise<T>;\n }\n\n /**\n * Create payment\n *\n * @example\n * ```typescript\n * const result = await client.iyzico.createPayment({\n * price: '1.00',\n * paidPrice: '1.00',\n * currency: 'TRY',\n * // ... other fields\n * });\n * ```\n */\n async createPayment(request: PaymentRequest): Promise<PaymentResponse> {\n return this.request<PaymentResponse>('POST', 'payment', request);\n }\n\n /**\n * Initialize 3D Secure payment\n *\n * @example\n * ```typescript\n * const result = await client.iyzico.initThreeDSPayment({\n * price: '1.00',\n * paidPrice: '1.00',\n * currency: 'TRY',\n * callbackUrl: 'https://example.com/callback',\n * // ... other fields\n * });\n *\n * // Render 3DS HTML content\n * document.getElementById('threeds-container').innerHTML = result.threeDSHtmlContent;\n * ```\n */\n async initThreeDSPayment(request: ThreeDSPaymentRequest): Promise<ThreeDSInitResponse> {\n return this.request<ThreeDSInitResponse>('POST', 'payment/init-3ds', request);\n }\n\n /**\n * Complete 3D Secure payment (callback handler)\n *\n * @example\n * ```typescript\n * // In your callback page:\n * const callbackData = { ... }; // Data from provider\n * const result = await client.iyzico.completeThreeDSPayment(callbackData);\n * ```\n */\n async completeThreeDSPayment(callbackData: any): Promise<PaymentResponse> {\n return this.request<PaymentResponse>('POST', 'payment/complete-3ds', callbackData);\n }\n\n /**\n * Refund payment\n *\n * @example\n * ```typescript\n * const result = await client.iyzico.refund({\n * paymentTransactionId: '123456',\n * price: '0.50',\n * currency: 'TRY',\n * });\n * ```\n */\n async refund(request: RefundRequest): Promise<RefundResponse> {\n return this.request<RefundResponse>('POST', 'refund', request);\n }\n\n /**\n * Cancel payment\n *\n * @example\n * ```typescript\n * const result = await client.iyzico.cancel({\n * paymentId: '123456',\n * });\n * ```\n */\n async cancel(request: CancelRequest): Promise<CancelResponse> {\n return this.request<CancelResponse>('POST', 'cancel', request);\n }\n\n /**\n * Get payment details\n *\n * @example\n * ```typescript\n * const payment = await client.iyzico.getPayment('payment-id-123');\n * ```\n */\n async getPayment(paymentId: string): Promise<PaymentResponse> {\n return this.request<PaymentResponse>('GET', `payment/${paymentId}`);\n }\n}\n\n/**\n * BetterPay client for frontend applications\n *\n * Better-auth tarzı client library. Frontend'den otomatik olarak API endpoint'lerini\n * çağırmak için kullanılır.\n *\n * @example\n * ```typescript\n * import { createBetterPayClient } from 'better-pay/client';\n *\n * const client = createBetterPayClient({\n * baseUrl: '/api/pay',\n * });\n *\n * // İyzico ile ödeme oluştur\n * const result = await client.iyzico.createPayment({\n * price: '100.00',\n * paidPrice: '100.00',\n * currency: 'TRY',\n * basketId: 'B67832',\n * paymentCard: {\n * cardHolderName: 'John Doe',\n * cardNumber: '5528790000000008',\n * expireMonth: '12',\n * expireYear: '2030',\n * cvc: '123',\n * },\n * buyer: {\n * id: 'BY789',\n * name: 'John',\n * surname: 'Doe',\n * gsmNumber: '+905350000000',\n * email: 'email@email.com',\n * identityNumber: '74300864791',\n * registrationAddress: 'Nidakule Göztepe, Merdivenköy Mah.',\n * ip: '85.34.78.112',\n * city: 'Istanbul',\n * country: 'Turkey',\n * },\n * shippingAddress: {\n * contactName: 'Jane Doe',\n * city: 'Istanbul',\n * country: 'Turkey',\n * address: 'Nidakule Göztepe, Merdivenköy Mah.',\n * },\n * billingAddress: {\n * contactName: 'Jane Doe',\n * city: 'Istanbul',\n * country: 'Turkey',\n * address: 'Nidakule Göztepe, Merdivenköy Mah.',\n * },\n * basketItems: [\n * {\n * id: 'BI101',\n * name: 'Product 1',\n * category1: 'Electronics',\n * itemType: 'PHYSICAL',\n * price: '100.00',\n * },\n * ],\n * });\n *\n * // PayTR ile 3DS ödeme başlat\n * const threeds = await client.paytr.initThreeDSPayment({\n * price: '100.00',\n * paidPrice: '100.00',\n * currency: 'TRY',\n * callbackUrl: 'https://example.com/callback',\n * // ... other fields\n * });\n *\n * // 3DS HTML'i render et\n * document.getElementById('payment-iframe').innerHTML = threeds.threeDSHtmlContent;\n * ```\n */\nexport class BetterPayClient {\n /**\n * İyzico provider client\n */\n readonly iyzico: ProviderClient;\n\n /**\n * PayTR provider client\n */\n readonly paytr: ProviderClient;\n\n constructor(private config: BetterPayClientConfig) {\n this.iyzico = new ProviderClient(ProviderType.IYZICO, config);\n this.paytr = new ProviderClient(ProviderType.PAYTR, config);\n }\n\n /**\n * Health check endpoint\n *\n * @example\n * ```typescript\n * const health = await client.health();\n * console.log(health.status); // 'ok'\n * console.log(health.providers); // ['iyzico', 'paytr']\n * ```\n */\n async health(): Promise<{\n status: string;\n service: string;\n version: string;\n providers: string[];\n timestamp: string;\n }> {\n const fetch = this.config.fetch || globalThis.fetch;\n const url = `${this.config.baseUrl.replace(/\\/$/, '')}/health`;\n\n const response = await fetch(url, {\n method: 'GET',\n headers: {\n 'Content-Type': 'application/json',\n ...this.config.headers,\n },\n });\n\n if (!response.ok) {\n throw new Error(`Health check failed: ${response.statusText}`);\n }\n\n return response.json() as Promise<{\n status: string;\n service: string;\n version: string;\n providers: string[];\n timestamp: string;\n }>;\n }\n}\n\n/**\n * Create a BetterPay client instance\n *\n * @param config - Client configuration\n * @returns BetterPayClient instance\n *\n * @example\n * ```typescript\n * const client = createBetterPayClient({\n * baseUrl: '/api/pay',\n * });\n * ```\n */\nexport function createBetterPayClient(config: BetterPayClientConfig): BetterPayClient {\n return new BetterPayClient(config);\n}\n"]}