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.

107 lines • 4.14 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.CacheService = void 0; const common_1 = require("@nestjs/common"); const config_1 = require("@nestjs/config"); const ioredis_1 = require("ioredis"); const logger_config_1 = require("../logger/logger.config"); let CacheService = class CacheService { constructor(configService) { this.configService = configService; this.redis = new ioredis_1.default({ host: this.configService.get('REDIS_HOST', 'localhost'), port: this.configService.get('REDIS_PORT', 6379), password: this.configService.get('REDIS_PASSWORD'), lazyConnect: true, }); this.redis.on('connect', () => { logger_config_1.logger.info('Redis connected'); }); this.redis.on('error', (error) => { logger_config_1.logger.error('Redis connection error', { error: error.message }); }); } async get(key) { try { const value = await this.redis.get(key); return value ? JSON.parse(value) : null; } catch (error) { logger_config_1.logger.error('Cache get error', { key, error: error.message }); return null; } } async set(key, value, ttl = 300) { try { await this.redis.setex(key, ttl, JSON.stringify(value)); } catch (error) { logger_config_1.logger.error('Cache set error', { key, error: error.message }); } } async del(key) { try { await this.redis.del(key); } catch (error) { logger_config_1.logger.error('Cache delete error', { key, error: error.message }); } } async exists(key) { try { const result = await this.redis.exists(key); return result === 1; } catch (error) { logger_config_1.logger.error('Cache exists error', { key, error: error.message }); return false; } } // Rate limiting support async increment(key, ttl = 60) { try { const pipeline = this.redis.pipeline(); pipeline.incr(key); pipeline.expire(key, ttl); const results = await pipeline.exec(); return results[0][1]; } catch (error) { logger_config_1.logger.error('Cache increment error', { key, error: error.message }); return 0; } } // Payment status caching async cachePaymentStatus(transactionId, status, ttl = 180) { const key = `payment:status:${transactionId}`; await this.set(key, status, ttl); } async getPaymentStatus(transactionId) { const key = `payment:status:${transactionId}`; return this.get(key); } // Provider info caching async cacheProviderInfo(provider, info, ttl = 3600) { const key = `provider:info:${provider}`; await this.set(key, info, ttl); } async getProviderInfo(provider) { const key = `provider:info:${provider}`; return this.get(key); } }; exports.CacheService = CacheService; exports.CacheService = CacheService = __decorate([ (0, common_1.Injectable)(), __metadata("design:paramtypes", [config_1.ConfigService]) ], CacheService); //# sourceMappingURL=cache.service.js.map