@solidstarters/solid-core 1.2.153 → 1.2.154

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 (137) hide show
  1. package/dist/config/iam.config.d.ts +6 -0
  2. package/dist/config/iam.config.d.ts.map +1 -1
  3. package/dist/config/iam.config.js +3 -0
  4. package/dist/config/iam.config.js.map +1 -1
  5. package/dist/constants/error-messages.js +1 -1
  6. package/dist/constants/error-messages.js.map +1 -1
  7. package/dist/controllers/ai-interaction.controller.d.ts +2 -1
  8. package/dist/controllers/ai-interaction.controller.d.ts.map +1 -1
  9. package/dist/controllers/ai-interaction.controller.js +5 -3
  10. package/dist/controllers/ai-interaction.controller.js.map +1 -1
  11. package/dist/controllers/authentication.controller.d.ts +6 -6
  12. package/dist/controllers/authentication.controller.d.ts.map +1 -1
  13. package/dist/controllers/authentication.controller.js +15 -7
  14. package/dist/controllers/authentication.controller.js.map +1 -1
  15. package/dist/controllers/email-template.controller.d.ts.map +1 -1
  16. package/dist/controllers/email-template.controller.js +3 -0
  17. package/dist/controllers/email-template.controller.js.map +1 -1
  18. package/dist/controllers/google-authentication.controller.d.ts.map +1 -1
  19. package/dist/controllers/google-authentication.controller.js +3 -0
  20. package/dist/controllers/google-authentication.controller.js.map +1 -1
  21. package/dist/controllers/media.controller.d.ts.map +1 -1
  22. package/dist/controllers/media.controller.js +4 -0
  23. package/dist/controllers/media.controller.js.map +1 -1
  24. package/dist/controllers/model-metadata.controller.d.ts.map +1 -1
  25. package/dist/controllers/model-metadata.controller.js +5 -0
  26. package/dist/controllers/model-metadata.controller.js.map +1 -1
  27. package/dist/controllers/otp-authentication.controller.d.ts.map +1 -1
  28. package/dist/controllers/otp-authentication.controller.js +3 -0
  29. package/dist/controllers/otp-authentication.controller.js.map +1 -1
  30. package/dist/controllers/service.controller.d.ts.map +1 -1
  31. package/dist/controllers/service.controller.js +4 -0
  32. package/dist/controllers/service.controller.js.map +1 -1
  33. package/dist/controllers/sms-template.controller.d.ts +1 -1
  34. package/dist/controllers/sms-template.controller.d.ts.map +1 -1
  35. package/dist/controllers/sms-template.controller.js +6 -3
  36. package/dist/controllers/sms-template.controller.js.map +1 -1
  37. package/dist/decorators/solid-password.decorator.d.ts +12 -0
  38. package/dist/decorators/solid-password.decorator.d.ts.map +1 -0
  39. package/dist/decorators/solid-password.decorator.js +43 -0
  40. package/dist/decorators/solid-password.decorator.js.map +1 -0
  41. package/dist/dtos/change-password.dto.d.ts.map +1 -1
  42. package/dist/dtos/change-password.dto.js +2 -0
  43. package/dist/dtos/change-password.dto.js.map +1 -1
  44. package/dist/dtos/confirm-forgot-password.dto.d.ts.map +1 -1
  45. package/dist/dtos/confirm-forgot-password.dto.js +2 -0
  46. package/dist/dtos/confirm-forgot-password.dto.js.map +1 -1
  47. package/dist/helpers/cors.helper.d.ts +4 -0
  48. package/dist/helpers/cors.helper.d.ts.map +1 -0
  49. package/dist/helpers/cors.helper.js +33 -0
  50. package/dist/helpers/cors.helper.js.map +1 -0
  51. package/dist/helpers/security.helper.d.ts +9 -0
  52. package/dist/helpers/security.helper.d.ts.map +1 -0
  53. package/dist/helpers/security.helper.js +46 -0
  54. package/dist/helpers/security.helper.js.map +1 -0
  55. package/dist/index.d.ts +3 -0
  56. package/dist/index.d.ts.map +1 -1
  57. package/dist/index.js +3 -0
  58. package/dist/index.js.map +1 -1
  59. package/dist/repository/chatter-message-details.repository.d.ts +16 -0
  60. package/dist/repository/chatter-message-details.repository.d.ts.map +1 -0
  61. package/dist/repository/chatter-message-details.repository.js +62 -0
  62. package/dist/repository/chatter-message-details.repository.js.map +1 -0
  63. package/dist/repository/chatter-message.repository.d.ts +16 -0
  64. package/dist/repository/chatter-message.repository.d.ts.map +1 -0
  65. package/dist/repository/chatter-message.repository.js +61 -0
  66. package/dist/repository/chatter-message.repository.js.map +1 -0
  67. package/dist/repository/security-rule.repository.d.ts +1 -1
  68. package/dist/repository/security-rule.repository.d.ts.map +1 -1
  69. package/dist/repository/security-rule.repository.js +2 -2
  70. package/dist/repository/security-rule.repository.js.map +1 -1
  71. package/dist/repository/solid-base.repository.d.ts +6 -1
  72. package/dist/repository/solid-base.repository.d.ts.map +1 -1
  73. package/dist/repository/solid-base.repository.js +35 -0
  74. package/dist/repository/solid-base.repository.js.map +1 -1
  75. package/dist/seeders/seed-data/solid-core-metadata.json +9 -0
  76. package/dist/services/ai-interaction.service.d.ts +2 -4
  77. package/dist/services/ai-interaction.service.d.ts.map +1 -1
  78. package/dist/services/ai-interaction.service.js +4 -8
  79. package/dist/services/ai-interaction.service.js.map +1 -1
  80. package/dist/services/authentication.service.d.ts +6 -2
  81. package/dist/services/authentication.service.d.ts.map +1 -1
  82. package/dist/services/authentication.service.js +94 -43
  83. package/dist/services/authentication.service.js.map +1 -1
  84. package/dist/services/chatter-message-details.service.d.ts +4 -3
  85. package/dist/services/chatter-message-details.service.d.ts.map +1 -1
  86. package/dist/services/chatter-message-details.service.js +2 -3
  87. package/dist/services/chatter-message-details.service.js.map +1 -1
  88. package/dist/services/chatter-message.service.d.ts +3 -2
  89. package/dist/services/chatter-message.service.d.ts.map +1 -1
  90. package/dist/services/chatter-message.service.js +2 -2
  91. package/dist/services/chatter-message.service.js.map +1 -1
  92. package/dist/services/crud.service.d.ts.map +1 -1
  93. package/dist/services/crud.service.js +4 -1
  94. package/dist/services/crud.service.js.map +1 -1
  95. package/dist/services/model-metadata.service.d.ts.map +1 -1
  96. package/dist/services/model-metadata.service.js +4 -1
  97. package/dist/services/model-metadata.service.js.map +1 -1
  98. package/dist/services/request-context.service.d.ts +3 -0
  99. package/dist/services/request-context.service.d.ts.map +1 -1
  100. package/dist/services/request-context.service.js +6 -0
  101. package/dist/services/request-context.service.js.map +1 -1
  102. package/dist/solid-core.module.d.ts.map +1 -1
  103. package/dist/solid-core.module.js +23 -5
  104. package/dist/solid-core.module.js.map +1 -1
  105. package/dist/tsconfig.tsbuildinfo +1 -1
  106. package/package.json +3 -1
  107. package/src/config/iam.config.ts +3 -0
  108. package/src/constants/error-messages.ts +1 -1
  109. package/src/controllers/ai-interaction.controller.ts +4 -2
  110. package/src/controllers/authentication.controller.ts +16 -10
  111. package/src/controllers/email-template.controller.ts +4 -1
  112. package/src/controllers/google-authentication.controller.ts +4 -0
  113. package/src/controllers/media.controller.ts +5 -1
  114. package/src/controllers/model-metadata.controller.ts +7 -2
  115. package/src/controllers/otp-authentication.controller.ts +4 -1
  116. package/src/controllers/service.controller.ts +5 -1
  117. package/src/controllers/sms-template.controller.ts +8 -7
  118. package/src/decorators/solid-password.decorator.ts +51 -0
  119. package/src/dtos/change-password.dto.ts +2 -0
  120. package/src/dtos/confirm-forgot-password.dto.ts +2 -0
  121. package/src/helpers/cors.helper.ts +34 -0
  122. package/src/helpers/security.helper.ts +53 -0
  123. package/src/index.ts +3 -0
  124. package/src/repository/chatter-message-details.repository.ts +109 -0
  125. package/src/repository/chatter-message.repository.ts +68 -0
  126. package/src/repository/security-rule.repository.ts +2 -2
  127. package/src/repository/solid-base.repository.ts +66 -0
  128. package/src/seeders/seed-data/email-templates/password-changed.handlebars.html +158 -0
  129. package/src/seeders/seed-data/solid-core-metadata.json +9 -0
  130. package/src/services/ai-interaction.service.ts +5 -5
  131. package/src/services/authentication.service.ts +181 -56
  132. package/src/services/chatter-message-details.service.ts +3 -2
  133. package/src/services/chatter-message.service.ts +3 -2
  134. package/src/services/crud.service.ts +7 -2
  135. package/src/services/model-metadata.service.ts +15 -1
  136. package/src/services/request-context.service.ts +9 -0
  137. package/src/solid-core.module.ts +29 -5
@@ -1 +1 @@
1
- {"version":3,"file":"media.controller.js","sourceRoot":"","sources":["../../src/controllers/media.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAA+H;AAC/H,+DAA+D;AAC/D,6CAAmE;AACnE,qEAAyD;AACzD,6DAA0D;AAC1D,+DAA2D;AAC3D,+DAA2D;AAE3D,IAAK,eAGJ;AAHD,WAAK,eAAe;IAClB,0CAAuB,CAAA;IACvB,0CAAuB,CAAA;AACzB,CAAC,EAHI,eAAe,KAAf,eAAe,QAGnB;AAIM,IAAM,eAAe,GAArB,MAAM,eAAe;IAC1B,YAA6B,OAAqB;QAArB,YAAO,GAAP,OAAO,CAAc;IAAG,CAAC;IAKtD,MAAM,CAAS,SAAyB,EAAmB,KAAiC;QAC1F,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IAC/C,CAAC;IAKD,UAAU,CAAS,UAA4B,EAAmB,aAAsC,EAAE;QACxG,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;IACzD,CAAC;IAMD,MAAM,CAAc,EAAU,EAAU,SAAyB,EAAmB,KAAiC;QACnH,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;IACnD,CAAC;IAKD,aAAa,CAAc,EAAU,EAAU,SAAyB,EAAmB,KAAiC;QAC1H,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;IACzD,CAAC;IAMD,MAAM,CAAkB,KAAiC,EAAU,SAAyB;QAExF,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IACjD,CAAC;IAKK,AAAN,KAAK,CAAC,WAAW,CAAS,GAAa;QACrC,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IACvC,CAAC;IAIK,AAAN,KAAK,CAAC,OAAO,CAAc,EAAU;QACnC,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAClC,CAAC;IAaK,AAAN,KAAK,CAAC,QAAQ,CAAU,KAAU;QAChC,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClC,CAAC;IAIK,AAAN,KAAK,CAAC,OAAO,CAAc,EAAU,EAAW,KAAU;QACxD,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;IAC1C,CAAC;IAIK,AAAN,KAAK,CAAC,UAAU,CAAS,GAAa;QACpC,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IACtC,CAAC;IAIK,AAAN,KAAK,CAAC,MAAM,CAAc,EAAU;QAClC,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACjC,CAAC;CAGF,CAAA;AAxFY,0CAAe;AAM1B;IAHC,IAAA,uBAAa,EAAC,KAAK,CAAC;IACpB,IAAA,aAAI,GAAE;IACN,IAAA,wBAAe,EAAC,IAAA,sCAAmB,GAAE,CAAC;;IAC/B,WAAA,IAAA,aAAI,GAAE,CAAA;IAA6B,WAAA,IAAA,sBAAa,GAAE,CAAA;;qCAAhC,iCAAc,EAA0B,KAAK;;6CAEtE;AAKD;IAHC,IAAA,uBAAa,EAAC,KAAK,CAAC;IACpB,IAAA,aAAI,EAAC,OAAO,CAAC;IACb,IAAA,wBAAe,EAAC,IAAA,sCAAmB,GAAE,CAAC;;IAC3B,WAAA,IAAA,aAAI,GAAE,CAAA;IAAgC,WAAA,IAAA,sBAAa,GAAE,CAAA;;;;iDAEhE;AAMD;IAHC,IAAA,uBAAa,EAAC,KAAK,CAAC;IACpB,IAAA,YAAG,EAAC,KAAK,CAAC;IACV,IAAA,wBAAe,EAAC,IAAA,sCAAmB,GAAE,CAAC;;IAC/B,WAAA,IAAA,cAAK,EAAC,IAAI,CAAC,CAAA;IAAc,WAAA,IAAA,aAAI,GAAE,CAAA;IAA6B,WAAA,IAAA,sBAAa,GAAE,CAAA;;6CAAhC,iCAAc,EAA0B,KAAK;;6CAE/F;AAKD;IAHC,IAAA,uBAAa,EAAC,KAAK,CAAC;IACpB,IAAA,cAAK,EAAC,KAAK,CAAC;IACZ,IAAA,wBAAe,EAAC,IAAA,sCAAmB,GAAE,CAAC;;IACxB,WAAA,IAAA,cAAK,EAAC,IAAI,CAAC,CAAA;IAAc,WAAA,IAAA,aAAI,GAAE,CAAA;IAA6B,WAAA,IAAA,sBAAa,GAAE,CAAA;;6CAAhC,iCAAc,EAA0B,KAAK;;oDAEtG;AAMD;IAJC,IAAA,yBAAM,GAAE;IACR,IAAA,uBAAa,EAAC,KAAK,CAAC;IACpB,IAAA,aAAI,EAAC,SAAS,CAAC;IACf,IAAA,wBAAe,EAAC,IAAA,sCAAmB,GAAE,CAAC;;IAC/B,WAAA,IAAA,sBAAa,GAAE,CAAA;IAAqC,WAAA,IAAA,aAAI,GAAE,CAAA;;qCAAnC,KAAK,EAA0C,iCAAc;;6CAG3F;AAKK;IAFL,IAAA,uBAAa,EAAC,KAAK,CAAC;IACpB,IAAA,aAAI,EAAC,eAAe,CAAC;;IACH,WAAA,IAAA,aAAI,GAAE,CAAA;;;;kDAExB;AAIK;IAFL,IAAA,uBAAa,EAAC,KAAK,CAAC;IACpB,IAAA,YAAG,EAAC,cAAc,CAAC;;IACL,WAAA,IAAA,cAAK,EAAC,IAAI,CAAC,CAAA;;;;8CAEzB;AAaK;IAXL,IAAA,uBAAa,EAAC,KAAK,CAAC;IACpB,IAAA,kBAAQ,EAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC;IAC7E,IAAA,kBAAQ,EAAC,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAC1D,IAAA,kBAAQ,EAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAC3D,IAAA,kBAAQ,EAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;IAC1D,IAAA,kBAAQ,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;IACxD,IAAA,kBAAQ,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;IAC3D,IAAA,kBAAQ,EAAC,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;IAC5D,IAAA,kBAAQ,EAAC,EAAE,IAAI,EAAE,eAAe,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;IACjE,IAAA,kBAAQ,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;IAC3D,IAAA,YAAG,GAAE;;IACU,WAAA,IAAA,cAAK,GAAE,CAAA;;;;+CAEtB;AAIK;IAFL,IAAA,uBAAa,EAAC,KAAK,CAAC;IACpB,IAAA,YAAG,EAAC,KAAK,CAAC;;IACI,WAAA,IAAA,cAAK,EAAC,IAAI,CAAC,CAAA;IAAc,WAAA,IAAA,cAAK,GAAE,CAAA;;;;8CAE9C;AAIK;IAFL,IAAA,uBAAa,EAAC,KAAK,CAAC;IACpB,IAAA,eAAM,EAAC,OAAO,CAAC;;IACE,WAAA,IAAA,aAAI,GAAE,CAAA;;;;iDAEvB;AAIK;IAFL,IAAA,uBAAa,EAAC,KAAK,CAAC;IACpB,IAAA,eAAM,EAAC,KAAK,CAAC;;IACA,WAAA,IAAA,cAAK,EAAC,IAAI,CAAC,CAAA;;;;6CAExB;0BArFU,eAAe;IAF3B,IAAA,iBAAO,EAAC,YAAY,CAAC;IACrB,IAAA,mBAAU,EAAC,OAAO,CAAC;qCAEoB,4BAAY;GADvC,eAAe,CAwF3B","sourcesContent":["import { Controller, Post, Body, Param, UploadedFiles, UseInterceptors, Put, Get, Query, Delete, Patch } from '@nestjs/common';\nimport { AnyFilesInterceptor } from \"@nestjs/platform-express\";\nimport { ApiBearerAuth, ApiQuery, ApiTags } from '@nestjs/swagger';\nimport { Public } from 'src/decorators/public.decorator';\nimport { MediaService } from 'src/services/media.service';\nimport { CreateMediaDto } from 'src/dtos/create-media.dto';\nimport { UpdateMediaDto } from 'src/dtos/update-media.dto';\n\nenum ShowSoftDeleted {\n INCLUSIVE = \"inclusive\",\n EXCLUSIVE = \"exclusive\",\n}\n\n@ApiTags('Solid Core')\n@Controller('media')\nexport class MediaController {\n constructor(private readonly service: MediaService) {}\n\n @ApiBearerAuth(\"jwt\")\n @Post()\n @UseInterceptors(AnyFilesInterceptor())\n create(@Body() createDto: CreateMediaDto, @UploadedFiles() files: Array<Express.Multer.File>) {\n return this.service.create(createDto, files);\n }\n\n @ApiBearerAuth(\"jwt\")\n @Post('/bulk')\n @UseInterceptors(AnyFilesInterceptor())\n insertMany(@Body() createDtos: CreateMediaDto[], @UploadedFiles() filesArray: Express.Multer.File[][] = []) {\n return this.service.insertMany(createDtos, filesArray);\n }\n\n\n @ApiBearerAuth(\"jwt\")\n @Put(':id')\n @UseInterceptors(AnyFilesInterceptor())\n update(@Param('id') id: number, @Body() updateDto: UpdateMediaDto, @UploadedFiles() files: Array<Express.Multer.File>) {\n return this.service.update(id, updateDto, files);\n }\n\n @ApiBearerAuth(\"jwt\")\n @Patch(':id')\n @UseInterceptors(AnyFilesInterceptor())\n partialUpdate(@Param('id') id: number, @Body() updateDto: UpdateMediaDto, @UploadedFiles() files: Array<Express.Multer.File>) {\n return this.service.update(id, updateDto, files, true);\n }\n\n @Public()\n @ApiBearerAuth(\"jwt\")\n @Post('/upload')\n @UseInterceptors(AnyFilesInterceptor())\n upload(@UploadedFiles() files: Array<Express.Multer.File>, @Body() createDto: CreateMediaDto, ) {\n // this.logger.log(`Creating a new model: ${JSON.stringify(createDto)}`);\n return this.service.upload(createDto, files);\n }\n\n\n @ApiBearerAuth(\"jwt\")\n @Post('/bulk-recover')\n async recoverMany(@Body() ids: number[]) {\n return this.service.recoverMany(ids);\n }\n\n @ApiBearerAuth(\"jwt\")\n @Get('/recover/:id')\n async recover(@Param('id') id: number) {\n return this.service.recover(id);\n }\n \n @ApiBearerAuth(\"jwt\")\n @ApiQuery({ name: 'showSoftDeleted', required: false, enum: ShowSoftDeleted })\n @ApiQuery({ name: 'limit', required: false, type: Number })\n @ApiQuery({ name: 'offset', required: false, type: Number })\n @ApiQuery({ name: 'fields', required: false, type: Array })\n @ApiQuery({ name: 'sort', required: false, type: Array }) \n @ApiQuery({ name: 'groupBy', required: false, type: Array })\n @ApiQuery({ name: 'populate', required: false, type: Array })\n @ApiQuery({ name: 'populateMedia', required: false, type: Array })\n @ApiQuery({ name: 'filters', required: false, type: Array })\n @Get()\n async findMany(@Query() query: any) { \n return this.service.find(query); \n }\n\n @ApiBearerAuth(\"jwt\")\n @Get(':id')\n async findOne(@Param('id') id: string, @Query() query: any) {\n return this.service.findOne(+id, query);\n }\n\n @ApiBearerAuth(\"jwt\")\n @Delete('/bulk')\n async deleteMany(@Body() ids: number[]) {\n return this.service.deleteMany(ids);\n }\n\n @ApiBearerAuth(\"jwt\")\n @Delete(':id')\n async delete(@Param('id') id: number) {\n return this.service.delete(id);\n }\n\n\n}\n"]}
1
+ {"version":3,"file":"media.controller.js","sourceRoot":"","sources":["../../src/controllers/media.controller.ts"],"names":[],"mappings":"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","sourcesContent":["import { Controller, Post, Body, Param, UploadedFiles, UseInterceptors, Put, Get, Query, Delete, Patch, UseGuards } from '@nestjs/common';\nimport { AnyFilesInterceptor } from \"@nestjs/platform-express\";\nimport { ApiBearerAuth, ApiQuery, ApiTags } from '@nestjs/swagger';\nimport { Public } from 'src/decorators/public.decorator';\nimport { MediaService } from 'src/services/media.service';\nimport { CreateMediaDto } from 'src/dtos/create-media.dto';\nimport { UpdateMediaDto } from 'src/dtos/update-media.dto';\nimport { ThrottlerGuard, SkipThrottle } from '@nestjs/throttler';\n\nenum ShowSoftDeleted {\n INCLUSIVE = \"inclusive\",\n EXCLUSIVE = \"exclusive\",\n}\n\n@ApiTags('Solid Core')\n@Controller('media')\n@UseGuards(ThrottlerGuard)\n@SkipThrottle({ short: true, login: true, burst: true, sustained: true }) //Skip all\nexport class MediaController {\n constructor(private readonly service: MediaService) {}\n\n @ApiBearerAuth(\"jwt\")\n @Post()\n @UseInterceptors(AnyFilesInterceptor())\n create(@Body() createDto: CreateMediaDto, @UploadedFiles() files: Array<Express.Multer.File>) {\n return this.service.create(createDto, files);\n }\n\n @ApiBearerAuth(\"jwt\")\n @Post('/bulk')\n @UseInterceptors(AnyFilesInterceptor())\n insertMany(@Body() createDtos: CreateMediaDto[], @UploadedFiles() filesArray: Express.Multer.File[][] = []) {\n return this.service.insertMany(createDtos, filesArray);\n }\n\n\n @ApiBearerAuth(\"jwt\")\n @Put(':id')\n @UseInterceptors(AnyFilesInterceptor())\n update(@Param('id') id: number, @Body() updateDto: UpdateMediaDto, @UploadedFiles() files: Array<Express.Multer.File>) {\n return this.service.update(id, updateDto, files);\n }\n\n @ApiBearerAuth(\"jwt\")\n @Patch(':id')\n @UseInterceptors(AnyFilesInterceptor())\n partialUpdate(@Param('id') id: number, @Body() updateDto: UpdateMediaDto, @UploadedFiles() files: Array<Express.Multer.File>) {\n return this.service.update(id, updateDto, files, true);\n }\n\n @Public()\n @SkipThrottle({ short: false, login: true, burst: true, sustained: true }) //Enable the short throttle only\n @ApiBearerAuth(\"jwt\")\n @Post('/upload')\n @UseInterceptors(AnyFilesInterceptor())\n upload(@UploadedFiles() files: Array<Express.Multer.File>, @Body() createDto: CreateMediaDto, ) {\n // this.logger.log(`Creating a new model: ${JSON.stringify(createDto)}`);\n return this.service.upload(createDto, files);\n }\n\n\n @ApiBearerAuth(\"jwt\")\n @Post('/bulk-recover')\n async recoverMany(@Body() ids: number[]) {\n return this.service.recoverMany(ids);\n }\n\n @ApiBearerAuth(\"jwt\")\n @Get('/recover/:id')\n async recover(@Param('id') id: number) {\n return this.service.recover(id);\n }\n \n @ApiBearerAuth(\"jwt\")\n @ApiQuery({ name: 'showSoftDeleted', required: false, enum: ShowSoftDeleted })\n @ApiQuery({ name: 'limit', required: false, type: Number })\n @ApiQuery({ name: 'offset', required: false, type: Number })\n @ApiQuery({ name: 'fields', required: false, type: Array })\n @ApiQuery({ name: 'sort', required: false, type: Array }) \n @ApiQuery({ name: 'groupBy', required: false, type: Array })\n @ApiQuery({ name: 'populate', required: false, type: Array })\n @ApiQuery({ name: 'populateMedia', required: false, type: Array })\n @ApiQuery({ name: 'filters', required: false, type: Array })\n @Get()\n async findMany(@Query() query: any) { \n return this.service.find(query); \n }\n\n @ApiBearerAuth(\"jwt\")\n @Get(':id')\n async findOne(@Param('id') id: string, @Query() query: any) {\n return this.service.findOne(+id, query);\n }\n\n @ApiBearerAuth(\"jwt\")\n @Delete('/bulk')\n async deleteMany(@Body() ids: number[]) {\n return this.service.deleteMany(ids);\n }\n\n @ApiBearerAuth(\"jwt\")\n @Delete(':id')\n async delete(@Param('id') id: number) {\n return this.service.delete(id);\n }\n\n\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"model-metadata.controller.d.ts","sourceRoot":"","sources":["../../src/controllers/model-metadata.controller.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAC3E,OAAO,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAC3E,OAAO,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAC;AAE1E,qBAEa,uBAAuB;IAI5B,OAAO,CAAC,QAAQ,CAAC,oBAAoB;IAHzC,OAAO,CAAC,MAAM,CAAyC;gBAGlC,oBAAoB,EAAE,oBAAoB;IAazD,QAAQ,CACD,cAAc,EAAE,cAAc;;;;;;;;;;;IAOrC,cAAc;;;;;;;;;;;IAgBpB,OAAO,CAA4B,EAAE,EAAE,MAAM,EAAW,KAAK,EAAE,GAAG;IAMlE,MAAM,CAAS,SAAS,EAAE,sBAAsB;IAOhD,aAAa,CAAS,IAAI,EAAE,GAAG;;;;IAM/B,YAAY,CAA4B,EAAE,EAAE,MAAM;IAMlD,MAAM,CAAc,EAAE,EAAE,MAAM,EAAU,sBAAsB,EAAE,sBAAsB;IAMhF,UAAU,CAAS,GAAG,EAAE,MAAM,EAAE;IAMhC,MAAM,CAAc,EAAE,EAAE,MAAM;CAIvC"}
1
+ {"version":3,"file":"model-metadata.controller.d.ts","sourceRoot":"","sources":["../../src/controllers/model-metadata.controller.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAC3E,OAAO,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAC3E,OAAO,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAC;AAG1E,qBAIa,uBAAuB;IAI5B,OAAO,CAAC,QAAQ,CAAC,oBAAoB;IAHzC,OAAO,CAAC,MAAM,CAAyC;gBAGlC,oBAAoB,EAAE,oBAAoB;IAazD,QAAQ,CACD,cAAc,EAAE,cAAc;;;;;;;;;;;IAQrC,cAAc;;;;;;;;;;;IAgBpB,OAAO,CAA4B,EAAE,EAAE,MAAM,EAAW,KAAK,EAAE,GAAG;IAMlE,MAAM,CAAS,SAAS,EAAE,sBAAsB;IAQhD,aAAa,CAAS,IAAI,EAAE,GAAG;;;;IAM/B,YAAY,CAA4B,EAAE,EAAE,MAAM;IAMlD,MAAM,CAAc,EAAE,EAAE,MAAM,EAAU,sBAAsB,EAAE,sBAAsB;IAMhF,UAAU,CAAS,GAAG,EAAE,MAAM,EAAE;IAMhC,MAAM,CAAc,EAAE,EAAE,MAAM;CAIvC"}
@@ -21,6 +21,7 @@ const basic_filters_dto_1 = require("../dtos/basic-filters.dto");
21
21
  const create_model_metadata_dto_1 = require("../dtos/create-model-metadata.dto");
22
22
  const update_model_metadata_dto_1 = require("../dtos/update-model-metadata.dto");
23
23
  const model_metadata_service_1 = require("../services/model-metadata.service");
24
+ const throttler_1 = require("@nestjs/throttler");
24
25
  let ModelMetadataController = class ModelMetadataController {
25
26
  constructor(modelMetadataService) {
26
27
  this.modelMetadataService = modelMetadataService;
@@ -84,6 +85,7 @@ __decorate([
84
85
  ], ModelMetadataController.prototype, "findMany", null);
85
86
  __decorate([
86
87
  (0, public_decorator_1.Public)(),
88
+ (0, throttler_1.SkipThrottle)({ burst: false, short: true, login: true, sustained: true }),
87
89
  (0, common_1.Get)('public'),
88
90
  openapi.ApiResponse({ status: 200 }),
89
91
  __metadata("design:type", Function),
@@ -111,6 +113,7 @@ __decorate([
111
113
  ], ModelMetadataController.prototype, "create", null);
112
114
  __decorate([
113
115
  (0, public_decorator_1.Public)(),
116
+ (0, throttler_1.SkipThrottle)({ short: false, burst: true, login: true, sustained: true }),
114
117
  (0, common_1.Post)('/update-user-key'),
115
118
  openapi.ApiResponse({ status: 201 }),
116
119
  __param(0, (0, common_1.Body)()),
@@ -158,6 +161,8 @@ __decorate([
158
161
  exports.ModelMetadataController = ModelMetadataController = __decorate([
159
162
  (0, common_1.Controller)('model-metadata'),
160
163
  (0, swagger_1.ApiTags)("App Builder"),
164
+ (0, common_1.UseGuards)(throttler_1.ThrottlerGuard),
165
+ (0, throttler_1.SkipThrottle)({ short: true, login: true, burst: true, sustained: true }),
161
166
  __metadata("design:paramtypes", [model_metadata_service_1.ModelMetadataService])
162
167
  ], ModelMetadataController);
163
168
  //# sourceMappingURL=model-metadata.controller.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"model-metadata.controller.js","sourceRoot":"","sources":["../../src/controllers/model-metadata.controller.ts"],"names":[],"mappings":"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","sourcesContent":["import { Body, Controller, Delete, Get, Logger, Param, ParseIntPipe, Post, Put, Query } from '@nestjs/common';\nimport { ApiBearerAuth, ApiQuery, ApiTags } from '@nestjs/swagger';\nimport { Public } from 'src/decorators/public.decorator';\nimport { BasicFilterDto } from '../dtos/basic-filters.dto';\nimport { CreateModelMetadataDto } from '../dtos/create-model-metadata.dto';\nimport { UpdateModelMetaDataDto } from '../dtos/update-model-metadata.dto';\nimport { ModelMetadataService } from '../services/model-metadata.service';\n\n@Controller('model-metadata')\n@ApiTags(\"App Builder\")\nexport class ModelMetadataController {\n private logger = new Logger('ModelMetadataController');\n\n constructor(\n private readonly modelMetadataService: ModelMetadataService\n ) { }\n\n @ApiBearerAuth(\"jwt\")\n @ApiQuery({ name: 'limit', required: false, type: Number })\n @ApiQuery({ name: 'offset', required: false, type: Number })\n @ApiQuery({ name: 'fields', required: false, type: Array })\n @ApiQuery({ name: 'sort', required: false, type: Array })\n @ApiQuery({ name: 'groupBy', required: false, type: Array })\n @ApiQuery({ name: 'populate', required: false, type: Array })\n @ApiQuery({ name: 'populateMedia', required: false, type: Array })\n @ApiQuery({ name: 'filters', required: false, type: Array })\n @Get()\n async findMany(\n @Query() basicFilterDto: BasicFilterDto\n ) {\n return this.modelMetadataService.findMany(basicFilterDto);\n }\n\n @Public()\n @Get('public')\n async findManyPublic() {\n const basicFilterDto: BasicFilterDto = {\n fields: ['singularName'],\n limit: 10000,\n offset: 0,\n filters: [],\n groupBy: [],\n populate: [],\n populateMedia: [],\n sort: []\n }\n return this.modelMetadataService.findMany(basicFilterDto);\n }\n\n @ApiBearerAuth(\"jwt\")\n @Get(':id')\n findOne(@Param('id', ParseIntPipe) id: number, @Query() query: any) {\n return this.modelMetadataService.findOne(id, query);\n }\n\n @ApiBearerAuth(\"jwt\")\n @Post()\n create(@Body() createDto: CreateModelMetadataDto) {\n // this.logger.log(`Creating a new model: ${JSON.stringify(createDto)}`);\n return this.modelMetadataService.create(createDto);\n }\n\n @Public()\n @Post('/update-user-key')\n updateUserKey(@Body() data: any) {\n return this.modelMetadataService.updateUserKey(data);\n }\n\n @ApiBearerAuth(\"jwt\")\n @Post(':id/generate-code')\n generateCode(@Param('id', ParseIntPipe) id: number) {\n return this.modelMetadataService.handleGenerateCode({ modelId: id });\n }\n\n @ApiBearerAuth(\"jwt\")\n @Put(':id')\n update(@Param('id') id: number, @Body() updateModelMetaDataDto: UpdateModelMetaDataDto) {\n return this.modelMetadataService.update(id, updateModelMetaDataDto);\n }\n\n @ApiBearerAuth(\"jwt\")\n @Delete('/bulk')\n async deleteMany(@Body() ids: number[]) {\n return this.modelMetadataService.deleteMany(ids);\n }\n\n @ApiBearerAuth(\"jwt\")\n @Delete(':id')\n async delete(@Param('id') id: number) {\n return this.modelMetadataService.remove(id);\n }\n\n}\n"]}
1
+ {"version":3,"file":"model-metadata.controller.js","sourceRoot":"","sources":["../../src/controllers/model-metadata.controller.ts"],"names":[],"mappings":"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","sourcesContent":["import { Body, Controller, Delete, Get, Logger, Param, ParseIntPipe, Post, Put, Query, UseGuards } from '@nestjs/common';\nimport { ApiBearerAuth, ApiQuery, ApiTags } from '@nestjs/swagger';\nimport { Public } from 'src/decorators/public.decorator';\nimport { BasicFilterDto } from '../dtos/basic-filters.dto';\nimport { CreateModelMetadataDto } from '../dtos/create-model-metadata.dto';\nimport { UpdateModelMetaDataDto } from '../dtos/update-model-metadata.dto';\nimport { ModelMetadataService } from '../services/model-metadata.service';\nimport { ThrottlerGuard, SkipThrottle } from '@nestjs/throttler';\n\n@Controller('model-metadata')\n@ApiTags(\"App Builder\")\n@UseGuards(ThrottlerGuard)\n@SkipThrottle({ short: true, login: true, burst: true, sustained: true }) //Skip all\nexport class ModelMetadataController {\n private logger = new Logger('ModelMetadataController');\n\n constructor(\n private readonly modelMetadataService: ModelMetadataService\n ) { }\n\n @ApiBearerAuth(\"jwt\")\n @ApiQuery({ name: 'limit', required: false, type: Number })\n @ApiQuery({ name: 'offset', required: false, type: Number })\n @ApiQuery({ name: 'fields', required: false, type: Array })\n @ApiQuery({ name: 'sort', required: false, type: Array })\n @ApiQuery({ name: 'groupBy', required: false, type: Array })\n @ApiQuery({ name: 'populate', required: false, type: Array })\n @ApiQuery({ name: 'populateMedia', required: false, type: Array })\n @ApiQuery({ name: 'filters', required: false, type: Array })\n @Get()\n async findMany(\n @Query() basicFilterDto: BasicFilterDto\n ) {\n return this.modelMetadataService.findMany(basicFilterDto);\n }\n\n @Public()\n @SkipThrottle({ burst: false, short: true, login: true, sustained: true }) //Enable burst only\n @Get('public')\n async findManyPublic() {\n const basicFilterDto: BasicFilterDto = {\n fields: ['singularName'],\n limit: 10000,\n offset: 0,\n filters: [],\n groupBy: [],\n populate: [], \n populateMedia: [],\n sort: []\n }\n return this.modelMetadataService.findMany(basicFilterDto);\n }\n\n @ApiBearerAuth(\"jwt\")\n @Get(':id')\n findOne(@Param('id', ParseIntPipe) id: number, @Query() query: any) {\n return this.modelMetadataService.findOne(id, query);\n }\n\n @ApiBearerAuth(\"jwt\")\n @Post()\n create(@Body() createDto: CreateModelMetadataDto) {\n // this.logger.log(`Creating a new model: ${JSON.stringify(createDto)}`);\n return this.modelMetadataService.create(createDto);\n }\n\n @Public()\n @SkipThrottle({ short: false, burst: true, login: true, sustained: true }) //Enable short only\n @Post('/update-user-key')\n updateUserKey(@Body() data: any) {\n return this.modelMetadataService.updateUserKey(data);\n }\n\n @ApiBearerAuth(\"jwt\")\n @Post(':id/generate-code')\n generateCode(@Param('id', ParseIntPipe) id: number) {\n return this.modelMetadataService.handleGenerateCode({ modelId: id });\n }\n\n @ApiBearerAuth(\"jwt\")\n @Put(':id')\n update(@Param('id') id: number, @Body() updateModelMetaDataDto: UpdateModelMetaDataDto) {\n return this.modelMetadataService.update(id, updateModelMetaDataDto);\n }\n\n @ApiBearerAuth(\"jwt\")\n @Delete('/bulk')\n async deleteMany(@Body() ids: number[]) {\n return this.modelMetadataService.deleteMany(ids);\n }\n\n @ApiBearerAuth(\"jwt\")\n @Delete(':id')\n async delete(@Param('id') id: number) {\n return this.modelMetadataService.remove(id);\n }\n\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"otp-authentication.controller.d.ts","sourceRoot":"","sources":["../../src/controllers/otp-authentication.controller.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAGnC,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAEvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAG3E,qBAGa,2BAA2B;IACxB,OAAO,CAAC,QAAQ,CAAC,WAAW;gBAAX,WAAW,EAAE,qBAAqB;IAI/D,oBAAoB,CAAS,SAAS,EAAE,YAAY;;;IAO9C,mBAAmB,CACO,QAAQ,EAAE,QAAQ,EACtC,SAAS,EAAE,gBAAgB;;;;IASvC,aAAa,CAAS,SAAS,EAAE,YAAY;;;IAOvC,YAAY,CACc,QAAQ,EAAE,QAAQ,EACtC,SAAS,EAAE,gBAAgB;;;;;;;;;;;;CAgB1C"}
1
+ {"version":3,"file":"otp-authentication.controller.d.ts","sourceRoot":"","sources":["../../src/controllers/otp-authentication.controller.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAGnC,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAEvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAI3E,qBAKa,2BAA2B;IACxB,OAAO,CAAC,QAAQ,CAAC,WAAW;gBAAX,WAAW,EAAE,qBAAqB;IAI/D,oBAAoB,CAAS,SAAS,EAAE,YAAY;;;IAO9C,mBAAmB,CACO,QAAQ,EAAE,QAAQ,EACtC,SAAS,EAAE,gBAAgB;;;;IASvC,aAAa,CAAS,SAAS,EAAE,YAAY;;;IAOvC,YAAY,CACc,QAAQ,EAAE,QAAQ,EACtC,SAAS,EAAE,gBAAgB;;;;;;;;;;;;CAgB1C"}
@@ -23,6 +23,7 @@ const otp_sign_in_dto_1 = require("../dtos/otp-sign-in.dto");
23
23
  const otp_sign_up_dto_1 = require("../dtos/otp-sign-up.dto");
24
24
  const auth_type_enum_1 = require("../enums/auth-type.enum");
25
25
  const authentication_service_1 = require("../services/authentication.service");
26
+ const throttler_1 = require("@nestjs/throttler");
26
27
  let OTPAuthenticationController = class OTPAuthenticationController {
27
28
  constructor(authService) {
28
29
  this.authService = authService;
@@ -85,6 +86,8 @@ exports.OTPAuthenticationController = OTPAuthenticationController = __decorate([
85
86
  (0, auth_decorator_1.Auth)(auth_type_enum_1.AuthType.None),
86
87
  (0, common_1.Controller)('iam/otp'),
87
88
  (0, swagger_1.ApiTags)("Iam"),
89
+ (0, common_1.UseGuards)(throttler_1.ThrottlerGuard),
90
+ (0, throttler_1.SkipThrottle)({ login: false, short: true, burst: true, sustained: true }),
88
91
  __metadata("design:paramtypes", [authentication_service_1.AuthenticationService])
89
92
  ], OTPAuthenticationController);
90
93
  //# sourceMappingURL=otp-authentication.controller.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"otp-authentication.controller.js","sourceRoot":"","sources":["../../src/controllers/otp-authentication.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAAmF;AACnF,6CAA0C;AAE1C,iEAAoD;AACpD,qEAAwD;AACxD,qEAA+D;AAC/D,6DAAuD;AACvD,6DAAuD;AACvD,4DAAmD;AACnD,+EAA2E;AAMpE,IAAM,2BAA2B,GAAjC,MAAM,2BAA2B;IACpC,YAA6B,WAAkC;QAAlC,gBAAW,GAAX,WAAW,CAAuB;IAAI,CAAC;IAIpE,oBAAoB,CAAS,SAAuB;QAChD,OAAO,IAAI,CAAC,WAAW,CAAC,uBAAuB,CAAC,SAAS,CAAC,CAAC;IAC/D,CAAC;IAKK,AAAN,KAAK,CAAC,mBAAmB,CACO,QAAkB,EACtC,SAA2B;QAInC,OAAO,IAAI,CAAC,WAAW,CAAC,sBAAsB,CAAC,SAAS,CAAC,CAAC;IAC9D,CAAC;IAID,aAAa,CAAS,SAAuB;QACzC,OAAO,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;IACxD,CAAC;IAKK,AAAN,KAAK,CAAC,YAAY,CACc,QAAkB,EACtC,SAA2B;QAInC,OAAO,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;IASvD,CAAC;CAGJ,CAAA;AAhDY,kEAA2B;AAKpC;IAFC,IAAA,yBAAM,GAAE;IACR,IAAA,aAAI,EAAC,mBAAmB,CAAC;;IACJ,WAAA,IAAA,aAAI,GAAE,CAAA;;qCAAY,8BAAY;;uEAEnD;AAKK;IAHL,IAAA,yBAAM,GAAE;IACR,IAAA,iBAAQ,EAAC,mBAAU,CAAC,EAAE,CAAC;IACvB,IAAA,aAAI,EAAC,kBAAkB,CAAC;kCADf,mBAAU,CAAC,EAAE;IAGlB,WAAA,IAAA,YAAG,EAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAA;IAC1B,WAAA,IAAA,aAAI,GAAE,CAAA;;6CAAY,sCAAgB;;sEAKtC;AAID;IAFC,IAAA,yBAAM,GAAE;IACR,IAAA,aAAI,EAAC,gBAAgB,CAAC;;IACR,WAAA,IAAA,aAAI,GAAE,CAAA;;qCAAY,8BAAY;;gEAE5C;AAKK;IAHL,IAAA,yBAAM,GAAE;IACR,IAAA,iBAAQ,EAAC,mBAAU,CAAC,EAAE,CAAC;IACvB,IAAA,aAAI,EAAC,eAAe,CAAC;kCADZ,mBAAU,CAAC,EAAE;IAGlB,WAAA,IAAA,YAAG,EAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAA;IAC1B,WAAA,IAAA,aAAI,GAAE,CAAA;;6CAAY,sCAAgB;;+DAatC;sCA7CQ,2BAA2B;IAHvC,IAAA,qBAAI,EAAC,yBAAQ,CAAC,IAAI,CAAC;IACnB,IAAA,mBAAU,EAAC,SAAS,CAAC;IACrB,IAAA,iBAAO,EAAC,KAAK,CAAC;qCAE+B,8CAAqB;GADtD,2BAA2B,CAgDvC","sourcesContent":["import { Body, Controller, HttpCode, HttpStatus, Post, Res } from '@nestjs/common';\nimport { ApiTags } from '@nestjs/swagger';\nimport { Response } from 'express';\nimport { Auth } from '../decorators/auth.decorator';\nimport { Public } from '../decorators/public.decorator';\nimport { OTPConfirmOTPDto } from '../dtos/otp-confirm-otp.dto';\nimport { OTPSignInDto } from '../dtos/otp-sign-in.dto';\nimport { OTPSignUpDto } from '../dtos/otp-sign-up.dto';\nimport { AuthType } from '../enums/auth-type.enum';\nimport { AuthenticationService } from '../services/authentication.service';\n\n\n@Auth(AuthType.None)\n@Controller('iam/otp')\n@ApiTags(\"Iam\")\nexport class OTPAuthenticationController {\n constructor(private readonly authService: AuthenticationService) { }\n\n @Public()\n @Post('register/initiate')\n initiateRegistration(@Body() signUpDto: OTPSignUpDto) {\n return this.authService.otpInitiateRegistration(signUpDto); //TODO finalize if 200 or 201 to be returned\n }\n\n @Public()\n @HttpCode(HttpStatus.OK) // by default @Post does 201, we wanted 200 - hence using @HttpCode(HttpStatus.OK)\n @Post('register/confirm')\n async confirmRegistration(\n @Res({ passthrough: true }) response: Response,\n @Body() signInDto: OTPConfirmOTPDto\n ) {\n // This means that we are passing the token back in plain text. \n // This is less secure. \n return this.authService.otpConfirmRegistration(signInDto);\n }\n\n @Public()\n @Post('login/initiate')\n initiateLogin(@Body() signInDto: OTPSignInDto) {\n return this.authService.otpInitiateLogin(signInDto);\n }\n\n @Public()\n @HttpCode(HttpStatus.OK) // by default @Post does 201, we wanted 200 - hence using @HttpCode(HttpStatus.OK)\n @Post('login/confirm')\n async confirmLogin(\n @Res({ passthrough: true }) response: Response,\n @Body() signInDto: OTPConfirmOTPDto\n ) {\n // This means that we are passing the token back in plain text. \n // This is less secure. \n return this.authService.otpConfirmLogin(signInDto);\n\n // This means we are setting the token as a http only cookie.\n // const accessToken = await this.authService.signIn(signInDto);\n // response.cookie('accessToken', accessToken, {\n // secure: true,\n // httpOnly: true,\n // sameSite: true,\n // });\n }\n\n\n}\n"]}
1
+ {"version":3,"file":"otp-authentication.controller.js","sourceRoot":"","sources":["../../src/controllers/otp-authentication.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAA8F;AAC9F,6CAA0C;AAE1C,iEAAoD;AACpD,qEAAwD;AACxD,qEAA+D;AAC/D,6DAAuD;AACvD,6DAAuD;AACvD,4DAAmD;AACnD,+EAA2E;AAC3E,iDAAiE;AAQ1D,IAAM,2BAA2B,GAAjC,MAAM,2BAA2B;IACpC,YAA6B,WAAkC;QAAlC,gBAAW,GAAX,WAAW,CAAuB;IAAI,CAAC;IAIpE,oBAAoB,CAAS,SAAuB;QAChD,OAAO,IAAI,CAAC,WAAW,CAAC,uBAAuB,CAAC,SAAS,CAAC,CAAC;IAC/D,CAAC;IAKK,AAAN,KAAK,CAAC,mBAAmB,CACO,QAAkB,EACtC,SAA2B;QAInC,OAAO,IAAI,CAAC,WAAW,CAAC,sBAAsB,CAAC,SAAS,CAAC,CAAC;IAC9D,CAAC;IAID,aAAa,CAAS,SAAuB;QACzC,OAAO,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;IACxD,CAAC;IAKK,AAAN,KAAK,CAAC,YAAY,CACc,QAAkB,EACtC,SAA2B;QAInC,OAAO,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;IASvD,CAAC;CAGJ,CAAA;AAhDY,kEAA2B;AAKpC;IAFC,IAAA,yBAAM,GAAE;IACR,IAAA,aAAI,EAAC,mBAAmB,CAAC;;IACJ,WAAA,IAAA,aAAI,GAAE,CAAA;;qCAAY,8BAAY;;uEAEnD;AAKK;IAHL,IAAA,yBAAM,GAAE;IACR,IAAA,iBAAQ,EAAC,mBAAU,CAAC,EAAE,CAAC;IACvB,IAAA,aAAI,EAAC,kBAAkB,CAAC;kCADf,mBAAU,CAAC,EAAE;IAGlB,WAAA,IAAA,YAAG,EAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAA;IAC1B,WAAA,IAAA,aAAI,GAAE,CAAA;;6CAAY,sCAAgB;;sEAKtC;AAID;IAFC,IAAA,yBAAM,GAAE;IACR,IAAA,aAAI,EAAC,gBAAgB,CAAC;;IACR,WAAA,IAAA,aAAI,GAAE,CAAA;;qCAAY,8BAAY;;gEAE5C;AAKK;IAHL,IAAA,yBAAM,GAAE;IACR,IAAA,iBAAQ,EAAC,mBAAU,CAAC,EAAE,CAAC;IACvB,IAAA,aAAI,EAAC,eAAe,CAAC;kCADZ,mBAAU,CAAC,EAAE;IAGlB,WAAA,IAAA,YAAG,EAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAA;IAC1B,WAAA,IAAA,aAAI,GAAE,CAAA;;6CAAY,sCAAgB;;+DAatC;sCA7CQ,2BAA2B;IALvC,IAAA,qBAAI,EAAC,yBAAQ,CAAC,IAAI,CAAC;IACnB,IAAA,mBAAU,EAAC,SAAS,CAAC;IACrB,IAAA,iBAAO,EAAC,KAAK,CAAC;IACd,IAAA,kBAAS,EAAC,0BAAc,CAAC;IACzB,IAAA,wBAAY,EAAC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;qCAE5B,8CAAqB;GADtD,2BAA2B,CAgDvC","sourcesContent":["import { Body, Controller, HttpCode, HttpStatus, Post, Res, UseGuards } from '@nestjs/common';\nimport { ApiTags } from '@nestjs/swagger';\nimport { Response } from 'express';\nimport { Auth } from '../decorators/auth.decorator';\nimport { Public } from '../decorators/public.decorator';\nimport { OTPConfirmOTPDto } from '../dtos/otp-confirm-otp.dto';\nimport { OTPSignInDto } from '../dtos/otp-sign-in.dto';\nimport { OTPSignUpDto } from '../dtos/otp-sign-up.dto';\nimport { AuthType } from '../enums/auth-type.enum';\nimport { AuthenticationService } from '../services/authentication.service';\nimport { ThrottlerGuard, SkipThrottle } from '@nestjs/throttler';\n\n\n@Auth(AuthType.None)\n@Controller('iam/otp')\n@ApiTags(\"Iam\")\n@UseGuards(ThrottlerGuard)\n@SkipThrottle({ login: false, short: true, burst: true, sustained: true }) //Enable the login throttle only\nexport class OTPAuthenticationController {\n constructor(private readonly authService: AuthenticationService) { }\n\n @Public()\n @Post('register/initiate')\n initiateRegistration(@Body() signUpDto: OTPSignUpDto) {\n return this.authService.otpInitiateRegistration(signUpDto); //TODO finalize if 200 or 201 to be returned\n }\n\n @Public()\n @HttpCode(HttpStatus.OK) // by default @Post does 201, we wanted 200 - hence using @HttpCode(HttpStatus.OK)\n @Post('register/confirm')\n async confirmRegistration(\n @Res({ passthrough: true }) response: Response,\n @Body() signInDto: OTPConfirmOTPDto\n ) {\n // This means that we are passing the token back in plain text. \n // This is less secure. \n return this.authService.otpConfirmRegistration(signInDto);\n }\n\n @Public()\n @Post('login/initiate')\n initiateLogin(@Body() signInDto: OTPSignInDto) {\n return this.authService.otpInitiateLogin(signInDto);\n }\n\n @Public()\n @HttpCode(HttpStatus.OK) // by default @Post does 201, we wanted 200 - hence using @HttpCode(HttpStatus.OK)\n @Post('login/confirm')\n async confirmLogin(\n @Res({ passthrough: true }) response: Response,\n @Body() signInDto: OTPConfirmOTPDto\n ) {\n // This means that we are passing the token back in plain text. \n // This is less secure. \n return this.authService.otpConfirmLogin(signInDto);\n\n // This means we are setting the token as a http only cookie.\n // const accessToken = await this.authService.signIn(signInDto);\n // response.cookie('accessToken', accessToken, {\n // secure: true,\n // httpOnly: true,\n // sameSite: true,\n // });\n }\n\n\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"service.controller.d.ts","sourceRoot":"","sources":["../../src/controllers/service.controller.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAI1D,qBAEa,iBAAiB;IAItB,OAAO,CAAC,QAAQ,CAAC,aAAa;IAHlC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAsC;gBAGxC,aAAa,EAAE,aAAa;IAKjD,QAAQ;;;IAMF,QAAQ,CAAS,QAAQ,EAAE,GAAG;;;CAiCvC"}
1
+ {"version":3,"file":"service.controller.d.ts","sourceRoot":"","sources":["../../src/controllers/service.controller.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAK1D,qBAIa,iBAAiB;IAItB,OAAO,CAAC,QAAQ,CAAC,aAAa;IAHlC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAsC;gBAGxC,aAAa,EAAE,aAAa;IAKjD,QAAQ;;;IAOF,QAAQ,CAAS,QAAQ,EAAE,GAAG;;;CAiCvC"}
@@ -19,6 +19,7 @@ const common_1 = require("@nestjs/common");
19
19
  const public_decorator_1 = require("../decorators/public.decorator");
20
20
  const solid_registry_1 = require("../helpers/solid-registry");
21
21
  const swagger_1 = require("@nestjs/swagger");
22
+ const throttler_1 = require("@nestjs/throttler");
22
23
  let ServiceController = ServiceController_1 = class ServiceController {
23
24
  constructor(solidRegistry) {
24
25
  this.solidRegistry = solidRegistry;
@@ -53,6 +54,7 @@ __decorate([
53
54
  ], ServiceController.prototype, "pingPong", null);
54
55
  __decorate([
55
56
  (0, public_decorator_1.Public)(),
57
+ (0, throttler_1.SkipThrottle)({ short: false, login: true, burst: true, sustained: true }),
56
58
  (0, common_1.Post)('seed'),
57
59
  openapi.ApiResponse({ status: 201 }),
58
60
  __param(0, (0, common_1.Body)()),
@@ -63,6 +65,8 @@ __decorate([
63
65
  exports.ServiceController = ServiceController = ServiceController_1 = __decorate([
64
66
  (0, common_1.Controller)(''),
65
67
  (0, swagger_1.ApiTags)("Common"),
68
+ (0, common_1.UseGuards)(throttler_1.ThrottlerGuard),
69
+ (0, throttler_1.SkipThrottle)({ short: true, login: true, burst: true, sustained: true }),
66
70
  __metadata("design:paramtypes", [solid_registry_1.SolidRegistry])
67
71
  ], ServiceController);
68
72
  //# sourceMappingURL=service.controller.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"service.controller.js","sourceRoot":"","sources":["../../src/controllers/service.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,2CAAqE;AAErE,qEAAyD;AACzD,8DAA0D;AAC1D,6CAA0C;AAKnC,IAAM,iBAAiB,yBAAvB,MAAM,iBAAiB;IAG1B,YACqB,aAA4B;QAA5B,kBAAa,GAAb,aAAa,CAAe;QAHhC,WAAM,GAAG,IAAI,eAAM,CAAC,mBAAiB,CAAC,IAAI,CAAC,CAAC;IAIzD,CAAC;IAIL,QAAQ;QACJ,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IAC9B,CAAC;IAIK,AAAN,KAAK,CAAC,QAAQ,CAAS,QAAa;QAChC,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa;aAC5B,UAAU,EAAE;aACZ,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC,MAAM,CAAC;aACnD,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC;aAChC,GAAG,EAAE,CAAC;QACX,IAAI,CAAC,MAAM,EAAE,CAAC;YACV,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,kBAAkB,QAAQ,CAAC,MAAM,qDAAqD,CAAC,CAAC;YAC1G,OAAO;QACX,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,yCAAyC,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC;QACpF,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;QACpB,OAAO,EAAE,OAAO,EAAE,iBAAiB,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;IAC3D,CAAC;CAoBJ,CAAA;AAhDY,8CAAiB;AAS1B;IAFC,IAAA,yBAAM,GAAE;IACR,IAAA,YAAG,EAAC,MAAM,CAAC;;;;;iDAGX;AAIK;IAFL,IAAA,yBAAM,GAAE;IACR,IAAA,aAAI,EAAC,MAAM,CAAC;;IACG,WAAA,IAAA,aAAI,GAAE,CAAA;;;;iDAarB;4BA5BQ,iBAAiB;IAF7B,IAAA,mBAAU,EAAC,EAAE,CAAC;IACd,IAAA,iBAAO,EAAC,QAAQ,CAAC;qCAKsB,8BAAa;GAJxC,iBAAiB,CAgD7B","sourcesContent":["import { Body, Controller, Get, Logger, Post } from '@nestjs/common';\nimport { DiscoveryService, MetadataScanner, Reflector } from '@nestjs/core';\nimport { Public } from 'src/decorators/public.decorator';\nimport { SolidRegistry } from '../helpers/solid-registry';\nimport { ApiTags } from '@nestjs/swagger';\n\n\n@Controller('')\n@ApiTags(\"Common\")\nexport class ServiceController {\n private readonly logger = new Logger(ServiceController.name);\n\n constructor(\n private readonly solidRegistry: SolidRegistry,\n ) { }\n\n @Public()\n @Get('ping')\n pingPong() {\n return { pong: 'v1.0.2' };\n }\n\n @Public()\n @Post('seed')\n async seedData(@Body() seedData: any) {\n const seeder = this.solidRegistry\n .getSeeders()\n .filter((seeder) => seeder.name === seedData.seeder)\n .map((seeder) => seeder.instance)\n .pop();\n if (!seeder) {\n this.logger.error(`Seeder service ${seedData.seeder} not found. Does your service have a seed() method?`);\n return;\n }\n this.logger.log(`Running the seed() method for seeder :${seeder.constructor.name}`);\n await seeder.seed();\n return { message: `seed data for ${seedData.seeder}` };\n }\n\n // @Public()\n // @Get('play')\n // play() {\n // return this.solidRegistry.getControllers();\n // }\n\n // //This method identifies a provider as a seeder if it has a seed method i.e duck typing\n // private isSeeder(provider: InstanceWrapper) {\n // const { instance } = provider;\n // if (!instance) return false;\n\n // const seedMethod = this.metadataScanner\n // .getAllMethodNames(Object.getPrototypeOf(instance))\n // .find((methodName) => methodName === 'seed');\n // if (!seedMethod) return false;\n // return true;\n // }\n\n}\n"]}
1
+ {"version":3,"file":"service.controller.js","sourceRoot":"","sources":["../../src/controllers/service.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,2CAAgF;AAEhF,qEAAyD;AACzD,8DAA0D;AAC1D,6CAA0C;AAC1C,iDAAiE;AAO1D,IAAM,iBAAiB,yBAAvB,MAAM,iBAAiB;IAG1B,YACqB,aAA4B;QAA5B,kBAAa,GAAb,aAAa,CAAe;QAHhC,WAAM,GAAG,IAAI,eAAM,CAAC,mBAAiB,CAAC,IAAI,CAAC,CAAC;IAIzD,CAAC;IAIL,QAAQ;QACJ,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IAC9B,CAAC;IAKK,AAAN,KAAK,CAAC,QAAQ,CAAS,QAAa;QAChC,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa;aAC5B,UAAU,EAAE;aACZ,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC,MAAM,CAAC;aACnD,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC;aAChC,GAAG,EAAE,CAAC;QACX,IAAI,CAAC,MAAM,EAAE,CAAC;YACV,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,kBAAkB,QAAQ,CAAC,MAAM,qDAAqD,CAAC,CAAC;YAC1G,OAAO;QACX,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,yCAAyC,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC;QACpF,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;QACpB,OAAO,EAAE,OAAO,EAAE,iBAAiB,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;IAC3D,CAAC;CAoBJ,CAAA;AAjDY,8CAAiB;AAS1B;IAFC,IAAA,yBAAM,GAAE;IACR,IAAA,YAAG,EAAC,MAAM,CAAC;;;;;iDAGX;AAKK;IAHL,IAAA,yBAAM,GAAE;IACR,IAAA,wBAAY,EAAC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IACzE,IAAA,aAAI,EAAC,MAAM,CAAC;;IACG,WAAA,IAAA,aAAI,GAAE,CAAA;;;;iDAarB;4BA7BQ,iBAAiB;IAJ7B,IAAA,mBAAU,EAAC,EAAE,CAAC;IACd,IAAA,iBAAO,EAAC,QAAQ,CAAC;IACjB,IAAA,kBAAS,EAAC,0BAAc,CAAC;IACzB,IAAA,wBAAY,EAAC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;qCAKjC,8BAAa;GAJxC,iBAAiB,CAiD7B","sourcesContent":["import { Body, Controller, Get, Logger, Post, UseGuards } from '@nestjs/common';\nimport { DiscoveryService, MetadataScanner, Reflector } from '@nestjs/core';\nimport { Public } from 'src/decorators/public.decorator';\nimport { SolidRegistry } from '../helpers/solid-registry';\nimport { ApiTags } from '@nestjs/swagger';\nimport { ThrottlerGuard, SkipThrottle } from '@nestjs/throttler';\n\n\n@Controller('')\n@ApiTags(\"Common\")\n@UseGuards(ThrottlerGuard)\n@SkipThrottle({ short: true, login: true, burst: true, sustained: true }) //Skip all\nexport class ServiceController {\n private readonly logger = new Logger(ServiceController.name);\n\n constructor(\n private readonly solidRegistry: SolidRegistry,\n ) { }\n\n @Public()\n @Get('ping')\n pingPong() {\n return { pong: 'v1.0.2' };\n }\n\n @Public()\n @SkipThrottle({ short: false, login: true, burst: true, sustained: true }) //Enable the short throttle only\n @Post('seed')\n async seedData(@Body() seedData: any) {\n const seeder = this.solidRegistry\n .getSeeders()\n .filter((seeder) => seeder.name === seedData.seeder)\n .map((seeder) => seeder.instance)\n .pop();\n if (!seeder) {\n this.logger.error(`Seeder service ${seedData.seeder} not found. Does your service have a seed() method?`);\n return;\n }\n this.logger.log(`Running the seed() method for seeder :${seeder.constructor.name}`);\n await seeder.seed();\n return { message: `seed data for ${seedData.seeder}` };\n }\n\n // @Public()\n // @Get('play')\n // play() {\n // return this.solidRegistry.getControllers();\n // }\n\n // //This method identifies a provider as a seeder if it has a seed method i.e duck typing\n // private isSeeder(provider: InstanceWrapper) {\n // const { instance } = provider;\n // if (!instance) return false;\n\n // const seedMethod = this.metadataScanner\n // .getAllMethodNames(Object.getPrototypeOf(instance))\n // .find((methodName) => methodName === 'seed');\n // if (!seedMethod) return false;\n // return true;\n // }\n\n}\n"]}
@@ -1,6 +1,6 @@
1
- import { SmsTemplateService } from '../services/sms-template.service';
2
1
  import { CreateSmsTemplateDto } from '../dtos/create-sms-template.dto';
3
2
  import { UpdateSmsTemplateDto } from '../dtos/update-sms-template.dto';
3
+ import { SmsTemplateService } from '../services/sms-template.service';
4
4
  export declare class SmsTemplateController {
5
5
  private readonly service;
6
6
  constructor(service: SmsTemplateService);
@@ -1 +1 @@
1
- {"version":3,"file":"sms-template.controller.d.ts","sourceRoot":"","sources":["../../src/controllers/sms-template.controller.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AACvE,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AAKvE,qBAEa,qBAAqB;IACpB,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,kBAAkB;IAKtD,MAAM,CAAS,SAAS,EAAE,oBAAoB,EAAmB,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC;IAOlG,UAAU,CAAS,UAAU,EAAE,oBAAoB,EAAE,EAAmB,UAAU,GAAE,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,EAAO;IAOhH,MAAM,CAAc,EAAE,EAAE,MAAM,EAAU,SAAS,EAAE,oBAAoB,EAAmB,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC;IAgBrH,QAAQ,CAAU,KAAK,EAAE,GAAG;;;;;;;;;;;;;;;;;;;;IAM5B,OAAO,CAAc,EAAE,EAAE,MAAM,EAAW,KAAK,EAAE,GAAG;IAKpD,UAAU,CAAS,GAAG,EAAE,MAAM,EAAE;IAMhC,MAAM,CAAc,EAAE,EAAE,MAAM;CAGvC"}
1
+ {"version":3,"file":"sms-template.controller.d.ts","sourceRoot":"","sources":["../../src/controllers/sms-template.controller.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AACvE,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AACvE,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AAGtE,qBAIa,qBAAqB;IACpB,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,kBAAkB;IAKtD,MAAM,CAAS,SAAS,EAAE,oBAAoB,EAAmB,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC;IAOlG,UAAU,CAAS,UAAU,EAAE,oBAAoB,EAAE,EAAmB,UAAU,GAAE,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,EAAO;IAOhH,MAAM,CAAc,EAAE,EAAE,MAAM,EAAU,SAAS,EAAE,oBAAoB,EAAmB,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC;IAgBrH,QAAQ,CAAU,KAAK,EAAE,GAAG;;;;;;;;;;;;;;;;;;;;IAM5B,OAAO,CAAc,EAAE,EAAE,MAAM,EAAW,KAAK,EAAE,GAAG;IAKpD,UAAU,CAAS,GAAG,EAAE,MAAM,EAAE;IAMhC,MAAM,CAAc,EAAE,EAAE,MAAM;CAGvC"}
@@ -15,12 +15,13 @@ Object.defineProperty(exports, "__esModule", { value: true });
15
15
  exports.SmsTemplateController = void 0;
16
16
  const openapi = require("@nestjs/swagger");
17
17
  const common_1 = require("@nestjs/common");
18
+ const platform_express_1 = require("@nestjs/platform-express");
18
19
  const swagger_1 = require("@nestjs/swagger");
19
- const sms_template_service_1 = require("../services/sms-template.service");
20
+ const throttler_1 = require("@nestjs/throttler");
21
+ const public_decorator_1 = require("../decorators/public.decorator");
20
22
  const create_sms_template_dto_1 = require("../dtos/create-sms-template.dto");
21
23
  const update_sms_template_dto_1 = require("../dtos/update-sms-template.dto");
22
- const public_decorator_1 = require("../decorators/public.decorator");
23
- const platform_express_1 = require("@nestjs/platform-express");
24
+ const sms_template_service_1 = require("../services/sms-template.service");
24
25
  let SmsTemplateController = class SmsTemplateController {
25
26
  constructor(service) {
26
27
  this.service = service;
@@ -131,6 +132,8 @@ __decorate([
131
132
  exports.SmsTemplateController = SmsTemplateController = __decorate([
132
133
  (0, common_1.Controller)('sms-template'),
133
134
  (0, swagger_1.ApiTags)("Common"),
135
+ (0, common_1.UseGuards)(throttler_1.ThrottlerGuard),
136
+ (0, throttler_1.SkipThrottle)({ short: false, login: true, burst: true, sustained: true }),
134
137
  __metadata("design:paramtypes", [sms_template_service_1.SmsTemplateService])
135
138
  ], SmsTemplateController);
136
139
  //# sourceMappingURL=sms-template.controller.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"sms-template.controller.js","sourceRoot":"","sources":["../../src/controllers/sms-template.controller.ts"],"names":[],"mappings":"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","sourcesContent":["import { Body, Controller, Delete, Get, Param, Patch, Post, Put, Query, UploadedFiles, UseInterceptors } from '@nestjs/common';\nimport { ApiBearerAuth, ApiQuery, ApiTags } from '@nestjs/swagger';\nimport { PaginationQueryDto } from 'src/dtos/pagination-query.dto';\nimport { Roles } from 'src/decorators/roles.decorator';\nimport { SmsTemplateService } from '../services/sms-template.service';\nimport { CreateSmsTemplateDto } from '../dtos/create-sms-template.dto';\nimport { UpdateSmsTemplateDto } from '../dtos/update-sms-template.dto';\nimport { Public } from 'src/decorators/public.decorator';\nimport { AnyFilesInterceptor } from '@nestjs/platform-express';\n\n\n@Controller('sms-template')\n@ApiTags(\"Common\")\nexport class SmsTemplateController {\n constructor(private readonly service: SmsTemplateService) { }\n\n @Public()\n @Post()\n @UseInterceptors(AnyFilesInterceptor())\n create(@Body() createDto: CreateSmsTemplateDto, @UploadedFiles() files: Array<Express.Multer.File>) {\n return this.service.create(createDto, files);\n }\n \n @Public()\n @Post('/bulk')\n @UseInterceptors(AnyFilesInterceptor())\n insertMany(@Body() createDtos: CreateSmsTemplateDto[], @UploadedFiles() filesArray: Express.Multer.File[][] = []) {\n return this.service.insertMany(createDtos, filesArray);\n }\n \n @Public()\n @Put(':id')\n @UseInterceptors(AnyFilesInterceptor())\n update(@Param('id') id: number, @Body() updateDto: UpdateSmsTemplateDto, @UploadedFiles() files: Array<Express.Multer.File>) {\n return this.service.update(id, updateDto, files);\n }\n \n @Public()\n @ApiQuery({ name: 'showSoftDeleted', required: false, type: Boolean })\n @ApiQuery({ name: 'showOnlySoftDeleted', required: false, type: Boolean })\n @ApiQuery({ name: 'limit', required: false, type: Number })\n @ApiQuery({ name: 'offset', required: false, type: Number })\n @ApiQuery({ name: 'fields', required: false, type: Array })\n @ApiQuery({ name: 'sort', required: false, type: Array })\n @ApiQuery({ name: 'groupBy', required: false, type: Array })\n @ApiQuery({ name: 'populate', required: false, type: Array })\n @ApiQuery({ name: 'populateMedia', required: false, type: Array })\n @ApiQuery({ name: 'filters', required: false, type: Array })\n @Get()\n async findMany(@Query() query: any) {\n return this.service.find(query);\n }\n \n @Public()\n @Get(':id')\n async findOne(@Param('id') id: string, @Query() query: any) {\n return this.service.findOne(+id, query);\n }\n \n @Delete('/bulk')\n async deleteMany(@Body() ids: number[]) {\n return this.service.deleteMany(ids);\n }\n \n @Public()\n @Delete(':id')\n async delete(@Param('id') id: number) {\n return this.service.delete(id);\n }\n}\n"]}
1
+ {"version":3,"file":"sms-template.controller.js","sourceRoot":"","sources":["../../src/controllers/sms-template.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAAmI;AACnI,+DAA+D;AAC/D,6CAAoD;AACpD,iDAAiE;AACjE,qEAAyD;AACzD,6EAAuE;AACvE,6EAAuE;AACvE,2EAAsE;AAO/D,IAAM,qBAAqB,GAA3B,MAAM,qBAAqB;IAChC,YAA6B,OAA2B;QAA3B,YAAO,GAAP,OAAO,CAAoB;IAAI,CAAC;IAK3D,MAAM,CAAS,SAA+B,EAAmB,KAAiC;QAChG,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IAC/C,CAAC;IAKD,UAAU,CAAS,UAAkC,EAAmB,aAAsC,EAAE;QAC9G,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;IACzD,CAAC;IAKD,MAAM,CAAc,EAAU,EAAU,SAA+B,EAAmB,KAAiC;QACzH,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;IACnD,CAAC;IAcK,AAAN,KAAK,CAAC,QAAQ,CAAU,KAAU;QAChC,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClC,CAAC;IAIK,AAAN,KAAK,CAAC,OAAO,CAAc,EAAU,EAAW,KAAU;QACxD,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;IAC1C,CAAC;IAGK,AAAN,KAAK,CAAC,UAAU,CAAS,GAAa;QACpC,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IACtC,CAAC;IAIK,AAAN,KAAK,CAAC,MAAM,CAAc,EAAU;QAClC,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACjC,CAAC;CACJ,CAAA;AAxDY,sDAAqB;AAM9B;IAHA,IAAA,yBAAM,GAAE;IACP,IAAA,aAAI,GAAE;IACN,IAAA,wBAAe,EAAC,IAAA,sCAAmB,GAAE,CAAC;;IAC/B,WAAA,IAAA,aAAI,GAAE,CAAA;IAAmC,WAAA,IAAA,sBAAa,GAAE,CAAA;;qCAAtC,8CAAoB,EAA0B,KAAK;;mDAE5E;AAKD;IAHC,IAAA,yBAAM,GAAE;IACR,IAAA,aAAI,EAAC,OAAO,CAAC;IACb,IAAA,wBAAe,EAAC,IAAA,sCAAmB,GAAE,CAAC;;IAC3B,WAAA,IAAA,aAAI,GAAE,CAAA;IAAsC,WAAA,IAAA,sBAAa,GAAE,CAAA;;;;uDAEtE;AAKD;IAHC,IAAA,yBAAM,GAAE;IACR,IAAA,YAAG,EAAC,KAAK,CAAC;IACV,IAAA,wBAAe,EAAC,IAAA,sCAAmB,GAAE,CAAC;;IAC/B,WAAA,IAAA,cAAK,EAAC,IAAI,CAAC,CAAA;IAAc,WAAA,IAAA,aAAI,GAAE,CAAA;IAAmC,WAAA,IAAA,sBAAa,GAAE,CAAA;;6CAAtC,8CAAoB,EAA0B,KAAK;;mDAErG;AAcK;IAZL,IAAA,yBAAM,GAAE;IACR,IAAA,kBAAQ,EAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;IACrE,IAAA,kBAAQ,EAAC,EAAE,IAAI,EAAE,qBAAqB,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;IACzE,IAAA,kBAAQ,EAAC,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAC1D,IAAA,kBAAQ,EAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAC3D,IAAA,kBAAQ,EAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;IAC1D,IAAA,kBAAQ,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;IACxD,IAAA,kBAAQ,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;IAC3D,IAAA,kBAAQ,EAAC,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;IAC5D,IAAA,kBAAQ,EAAC,EAAE,IAAI,EAAE,eAAe,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;IACjE,IAAA,kBAAQ,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;IAC3D,IAAA,YAAG,GAAE;;IACU,WAAA,IAAA,cAAK,GAAE,CAAA;;;;qDAEtB;AAIK;IAFL,IAAA,yBAAM,GAAE;IACR,IAAA,YAAG,EAAC,KAAK,CAAC;;IACI,WAAA,IAAA,cAAK,EAAC,IAAI,CAAC,CAAA;IAAc,WAAA,IAAA,cAAK,GAAE,CAAA;;;;oDAE9C;AAGK;IADL,IAAA,eAAM,EAAC,OAAO,CAAC;;IACE,WAAA,IAAA,aAAI,GAAE,CAAA;;;;uDAEvB;AAIK;IAFL,IAAA,yBAAM,GAAE;IACR,IAAA,eAAM,EAAC,KAAK,CAAC;;IACA,WAAA,IAAA,cAAK,EAAC,IAAI,CAAC,CAAA;;;;mDAExB;gCAvDQ,qBAAqB;IAJjC,IAAA,mBAAU,EAAC,cAAc,CAAC;IAC1B,IAAA,iBAAO,EAAC,QAAQ,CAAC;IACjB,IAAA,kBAAS,EAAC,0BAAc,CAAC;IACzB,IAAA,wBAAY,EAAC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;qCAElC,yCAAkB;GAD7C,qBAAqB,CAwDjC","sourcesContent":["import { Body, Controller, Delete, Get, Param, Post, Put, Query, UploadedFiles, UseGuards, UseInterceptors } from '@nestjs/common';\nimport { AnyFilesInterceptor } from '@nestjs/platform-express';\nimport { ApiQuery, ApiTags } from '@nestjs/swagger';\nimport { SkipThrottle, ThrottlerGuard } from '@nestjs/throttler';\nimport { Public } from 'src/decorators/public.decorator';\nimport { CreateSmsTemplateDto } from '../dtos/create-sms-template.dto';\nimport { UpdateSmsTemplateDto } from '../dtos/update-sms-template.dto';\nimport { SmsTemplateService } from '../services/sms-template.service';\n\n\n@Controller('sms-template')\n@ApiTags(\"Common\")\n@UseGuards(ThrottlerGuard)\n@SkipThrottle({ short: false, login: true, burst: true, sustained: true }) //Enable the short throttle only\nexport class SmsTemplateController {\n constructor(private readonly service: SmsTemplateService) { }\n\n @Public()\n @Post()\n @UseInterceptors(AnyFilesInterceptor())\n create(@Body() createDto: CreateSmsTemplateDto, @UploadedFiles() files: Array<Express.Multer.File>) {\n return this.service.create(createDto, files);\n }\n \n @Public()\n @Post('/bulk')\n @UseInterceptors(AnyFilesInterceptor())\n insertMany(@Body() createDtos: CreateSmsTemplateDto[], @UploadedFiles() filesArray: Express.Multer.File[][] = []) {\n return this.service.insertMany(createDtos, filesArray);\n }\n \n @Public()\n @Put(':id')\n @UseInterceptors(AnyFilesInterceptor())\n update(@Param('id') id: number, @Body() updateDto: UpdateSmsTemplateDto, @UploadedFiles() files: Array<Express.Multer.File>) {\n return this.service.update(id, updateDto, files);\n }\n \n @Public()\n @ApiQuery({ name: 'showSoftDeleted', required: false, type: Boolean })\n @ApiQuery({ name: 'showOnlySoftDeleted', required: false, type: Boolean })\n @ApiQuery({ name: 'limit', required: false, type: Number })\n @ApiQuery({ name: 'offset', required: false, type: Number })\n @ApiQuery({ name: 'fields', required: false, type: Array })\n @ApiQuery({ name: 'sort', required: false, type: Array })\n @ApiQuery({ name: 'groupBy', required: false, type: Array })\n @ApiQuery({ name: 'populate', required: false, type: Array })\n @ApiQuery({ name: 'populateMedia', required: false, type: Array })\n @ApiQuery({ name: 'filters', required: false, type: Array })\n @Get()\n async findMany(@Query() query: any) {\n return this.service.find(query);\n }\n \n @Public()\n @Get(':id')\n async findOne(@Param('id') id: string, @Query() query: any) {\n return this.service.findOne(+id, query);\n }\n \n @Delete('/bulk')\n async deleteMany(@Body() ids: number[]) {\n return this.service.deleteMany(ids);\n }\n \n @Public()\n @Delete(':id')\n async delete(@Param('id') id: number) {\n return this.service.delete(id);\n }\n}\n"]}
@@ -0,0 +1,12 @@
1
+ import { ValidationArguments, ValidationOptions, ValidatorConstraintInterface } from 'class-validator';
2
+ interface SolidPasswordOptions extends ValidationOptions {
3
+ regex?: RegExp | string;
4
+ message?: string;
5
+ }
6
+ export declare class SolidPasswordConstraint implements ValidatorConstraintInterface {
7
+ validate(value: string, args: ValidationArguments): boolean;
8
+ defaultMessage(args?: ValidationArguments): string;
9
+ }
10
+ export declare function SolidPasswordRegex(options?: SolidPasswordOptions): PropertyDecorator;
11
+ export {};
12
+ //# sourceMappingURL=solid-password.decorator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"solid-password.decorator.d.ts","sourceRoot":"","sources":["../../src/decorators/solid-password.decorator.ts"],"names":[],"mappings":"AACA,OAAO,EAEH,mBAAmB,EACnB,iBAAiB,EAEjB,4BAA4B,EAC/B,MAAM,iBAAiB,CAAC;AAIzB,UAAU,oBAAqB,SAAQ,iBAAiB;IACpD,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,OAAQ,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,qBAEa,uBAAwB,YAAW,4BAA4B;IACxE,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,mBAAmB;IAWjD,cAAc,CAAC,IAAI,CAAC,EAAE,mBAAmB,GAAG,MAAM;CAMrD;AAED,wBAAgB,kBAAkB,CAC9B,OAAO,CAAC,EAAE,oBAAoB,GAC/B,iBAAiB,CAUnB"}
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ 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;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.SolidPasswordConstraint = void 0;
10
+ exports.SolidPasswordRegex = SolidPasswordRegex;
11
+ const class_validator_1 = require("class-validator");
12
+ const common_1 = require("@nestjs/common");
13
+ const iam_config_1 = require("../config/iam.config");
14
+ let SolidPasswordConstraint = class SolidPasswordConstraint {
15
+ validate(value, args) {
16
+ if (!value)
17
+ return false;
18
+ const opts = args.constraints[0];
19
+ const regex = opts?.regex || (0, iam_config_1.iamConfig)().PASSWORD_REGEX;
20
+ return new RegExp(regex).test(value);
21
+ }
22
+ defaultMessage(args) {
23
+ const opts = args?.constraints?.[0];
24
+ return opts?.message || (0, iam_config_1.iamConfig)().PASSWORD_COMPLEXITY_DESC;
25
+ }
26
+ };
27
+ exports.SolidPasswordConstraint = SolidPasswordConstraint;
28
+ exports.SolidPasswordConstraint = SolidPasswordConstraint = __decorate([
29
+ (0, class_validator_1.ValidatorConstraint)({ async: false }),
30
+ (0, common_1.Injectable)()
31
+ ], SolidPasswordConstraint);
32
+ function SolidPasswordRegex(options) {
33
+ return (object, propertyName) => {
34
+ (0, class_validator_1.registerDecorator)({
35
+ target: object.constructor,
36
+ propertyName,
37
+ options,
38
+ constraints: [options],
39
+ validator: SolidPasswordConstraint,
40
+ });
41
+ };
42
+ }
43
+ //# sourceMappingURL=solid-password.decorator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"solid-password.decorator.js","sourceRoot":"","sources":["../../src/decorators/solid-password.decorator.ts"],"names":[],"mappings":";;;;;;;;;AAsCA,gDAYC;AAjDD,qDAMyB;AACzB,2CAA4C;AAC5C,qDAAiD;AAS1C,IAAM,uBAAuB,GAA7B,MAAM,uBAAuB;IAChC,QAAQ,CAAC,KAAa,EAAE,IAAyB;QAC7C,IAAI,CAAC,KAAK;YAAE,OAAO,KAAK,CAAC;QAEzB,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAyB,CAAC;QAGzD,MAAM,KAAK,GAAG,IAAI,EAAE,KAAK,IAAI,IAAA,sBAAS,GAAE,CAAC,cAAc,CAAC;QAExD,OAAO,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACzC,CAAC;IAED,cAAc,CAAC,IAA0B;QACrC,MAAM,IAAI,GAAG,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC,CAAyB,CAAC;QAG5D,OAAO,IAAI,EAAE,OAAO,IAAI,IAAA,sBAAS,GAAE,CAAC,wBAAwB,CAAC;IACjE,CAAC;CACJ,CAAA;AAlBY,0DAAuB;kCAAvB,uBAAuB;IAFnC,IAAA,qCAAmB,EAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;IACrC,IAAA,mBAAU,GAAE;GACA,uBAAuB,CAkBnC;AAED,SAAgB,kBAAkB,CAC9B,OAA8B;IAE9B,OAAO,CAAC,MAAc,EAAE,YAAoB,EAAE,EAAE;QAC5C,IAAA,mCAAiB,EAAC;YACd,MAAM,EAAE,MAAM,CAAC,WAAW;YAC1B,YAAY;YACZ,OAAO;YACP,WAAW,EAAE,CAAC,OAAO,CAAC;YACtB,SAAS,EAAE,uBAAuB;SACrC,CAAC,CAAC;IACP,CAAC,CAAC;AACN,CAAC","sourcesContent":["// solid-password.decorator.ts\nimport {\n registerDecorator,\n ValidationArguments,\n ValidationOptions,\n ValidatorConstraint,\n ValidatorConstraintInterface,\n} from 'class-validator';\nimport { Injectable } from '@nestjs/common';\nimport { iamConfig } from '../config/iam.config';\n\ninterface SolidPasswordOptions extends ValidationOptions {\n regex?: RegExp | string;\n message ?: string;\n}\n\n@ValidatorConstraint({ async: false })\n@Injectable()\nexport class SolidPasswordConstraint implements ValidatorConstraintInterface {\n validate(value: string, args: ValidationArguments) {\n if (!value) return false;\n\n const opts = args.constraints[0] as SolidPasswordOptions;\n\n // priority: decorator-provided regex → iamConfig().PASSWORD_REGEX\n const regex = opts?.regex || iamConfig().PASSWORD_REGEX;\n\n return new RegExp(regex).test(value);\n }\n\n defaultMessage(args?: ValidationArguments): string {\n const opts = args?.constraints?.[0] as SolidPasswordOptions;\n\n // Just use the string from decorator if passed, otherwise use iamConfig\n return opts?.message || iamConfig().PASSWORD_COMPLEXITY_DESC;\n }\n}\n\nexport function SolidPasswordRegex(\n options?: SolidPasswordOptions,\n): PropertyDecorator {\n return (object: Object, propertyName: string) => {\n registerDecorator({\n target: object.constructor,\n propertyName,\n options,\n constraints: [options],\n validator: SolidPasswordConstraint,\n });\n };\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"change-password.dto.d.ts","sourceRoot":"","sources":["../../src/dtos/change-password.dto.ts"],"names":[],"mappings":"AAEA,qBAAa,iBAAiB;IAE1B,EAAE,EAAE,MAAM,CAAC;IAGX,KAAK,EAAE,MAAM,CAAC;IAGd,eAAe,EAAE,MAAM,CAAC;IAGxB,WAAW,EAAE,MAAM,CAAC;CACvB"}
1
+ {"version":3,"file":"change-password.dto.d.ts","sourceRoot":"","sources":["../../src/dtos/change-password.dto.ts"],"names":[],"mappings":"AAGA,qBAAa,iBAAiB;IAE1B,EAAE,EAAE,MAAM,CAAC;IAGX,KAAK,EAAE,MAAM,CAAC;IAGd,eAAe,EAAE,MAAM,CAAC;IAIxB,WAAW,EAAE,MAAM,CAAC;CACvB"}
@@ -12,6 +12,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.ChangePasswordDto = void 0;
13
13
  const openapi = require("@nestjs/swagger");
14
14
  const class_validator_1 = require("class-validator");
15
+ const solid_password_decorator_1 = require("../decorators/solid-password.decorator");
15
16
  class ChangePasswordDto {
16
17
  static _OPENAPI_METADATA_FACTORY() {
17
18
  return { id: { required: true, type: () => Number }, email: { required: true, type: () => String }, currentPassword: { required: true, type: () => String }, newPassword: { required: true, type: () => String } };
@@ -32,6 +33,7 @@ __decorate([
32
33
  ], ChangePasswordDto.prototype, "currentPassword", void 0);
33
34
  __decorate([
34
35
  (0, class_validator_1.IsNotEmpty)(),
36
+ (0, solid_password_decorator_1.SolidPasswordRegex)({ regex: /^$|^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[^\da-zA-Z]).*$/ }),
35
37
  __metadata("design:type", String)
36
38
  ], ChangePasswordDto.prototype, "newPassword", void 0);
37
39
  //# sourceMappingURL=change-password.dto.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"change-password.dto.js","sourceRoot":"","sources":["../../src/dtos/change-password.dto.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,qDAA6C;AAE7C,MAAa,iBAAiB;;;;CAY7B;AAZD,8CAYC;AAVG;IADC,IAAA,4BAAU,GAAE;;6CACF;AAGX;IADC,IAAA,4BAAU,GAAE;;gDACC;AAGd;IADC,IAAA,4BAAU,GAAE;;0DACW;AAGxB;IADC,IAAA,4BAAU,GAAE;;sDACO","sourcesContent":["import { IsNotEmpty } from \"class-validator\";\n\nexport class ChangePasswordDto {\n @IsNotEmpty()\n id: number;\n\n @IsNotEmpty()\n email: string;\n\n @IsNotEmpty()\n currentPassword: string;\n\n @IsNotEmpty()\n newPassword: string;\n}"]}
1
+ {"version":3,"file":"change-password.dto.js","sourceRoot":"","sources":["../../src/dtos/change-password.dto.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,qDAA6C;AAC7C,qFAA6E;AAE7E,MAAa,iBAAiB;;;;CAa7B;AAbD,8CAaC;AAXG;IADC,IAAA,4BAAU,GAAE;;6CACF;AAGX;IADC,IAAA,4BAAU,GAAE;;gDACC;AAGd;IADC,IAAA,4BAAU,GAAE;;0DACW;AAIxB;IAFC,IAAA,4BAAU,GAAE;IACZ,IAAA,6CAAkB,EAAC,EAAE,KAAK,EAAE,wDAAwD,EAAC,CAAC;;sDACnE","sourcesContent":["import { IsNotEmpty } from \"class-validator\";\nimport { SolidPasswordRegex } from \"src/decorators/solid-password.decorator\";\n\nexport class ChangePasswordDto {\n @IsNotEmpty()\n id: number;\n\n @IsNotEmpty()\n email: string;\n\n @IsNotEmpty()\n currentPassword: string;\n\n @IsNotEmpty()\n @SolidPasswordRegex({ regex: /^$|^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[^\\da-zA-Z]).*$/})\n newPassword: string;\n}"]}
@@ -1 +1 @@
1
- {"version":3,"file":"confirm-forgot-password.dto.d.ts","sourceRoot":"","sources":["../../src/dtos/confirm-forgot-password.dto.ts"],"names":[],"mappings":"AAEA,qBAAa,wBAAwB;IAGjC,QAAQ,EAAE,MAAM,CAAC;IAIjB,KAAK,EAAE,MAAM,CAAC;IAGd,iBAAiB,EAAE,MAAM,CAAC;IAG1B,QAAQ,EAAE,MAAM,CAAC;CACpB"}
1
+ {"version":3,"file":"confirm-forgot-password.dto.d.ts","sourceRoot":"","sources":["../../src/dtos/confirm-forgot-password.dto.ts"],"names":[],"mappings":"AAGA,qBAAa,wBAAwB;IAGjC,QAAQ,EAAE,MAAM,CAAC;IAIjB,KAAK,EAAE,MAAM,CAAC;IAGd,iBAAiB,EAAE,MAAM,CAAC;IAI1B,QAAQ,EAAE,MAAM,CAAC;CACpB"}
@@ -12,6 +12,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.ConfirmForgotPasswordDto = void 0;
13
13
  const openapi = require("@nestjs/swagger");
14
14
  const class_validator_1 = require("class-validator");
15
+ const solid_password_decorator_1 = require("../decorators/solid-password.decorator");
15
16
  class ConfirmForgotPasswordDto {
16
17
  static _OPENAPI_METADATA_FACTORY() {
17
18
  return { username: { required: true, type: () => String }, email: { required: true, type: () => String }, verificationToken: { required: true, type: () => String }, password: { required: true, type: () => String } };
@@ -34,6 +35,7 @@ __decorate([
34
35
  ], ConfirmForgotPasswordDto.prototype, "verificationToken", void 0);
35
36
  __decorate([
36
37
  (0, class_validator_1.IsNotEmpty)(),
38
+ (0, solid_password_decorator_1.SolidPasswordRegex)({ regex: /^$|^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[^\da-zA-Z]).*$/ }),
37
39
  __metadata("design:type", String)
38
40
  ], ConfirmForgotPasswordDto.prototype, "password", void 0);
39
41
  //# sourceMappingURL=confirm-forgot-password.dto.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"confirm-forgot-password.dto.js","sourceRoot":"","sources":["../../src/dtos/confirm-forgot-password.dto.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,qDAAyD;AAEzD,MAAa,wBAAwB;;;;CAcpC;AAdD,4DAcC;AAXG;IAFC,IAAA,4BAAU,GAAE;IACZ,IAAA,4BAAU,GAAE;;0DACI;AAIjB;IAFC,IAAA,4BAAU,GAAE;IACZ,IAAA,4BAAU,GAAE;;uDACC;AAGd;IADC,IAAA,4BAAU,GAAE;;mEACa;AAG1B;IADC,IAAA,4BAAU,GAAE;;0DACI","sourcesContent":["import { IsNotEmpty, IsOptional } from \"class-validator\";\n\nexport class ConfirmForgotPasswordDto {\n @IsNotEmpty()\n @IsOptional()\n username: string;\n\n @IsNotEmpty()\n @IsOptional()\n email: string;\n\n @IsNotEmpty()\n verificationToken: string;\n\n @IsNotEmpty()\n password: string;\n}"]}
1
+ {"version":3,"file":"confirm-forgot-password.dto.js","sourceRoot":"","sources":["../../src/dtos/confirm-forgot-password.dto.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,qDAAyD;AACzD,qFAA6E;AAE7E,MAAa,wBAAwB;;;;CAepC;AAfD,4DAeC;AAZG;IAFC,IAAA,4BAAU,GAAE;IACZ,IAAA,4BAAU,GAAE;;0DACI;AAIjB;IAFC,IAAA,4BAAU,GAAE;IACZ,IAAA,4BAAU,GAAE;;uDACC;AAGd;IADC,IAAA,4BAAU,GAAE;;mEACa;AAI1B;IAFC,IAAA,4BAAU,GAAE;IACZ,IAAA,6CAAkB,EAAC,EAAE,KAAK,EAAE,wDAAwD,EAAC,CAAC;;0DACtE","sourcesContent":["import { IsNotEmpty, IsOptional } from \"class-validator\";\nimport { SolidPasswordRegex } from \"src/decorators/solid-password.decorator\";\n\nexport class ConfirmForgotPasswordDto {\n @IsNotEmpty()\n @IsOptional()\n username: string;\n\n @IsNotEmpty()\n @IsOptional()\n email: string;\n\n @IsNotEmpty()\n verificationToken: string;\n\n @IsNotEmpty()\n @SolidPasswordRegex({ regex: /^$|^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[^\\da-zA-Z]).*$/})\n password: string;\n}"]}
@@ -0,0 +1,4 @@
1
+ import { CorsOptions } from 'cors';
2
+ import { ConfigService } from '@nestjs/config';
3
+ export declare function buildDefaultCorsOptions(configService: ConfigService): CorsOptions;
4
+ //# sourceMappingURL=cors.helper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cors.helper.d.ts","sourceRoot":"","sources":["../../src/helpers/cors.helper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,MAAM,CAAC;AACnC,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAG/C,wBAAgB,uBAAuB,CAAC,aAAa,EAAE,aAAa,GAAG,WAAW,CA6BjF"}
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.buildDefaultCorsOptions = buildDefaultCorsOptions;
4
+ function buildDefaultCorsOptions(configService) {
5
+ const rawOrigins = configService.get('CORS_ORIGINS') ?? '';
6
+ const allowed = rawOrigins.split(',').map(s => s.trim()).filter(Boolean);
7
+ const escapeRx = (s) => s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
8
+ const patternToRegex = (pattern) => {
9
+ const hasScheme = /^https?:\/\//i.test(pattern);
10
+ const schemePart = hasScheme ? '' : 'https?:\\/\\/';
11
+ if (pattern === '*' || pattern === '.*')
12
+ return /^.*$/i;
13
+ const escaped = escapeRx(pattern)
14
+ .replace(/^https?:\/\//i, '')
15
+ .replace(/\*/g, '[^.]+');
16
+ return new RegExp(`^${schemePart}${escaped}(?::\\d+)?$`, 'i');
17
+ };
18
+ const matchers = allowed.map(patternToRegex);
19
+ const isAllowed = (origin) => matchers.length > 0 && matchers.some(rx => rx.test(origin));
20
+ return {
21
+ origin: (origin, cb) => {
22
+ if (!origin)
23
+ return cb(null, true);
24
+ if (isAllowed(origin))
25
+ return cb(null, true);
26
+ return cb(new Error(`Origin ${origin} not allowed by CORS`), false);
27
+ },
28
+ methods: ['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'OPTIONS'],
29
+ allowedHeaders: ['Content-Type', 'Authorization'],
30
+ credentials: true,
31
+ };
32
+ }
33
+ //# sourceMappingURL=cors.helper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cors.helper.js","sourceRoot":"","sources":["../../src/helpers/cors.helper.ts"],"names":[],"mappings":";;AAIA,0DA6BC;AA7BD,SAAgB,uBAAuB,CAAC,aAA4B;IAClE,MAAM,UAAU,GAAG,aAAa,CAAC,GAAG,CAAS,cAAc,CAAC,IAAI,EAAE,CAAC;IACnE,MAAM,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAEzE,MAAM,QAAQ,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;IACzE,MAAM,cAAc,GAAG,CAAC,OAAe,EAAU,EAAE;QACjD,MAAM,SAAS,GAAG,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAChD,MAAM,UAAU,GAAG,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,eAAe,CAAC;QACpD,IAAI,OAAO,KAAK,GAAG,IAAI,OAAO,KAAK,IAAI;YAAE,OAAO,OAAO,CAAC;QACxD,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC;aAC9B,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC;aAC5B,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAC3B,OAAO,IAAI,MAAM,CAAC,IAAI,UAAU,GAAG,OAAO,aAAa,EAAE,GAAG,CAAC,CAAC;IAChE,CAAC,CAAC;IAEF,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAC7C,MAAM,SAAS,GAAG,CAAC,MAAc,EAAE,EAAE,CACnC,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IAE9D,OAAO;QACL,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE;YACrB,IAAI,CAAC,MAAM;gBAAE,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YACnC,IAAI,SAAS,CAAC,MAAM,CAAC;gBAAE,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YAC7C,OAAO,EAAE,CAAC,IAAI,KAAK,CAAC,UAAU,MAAM,sBAAsB,CAAC,EAAE,KAAK,CAAC,CAAC;QACtE,CAAC;QACD,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC;QAC7D,cAAc,EAAE,CAAC,cAAc,EAAE,eAAe,CAAC;QACjD,WAAW,EAAE,IAAI;KAClB,CAAC;AACJ,CAAC","sourcesContent":["import { CorsOptions } from 'cors';\nimport { ConfigService } from '@nestjs/config';\n\n/** Build CorsOptions from env; supports wildcards like https://*.example.com */\nexport function buildDefaultCorsOptions(configService: ConfigService): CorsOptions {\n const rawOrigins = configService.get<string>('CORS_ORIGINS') ?? '';\n const allowed = rawOrigins.split(',').map(s => s.trim()).filter(Boolean);\n\n const escapeRx = (s: string) => s.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n const patternToRegex = (pattern: string): RegExp => {\n const hasScheme = /^https?:\\/\\//i.test(pattern);\n const schemePart = hasScheme ? '' : 'https?:\\\\/\\\\/';\n if (pattern === '*' || pattern === '.*') return /^.*$/i;\n const escaped = escapeRx(pattern)\n .replace(/^https?:\\/\\//i, '') // strip scheme if present\n .replace(/\\*/g, '[^.]+'); // * => one subdomain segment\n return new RegExp(`^${schemePart}${escaped}(?::\\\\d+)?$`, 'i');\n };\n\n const matchers = allowed.map(patternToRegex);\n const isAllowed = (origin: string) =>\n matchers.length > 0 && matchers.some(rx => rx.test(origin));\n\n return {\n origin: (origin, cb) => {\n if (!origin) return cb(null, true); // allow no-origin (CLI/mobile/internal)\n if (isAllowed(origin)) return cb(null, true);\n return cb(new Error(`Origin ${origin} not allowed by CORS`), false);\n },\n methods: ['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'OPTIONS'],\n allowedHeaders: ['Content-Type', 'Authorization'],\n credentials: true,\n };\n}"]}
@@ -0,0 +1,9 @@
1
+ import { HelmetOptions } from "helmet";
2
+ export declare function buildDefaultSecurityHeaderOptions(): Readonly<HelmetOptions>;
3
+ type Source = 'self' | 'none' | string;
4
+ type DirectiveConfig = 'self' | 'none' | Source[];
5
+ export type PermissionsPolicyConfig = Record<string, DirectiveConfig>;
6
+ export declare const DEFAULT_PERMISSIONS_POLICY: PermissionsPolicyConfig;
7
+ export declare function buildPermissionsPolicyHeader(overrides?: Partial<PermissionsPolicyConfig>): string;
8
+ export {};
9
+ //# sourceMappingURL=security.helper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"security.helper.d.ts","sourceRoot":"","sources":["../../src/helpers/security.helper.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAEvC,wBAAgB,iCAAiC,IAAI,QAAQ,CAAC,aAAa,CAAC,CAY3E;AAED,KAAK,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AACvC,KAAK,eAAe,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,EAAE,CAAC;AAElD,MAAM,MAAM,uBAAuB,GAAG,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;AAEtE,eAAO,MAAM,0BAA0B,EAAE,uBAaxC,CAAC;AAEF,wBAAgB,4BAA4B,CAC1C,SAAS,GAAE,OAAO,CAAC,uBAAuB,CAAM,GAC/C,MAAM,CAKR"}
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DEFAULT_PERMISSIONS_POLICY = void 0;
4
+ exports.buildDefaultSecurityHeaderOptions = buildDefaultSecurityHeaderOptions;
5
+ exports.buildPermissionsPolicyHeader = buildPermissionsPolicyHeader;
6
+ const disallow_in_production_decorator_1 = require("../decorators/disallow-in-production.decorator");
7
+ function buildDefaultSecurityHeaderOptions() {
8
+ return {
9
+ referrerPolicy: { policy: 'strict-origin-when-cross-origin' },
10
+ crossOriginEmbedderPolicy: false,
11
+ crossOriginResourcePolicy: { policy: 'same-site' },
12
+ frameguard: { action: 'sameorigin' },
13
+ hsts: process.env.NODE_ENV === disallow_in_production_decorator_1.Environment.Production
14
+ ? { maxAge: 31536000, includeSubDomains: true, preload: true }
15
+ : false,
16
+ };
17
+ }
18
+ exports.DEFAULT_PERMISSIONS_POLICY = {
19
+ camera: 'none',
20
+ microphone: 'none',
21
+ geolocation: 'none',
22
+ fullscreen: 'self',
23
+ payment: 'none',
24
+ accelerometer: 'none',
25
+ autoplay: 'none',
26
+ 'clipboard-read': 'none',
27
+ 'clipboard-write': 'none',
28
+ gyroscope: 'none',
29
+ magnetometer: 'none',
30
+ usb: 'none',
31
+ };
32
+ function buildPermissionsPolicyHeader(overrides = {}) {
33
+ const merged = { ...exports.DEFAULT_PERMISSIONS_POLICY, ...overrides };
34
+ return Object.entries(merged)
35
+ .map(([feature, value]) => `${feature}=${serializeValue(value)}`)
36
+ .join(', ');
37
+ }
38
+ function serializeValue(v) {
39
+ if (v === 'none')
40
+ return '()';
41
+ if (v === 'self')
42
+ return '(self)';
43
+ const parts = v.map(src => (src === 'self' ? 'self' : src)).join(' ');
44
+ return `(${parts})`;
45
+ }
46
+ //# sourceMappingURL=security.helper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"security.helper.js","sourceRoot":"","sources":["../../src/helpers/security.helper.ts"],"names":[],"mappings":";;;AAGA,8EAYC;AAsBD,oEAOC;AA5CD,qGAA8E;AAG9E,SAAgB,iCAAiC;IAC7C,OAAO;QACP,cAAc,EAAE,EAAE,MAAM,EAAE,iCAAiC,EAAE;QAC7D,yBAAyB,EAAE,KAAK;QAChC,yBAAyB,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE;QAClD,UAAU,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE;QAEpC,IAAI,EACF,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,8CAAW,CAAC,UAAU;YAC7C,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,iBAAiB,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE;YAC9D,CAAC,CAAC,KAAK;KACZ,CAAA;AACH,CAAC;AAOY,QAAA,0BAA0B,GAA4B;IACjE,MAAM,EAAE,MAAM;IACd,UAAU,EAAE,MAAM;IAClB,WAAW,EAAE,MAAM;IACnB,UAAU,EAAE,MAAM;IAClB,OAAO,EAAE,MAAM;IACf,aAAa,EAAE,MAAM;IACrB,QAAQ,EAAE,MAAM;IAChB,gBAAgB,EAAE,MAAM;IACxB,iBAAiB,EAAE,MAAM;IACzB,SAAS,EAAE,MAAM;IACjB,YAAY,EAAE,MAAM;IACpB,GAAG,EAAE,MAAM;CACZ,CAAC;AAEF,SAAgB,4BAA4B,CAC1C,YAA8C,EAAE;IAEhD,MAAM,MAAM,GAA4B,EAAE,GAAG,kCAA0B,EAAE,GAAG,SAAS,EAAE,CAAC;IACxF,OAAO,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;SAC1B,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,OAAO,IAAI,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;SAChE,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC;AAED,SAAS,cAAc,CAAC,CAAkB;IACxC,IAAI,CAAC,KAAK,MAAM;QAAE,OAAO,IAAI,CAAC;IAC9B,IAAI,CAAC,KAAK,MAAM;QAAE,OAAO,QAAQ,CAAC;IAElC,MAAM,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACtE,OAAO,IAAI,KAAK,GAAG,CAAC;AACtB,CAAC","sourcesContent":["import { Environment } from \"src/decorators/disallow-in-production.decorator\";\nimport { HelmetOptions } from \"helmet\"; \n\nexport function buildDefaultSecurityHeaderOptions(): Readonly<HelmetOptions> {\n return {\n referrerPolicy: { policy: 'strict-origin-when-cross-origin' },\n crossOriginEmbedderPolicy: false,\n crossOriginResourcePolicy: { policy: 'same-site' },\n frameguard: { action: 'sameorigin' }, // or { action: 'deny' }\n // HSTS: send only in prod over HTTPS\n hsts:\n process.env.NODE_ENV === Environment.Production\n ? { maxAge: 31536000, includeSubDomains: true, preload: true } // 1 year\n : false,\n }\n}\n\ntype Source = 'self' | 'none' | string; // string = an origin like 'https://cdn.example.com'\ntype DirectiveConfig = 'self' | 'none' | Source[];\n\nexport type PermissionsPolicyConfig = Record<string, DirectiveConfig>;\n\nexport const DEFAULT_PERMISSIONS_POLICY: PermissionsPolicyConfig = {\n camera: 'none',\n microphone: 'none',\n geolocation: 'none',\n fullscreen: 'self', // allow same-origin fullscreen\n payment: 'none',\n accelerometer: 'none',\n autoplay: 'none',\n 'clipboard-read': 'none',\n 'clipboard-write': 'none',\n gyroscope: 'none',\n magnetometer: 'none',\n usb: 'none',\n};\n\nexport function buildPermissionsPolicyHeader(\n overrides: Partial<PermissionsPolicyConfig> = {}\n): string {\n const merged: PermissionsPolicyConfig = { ...DEFAULT_PERMISSIONS_POLICY, ...overrides };\n return Object.entries(merged)\n .map(([feature, value]) => `${feature}=${serializeValue(value)}`)\n .join(', ');\n}\n\nfunction serializeValue(v: DirectiveConfig): string {\n if (v === 'none') return '()';\n if (v === 'self') return '(self)';\n // array of sources: allow 'self' and/or explicit origins\n const parts = v.map(src => (src === 'self' ? 'self' : src)).join(' ');\n return `(${parts})`;\n}\n"]}
package/dist/index.d.ts CHANGED
@@ -129,6 +129,7 @@ export * from './entities/dashboard-question.entity';
129
129
  export * from './entities/dashboard-question-sql-dataset-config.entity';
130
130
  export * from './entities/ai-interaction.entity';
131
131
  export * from './enums/auth-type.enum';
132
+ export * from './decorators/disallow-in-production.decorator';
132
133
  export * from './filters/http-exception.filter';
133
134
  export * from './guards/access-token.guard';
134
135
  export * from './guards/authentication.guard';
@@ -159,6 +160,8 @@ export * from './helpers/field-crud-managers/SelectionStaticFieldCrudManager';
159
160
  export * from './helpers/field-crud-managers/ShortTextFieldCrudManager';
160
161
  export * from './helpers/field-crud-managers/UUIDFieldCrudManager';
161
162
  export * from './helpers/environment.helper';
163
+ export * from './helpers/cors.helper';
164
+ export * from './helpers/security.helper';
162
165
  export * from './services/crud.service';
163
166
  export * from './interceptors/logging.interceptor';
164
167
  export * from './interceptors/wrap-response.interceptor';