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.

253 lines • 9.94 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); }; var __param = (this && this.__param) || function (paramIndex, decorator) { return function (target, key) { decorator(target, key, paramIndex); } }; Object.defineProperty(exports, "__esModule", { value: true }); exports.WebhookController = void 0; const common_1 = require("@nestjs/common"); const logger_config_1 = require("../logger/logger.config"); const webhook_service_1 = require("./webhook.service"); let WebhookController = class WebhookController { constructor(webhookService) { this.webhookService = webhookService; } async handlePaymeWebhook(payload, signature) { logger_config_1.logger.info('Payme webhook received', { transactionId: payload.transaction?.id, state: payload.transaction?.state, }); try { // Payme signature validation const isValid = this.webhookService.validatePaymeSignature(payload, signature); if (!isValid) { throw new common_1.BadRequestException('Invalid signature'); } const webhookData = { provider: 'payme', transactionId: payload.transaction?.id, orderId: payload.transaction?.account?.order_id, amount: payload.transaction?.amount, status: this.mapPaymeStatus(payload.transaction?.state), timestamp: new Date().toISOString(), }; await this.webhookService.processWebhook(webhookData); return { success: true }; } catch (error) { logger_config_1.logger.error('Payme webhook processing failed', { error: error.message, payload: JSON.stringify(payload, null, 2), }); throw error; } } async handleClickWebhook(payload, signature) { logger_config_1.logger.info('Click webhook received', { clickTransId: payload.click_trans_id, merchantTransId: payload.merchant_trans_id, action: payload.action, }); try { // Click signature validation const isValid = this.webhookService.validateClickSignature(payload, signature); if (!isValid) { throw new common_1.BadRequestException('Invalid signature'); } const webhookData = { provider: 'click', transactionId: payload.click_trans_id, orderId: payload.merchant_trans_id, amount: payload.amount, status: this.mapClickStatus(payload.action), timestamp: new Date().toISOString(), }; await this.webhookService.processWebhook(webhookData); return { success: true }; } catch (error) { logger_config_1.logger.error('Click webhook processing failed', { error: error.message, payload: JSON.stringify(payload, null, 2), }); throw error; } } async handleUzcardWebhook(payload, authorization) { logger_config_1.logger.info('UzCard webhook received', { transactionId: payload.transaction_id, orderId: payload.order_id, status: payload.status, }); try { const webhookData = { provider: 'uzcard', transactionId: payload.transaction_id, orderId: payload.order_id, amount: payload.amount, status: this.mapUzcardStatus(payload.status), timestamp: new Date().toISOString(), }; await this.webhookService.processWebhook(webhookData); return { success: true }; } catch (error) { logger_config_1.logger.error('UzCard webhook processing failed', { error: error.message, payload: JSON.stringify(payload, null, 2), }); throw error; } } async handleHumoWebhook(payload) { logger_config_1.logger.info('Humo webhook received', { transactionId: payload.transaction_id, orderId: payload.order_id, }); try { const webhookData = { provider: 'humo', transactionId: payload.transaction_id, orderId: payload.order_id, amount: payload.amount, status: this.mapHumoStatus(payload.status), timestamp: new Date().toISOString(), }; await this.webhookService.processWebhook(webhookData); return { success: true }; } catch (error) { logger_config_1.logger.error('Humo webhook processing failed', { error: error.message, payload: JSON.stringify(payload, null, 2), }); throw error; } } async handleApelsinWebhook(payload) { logger_config_1.logger.info('Apelsin webhook received', { transactionId: payload.transaction_id, orderId: payload.order_id, }); try { const webhookData = { provider: 'apelsin', transactionId: payload.transaction_id, orderId: payload.order_id, amount: payload.amount, status: this.mapApelsinStatus(payload.status), timestamp: new Date().toISOString(), }; await this.webhookService.processWebhook(webhookData); return { success: true }; } catch (error) { logger_config_1.logger.error('Apelsin webhook processing failed', { error: error.message, payload: JSON.stringify(payload, null, 2), }); throw error; } } // Status mapping methods mapPaymeStatus(state) { switch (state) { case 2: return 'success'; case -1: case -2: return 'cancelled'; case 1: return 'pending'; default: return 'failed'; } } mapClickStatus(action) { switch (action) { case 1: return 'success'; case 0: return 'failed'; default: return 'pending'; } } mapUzcardStatus(status) { switch (status?.toLowerCase()) { case 'success': case 'completed': return 'success'; case 'failed': case 'error': return 'failed'; case 'cancelled': return 'cancelled'; default: return 'pending'; } } mapHumoStatus(status) { return this.mapUzcardStatus(status); // Same logic } mapApelsinStatus(status) { return this.mapUzcardStatus(status); // Same logic } }; exports.WebhookController = WebhookController; __decorate([ (0, common_1.Post)('payme'), (0, common_1.HttpCode)(common_1.HttpStatus.OK), __param(0, (0, common_1.Body)()), __param(1, (0, common_1.Headers)('x-signature')), __metadata("design:type", Function), __metadata("design:paramtypes", [Object, String]), __metadata("design:returntype", Promise) ], WebhookController.prototype, "handlePaymeWebhook", null); __decorate([ (0, common_1.Post)('click'), (0, common_1.HttpCode)(common_1.HttpStatus.OK), __param(0, (0, common_1.Body)()), __param(1, (0, common_1.Headers)('x-signature')), __metadata("design:type", Function), __metadata("design:paramtypes", [Object, String]), __metadata("design:returntype", Promise) ], WebhookController.prototype, "handleClickWebhook", null); __decorate([ (0, common_1.Post)('uzcard'), (0, common_1.HttpCode)(common_1.HttpStatus.OK), __param(0, (0, common_1.Body)()), __param(1, (0, common_1.Headers)('authorization')), __metadata("design:type", Function), __metadata("design:paramtypes", [Object, String]), __metadata("design:returntype", Promise) ], WebhookController.prototype, "handleUzcardWebhook", null); __decorate([ (0, common_1.Post)('humo'), (0, common_1.HttpCode)(common_1.HttpStatus.OK), __param(0, (0, common_1.Body)()), __metadata("design:type", Function), __metadata("design:paramtypes", [Object]), __metadata("design:returntype", Promise) ], WebhookController.prototype, "handleHumoWebhook", null); __decorate([ (0, common_1.Post)('apelsin'), (0, common_1.HttpCode)(common_1.HttpStatus.OK), __param(0, (0, common_1.Body)()), __metadata("design:type", Function), __metadata("design:paramtypes", [Object]), __metadata("design:returntype", Promise) ], WebhookController.prototype, "handleApelsinWebhook", null); exports.WebhookController = WebhookController = __decorate([ (0, common_1.Controller)('webhooks'), __metadata("design:paramtypes", [webhook_service_1.WebhookService]) ], WebhookController); //# sourceMappingURL=webhook.controller.js.map