nestjs-cluster-throttle
Version:
Enterprise-grade rate limiting module for NestJS with Redis support, multiple strategies, and cluster mode
79 lines • 3.34 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.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