@infineit-nestjs/middleware 1.0.10 → 1.1.0-cursor-ai.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/es/global.module.mjs +2 -0
- package/dist/es/index.mjs +2 -0
- package/dist/es/node_modules/tslib/{tslib.es6.js → tslib.es6.mjs} +1 -1
- package/dist/es/rate-limiter/index.mjs +2 -0
- package/dist/es/rate-limiter/rate-limiter.middleware.mjs +2 -0
- package/dist/es/rate-limiter/rate-limiter.service.mjs +2 -0
- package/package.json +13 -5
- package/dist/es/global.module.js +0 -2
- package/dist/es/index.js +0 -2
- package/dist/es/rate-limiter/index.js +0 -2
- package/dist/es/rate-limiter/rate-limiter.middleware.js +0 -2
- package/dist/es/rate-limiter/rate-limiter.service.js +0 -2
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{__decorate as r}from"./node_modules/tslib/tslib.es6.mjs";import{Module as e}from"@nestjs/common";import{RateLimiterMiddleware as m}from"./rate-limiter/rate-limiter.middleware.mjs";import{RateLimiterService as t}from"./rate-limiter/rate-limiter.service.mjs";let i=class{configure(r){r.apply(m).forRoutes("*")}};i=r([e({providers:[t],exports:[t]})],i);export{i as GlobalMiddlewareModule};
|
|
2
|
+
//# sourceMappingURL=global.module.mjs.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
function e(e,t,r,o){var f,c=arguments.length,n=c<3?t:null===o?o=Object.getOwnPropertyDescriptor(t,r):o;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)n=Reflect.decorate(e,t,r,o);else for(var p=e.length-1;p>=0;p--)(f=e[p])&&(n=(c<3?f(n):c>3?f(t,r,n):f(t,r))||n);return c>3&&n&&Object.defineProperty(t,r,n),n}function t(e,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)}"function"==typeof SuppressedError&&SuppressedError;export{e as __decorate,t as __metadata};
|
|
2
|
-
//# sourceMappingURL=tslib.es6.
|
|
2
|
+
//# sourceMappingURL=tslib.es6.mjs.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{__decorate as e,__metadata as t}from"../node_modules/tslib/tslib.es6.mjs";import{createHash as i}from"crypto";import{Injectable as r,HttpException as s,HttpStatus as o}from"@nestjs/common";import{RateLimiterService as a}from"./rate-limiter.service.mjs";let n=class{constructor(e){this.limiterService=e}async use(e,t,i){if("OPTIONS"===e.method)return void i();const r=this.getRateLimitKey(e),{points:a,duration:n}=this.limiterService.getLimiterConfig();try{const e=await this.limiterService.consume(r);t.setHeader("RateLimit-Limit",a.toString()),t.setHeader("RateLimit-Policy",`${a};w=${n}`),t.setHeader("RateLimit-Remaining",e.remainingPoints.toString()),t.setHeader("RateLimit-Reset",Math.ceil(e.msBeforeNext/1e3).toString()),t.setHeader("X-RateLimit-Limit",a.toString()),t.setHeader("X-RateLimit-Remaining",e.remainingPoints.toString()),t.setHeader("X-RateLimit-Reset",Math.ceil(e.msBeforeNext/1e3).toString()),i()}catch(e){if("object"==typeof(m=e)&&null!==m&&"msBeforeNext"in m&&"remainingPoints"in m){const i=Math.ceil(e.msBeforeNext/1e3);throw t.setHeader("Retry-After",i.toString()),t.setHeader("RateLimit-Limit",a.toString()),t.setHeader("RateLimit-Policy",`${a};w=${n}`),t.setHeader("RateLimit-Remaining","0"),t.setHeader("RateLimit-Reset",i.toString()),new s({statusCode:o.TOO_MANY_REQUESTS,message:"Too Many Requests",retryAfter:i,resetAfter:i},o.TOO_MANY_REQUESTS)}throw new s("Rate limiter error",o.INTERNAL_SERVER_ERROR)}var m}getRateLimitKey(e){const t=e.user?.id_user;if(t)return`user:${t}`;const i=e.headers["x-device-id"]||e.cookies?.device_id||null;if(i)return`fp:${i}`;const r=e.realIp||e.ip;return`ip:${this.hashIp(r)}`}hashIp(e){return i("sha256").update(e).digest("hex").substring(0,16)}};n=e([r(),t("design:paramtypes",[a])],n);export{n as RateLimiterMiddleware};
|
|
2
|
+
//# sourceMappingURL=rate-limiter.middleware.mjs.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{__decorate as i,__metadata as e}from"../node_modules/tslib/tslib.es6.mjs";import{Injectable as t}from"@nestjs/common";import{ConfigService as r}from"@nestjs/config";import{RedisService as o}from"@infineit-nestjs/services";import{RateLimiterRedis as s}from"rate-limiter-flexible";let n=class{constructor(i,e){this.configService=i,this.redisService=e}async onModuleInit(){const i=this.configService.getOrThrow("rateLimit"),e=this.configService.getOrThrow("app");this.redisClient=this.redisService.getPublisherClient(),this.limiter=new s({storeClient:this.redisClient,keyPrefix:`rlflx:${e.serviceName}:${e.companyCode??"default"}`,points:i.points??100,duration:i.duration??300,inMemoryBlockOnConsumed:i.blockOnConsumed??200,inMemoryBlockDuration:i.blockDuration??60})}async consume(i){if(!this.limiter)throw new Error("Rate limiter is not initialized");return this.limiter.consume(i)}getLimiterConfig(){return{points:this.limiter.points,duration:this.limiter.duration}}};n=i([t(),e("design:paramtypes",[r,o])],n);export{n as RateLimiterService};
|
|
2
|
+
//# sourceMappingURL=rate-limiter.service.mjs.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@infineit-nestjs/middleware",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.1.0-cursor-ai.1",
|
|
4
4
|
"main": "./dist/cjs/index.js",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -44,11 +44,11 @@
|
|
|
44
44
|
"scripts": {
|
|
45
45
|
"clean": "rimraf types dist lib",
|
|
46
46
|
"build": "yarn clean && rollup -c",
|
|
47
|
-
"postbuild": "
|
|
47
|
+
"postbuild": "node ../../scripts/postbuild-esm.mjs",
|
|
48
48
|
"dev": "concurrently -c blue,red -n tsc,rollup --kill-others \"tsc --watch -p . --preserveWatchOutput\" \"rollup --config --watch --no-watch.clearScreen\""
|
|
49
49
|
},
|
|
50
50
|
"dependencies": {
|
|
51
|
-
"@infineit-nestjs/services": "1.0.
|
|
51
|
+
"@infineit-nestjs/services": "1.1.0-cursor-ai.1",
|
|
52
52
|
"rate-limiter-flexible": "^7.1.1"
|
|
53
53
|
},
|
|
54
54
|
"devDependencies": {
|
|
@@ -78,11 +78,19 @@
|
|
|
78
78
|
},
|
|
79
79
|
"sideEffects": false,
|
|
80
80
|
"publishConfig": {
|
|
81
|
-
"access": "public"
|
|
81
|
+
"access": "public",
|
|
82
|
+
"registry": "https://registry.npmjs.org/"
|
|
82
83
|
},
|
|
84
|
+
"keywords": [
|
|
85
|
+
"nestjs",
|
|
86
|
+
"nest",
|
|
87
|
+
"infineit",
|
|
88
|
+
"middleware",
|
|
89
|
+
"rate-limiter"
|
|
90
|
+
],
|
|
83
91
|
"engines": {
|
|
84
92
|
"node": ">=18.0.0",
|
|
85
93
|
"npm": ">=9.0.0"
|
|
86
94
|
},
|
|
87
|
-
"gitHead": "
|
|
95
|
+
"gitHead": "98f6b47e088e27ae6784c0cbe0d235a848b62dac"
|
|
88
96
|
}
|
package/dist/es/global.module.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{__decorate as r}from"./node_modules/tslib/tslib.es6.js";import{Module as e}from"@nestjs/common";import{RateLimiterMiddleware as t}from"./rate-limiter/rate-limiter.middleware.js";import{RateLimiterService as i}from"./rate-limiter/rate-limiter.service.js";let o=class{configure(r){r.apply(t).forRoutes("*")}};o=r([e({providers:[i],exports:[i]})],o);export{o as GlobalMiddlewareModule};
|
|
2
|
-
//# sourceMappingURL=global.module.js.map
|
package/dist/es/index.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{__decorate as e,__metadata as t}from"../node_modules/tslib/tslib.es6.js";import{createHash as i}from"crypto";import{Injectable as r,HttpException as s,HttpStatus as o}from"@nestjs/common";import{RateLimiterService as a}from"./rate-limiter.service.js";let n=class{constructor(e){this.limiterService=e}async use(e,t,i){if("OPTIONS"===e.method)return void i();const r=this.getRateLimitKey(e),{points:a,duration:n}=this.limiterService.getLimiterConfig();try{const e=await this.limiterService.consume(r);t.setHeader("RateLimit-Limit",a.toString()),t.setHeader("RateLimit-Policy",`${a};w=${n}`),t.setHeader("RateLimit-Remaining",e.remainingPoints.toString()),t.setHeader("RateLimit-Reset",Math.ceil(e.msBeforeNext/1e3).toString()),t.setHeader("X-RateLimit-Limit",a.toString()),t.setHeader("X-RateLimit-Remaining",e.remainingPoints.toString()),t.setHeader("X-RateLimit-Reset",Math.ceil(e.msBeforeNext/1e3).toString()),i()}catch(e){if("object"==typeof(m=e)&&null!==m&&"msBeforeNext"in m&&"remainingPoints"in m){const i=Math.ceil(e.msBeforeNext/1e3);throw t.setHeader("Retry-After",i.toString()),t.setHeader("RateLimit-Limit",a.toString()),t.setHeader("RateLimit-Policy",`${a};w=${n}`),t.setHeader("RateLimit-Remaining","0"),t.setHeader("RateLimit-Reset",i.toString()),new s({statusCode:o.TOO_MANY_REQUESTS,message:"Too Many Requests",retryAfter:i,resetAfter:i},o.TOO_MANY_REQUESTS)}throw new s("Rate limiter error",o.INTERNAL_SERVER_ERROR)}var m}getRateLimitKey(e){const t=e.user?.id_user;if(t)return`user:${t}`;const i=e.headers["x-device-id"]||e.cookies?.device_id||null;if(i)return`fp:${i}`;const r=e.realIp||e.ip;return`ip:${this.hashIp(r)}`}hashIp(e){return i("sha256").update(e).digest("hex").substring(0,16)}};n=e([r(),t("design:paramtypes",[a])],n);export{n as RateLimiterMiddleware};
|
|
2
|
-
//# sourceMappingURL=rate-limiter.middleware.js.map
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{__decorate as i,__metadata as e}from"../node_modules/tslib/tslib.es6.js";import{Injectable as t}from"@nestjs/common";import{ConfigService as r}from"@nestjs/config";import{RedisService as o}from"@infineit-nestjs/services";import{RateLimiterRedis as s}from"rate-limiter-flexible";let n=class{constructor(i,e){this.configService=i,this.redisService=e}async onModuleInit(){const i=this.configService.getOrThrow("rateLimit"),e=this.configService.getOrThrow("app");this.redisClient=this.redisService.getPublisherClient(),this.limiter=new s({storeClient:this.redisClient,keyPrefix:`rlflx:${e.serviceName}:${e.companyCode??"default"}`,points:i.points??100,duration:i.duration??300,inMemoryBlockOnConsumed:i.blockOnConsumed??200,inMemoryBlockDuration:i.blockDuration??60})}async consume(i){if(!this.limiter)throw new Error("Rate limiter is not initialized");return this.limiter.consume(i)}getLimiterConfig(){return{points:this.limiter.points,duration:this.limiter.duration}}};n=i([t(),e("design:paramtypes",[r,o])],n);export{n as RateLimiterService};
|
|
2
|
-
//# sourceMappingURL=rate-limiter.service.js.map
|