@infineit-nestjs/core 1.0.44 → 1.1.0-cursor-ai.0

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.
Files changed (83) hide show
  1. package/dist/es/constants/{core.constant.js → core.constant.mjs} +1 -1
  2. package/dist/es/constants/{index.js → index.mjs} +2 -2
  3. package/dist/es/decorators/{currentuser.decorator.js → currentuser.decorator.mjs} +1 -1
  4. package/dist/es/decorators/index.mjs +2 -0
  5. package/dist/es/decorators/{number.string.validator.js → number.string.validator.mjs} +1 -1
  6. package/dist/es/decorators/{permissions.decorator.js → permissions.decorator.mjs} +1 -1
  7. package/dist/es/decorators/public.request.decorator.mjs +2 -0
  8. package/dist/es/decorators/{sse-handler.decorator.js → sse-handler.decorator.mjs} +1 -1
  9. package/dist/es/decorators/{swagger.schema.js → swagger.schema.mjs} +1 -1
  10. package/dist/es/decorators/{transforms.decorator.js → transforms.decorator.mjs} +1 -1
  11. package/dist/es/decorators/{uuid-param.decorator.js → uuid-param.decorator.mjs} +1 -1
  12. package/dist/es/errors/common.errors.mjs +2 -0
  13. package/dist/es/errors/{errors.js → errors.mjs} +1 -1
  14. package/dist/es/errors/index.mjs +2 -0
  15. package/dist/es/exceptions/{file-not-image.exception.js → file-not-image.exception.mjs} +1 -1
  16. package/dist/es/exceptions/http-error.filter.mjs +2 -0
  17. package/dist/es/exceptions/index.mjs +2 -0
  18. package/dist/es/exceptions/{query.js → query.mjs} +1 -1
  19. package/dist/es/exceptions/{user-not-found.exception.js → user-not-found.exception.mjs} +1 -1
  20. package/dist/es/filters/all-exceptions.filter.mjs +2 -0
  21. package/dist/es/filters/bad-request.filter.mjs +2 -0
  22. package/dist/es/filters/{constraint-errors.js → constraint-errors.mjs} +1 -1
  23. package/dist/es/filters/http-exception.filter.mjs +2 -0
  24. package/dist/es/filters/index.mjs +2 -0
  25. package/dist/es/filters/prisma-exception.filter.mjs +2 -0
  26. package/dist/es/filters/query-failed.filter.mjs +2 -0
  27. package/dist/es/filters/{query.js → query.mjs} +1 -1
  28. package/dist/es/filters/unprocessable-entity.filter.mjs +2 -0
  29. package/dist/es/index.mjs +2 -0
  30. package/dist/es/kafka/constants/{error.status-code.constant.js → error.status-code.constant.mjs} +1 -1
  31. package/dist/es/kafka/constants/{kafka.constant.js → kafka.constant.mjs} +1 -1
  32. package/dist/es/kafka/constants/{request.status-code.constant.js → request.status-code.constant.mjs} +1 -1
  33. package/dist/es/kafka/decorators/kafka.decorator.mjs +2 -0
  34. package/dist/es/kafka/errors/filters/kafka.error.filter.mjs +2 -0
  35. package/dist/es/kafka/index.mjs +2 -0
  36. package/dist/es/kafka/interceptors/kafka.commit-offset-first.interceptor.mjs +2 -0
  37. package/dist/es/kafka/interceptors/kafka.module.filter.interceptor.mjs +2 -0
  38. package/dist/es/kafka/interceptors/kafka.response.interceptor.mjs +2 -0
  39. package/dist/es/kafka/interceptors/kafka.response.timeout.interceptor.mjs +2 -0
  40. package/dist/es/kafka/kafka.module.mjs +2 -0
  41. package/dist/es/kafka/kafka.service.mjs +2 -0
  42. package/dist/es/kafka/pipes/kafka.validation.pipe.mjs +2 -0
  43. package/dist/es/kafka/utils/{topic-prefix.util.js → topic-prefix.util.mjs} +1 -1
  44. package/dist/es/node_modules/@prisma/client/runtime/{library.js → library.mjs} +1 -1
  45. package/dist/es/node_modules/tslib/{tslib.es6.js → tslib.es6.mjs} +1 -1
  46. package/dist/es/rate-limiter/index.mjs +2 -0
  47. package/dist/es/rate-limiter/rate-limiter.middleware.mjs +2 -0
  48. package/dist/es/rate-limiter/rate-limiter.module.mjs +2 -0
  49. package/dist/es/rate-limiter/rate-limiter.service.mjs +2 -0
  50. package/dist/es/validators/{field.validator.js → field.validator.mjs} +1 -1
  51. package/dist/es/validators/filter.validator.mjs +2 -0
  52. package/dist/es/validators/index.mjs +2 -0
  53. package/package.json +16 -6
  54. package/dist/es/decorators/index.js +0 -2
  55. package/dist/es/decorators/public.request.decorator.js +0 -2
  56. package/dist/es/errors/common.errors.js +0 -2
  57. package/dist/es/errors/index.js +0 -2
  58. package/dist/es/exceptions/http-error.filter.js +0 -2
  59. package/dist/es/exceptions/index.js +0 -2
  60. package/dist/es/filters/all-exceptions.filter.js +0 -2
  61. package/dist/es/filters/bad-request.filter.js +0 -2
  62. package/dist/es/filters/http-exception.filter.js +0 -2
  63. package/dist/es/filters/index.js +0 -2
  64. package/dist/es/filters/prisma-exception.filter.js +0 -2
  65. package/dist/es/filters/query-failed.filter.js +0 -2
  66. package/dist/es/filters/unprocessable-entity.filter.js +0 -2
  67. package/dist/es/index.js +0 -2
  68. package/dist/es/kafka/decorators/kafka.decorator.js +0 -2
  69. package/dist/es/kafka/errors/filters/kafka.error.filter.js +0 -2
  70. package/dist/es/kafka/index.js +0 -2
  71. package/dist/es/kafka/interceptors/kafka.commit-offset-first.interceptor.js +0 -2
  72. package/dist/es/kafka/interceptors/kafka.module.filter.interceptor.js +0 -2
  73. package/dist/es/kafka/interceptors/kafka.response.interceptor.js +0 -2
  74. package/dist/es/kafka/interceptors/kafka.response.timeout.interceptor.js +0 -2
  75. package/dist/es/kafka/kafka.module.js +0 -2
  76. package/dist/es/kafka/kafka.service.js +0 -2
  77. package/dist/es/kafka/pipes/kafka.validation.pipe.js +0 -2
  78. package/dist/es/rate-limiter/index.js +0 -2
  79. package/dist/es/rate-limiter/rate-limiter.middleware.js +0 -2
  80. package/dist/es/rate-limiter/rate-limiter.module.js +0 -2
  81. package/dist/es/rate-limiter/rate-limiter.service.js +0 -2
  82. package/dist/es/validators/filter.validator.js +0 -2
  83. package/dist/es/validators/index.js +0 -2
@@ -1,2 +1,2 @@
1
1
  const e={200:"OK",201:"Created",202:"Accepted",203:"NonAuthoritativeInfo",204:"NoContent",205:"ResetContent",206:"PartialContent",301:"Move Permanently",302:"Found",304:"Not Modified",307:"Temporary Redirect",308:"Permanent Redirect",400:"Bad Request",401:"Unauthorized",403:"Forbidden",404:"Not Found",405:"Method Not Allowed",406:"Not Acceptable",409:"Conflict",413:"Payload Too Large",414:"URI Too Large",415:"Unsupported Media Type",422:"Unprocessable Entity",429:"Too Many Requests",500:"Internal Server Error",501:"Not Implemented",502:"Bad Gateway",503:"Service Unavailable",504:"Gateway Timeout"},t="ResponseSerializationMetaKey",o="PUBLIC";var n,a,d;!function(e){e.ADD="add",e.EDIT="edit",e.DELETE="delete"}(n||(n={})),function(e){e.include="include",e.exclude="exclude"}(a||(a={})),function(e){e[e.PENDING=0]="PENDING",e[e.SUCCESS=1]="SUCCESS",e[e.FAILED=2]="FAILED"}(d||(d={}));export{n as ActionType,d as BatchStatus,e as HTTP_STATUS_MESSAGES,o as PUBLIC_ROUTE_KEY,a as PermissionType,t as RESPONSE_SERIALIZATION_META_KEY};
2
- //# sourceMappingURL=core.constant.js.map
2
+ //# sourceMappingURL=core.constant.mjs.map
@@ -1,2 +1,2 @@
1
- export{ActionType,BatchStatus,HTTP_STATUS_MESSAGES,PUBLIC_ROUTE_KEY,PermissionType,RESPONSE_SERIALIZATION_META_KEY}from"./core.constant.js";
2
- //# sourceMappingURL=index.js.map
1
+ export{ActionType,BatchStatus,HTTP_STATUS_MESSAGES,PUBLIC_ROUTE_KEY,PermissionType,RESPONSE_SERIALIZATION_META_KEY}from"./core.constant.mjs";
2
+ //# sourceMappingURL=index.mjs.map
@@ -1,2 +1,2 @@
1
1
  import{createParamDecorator as t}from"@nestjs/common";const e=t((t,e)=>{const s=e.switchToHttp().getRequest();return t?s.user&&s.user.data:s.user});export{e as currentUser};
2
- //# sourceMappingURL=currentuser.decorator.js.map
2
+ //# sourceMappingURL=currentuser.decorator.mjs.map
@@ -0,0 +1,2 @@
1
+ export{currentUser}from"./currentuser.decorator.mjs";export{IsNumberStringOrNumber}from"./number.string.validator.mjs";export{Permissions}from"./permissions.decorator.mjs";export{publicRoute}from"./public.request.decorator.mjs";export{apiFile,apiMultiFile}from"./swagger.schema.mjs";export{ToNumber}from"./transforms.decorator.mjs";export{UUIDParam}from"./uuid-param.decorator.mjs";export{SseHandler}from"./sse-handler.decorator.mjs";
2
+ //# sourceMappingURL=index.mjs.map
@@ -1,2 +1,2 @@
1
1
  import{registerDecorator as r}from"class-validator";function t(t){return function(e,n){r({name:"IsOptionalIntMinOne",target:e.constructor,propertyName:n,options:t,validator:{validate(r,t){const e=String(r).replace(/['"]+/g,""),n=Number(e);return"number"==typeof n&&!isNaN(n)&&n>=1},defaultMessage:r=>`${r.property} must be a number or numeric string`}})}}export{t as IsNumberStringOrNumber};
2
- //# sourceMappingURL=number.string.validator.js.map
2
+ //# sourceMappingURL=number.string.validator.mjs.map
@@ -1,2 +1,2 @@
1
1
  import{SetMetadata as o}from"@nestjs/common";const s=(...s)=>o("permissions",s);export{s as Permissions};
2
- //# sourceMappingURL=permissions.decorator.js.map
2
+ //# sourceMappingURL=permissions.decorator.mjs.map
@@ -0,0 +1,2 @@
1
+ import{SetMetadata as o}from"@nestjs/common";import{PUBLIC_ROUTE_KEY as t}from"../constants/core.constant.mjs";const m=()=>o(t,!0);export{m as publicRoute};
2
+ //# sourceMappingURL=public.request.decorator.mjs.map
@@ -1,2 +1,2 @@
1
1
  import{SetMetadata as o}from"@nestjs/common";const s=()=>o("isSse",!0);export{s as SseHandler};
2
- //# sourceMappingURL=sse-handler.decorator.js.map
2
+ //# sourceMappingURL=sse-handler.decorator.mjs.map
@@ -1,2 +1,2 @@
1
1
  import{ApiBody as e}from"@nestjs/swagger";const r=(r="file",t={})=>(i,s,a)=>{const{isRequired:p=!1,isArray:o=!1}=t;let y={type:"string",format:"binary"};return o&&(y={type:"array",items:y}),e({required:p,schema:{type:"object",properties:{[r]:y}}})(i,s,a)},t=(r="files")=>(t,i,s)=>{e({type:"multipart/form-data",required:!0,schema:{type:"object",properties:{[r]:{type:"array",items:{type:"string",format:"binary"}}}}})(t,i,s)};export{r as apiFile,t as apiMultiFile};
2
- //# sourceMappingURL=swagger.schema.js.map
2
+ //# sourceMappingURL=swagger.schema.mjs.map
@@ -1,2 +1,2 @@
1
1
  import{Transform as r}from"class-transformer";function e(){return r(({value:r})=>{const e=String(r).replace(/['"]+/g,""),n=Number(e);return isNaN(n)?"undefined":n})}export{e as ToNumber};
2
- //# sourceMappingURL=transforms.decorator.js.map
2
+ //# sourceMappingURL=transforms.decorator.mjs.map
@@ -1,2 +1,2 @@
1
1
  import{createParamDecorator as t,BadRequestException as e,ParseUUIDPipe as r}from"@nestjs/common";const o=(o,n="4",a="Invalid identifier format: the provided ID must be a valid UUID.")=>t((t,i)=>{const s=i.switchToHttp().getRequest().params[o];if(!s)throw new e(`Missing parameter: ${o}`);return new r({version:n,errorHttpStatusCode:400,exceptionFactory:()=>new e(a)}).transform(s,{metatype:String,type:"param"})})();export{o as UUIDParam};
2
- //# sourceMappingURL=uuid-param.decorator.js.map
2
+ //# sourceMappingURL=uuid-param.decorator.mjs.map
@@ -0,0 +1,2 @@
1
+ import{HttpException as n}from"@nestjs/common";import{PrismaClientUnknownRequestError as o,PrismaClientKnownRequestError as r}from"../node_modules/@prisma/client/runtime/library.mjs";function t(t){if(t instanceof n)throw t;if(t instanceof o||t instanceof r)throw t;throw t}export{t as handleCommonErrors};
2
+ //# sourceMappingURL=common.errors.mjs.map
@@ -1,2 +1,2 @@
1
1
  class e extends Error{constructor(e){super(`No distinct values found for the requested field: ${e}`),this.field=e,this.name="MissingDataError",this.field=e}formatFieldName(){const e=this.field.startsWith("id_")?this.field.slice(3):this.field;return e.charAt(0).toUpperCase()+e.slice(1)}}export{e as MissingDataError};
2
- //# sourceMappingURL=errors.js.map
2
+ //# sourceMappingURL=errors.mjs.map
@@ -0,0 +1,2 @@
1
+ export{handleCommonErrors}from"./common.errors.mjs";export{MissingDataError}from"./errors.mjs";
2
+ //# sourceMappingURL=index.mjs.map
@@ -1,2 +1,2 @@
1
1
  import{BadRequestException as r}from"@nestjs/common";class e extends r{constructor(r,e){r?super(r,e):super("error.file.not_image")}}export{e as FileNotImageException};
2
- //# sourceMappingURL=file-not-image.exception.js.map
2
+ //# sourceMappingURL=file-not-image.exception.mjs.map
@@ -0,0 +1,2 @@
1
+ import{__decorate as t}from"../node_modules/tslib/tslib.es6.mjs";import{Catch as e,HttpStatus as s,Logger as o}from"@nestjs/common";let r=class{catch(t,e){const r=e.switchToHttp(),R=r.getResponse(),m=r.getRequest(),i=t.getStatus?t.getStatus():s.INTERNAL_SERVER_ERROR,l={code:i,timestamp:(new Date).toLocaleTimeString,path:m.url,method:m.method,message:i!==s.INTERNAL_SERVER_ERROR?t.message||null:"Internal server error"};i===s.INTERNAL_SERVER_ERROR?o.error(`${m.method} ${m.url}`,t.stack,"ExceptionFilter"):o.error(`${m.method} ${m.url}`,JSON.stringify(l),"ExceptionFilter"),R.status(i).json(l)}};r=t([e()],r);export{r as HttpErrorFilter};
2
+ //# sourceMappingURL=http-error.filter.mjs.map
@@ -0,0 +1,2 @@
1
+ export{FileNotImageException}from"./file-not-image.exception.mjs";export{HttpErrorFilter}from"./http-error.filter.mjs";export{Query as exceptionQuery}from"./query.mjs";export{UserNotFoundException}from"./user-not-found.exception.mjs";
2
+ //# sourceMappingURL=index.mjs.map
@@ -1,2 +1,2 @@
1
1
  class r{addHttpQueryError(r,e,t,o,$){return{name:"addQueryError",type:"INSERT",syntax:()=>{try{let l=o,a=$;l=l.replace(/'/g,"\\'"),a=a.replace(/'/g,"\\'");return`INSERT INTO Error (Module,Method,Url,Req,Response) VALUES\n ('${r}','${e}','${t}','${l}','${a}');`}catch(l){return console.log(l),`Select ${r} ,${e},${t},${o},${$}`}}}}}export{r as Query};
2
- //# sourceMappingURL=query.js.map
2
+ //# sourceMappingURL=query.mjs.map
@@ -1,2 +1,2 @@
1
1
  import{NotFoundException as o}from"@nestjs/common";class r extends o{constructor(o){super("error.user_not_found",o)}}export{r as UserNotFoundException};
2
- //# sourceMappingURL=user-not-found.exception.js.map
2
+ //# sourceMappingURL=user-not-found.exception.mjs.map
@@ -0,0 +1,2 @@
1
+ import{__decorate as e,__metadata as t}from"../node_modules/tslib/tslib.es6.mjs";import{Catch as s,HttpException as o,HttpStatus as r}from"@nestjs/common";import{Reflector as i}from"@nestjs/core";import{LoggerService as n}from"@infineit-nestjs/services";let a=class{constructor(e,t){this.loggerService=e,this.reflector=t}catch(e,t){const s=t.switchToHttp(),i=s.getResponse(),n=s.getRequest();let a,c=e instanceof o?e.getStatus():r.INTERNAL_SERVER_ERROR,l="Internal server error";if("object"==typeof e&&null!==e){const t=e.message||"No error message";a=e.stack,t.includes("invalid input syntax for type uuid")?(l=l="The provided UUID format is invalid. Please ensure that it follows the correct UUID format.",c=r.BAD_REQUEST):l=t}const m=e?.response?.field||null;this.loggerService.error(l,{sourceClass:this.constructor.name,props:{method:n.method,url:n.url,stack:a}});const p={statusCode:c,timestamp:(new Date).toISOString(),path:n.url,...m&&{field:m},message:l};i.status(c).json(p)}};a=e([s(),t("design:paramtypes",[n,i])],a);export{a as AllExceptionsFilter};
2
+ //# sourceMappingURL=all-exceptions.filter.mjs.map
@@ -0,0 +1,2 @@
1
+ import{__decorate as r,__metadata as s}from"../node_modules/tslib/tslib.es6.mjs";import{Catch as t,BadRequestException as e}from"@nestjs/common";import{Reflector as o}from"@nestjs/core";import{ValidationError as a}from"class-validator";import{isArray as n}from"lodash-es";let i=class{constructor(r){this.reflector=r}catch(r,s){const t=s.switchToHttp().getResponse(),e=r.getStatus(),o=r.getResponse();if(n(o.message)&&o.message[0]instanceof a){const r=o.message,s={statusCode:e,message:"Validation failed due to one or more errors in the request.",errors:this.formatValidationErrors(r)};t.status(e).json(s)}else t.status(e).json(o)}formatValidationErrors(r){const s=(r,t="")=>{const e=t?`${t}.${r.property}`:r.property;if(r.children&&r.children.length>0){return r.children.flatMap(t=>{const o=Array.isArray(r.value)?`${e}`:e;return s(t,o)})}return r.constraints?[{field:e,errors:Object.values(r.constraints)}]:[{field:e,errors:["Unknown validation error"]}]};return r.flatMap(r=>s(r))}};i=r([t(e),s("design:paramtypes",[o])],i);export{i as BadRequestExceptionFilter};
2
+ //# sourceMappingURL=bad-request.filter.mjs.map
@@ -1,2 +1,2 @@
1
1
  const e={UQ_97672ac88f789774dd47f7c8be3:"error.unique.email"};export{e as constraintErrors};
2
- //# sourceMappingURL=constraint-errors.js.map
2
+ //# sourceMappingURL=constraint-errors.mjs.map
@@ -0,0 +1,2 @@
1
+ import{__decorate as t}from"../node_modules/tslib/tslib.es6.mjs";import{Catch as s,HttpException as e}from"@nestjs/common";let o=class{catch(t,s){const e=s.switchToHttp(),o=e.getResponse(),m=e.getRequest(),a=t.getStatus();o.status(a).json({statusCode:a,timestamp:(new Date).toISOString(),path:m.url})}};o=t([s(e)],o);export{o as HttpExceptionFilter};
2
+ //# sourceMappingURL=http-exception.filter.mjs.map
@@ -0,0 +1,2 @@
1
+ export{AllExceptionsFilter}from"./all-exceptions.filter.mjs";export{BadRequestExceptionFilter}from"./bad-request.filter.mjs";export{constraintErrors}from"./constraint-errors.mjs";export{HttpExceptionFilter}from"./http-exception.filter.mjs";export{PrismaClientExceptionFilter}from"./prisma-exception.filter.mjs";export{QueryFailedFilter}from"./query-failed.filter.mjs";export{Query}from"./query.mjs";export{UnprocessableEntityFilter}from"./unprocessable-entity.filter.mjs";
2
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1,2 @@
1
+ import{__decorate as e}from"../node_modules/tslib/tslib.es6.mjs";import{Catch as s,HttpStatus as t}from"@nestjs/common";import{BaseExceptionFilter as r}from"@nestjs/core";import{PrismaClientKnownRequestError as a}from"../node_modules/@prisma/client/runtime/library.mjs";let m=class extends r{catch(e,s){const r=s.switchToHttp().getResponse(),a=e.message.replace(/\n/g,"");let m;switch(e.code){case"P2002":m=t.CONFLICT;break;case"P2000":case"P2010":m=t.BAD_REQUEST;break;case"P2025":m=t.NOT_FOUND;break;default:return void super.catch(e,s)}r.status(m).json({statusCode:m,message:e.meta&&e.meta.message?e.meta.message:a,error:e.meta?e.meta:{}})}};m=e([s(a)],m);export{m as PrismaClientExceptionFilter};
2
+ //# sourceMappingURL=prisma-exception.filter.mjs.map
@@ -0,0 +1,2 @@
1
+ import{STATUS_CODES as t}from"http";import{HttpStatus as r,Logger as s}from"@nestjs/common";import{constraintErrors as o}from"./constraint-errors.mjs";class e{constructor(t){this.reflector=t}catch(e,n){const c=n.switchToHttp(),i=c.getResponse(),a=c.getRequest(),m=o[e.constraint],l=e.constraint&&e.constraint.startsWith("UQ")?r.CONFLICT:r.INTERNAL_SERVER_ERROR,p={message:e.sqlMessage,query:e.query};try{s.error(`${a.method} ${a.url}`,JSON.stringify(p),"ExceptionFilter")}catch(t){console.log(t),s.error(`${a.method} ${a.url}`,JSON.stringify(p),"ExceptionFilter")}i.status(l).json({statusCode:l,error:t[l],message:m})}}export{e as QueryFailedFilter};
2
+ //# sourceMappingURL=query-failed.filter.mjs.map
@@ -1,2 +1,2 @@
1
1
  class r{addQueryError(r,e,t,o,$){return{name:"addQueryError",type:"INSERT",syntax:()=>{try{let l=o,a=$;l=l.replace(/'/g,"\\'"),a=a.replace(/'/g,"\\'");return`INSERT INTO Error (Module,Method,Url,Req,Response) VALUES\n ('${r}','${e}','${t}','${l}','${a}');`}catch(l){return console.log(l),`Select ${r} ,${e},${t},${o},${$}`}}}}}export{r as Query};
2
- //# sourceMappingURL=query.js.map
2
+ //# sourceMappingURL=query.mjs.map
@@ -0,0 +1,2 @@
1
+ import{__decorate as s,__metadata as t}from"../node_modules/tslib/tslib.es6.mjs";import{Catch as e,UnprocessableEntityException as o}from"@nestjs/common";import{Reflector as r}from"@nestjs/core";let m=class{constructor(s){this.reflector=s}catch(s,t){const e=t.switchToHttp().getResponse(),o=s.getStatus(),r=s.getResponse(),{message:m,error:a}=r||{},i={statusCode:o,message:m||"Validation failed.",error:a||[]};e.status(o).json(i)}};m=s([e(o),t("design:paramtypes",[r])],m);export{m as UnprocessableEntityFilter};
2
+ //# sourceMappingURL=unprocessable-entity.filter.mjs.map
@@ -0,0 +1,2 @@
1
+ export{ActionType,BatchStatus,HTTP_STATUS_MESSAGES,PUBLIC_ROUTE_KEY,PermissionType,RESPONSE_SERIALIZATION_META_KEY}from"./constants/core.constant.mjs";export{currentUser}from"./decorators/currentuser.decorator.mjs";export{IsNumberStringOrNumber}from"./decorators/number.string.validator.mjs";export{Permissions}from"./decorators/permissions.decorator.mjs";export{publicRoute}from"./decorators/public.request.decorator.mjs";export{apiFile,apiMultiFile}from"./decorators/swagger.schema.mjs";export{ToNumber}from"./decorators/transforms.decorator.mjs";export{UUIDParam}from"./decorators/uuid-param.decorator.mjs";export{SseHandler}from"./decorators/sse-handler.decorator.mjs";export{handleCommonErrors}from"./errors/common.errors.mjs";export{MissingDataError}from"./errors/errors.mjs";export{FileNotImageException}from"./exceptions/file-not-image.exception.mjs";export{HttpErrorFilter}from"./exceptions/http-error.filter.mjs";export{Query as exceptionQuery}from"./exceptions/query.mjs";export{UserNotFoundException}from"./exceptions/user-not-found.exception.mjs";export{AllExceptionsFilter}from"./filters/all-exceptions.filter.mjs";export{BadRequestExceptionFilter}from"./filters/bad-request.filter.mjs";export{constraintErrors}from"./filters/constraint-errors.mjs";export{HttpExceptionFilter}from"./filters/http-exception.filter.mjs";export{PrismaClientExceptionFilter}from"./filters/prisma-exception.filter.mjs";export{QueryFailedFilter}from"./filters/query-failed.filter.mjs";export{Query}from"./filters/query.mjs";export{UnprocessableEntityFilter}from"./filters/unprocessable-entity.filter.mjs";export{IsValidField}from"./validators/field.validator.mjs";export{CommaSeparated,SortBy}from"./validators/filter.validator.mjs";export{KafkaModule}from"./kafka/kafka.module.mjs";export{KafkaService}from"./kafka/kafka.service.mjs";export{MessageCommitOffsetInFirstRunning,MessageHeader,MessageKey,MessageTopic,MessageValue}from"./kafka/decorators/kafka.decorator.mjs";export{extractKafkaHeaderValue,getTopic,getTopicPrefix,setTopicPrefix}from"./kafka/utils/topic-prefix.util.mjs";export{RateLimiterModule}from"./rate-limiter/rate-limiter.module.mjs";
2
+ //# sourceMappingURL=index.mjs.map
@@ -1,2 +1,2 @@
1
1
  var R;!function(R){R[R.ERROR_UNKNOWN=5050]="ERROR_UNKNOWN",R[R.ERROR_SERVICE_UNAVAILABLE=5051]="ERROR_SERVICE_UNAVAILABLE",R[R.ERROR_REQUEST_TIMEOUT=5052]="ERROR_REQUEST_TIMEOUT"}(R||(R={}));export{R as ENUM_ERROR_STATUS_CODE_ERROR};
2
- //# sourceMappingURL=error.status-code.constant.js.map
2
+ //# sourceMappingURL=error.status-code.constant.mjs.map
@@ -1,2 +1,2 @@
1
1
  const o="KAFKA_SERVICE";export{o as KAFKA_SERVICE_NAME};
2
- //# sourceMappingURL=kafka.constant.js.map
2
+ //# sourceMappingURL=kafka.constant.mjs.map
@@ -1,2 +1,2 @@
1
1
  var R;!function(R){R[R.REQUEST_VALIDATION_ERROR=5070]="REQUEST_VALIDATION_ERROR",R[R.REQUEST_TIMESTAMP_INVALID_ERROR=5071]="REQUEST_TIMESTAMP_INVALID_ERROR",R[R.REQUEST_USER_AGENT_INVALID_ERROR=5072]="REQUEST_USER_AGENT_INVALID_ERROR",R[R.REQUEST_USER_AGENT_OS_INVALID_ERROR=5073]="REQUEST_USER_AGENT_OS_INVALID_ERROR",R[R.REQUEST_USER_AGENT_BROWSER_INVALID_ERROR=5074]="REQUEST_USER_AGENT_BROWSER_INVALID_ERROR"}(R||(R={}));export{R as ENUM_REQUEST_STATUS_CODE_ERROR};
2
- //# sourceMappingURL=request.status-code.constant.js.map
2
+ //# sourceMappingURL=request.status-code.constant.mjs.map
@@ -0,0 +1,2 @@
1
+ import{createParamDecorator as t,applyDecorators as r,UseInterceptors as e,UseFilters as o,UsePipes as i}from"@nestjs/common";import{Payload as s,MessagePattern as m,Transport as n}from"@nestjs/microservices";import{KafkaErrorFilter as p}from"../errors/filters/kafka.error.filter.mjs";import{KafkaCommitOffsetFirstInterceptor as f}from"../interceptors/kafka.commit-offset-first.interceptor.mjs";import{KafkaModuleFilterInterceptor as c}from"../interceptors/kafka.module.filter.interceptor.mjs";import{KafkaResponseInterceptor as a}from"../interceptors/kafka.response.interceptor.mjs";import{KafkaResponseTimeoutInterceptor as k}from"../interceptors/kafka.response.timeout.interceptor.mjs";import{KafkaValidationPipe as u}from"../pipes/kafka.validation.pipe.mjs";import{getTopic as j}from"../utils/topic-prefix.util.mjs";function g(t,s=!0,f=!1,g,l=!0){const x=f?[g??p]:[p],d=[a,k,c],h=l?[u]:[],v=j(t,s);return r(m(v,n.KAFKA),e(...d),o(...x),i(...h))}const l=s,x=t((t,r)=>{const e=r.switchToRpc().getContext().getMessage().headers;return t?e[t]:e}),d=t((t,r)=>{const e=r.switchToRpc().getContext(),o=e.getMessage()?.key;return o?.toString()??""});function h(){return r(e(f))}export{h as MessageCommitOffsetInFirstRunning,x as MessageHeader,d as MessageKey,g as MessageTopic,l as MessageValue};
2
+ //# sourceMappingURL=kafka.decorator.mjs.map
@@ -0,0 +1,2 @@
1
+ import{__decorate as e}from"../../../node_modules/tslib/tslib.es6.mjs";import{Catch as s,Logger as r}from"@nestjs/common";import{RpcException as t}from"@nestjs/microservices";import{of as o}from"rxjs";var m;let n=m=class{constructor(){this.logger=new r(m.name)}catch(e,s){const r=s.switchToRpc().getContext().getMessage(),t=r?.key?.toString()??"unknown";return this.logger.error(`Kafka RPC Exception - Key: ${t} - Message: ${e.message}`,e.stack),o(JSON.stringify({error:e.getError(),message:e.message,key:t}))}};n=m=e([s(t)],n);export{n as KafkaErrorFilter};
2
+ //# sourceMappingURL=kafka.error.filter.mjs.map
@@ -0,0 +1,2 @@
1
+ export{KafkaModule}from"./kafka.module.mjs";export{KafkaService}from"./kafka.service.mjs";export{MessageCommitOffsetInFirstRunning,MessageHeader,MessageKey,MessageTopic,MessageValue}from"./decorators/kafka.decorator.mjs";export{extractKafkaHeaderValue,getTopic,getTopicPrefix,setTopicPrefix}from"./utils/topic-prefix.util.mjs";
2
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1,2 @@
1
+ import{__decorate as t,__metadata as e}from"../../node_modules/tslib/tslib.es6.mjs";import{Injectable as s}from"@nestjs/common";import{KafkaService as o}from"../kafka.service.mjs";let r=class{constructor(t){this.kafkaService=t}async intercept(t,e){const s=t.switchToRpc().getContext();try{await this.kafkaService.commitOffsets(s)}catch(t){}return e.handle()}};r=t([s(),e("design:paramtypes",[o])],r);export{r as KafkaCommitOffsetFirstInterceptor};
2
+ //# sourceMappingURL=kafka.commit-offset-first.interceptor.mjs.map
@@ -0,0 +1,2 @@
1
+ import{__decorate as e,__metadata as t}from"../../node_modules/tslib/tslib.es6.mjs";import{Injectable as r}from"@nestjs/common";import{ConfigService as i}from"@nestjs/config";import{of as o,EMPTY as s}from"rxjs";let c=class{constructor(e){this.configService=e,this.expectedService=this.configService.getOrThrow("app.serviceName",{infer:!0})}intercept(e,t){const r=e.switchToRpc().getData(),i=e.switchToRpc().getContext(),c=i?.headers||{},n=c?.rpcType?.toString().toLowerCase()||"emit",m=r?.value?.target_service;return m&&m===this.expectedService?t.handle():"emit"===n?o(null):s}};c=e([r(),t("design:paramtypes",[i])],c);export{c as KafkaModuleFilterInterceptor};
2
+ //# sourceMappingURL=kafka.module.filter.interceptor.mjs.map
@@ -0,0 +1,2 @@
1
+ import{__decorate as e}from"../../node_modules/tslib/tslib.es6.mjs";import{Injectable as t}from"@nestjs/common";import{map as s}from"rxjs/operators";let o=class{intercept(e,t){const o=e.switchToRpc(),{headers:r,key:i}=o.getContext().getMessage();return t.handle().pipe(s(e=>e?(delete e.__class,delete e.__function,JSON.stringify({headers:r,key:i,value:e})):JSON.stringify({headers:r,key:i,value:void 0})))}};o=e([t()],o);export{o as KafkaResponseInterceptor};
2
+ //# sourceMappingURL=kafka.response.interceptor.mjs.map
@@ -0,0 +1,2 @@
1
+ import{__decorate as t,__metadata as e}from"../../node_modules/tslib/tslib.es6.mjs";import{Injectable as r}from"@nestjs/common";import{ConfigService as o}from"@nestjs/config";import{RpcException as s}from"@nestjs/microservices";import{TimeoutError as i,throwError as m}from"rxjs";import{timeout as n,catchError as c}from"rxjs/operators";import{ENUM_ERROR_STATUS_CODE_ERROR as p}from"../constants/error.status-code.constant.mjs";let a=class{constructor(t){this.configService=t,this.timeout=this.configService.get("kafka.producerSend.timeout")??5e3}async intercept(t,e){return e.handle().pipe(n(this.timeout),c(t=>{if(t instanceof i)throw new s({statusCode:p.ERROR_REQUEST_TIMEOUT,message:"http.clientError.requestTimeOut"});return m(()=>t)}))}};a=t([r(),e("design:paramtypes",[o])],a);export{a as KafkaResponseTimeoutInterceptor};
2
+ //# sourceMappingURL=kafka.response.timeout.interceptor.mjs.map
@@ -0,0 +1,2 @@
1
+ import{__decorate as r}from"../node_modules/tslib/tslib.es6.mjs";import{Global as o,Module as e}from"@nestjs/common";import{ConfigModule as s,ConfigService as t}from"@nestjs/config";import{ClientsModule as i,Transport as n}from"@nestjs/microservices";import{KAFKA_SERVICE_NAME as m}from"./constants/kafka.constant.mjs";import{KafkaService as a}from"./kafka.service.mjs";var c;let p=c=class{static forRoot(r={}){const o={provide:"KAFKA_SUBSCRIBE_TOPICS",useValue:r.subscribeTopics||[]};return{module:c,imports:[s,i.registerAsync([{name:m,inject:[t],imports:[s],useFactory:async r=>({transport:n.KAFKA,options:{client:{clientId:r.getOrThrow("kafka.producerClientId",{infer:!0}),brokers:r.getOrThrow("kafka.brokers",{infer:!0})},producer:{...r.getOrThrow("kafka.producer",{infer:!0})}}})}])],providers:[o,a],exports:[a],global:!0}}};p=c=r([o(),e({})],p);export{p as KafkaModule};
2
+ //# sourceMappingURL=kafka.module.mjs.map
@@ -0,0 +1,2 @@
1
+ import{__decorate as t,__param as e,__metadata as r}from"../node_modules/tslib/tslib.es6.mjs";import{Injectable as i,Inject as s,Logger as o}from"@nestjs/common";import{ConfigService as a}from"@nestjs/config";import{ClientKafka as n}from"@nestjs/microservices";import{firstValueFrom as c,timeout as h,of as l}from"rxjs";import{retry as p,delay as f}from"rxjs/operators";import{KAFKA_SERVICE_NAME as m}from"./constants/kafka.constant.mjs";var u;let d=u=class{constructor(t,e,r){this.clientKafka=t,this.topics=e,this.configService=r,this.logger=new o(u.name),this.timeout=this.configService.get("kafka.producerSend.timeout")||5e3}async onApplicationBootstrap(){}async onModuleInit(){this.topics.length>0&&this.topics.forEach(t=>{const e=`${t}`;this.clientKafka.subscribeToResponseOf(e)}),await this.clientKafka.connect()}async onApplicationShutdown(t){this.logger.warn(`Application shutting down with signal: ${t||"N/A"}`),await this.clientKafka.close()}async produceSend(t,e,r){const i={key:r?.key??this.createId(),value:e,headers:r?.headers};try{const e=await c(this.clientKafka.send(t,JSON.stringify(i)).pipe(h(this.timeout),p({count:5,delay:(t,e)=>l(null).pipe(f(1e3*Math.pow(2,e)))})));if("error"in e&&e.error)throw this.logger.error("Kafka send error:",e.error),e.error;return r?.raw?e:e.value}catch(e){throw this.logger.error(`Failed to send message to Kafka topic ${t}`,e),e}}produceEmit(t,e,r){const i={key:r?.key??this.createId(),value:e,headers:r?.headers};return this.clientKafka.emit(t,JSON.stringify(i)).pipe(h(this.timeout))}async produceSendSequential(t,e,r){const i={key:`${t}-sequential-key`,value:e,headers:r?.headers},s=await c(this.clientKafka.send(t,JSON.stringify(i)).pipe(h(this.timeout)));if(s.error)throw s.error;return r?.raw?s:s.value}produceEmitSequential(t,e,r){const i={key:`${t}-sequential-key`,value:e,headers:r?.headers};return this.clientKafka.emit(t,JSON.stringify(i)).pipe(h(this.timeout))}createId(){const t=this.generateRandomString(10);return`${Date.now()}-${t}`}generateRandomString(t){const e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";let r="";for(let i=0;i<t;i++)r+=e.charAt(Math.floor(62*Math.random()));return r}async commitOffsets(t){const e=t.getMessage(),r=t.getTopic(),i=t.getPartition(),s=e.offset;return this.clientKafka.commitOffsets([{topic:r,partition:i,offset:s}])}};d=u=t([i(),e(0,s(m)),e(1,s("KAFKA_SUBSCRIBE_TOPICS")),r("design:paramtypes",[n,Array,a])],d);export{d as KafkaService};
2
+ //# sourceMappingURL=kafka.service.mjs.map
@@ -0,0 +1,2 @@
1
+ import{__decorate as s,__metadata as t}from"../../node_modules/tslib/tslib.es6.mjs";import{Injectable as e,ValidationPipe as r,HttpStatus as o}from"@nestjs/common";import{RpcException as i}from"@nestjs/microservices";import{ENUM_REQUEST_STATUS_CODE_ERROR as n}from"../constants/request.status-code.constant.mjs";let p=class extends r{constructor(){super({transform:!0,skipNullProperties:!1,skipUndefinedProperties:!1,skipMissingProperties:!1,exceptionFactory:s=>new i({statusCode:n.REQUEST_VALIDATION_ERROR,message:"http.clientError.unprocessableEntity",errors:s,statusHttp:o.UNPROCESSABLE_ENTITY})})}};p=s([e(),t("design:paramtypes",[])],p);export{p as KafkaValidationPipe};
2
+ //# sourceMappingURL=kafka.validation.pipe.mjs.map
@@ -1,2 +1,2 @@
1
1
  import*as e from"fs";import*as o from"path";import{config as r}from"dotenv";const n=process.env.NODE_ENV||"development";let t;if("production"===n){const r=o.resolve(process.cwd(),".env.production"),n=o.resolve(process.cwd(),".env");e.existsSync(r)?t=r:e.existsSync(n)&&(t=n)}else{const s=o.resolve(process.cwd(),`.env.${n}`);e.existsSync(s)&&(t=s);const c=o.resolve(process.cwd(),".env.local");e.existsSync(c)&&r({path:c,override:!0})}if(!t)throw new Error(`❌ No valid .env file found for NODE_ENV=${n}`);r({path:t});let s=process.env.KAFKA_TOPIC_PREFIX?.trim().replace(/\.$/,"")||"unknown-topic-prefix";function c(e){s=e?.trim().replace(/\.$/,"")}function i(){return s}function p(e,o=!0){return o&&s?`${s}.${e}`:e}function f(e,o,r="unknown"){const n=o?.[e];return Buffer.isBuffer(n)?n.toString():"string"==typeof n&&n.trim()?n:r}export{f as extractKafkaHeaderValue,p as getTopic,i as getTopicPrefix,c as setTopicPrefix};
2
- //# sourceMappingURL=topic-prefix.util.js.map
2
+ //# sourceMappingURL=topic-prefix.util.mjs.map
@@ -11,4 +11,4 @@ decimal.js/decimal.mjs:
11
11
  *)
12
12
  */
13
13
  export{jt as DMMF,Ae as Debug,q as Extensions,Zr as PrismaClientInitializationError,Yr as PrismaClientKnownRequestError,Kr as PrismaClientRustPanicError,Wr as PrismaClientUnknownRequestError,Hr as PrismaClientValidationError,M as Public,Qt as Sql,Xt as raw,Jt as skip};
14
- //# sourceMappingURL=library.js.map
14
+ //# sourceMappingURL=library.mjs.map
@@ -1,2 +1,2 @@
1
1
  function e(e,t,r,o){var f,n=arguments.length,c=n<3?t:null===o?o=Object.getOwnPropertyDescriptor(t,r):o;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)c=Reflect.decorate(e,t,r,o);else for(var p=e.length-1;p>=0;p--)(f=e[p])&&(c=(n<3?f(c):n>3?f(t,r,c):f(t,r))||c);return n>3&&c&&Object.defineProperty(t,r,c),c}function t(e,t){return function(r,o){t(r,o,e)}}function r(e,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)}"function"==typeof SuppressedError&&SuppressedError;export{e as __decorate,r as __metadata,t as __param};
2
- //# sourceMappingURL=tslib.es6.js.map
2
+ //# sourceMappingURL=tslib.es6.mjs.map
@@ -0,0 +1,2 @@
1
+ export{RateLimiterModule}from"./rate-limiter.module.mjs";
2
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1,2 @@
1
+ import{__decorate as e,__metadata as t}from"../node_modules/tslib/tslib.es6.mjs";import{Injectable as i,HttpException as r,HttpStatus as s}from"@nestjs/common";import{RateLimiterService as o}from"./rate-limiter.service.mjs";let a=class{constructor(e){this.limiterService=e}async use(e,t,i){if("OPTIONS"===e.method)return void i();const o=e.realIp||e.ip,{points:a,duration:m}=this.limiterService.getLimiterConfig();try{const e=await this.limiterService.consume(o);t.setHeader("RateLimit-Limit",a.toString()),t.setHeader("RateLimit-Policy",`${a};w=${m}`),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(n=e)&&null!==n&&"msBeforeNext"in n&&"remainingPoints"in n){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=${m}`),t.setHeader("RateLimit-Remaining","0"),t.setHeader("RateLimit-Reset",i.toString()),new r({message:"Too Many Requests",retryAfter:i,resetAfter:i},s.TOO_MANY_REQUESTS)}throw new r("Rate limiter error",s.INTERNAL_SERVER_ERROR)}var n}};a=e([i(),t("design:paramtypes",[o])],a);export{a as RateLimiterMiddleware};
2
+ //# sourceMappingURL=rate-limiter.middleware.mjs.map
@@ -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 o}from"./rate-limiter.middleware.mjs";import{RateLimiterService as m}from"./rate-limiter.service.mjs";let s=class{configure(r){r.apply(o).forRoutes("*")}};s=r([e({providers:[m],exports:[m]})],s);export{s as RateLimiterModule};
2
+ //# sourceMappingURL=rate-limiter.module.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
@@ -1,2 +1,2 @@
1
1
  import{registerDecorator as t}from"class-validator";function n(n,a){return function(o,r){t({name:"isValidField",target:o.constructor,propertyName:r,constraints:[n],options:a,validator:{validate(t,n){const[a]=n.constraints;return t in new a},defaultMessage(t){const[n]=t.constraints;return`Field '${t.value}' is not a valid key of ${n.name}`}}})}}export{n as IsValidField};
2
- //# sourceMappingURL=field.validator.js.map
2
+ //# sourceMappingURL=field.validator.mjs.map
@@ -0,0 +1,2 @@
1
+ import{__decorate as e}from"../node_modules/tslib/tslib.es6.mjs";import{Injectable as t}from"@nestjs/common";import{ValidatorConstraint as s}from"class-validator";let r=class{validate(e,t){return!!/^[0-9]+(,[0-9]+)*$/.test(e)}defaultMessage(e){return`Invalid ${e.property}`}};r=e([t(),s({name:"CommaSeparated",async:!1})],r);let a=class{validate(e,t){const s=e.split(" ");if(s.length%2!=0)return!1;const r=/^[\w]+$/,a=/^(ASC|DESC|asc|desc|Asc|Desc)$/;for(let e=0;e<s.length;e+=2)if(!r.test(s[e])||!a.test(s[e+1]))return!1;return!0}defaultMessage(e){return`${e.property} must be in the format "field direction" where direction is "ASC" or "DESC", separated by spaces.`}};a=e([t(),s({name:"SortBy",async:!1})],a);export{r as CommaSeparated,a as SortBy};
2
+ //# sourceMappingURL=filter.validator.mjs.map
@@ -0,0 +1,2 @@
1
+ export{IsValidField}from"./field.validator.mjs";export{CommaSeparated,SortBy}from"./filter.validator.mjs";
2
+ //# sourceMappingURL=index.mjs.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@infineit-nestjs/core",
3
- "version": "1.0.44",
3
+ "version": "1.1.0-cursor-ai.0",
4
4
  "main": "./dist/cjs/index.js",
5
5
  "repository": {
6
6
  "type": "git",
@@ -107,12 +107,12 @@
107
107
  "scripts": {
108
108
  "clean": "rimraf types dist lib",
109
109
  "build": "yarn clean && rollup -c",
110
- "postbuild": "echo '{ \"type\": \"module\" }' > dist/es/package.json",
110
+ "postbuild": "node ../../scripts/postbuild-esm.mjs",
111
111
  "dev": "concurrently -c blue,red -n tsc,rollup --kill-others \"tsc --watch -p . --preserveWatchOutput\" \"rollup --config --watch --no-watch.clearScreen\""
112
112
  },
113
113
  "dependencies": {
114
- "@infineit-nestjs/services": "1.0.49",
115
- "@infineit-nestjs/types": "1.0.11",
114
+ "@infineit-nestjs/services": "1.1.0-cursor-ai.0",
115
+ "@infineit-nestjs/types": "1.1.0-cursor-ai.0",
116
116
  "@nestjs/swagger": "^11.0.7",
117
117
  "dotenv": "^16.5.0",
118
118
  "lodash-es": "^4.17.21",
@@ -147,11 +147,21 @@
147
147
  },
148
148
  "sideEffects": false,
149
149
  "publishConfig": {
150
- "access": "public"
150
+ "access": "public",
151
+ "registry": "https://registry.npmjs.org/"
151
152
  },
153
+ "keywords": [
154
+ "nestjs",
155
+ "nest",
156
+ "infineit",
157
+ "core",
158
+ "decorators",
159
+ "filters",
160
+ "validators"
161
+ ],
152
162
  "engines": {
153
163
  "node": ">=18.0.0",
154
164
  "npm": ">=9.0.0"
155
165
  },
156
- "gitHead": "7920b070395ded95d50556b18ec00fe62e1eb3c4"
166
+ "gitHead": "8080039a33adaff6c66850311d433f28291c315b"
157
167
  }
@@ -1,2 +0,0 @@
1
- export{currentUser}from"./currentuser.decorator.js";export{IsNumberStringOrNumber}from"./number.string.validator.js";export{Permissions}from"./permissions.decorator.js";export{publicRoute}from"./public.request.decorator.js";export{apiFile,apiMultiFile}from"./swagger.schema.js";export{ToNumber}from"./transforms.decorator.js";export{UUIDParam}from"./uuid-param.decorator.js";export{SseHandler}from"./sse-handler.decorator.js";
2
- //# sourceMappingURL=index.js.map
@@ -1,2 +0,0 @@
1
- import{SetMetadata as o}from"@nestjs/common";import{PUBLIC_ROUTE_KEY as t}from"../constants/core.constant.js";const n=()=>o(t,!0);export{n as publicRoute};
2
- //# sourceMappingURL=public.request.decorator.js.map
@@ -1,2 +0,0 @@
1
- import{HttpException as n}from"@nestjs/common";import{PrismaClientUnknownRequestError as o,PrismaClientKnownRequestError as r}from"../node_modules/@prisma/client/runtime/library.js";function t(t){if(t instanceof n)throw t;if(t instanceof o||t instanceof r)throw t;throw t}export{t as handleCommonErrors};
2
- //# sourceMappingURL=common.errors.js.map
@@ -1,2 +0,0 @@
1
- export{handleCommonErrors}from"./common.errors.js";export{MissingDataError}from"./errors.js";
2
- //# sourceMappingURL=index.js.map
@@ -1,2 +0,0 @@
1
- import{__decorate as t}from"../node_modules/tslib/tslib.es6.js";import{Catch as e,HttpStatus as s,Logger as o}from"@nestjs/common";let r=class{catch(t,e){const r=e.switchToHttp(),R=r.getResponse(),m=r.getRequest(),i=t.getStatus?t.getStatus():s.INTERNAL_SERVER_ERROR,l={code:i,timestamp:(new Date).toLocaleTimeString,path:m.url,method:m.method,message:i!==s.INTERNAL_SERVER_ERROR?t.message||null:"Internal server error"};i===s.INTERNAL_SERVER_ERROR?o.error(`${m.method} ${m.url}`,t.stack,"ExceptionFilter"):o.error(`${m.method} ${m.url}`,JSON.stringify(l),"ExceptionFilter"),R.status(i).json(l)}};r=t([e()],r);export{r as HttpErrorFilter};
2
- //# sourceMappingURL=http-error.filter.js.map
@@ -1,2 +0,0 @@
1
- export{FileNotImageException}from"./file-not-image.exception.js";export{HttpErrorFilter}from"./http-error.filter.js";export{Query as exceptionQuery}from"./query.js";export{UserNotFoundException}from"./user-not-found.exception.js";
2
- //# sourceMappingURL=index.js.map
@@ -1,2 +0,0 @@
1
- import{__decorate as e,__metadata as t}from"../node_modules/tslib/tslib.es6.js";import{Catch as s,HttpException as o,HttpStatus as r}from"@nestjs/common";import{Reflector as i}from"@nestjs/core";import{LoggerService as n}from"@infineit-nestjs/services";let a=class{constructor(e,t){this.loggerService=e,this.reflector=t}catch(e,t){const s=t.switchToHttp(),i=s.getResponse(),n=s.getRequest();let a,c=e instanceof o?e.getStatus():r.INTERNAL_SERVER_ERROR,l="Internal server error";if("object"==typeof e&&null!==e){const t=e.message||"No error message";a=e.stack,t.includes("invalid input syntax for type uuid")?(l=l="The provided UUID format is invalid. Please ensure that it follows the correct UUID format.",c=r.BAD_REQUEST):l=t}const m=e?.response?.field||null;this.loggerService.error(l,{sourceClass:this.constructor.name,props:{method:n.method,url:n.url,stack:a}});const p={statusCode:c,timestamp:(new Date).toISOString(),path:n.url,...m&&{field:m},message:l};i.status(c).json(p)}};a=e([s(),t("design:paramtypes",[n,i])],a);export{a as AllExceptionsFilter};
2
- //# sourceMappingURL=all-exceptions.filter.js.map
@@ -1,2 +0,0 @@
1
- import{__decorate as r,__metadata as s}from"../node_modules/tslib/tslib.es6.js";import{Catch as t,BadRequestException as e}from"@nestjs/common";import{Reflector as o}from"@nestjs/core";import{ValidationError as a}from"class-validator";import{isArray as n}from"lodash-es";let i=class{constructor(r){this.reflector=r}catch(r,s){const t=s.switchToHttp().getResponse(),e=r.getStatus(),o=r.getResponse();if(n(o.message)&&o.message[0]instanceof a){const r=o.message,s={statusCode:e,message:"Validation failed due to one or more errors in the request.",errors:this.formatValidationErrors(r)};t.status(e).json(s)}else t.status(e).json(o)}formatValidationErrors(r){const s=(r,t="")=>{const e=t?`${t}.${r.property}`:r.property;if(r.children&&r.children.length>0){return r.children.flatMap(t=>{const o=Array.isArray(r.value)?`${e}`:e;return s(t,o)})}return r.constraints?[{field:e,errors:Object.values(r.constraints)}]:[{field:e,errors:["Unknown validation error"]}]};return r.flatMap(r=>s(r))}};i=r([t(e),s("design:paramtypes",[o])],i);export{i as BadRequestExceptionFilter};
2
- //# sourceMappingURL=bad-request.filter.js.map
@@ -1,2 +0,0 @@
1
- import{__decorate as t}from"../node_modules/tslib/tslib.es6.js";import{Catch as s,HttpException as e}from"@nestjs/common";let o=class{catch(t,s){const e=s.switchToHttp(),o=e.getResponse(),m=e.getRequest(),a=t.getStatus();o.status(a).json({statusCode:a,timestamp:(new Date).toISOString(),path:m.url})}};o=t([s(e)],o);export{o as HttpExceptionFilter};
2
- //# sourceMappingURL=http-exception.filter.js.map
@@ -1,2 +0,0 @@
1
- export{AllExceptionsFilter}from"./all-exceptions.filter.js";export{BadRequestExceptionFilter}from"./bad-request.filter.js";export{constraintErrors}from"./constraint-errors.js";export{HttpExceptionFilter}from"./http-exception.filter.js";export{PrismaClientExceptionFilter}from"./prisma-exception.filter.js";export{QueryFailedFilter}from"./query-failed.filter.js";export{Query}from"./query.js";export{UnprocessableEntityFilter}from"./unprocessable-entity.filter.js";
2
- //# sourceMappingURL=index.js.map
@@ -1,2 +0,0 @@
1
- import{__decorate as e}from"../node_modules/tslib/tslib.es6.js";import{Catch as s,HttpStatus as t}from"@nestjs/common";import{BaseExceptionFilter as r}from"@nestjs/core";import{PrismaClientKnownRequestError as a}from"../node_modules/@prisma/client/runtime/library.js";let o=class extends r{catch(e,s){const r=s.switchToHttp().getResponse(),a=e.message.replace(/\n/g,"");let o;switch(e.code){case"P2002":o=t.CONFLICT;break;case"P2000":case"P2010":o=t.BAD_REQUEST;break;case"P2025":o=t.NOT_FOUND;break;default:return void super.catch(e,s)}r.status(o).json({statusCode:o,message:e.meta&&e.meta.message?e.meta.message:a,error:e.meta?e.meta:{}})}};o=e([s(a)],o);export{o as PrismaClientExceptionFilter};
2
- //# sourceMappingURL=prisma-exception.filter.js.map
@@ -1,2 +0,0 @@
1
- import{STATUS_CODES as t}from"http";import{HttpStatus as r,Logger as s}from"@nestjs/common";import{constraintErrors as o}from"./constraint-errors.js";class e{constructor(t){this.reflector=t}catch(e,n){const c=n.switchToHttp(),i=c.getResponse(),a=c.getRequest(),m=o[e.constraint],l=e.constraint&&e.constraint.startsWith("UQ")?r.CONFLICT:r.INTERNAL_SERVER_ERROR,p={message:e.sqlMessage,query:e.query};try{s.error(`${a.method} ${a.url}`,JSON.stringify(p),"ExceptionFilter")}catch(t){console.log(t),s.error(`${a.method} ${a.url}`,JSON.stringify(p),"ExceptionFilter")}i.status(l).json({statusCode:l,error:t[l],message:m})}}export{e as QueryFailedFilter};
2
- //# sourceMappingURL=query-failed.filter.js.map
@@ -1,2 +0,0 @@
1
- import{__decorate as s,__metadata as t}from"../node_modules/tslib/tslib.es6.js";import{Catch as e,UnprocessableEntityException as o}from"@nestjs/common";import{Reflector as r}from"@nestjs/core";let a=class{constructor(s){this.reflector=s}catch(s,t){const e=t.switchToHttp().getResponse(),o=s.getStatus(),r=s.getResponse(),{message:a,error:m}=r||{},i={statusCode:o,message:a||"Validation failed.",error:m||[]};e.status(o).json(i)}};a=s([e(o),t("design:paramtypes",[r])],a);export{a as UnprocessableEntityFilter};
2
- //# sourceMappingURL=unprocessable-entity.filter.js.map
package/dist/es/index.js DELETED
@@ -1,2 +0,0 @@
1
- export{ActionType,BatchStatus,HTTP_STATUS_MESSAGES,PUBLIC_ROUTE_KEY,PermissionType,RESPONSE_SERIALIZATION_META_KEY}from"./constants/core.constant.js";export{currentUser}from"./decorators/currentuser.decorator.js";export{IsNumberStringOrNumber}from"./decorators/number.string.validator.js";export{Permissions}from"./decorators/permissions.decorator.js";export{publicRoute}from"./decorators/public.request.decorator.js";export{apiFile,apiMultiFile}from"./decorators/swagger.schema.js";export{ToNumber}from"./decorators/transforms.decorator.js";export{UUIDParam}from"./decorators/uuid-param.decorator.js";export{SseHandler}from"./decorators/sse-handler.decorator.js";export{handleCommonErrors}from"./errors/common.errors.js";export{MissingDataError}from"./errors/errors.js";export{FileNotImageException}from"./exceptions/file-not-image.exception.js";export{HttpErrorFilter}from"./exceptions/http-error.filter.js";export{Query as exceptionQuery}from"./exceptions/query.js";export{UserNotFoundException}from"./exceptions/user-not-found.exception.js";export{AllExceptionsFilter}from"./filters/all-exceptions.filter.js";export{BadRequestExceptionFilter}from"./filters/bad-request.filter.js";export{constraintErrors}from"./filters/constraint-errors.js";export{HttpExceptionFilter}from"./filters/http-exception.filter.js";export{PrismaClientExceptionFilter}from"./filters/prisma-exception.filter.js";export{QueryFailedFilter}from"./filters/query-failed.filter.js";export{Query}from"./filters/query.js";export{UnprocessableEntityFilter}from"./filters/unprocessable-entity.filter.js";export{IsValidField}from"./validators/field.validator.js";export{CommaSeparated,SortBy}from"./validators/filter.validator.js";export{KafkaModule}from"./kafka/kafka.module.js";export{KafkaService}from"./kafka/kafka.service.js";export{MessageCommitOffsetInFirstRunning,MessageHeader,MessageKey,MessageTopic,MessageValue}from"./kafka/decorators/kafka.decorator.js";export{extractKafkaHeaderValue,getTopic,getTopicPrefix,setTopicPrefix}from"./kafka/utils/topic-prefix.util.js";export{RateLimiterModule}from"./rate-limiter/rate-limiter.module.js";
2
- //# sourceMappingURL=index.js.map
@@ -1,2 +0,0 @@
1
- import{createParamDecorator as t,applyDecorators as r,UseInterceptors as e,UseFilters as o,UsePipes as i}from"@nestjs/common";import{Payload as s,MessagePattern as n,Transport as p}from"@nestjs/microservices";import{KafkaErrorFilter as m}from"../errors/filters/kafka.error.filter.js";import{KafkaCommitOffsetFirstInterceptor as f}from"../interceptors/kafka.commit-offset-first.interceptor.js";import{KafkaModuleFilterInterceptor as c}from"../interceptors/kafka.module.filter.interceptor.js";import{KafkaResponseInterceptor as a}from"../interceptors/kafka.response.interceptor.js";import{KafkaResponseTimeoutInterceptor as k}from"../interceptors/kafka.response.timeout.interceptor.js";import{KafkaValidationPipe as u}from"../pipes/kafka.validation.pipe.js";import{getTopic as j}from"../utils/topic-prefix.util.js";function g(t,s=!0,f=!1,g,l=!0){const x=f?[g??m]:[m],d=[a,k,c],h=l?[u]:[],v=j(t,s);return r(n(v,p.KAFKA),e(...d),o(...x),i(...h))}const l=s,x=t((t,r)=>{const e=r.switchToRpc().getContext().getMessage().headers;return t?e[t]:e}),d=t((t,r)=>{const e=r.switchToRpc().getContext(),o=e.getMessage()?.key;return o?.toString()??""});function h(){return r(e(f))}export{h as MessageCommitOffsetInFirstRunning,x as MessageHeader,d as MessageKey,g as MessageTopic,l as MessageValue};
2
- //# sourceMappingURL=kafka.decorator.js.map
@@ -1,2 +0,0 @@
1
- import{__decorate as e}from"../../../node_modules/tslib/tslib.es6.js";import{Catch as s,Logger as r}from"@nestjs/common";import{RpcException as t}from"@nestjs/microservices";import{of as o}from"rxjs";var m;let n=m=class{constructor(){this.logger=new r(m.name)}catch(e,s){const r=s.switchToRpc().getContext().getMessage(),t=r?.key?.toString()??"unknown";return this.logger.error(`Kafka RPC Exception - Key: ${t} - Message: ${e.message}`,e.stack),o(JSON.stringify({error:e.getError(),message:e.message,key:t}))}};n=m=e([s(t)],n);export{n as KafkaErrorFilter};
2
- //# sourceMappingURL=kafka.error.filter.js.map
@@ -1,2 +0,0 @@
1
- export{KafkaModule}from"./kafka.module.js";export{KafkaService}from"./kafka.service.js";export{MessageCommitOffsetInFirstRunning,MessageHeader,MessageKey,MessageTopic,MessageValue}from"./decorators/kafka.decorator.js";export{extractKafkaHeaderValue,getTopic,getTopicPrefix,setTopicPrefix}from"./utils/topic-prefix.util.js";
2
- //# sourceMappingURL=index.js.map
@@ -1,2 +0,0 @@
1
- import{__decorate as t,__metadata as e}from"../../node_modules/tslib/tslib.es6.js";import{Injectable as s}from"@nestjs/common";import{KafkaService as o}from"../kafka.service.js";let r=class{constructor(t){this.kafkaService=t}async intercept(t,e){const s=t.switchToRpc().getContext();try{await this.kafkaService.commitOffsets(s)}catch(t){}return e.handle()}};r=t([s(),e("design:paramtypes",[o])],r);export{r as KafkaCommitOffsetFirstInterceptor};
2
- //# sourceMappingURL=kafka.commit-offset-first.interceptor.js.map
@@ -1,2 +0,0 @@
1
- import{__decorate as e,__metadata as t}from"../../node_modules/tslib/tslib.es6.js";import{Injectable as r}from"@nestjs/common";import{ConfigService as i}from"@nestjs/config";import{of as o,EMPTY as s}from"rxjs";let c=class{constructor(e){this.configService=e,this.expectedService=this.configService.getOrThrow("app.serviceName",{infer:!0})}intercept(e,t){const r=e.switchToRpc().getData(),i=e.switchToRpc().getContext(),c=i?.headers||{},n=c?.rpcType?.toString().toLowerCase()||"emit",p=r?.value?.target_service;return p&&p===this.expectedService?t.handle():"emit"===n?o(null):s}};c=e([r(),t("design:paramtypes",[i])],c);export{c as KafkaModuleFilterInterceptor};
2
- //# sourceMappingURL=kafka.module.filter.interceptor.js.map
@@ -1,2 +0,0 @@
1
- import{__decorate as e}from"../../node_modules/tslib/tslib.es6.js";import{Injectable as t}from"@nestjs/common";import{map as s}from"rxjs/operators";let o=class{intercept(e,t){const o=e.switchToRpc(),{headers:r,key:i}=o.getContext().getMessage();return t.handle().pipe(s(e=>e?(delete e.__class,delete e.__function,JSON.stringify({headers:r,key:i,value:e})):JSON.stringify({headers:r,key:i,value:void 0})))}};o=e([t()],o);export{o as KafkaResponseInterceptor};
2
- //# sourceMappingURL=kafka.response.interceptor.js.map
@@ -1,2 +0,0 @@
1
- import{__decorate as t,__metadata as e}from"../../node_modules/tslib/tslib.es6.js";import{Injectable as r}from"@nestjs/common";import{ConfigService as o}from"@nestjs/config";import{RpcException as s}from"@nestjs/microservices";import{TimeoutError as i,throwError as m}from"rxjs";import{timeout as n,catchError as c}from"rxjs/operators";import{ENUM_ERROR_STATUS_CODE_ERROR as p}from"../constants/error.status-code.constant.js";let a=class{constructor(t){this.configService=t,this.timeout=this.configService.get("kafka.producerSend.timeout")??5e3}async intercept(t,e){return e.handle().pipe(n(this.timeout),c(t=>{if(t instanceof i)throw new s({statusCode:p.ERROR_REQUEST_TIMEOUT,message:"http.clientError.requestTimeOut"});return m(()=>t)}))}};a=t([r(),e("design:paramtypes",[o])],a);export{a as KafkaResponseTimeoutInterceptor};
2
- //# sourceMappingURL=kafka.response.timeout.interceptor.js.map
@@ -1,2 +0,0 @@
1
- import{__decorate as r}from"../node_modules/tslib/tslib.es6.js";import{Global as o,Module as e}from"@nestjs/common";import{ConfigModule as s,ConfigService as t}from"@nestjs/config";import{ClientsModule as i,Transport as n}from"@nestjs/microservices";import{KAFKA_SERVICE_NAME as a}from"./constants/kafka.constant.js";import{KafkaService as c}from"./kafka.service.js";var m;let p=m=class{static forRoot(r={}){const o={provide:"KAFKA_SUBSCRIBE_TOPICS",useValue:r.subscribeTopics||[]};return{module:m,imports:[s,i.registerAsync([{name:a,inject:[t],imports:[s],useFactory:async r=>({transport:n.KAFKA,options:{client:{clientId:r.getOrThrow("kafka.producerClientId",{infer:!0}),brokers:r.getOrThrow("kafka.brokers",{infer:!0})},producer:{...r.getOrThrow("kafka.producer",{infer:!0})}}})}])],providers:[o,c],exports:[c],global:!0}}};p=m=r([o(),e({})],p);export{p as KafkaModule};
2
- //# sourceMappingURL=kafka.module.js.map
@@ -1,2 +0,0 @@
1
- import{__decorate as t,__param as e,__metadata as r}from"../node_modules/tslib/tslib.es6.js";import{Injectable as i,Inject as s,Logger as o}from"@nestjs/common";import{ConfigService as a}from"@nestjs/config";import{ClientKafka as n}from"@nestjs/microservices";import{firstValueFrom as c,timeout as h,of as l}from"rxjs";import{retry as p,delay as f}from"rxjs/operators";import{KAFKA_SERVICE_NAME as m}from"./constants/kafka.constant.js";var u;let d=u=class{constructor(t,e,r){this.clientKafka=t,this.topics=e,this.configService=r,this.logger=new o(u.name),this.timeout=this.configService.get("kafka.producerSend.timeout")||5e3}async onApplicationBootstrap(){}async onModuleInit(){this.topics.length>0&&this.topics.forEach(t=>{const e=`${t}`;this.clientKafka.subscribeToResponseOf(e)}),await this.clientKafka.connect()}async onApplicationShutdown(t){this.logger.warn(`Application shutting down with signal: ${t||"N/A"}`),await this.clientKafka.close()}async produceSend(t,e,r){const i={key:r?.key??this.createId(),value:e,headers:r?.headers};try{const e=await c(this.clientKafka.send(t,JSON.stringify(i)).pipe(h(this.timeout),p({count:5,delay:(t,e)=>l(null).pipe(f(1e3*Math.pow(2,e)))})));if("error"in e&&e.error)throw this.logger.error("Kafka send error:",e.error),e.error;return r?.raw?e:e.value}catch(e){throw this.logger.error(`Failed to send message to Kafka topic ${t}`,e),e}}produceEmit(t,e,r){const i={key:r?.key??this.createId(),value:e,headers:r?.headers};return this.clientKafka.emit(t,JSON.stringify(i)).pipe(h(this.timeout))}async produceSendSequential(t,e,r){const i={key:`${t}-sequential-key`,value:e,headers:r?.headers},s=await c(this.clientKafka.send(t,JSON.stringify(i)).pipe(h(this.timeout)));if(s.error)throw s.error;return r?.raw?s:s.value}produceEmitSequential(t,e,r){const i={key:`${t}-sequential-key`,value:e,headers:r?.headers};return this.clientKafka.emit(t,JSON.stringify(i)).pipe(h(this.timeout))}createId(){const t=this.generateRandomString(10);return`${Date.now()}-${t}`}generateRandomString(t){const e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";let r="";for(let i=0;i<t;i++)r+=e.charAt(Math.floor(62*Math.random()));return r}async commitOffsets(t){const e=t.getMessage(),r=t.getTopic(),i=t.getPartition(),s=e.offset;return this.clientKafka.commitOffsets([{topic:r,partition:i,offset:s}])}};d=u=t([i(),e(0,s(m)),e(1,s("KAFKA_SUBSCRIBE_TOPICS")),r("design:paramtypes",[n,Array,a])],d);export{d as KafkaService};
2
- //# sourceMappingURL=kafka.service.js.map
@@ -1,2 +0,0 @@
1
- import{__decorate as s,__metadata as t}from"../../node_modules/tslib/tslib.es6.js";import{Injectable as e,ValidationPipe as r,HttpStatus as o}from"@nestjs/common";import{RpcException as i}from"@nestjs/microservices";import{ENUM_REQUEST_STATUS_CODE_ERROR as n}from"../constants/request.status-code.constant.js";let p=class extends r{constructor(){super({transform:!0,skipNullProperties:!1,skipUndefinedProperties:!1,skipMissingProperties:!1,exceptionFactory:s=>new i({statusCode:n.REQUEST_VALIDATION_ERROR,message:"http.clientError.unprocessableEntity",errors:s,statusHttp:o.UNPROCESSABLE_ENTITY})})}};p=s([e(),t("design:paramtypes",[])],p);export{p as KafkaValidationPipe};
2
- //# sourceMappingURL=kafka.validation.pipe.js.map
@@ -1,2 +0,0 @@
1
- export{RateLimiterModule}from"./rate-limiter.module.js";
2
- //# sourceMappingURL=index.js.map
@@ -1,2 +0,0 @@
1
- import{__decorate as e,__metadata as t}from"../node_modules/tslib/tslib.es6.js";import{Injectable as i,HttpException as r,HttpStatus as s}from"@nestjs/common";import{RateLimiterService as o}from"./rate-limiter.service.js";let a=class{constructor(e){this.limiterService=e}async use(e,t,i){if("OPTIONS"===e.method)return void i();const o=e.realIp||e.ip,{points:a,duration:n}=this.limiterService.getLimiterConfig();try{const e=await this.limiterService.consume(o);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 r({message:"Too Many Requests",retryAfter:i,resetAfter:i},s.TOO_MANY_REQUESTS)}throw new r("Rate limiter error",s.INTERNAL_SERVER_ERROR)}var m}};a=e([i(),t("design:paramtypes",[o])],a);export{a as RateLimiterMiddleware};
2
- //# sourceMappingURL=rate-limiter.middleware.js.map
@@ -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 o}from"./rate-limiter.middleware.js";import{RateLimiterService as s}from"./rate-limiter.service.js";let t=class{configure(r){r.apply(o).forRoutes("*")}};t=r([e({providers:[s],exports:[s]})],t);export{t as RateLimiterModule};
2
- //# sourceMappingURL=rate-limiter.module.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
@@ -1,2 +0,0 @@
1
- import{__decorate as e}from"../node_modules/tslib/tslib.es6.js";import{Injectable as t}from"@nestjs/common";import{ValidatorConstraint as s}from"class-validator";let r=class{validate(e,t){return!!/^[0-9]+(,[0-9]+)*$/.test(e)}defaultMessage(e){return`Invalid ${e.property}`}};r=e([t(),s({name:"CommaSeparated",async:!1})],r);let a=class{validate(e,t){const s=e.split(" ");if(s.length%2!=0)return!1;const r=/^[\w]+$/,a=/^(ASC|DESC|asc|desc|Asc|Desc)$/;for(let e=0;e<s.length;e+=2)if(!r.test(s[e])||!a.test(s[e+1]))return!1;return!0}defaultMessage(e){return`${e.property} must be in the format "field direction" where direction is "ASC" or "DESC", separated by spaces.`}};a=e([t(),s({name:"SortBy",async:!1})],a);export{r as CommaSeparated,a as SortBy};
2
- //# sourceMappingURL=filter.validator.js.map
@@ -1,2 +0,0 @@
1
- export{IsValidField}from"./field.validator.js";export{CommaSeparated,SortBy}from"./filter.validator.js";
2
- //# sourceMappingURL=index.js.map