UNPKG

nestjs-cluster-throttle

Version:

Enterprise-grade rate limiting module for NestJS with Redis support, multiple strategies, and cluster mode

79 lines 3.34 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.GeoService = void 0; const common_1 = require("@nestjs/common"); const internal_geo_provider_1 = require("../providers/internal-geo.provider"); const ip_api_geo_provider_1 = require("../providers/ip-api-geo.provider"); let GeoService = class GeoService { constructor(internalProvider, ipApiProvider) { this.internalProvider = internalProvider; this.ipApiProvider = ipApiProvider; this.provider = this.internalProvider; } setProvider(provider) { if (typeof provider === 'string') { switch (provider) { case 'internal': this.provider = this.internalProvider; break; case 'ip-api': this.provider = this.ipApiProvider; break; default: throw new Error(`Unknown provider: ${provider}`); } } else { this.provider = provider; } } async lookup(ip) { return this.provider.lookup(ip); } async isCountryAllowed(ip, allowedCountries, blockedCountries) { const geoResult = await this.lookup(ip); if (!geoResult || !geoResult.countryCode) { return { allowed: true }; } const countryCode = geoResult.countryCode.toUpperCase(); if (blockedCountries && blockedCountries.length > 0) { const blocked = blockedCountries.some((code) => code.toUpperCase() === countryCode); if (blocked) { return { allowed: false, country: geoResult.country, countryCode: geoResult.countryCode, }; } } if (allowedCountries && allowedCountries.length > 0) { const allowed = allowedCountries.some((code) => code.toUpperCase() === countryCode); return { allowed, country: geoResult.country, countryCode: geoResult.countryCode, }; } return { allowed: true, country: geoResult.country, countryCode: geoResult.countryCode, }; } }; exports.GeoService = GeoService; exports.GeoService = GeoService = __decorate([ (0, common_1.Injectable)(), __metadata("design:paramtypes", [internal_geo_provider_1.InternalGeoProvider, ip_api_geo_provider_1.IpApiGeoProvider]) ], GeoService); //# sourceMappingURL=geo.service.js.map