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