UNPKG

uz-pay-sdk

Version:

🚀 Universal Payment SDK for Uzbekistan - Integrate Payme, Click, UzCard, Humo & Apelsin with one simple API. Battle-tested, production-ready, 95% faster integration.

260 lines • 10.1 kB
"use strict"; var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; var __metadata = (this && this.__metadata) || function (k, v) { if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.PaymentsService = void 0; const common_1 = require("@nestjs/common"); const payme_driver_1 = require("./drivers/payme.driver"); const click_driver_1 = require("./drivers/click.driver"); const uzcard_driver_1 = require("./drivers/uzcard.driver"); const humo_driver_1 = require("./drivers/humo.driver"); const apelsin_driver_1 = require("./drivers/apelsin.driver"); const logger_config_1 = require("../logger/logger.config"); let PaymentsService = class PaymentsService { constructor(paymeDriver, clickDriver, uzcardDriver, humoDriver, apelsinDriver) { this.paymeDriver = paymeDriver; this.clickDriver = clickDriver; this.uzcardDriver = uzcardDriver; this.humoDriver = humoDriver; this.apelsinDriver = apelsinDriver; logger_config_1.logger.info('PaymentsService initialized with all drivers'); } async create(provider, data) { const startTime = Date.now(); const requestId = this.generateRequestId(); logger_config_1.logger.info('Payment creation started', { requestId, provider, amount: data.amount, orderId: data.orderId, }); logger_config_1.paymentLogger.info('PAYMENT_CREATE_REQUEST', { requestId, provider, data: this.sanitizeLogData(data), timestamp: new Date().toISOString(), }); try { let result; switch (provider) { case 'payme': result = await this.paymeDriver.createPayment(data); break; case 'click': result = await this.clickDriver.createPayment(data); break; case 'uzcard': result = await this.uzcardDriver.createPayment(data); break; case 'humo': result = await this.humoDriver.createPayment(data); break; case 'apelsin': result = await this.apelsinDriver.createPayment(data); break; default: throw new Error(`Qo'llab-quvvatlanmaydigan provider: ${provider}`); } const duration = Date.now() - startTime; logger_config_1.logger.info('Payment creation completed', { requestId, provider, duration: `${duration}ms`, success: true, }); logger_config_1.paymentLogger.info('PAYMENT_CREATE_SUCCESS', { requestId, provider, duration, result: this.sanitizeLogData(result), timestamp: new Date().toISOString(), }); return result; } catch (error) { const duration = Date.now() - startTime; logger_config_1.logger.error('Payment creation failed', { requestId, provider, duration: `${duration}ms`, error: error.message, stack: error.stack, }); logger_config_1.paymentLogger.error('PAYMENT_CREATE_ERROR', { requestId, provider, duration, error: error.message, data: this.sanitizeLogData(data), timestamp: new Date().toISOString(), }); throw error; } } async check(provider, data) { const startTime = Date.now(); const requestId = this.generateRequestId(); logger_config_1.logger.info('Payment check started', { requestId, provider, transactionId: data.transactionId, }); logger_config_1.paymentLogger.info('PAYMENT_CHECK_REQUEST', { requestId, provider, data: this.sanitizeLogData(data), timestamp: new Date().toISOString(), }); try { let result; switch (provider) { case 'payme': result = await this.paymeDriver.checkPayment(data); break; case 'click': result = await this.clickDriver.checkPayment(data); break; case 'uzcard': result = await this.uzcardDriver.checkPayment(data); break; case 'humo': result = await this.humoDriver.checkPayment(data); break; case 'apelsin': result = await this.apelsinDriver.checkPayment(data); break; default: throw new Error(`Qo'llab-quvvatlanmaydigan provider: ${provider}`); } const duration = Date.now() - startTime; logger_config_1.logger.info('Payment check completed', { requestId, provider, duration: `${duration}ms`, status: result.status, }); logger_config_1.paymentLogger.info('PAYMENT_CHECK_SUCCESS', { requestId, provider, duration, result: this.sanitizeLogData(result), timestamp: new Date().toISOString(), }); return result; } catch (error) { const duration = Date.now() - startTime; logger_config_1.logger.error('Payment check failed', { requestId, provider, duration: `${duration}ms`, error: error.message, }); logger_config_1.paymentLogger.error('PAYMENT_CHECK_ERROR', { requestId, provider, duration, error: error.message, data: this.sanitizeLogData(data), timestamp: new Date().toISOString(), }); throw error; } } async cancel(provider, data) { switch (provider) { case 'payme': throw new Error('Payme uchun bekor qilish funksiyasi mavjud emas'); case 'click': throw new Error('Click uchun bekor qilish funksiyasi mavjud emas'); case 'uzcard': return this.uzcardDriver.cancelPayment(data); case 'humo': return this.humoDriver.cancelPayment(data); case 'apelsin': return this.apelsinDriver.cancelPayment(data); default: throw new Error(`Qo'llab-quvvatlanmaydigan provider: ${provider}`); } } getAvailableProviders() { return ['payme', 'click', 'uzcard', 'humo', 'apelsin']; } getProviderInfo(provider) { const providerInfos = { payme: { name: 'Payme', description: "Payme to'lov tizimi", supportedMethods: ['create', 'check'], currency: ['UZS'], }, click: { name: 'Click', description: "Click to'lov tizimi", supportedMethods: ['create', 'check'], currency: ['UZS'], }, uzcard: { name: 'UzCard', description: "UzCard to'lov tizimi", supportedMethods: ['create', 'check', 'cancel'], currency: ['UZS'], }, humo: { name: 'Humo', description: "Humo to'lov tizimi", supportedMethods: ['create', 'check', 'cancel'], currency: ['UZS', 'TJS'], }, apelsin: { name: 'Apelsin', description: "Apelsin (IPAKYULI) to'lov tizimi", supportedMethods: ['create', 'check', 'cancel'], currency: ['UZS'], }, }; return providerInfos[provider] || null; } // Helper методлар generateRequestId() { return `req_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`; } sanitizeLogData(data) { if (!data || typeof data !== 'object') return data; const sensitiveFields = [ 'password', 'secret', 'key', 'token', 'cardNumber', 'cvv', 'pin', 'authorization', ]; const sanitized = { ...data }; for (const field of sensitiveFields) { if (sanitized[field]) { sanitized[field] = '*'.repeat(sanitized[field].toString().length); } } return sanitized; } }; exports.PaymentsService = PaymentsService; exports.PaymentsService = PaymentsService = __decorate([ (0, common_1.Injectable)(), __metadata("design:paramtypes", [payme_driver_1.PaymeDriver, click_driver_1.ClickDriver, uzcard_driver_1.UzcardDriver, humo_driver_1.HumoDriver, apelsin_driver_1.ApelsinDriver]) ], PaymentsService); //# sourceMappingURL=payments.service.js.map