@solidstarters/solid-core 1.2.153 → 1.2.155
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/config/iam.config.d.ts +6 -0
- package/dist/config/iam.config.d.ts.map +1 -1
- package/dist/config/iam.config.js +3 -0
- package/dist/config/iam.config.js.map +1 -1
- package/dist/constants/error-messages.js +1 -1
- package/dist/constants/error-messages.js.map +1 -1
- package/dist/controllers/ai-interaction.controller.d.ts +2 -1
- package/dist/controllers/ai-interaction.controller.d.ts.map +1 -1
- package/dist/controllers/ai-interaction.controller.js +5 -3
- package/dist/controllers/ai-interaction.controller.js.map +1 -1
- package/dist/controllers/authentication.controller.d.ts +6 -6
- package/dist/controllers/authentication.controller.d.ts.map +1 -1
- package/dist/controllers/authentication.controller.js +15 -7
- package/dist/controllers/authentication.controller.js.map +1 -1
- package/dist/controllers/email-template.controller.d.ts.map +1 -1
- package/dist/controllers/email-template.controller.js +3 -0
- package/dist/controllers/email-template.controller.js.map +1 -1
- package/dist/controllers/google-authentication.controller.d.ts.map +1 -1
- package/dist/controllers/google-authentication.controller.js +3 -0
- package/dist/controllers/google-authentication.controller.js.map +1 -1
- package/dist/controllers/media.controller.d.ts.map +1 -1
- package/dist/controllers/media.controller.js +4 -0
- package/dist/controllers/media.controller.js.map +1 -1
- package/dist/controllers/model-metadata.controller.d.ts.map +1 -1
- package/dist/controllers/model-metadata.controller.js +5 -0
- package/dist/controllers/model-metadata.controller.js.map +1 -1
- package/dist/controllers/otp-authentication.controller.d.ts.map +1 -1
- package/dist/controllers/otp-authentication.controller.js +3 -0
- package/dist/controllers/otp-authentication.controller.js.map +1 -1
- package/dist/controllers/service.controller.d.ts.map +1 -1
- package/dist/controllers/service.controller.js +4 -0
- package/dist/controllers/service.controller.js.map +1 -1
- package/dist/controllers/sms-template.controller.d.ts +1 -1
- package/dist/controllers/sms-template.controller.d.ts.map +1 -1
- package/dist/controllers/sms-template.controller.js +6 -3
- package/dist/controllers/sms-template.controller.js.map +1 -1
- package/dist/decorators/solid-password.decorator.d.ts +12 -0
- package/dist/decorators/solid-password.decorator.d.ts.map +1 -0
- package/dist/decorators/solid-password.decorator.js +43 -0
- package/dist/decorators/solid-password.decorator.js.map +1 -0
- package/dist/dtos/change-password.dto.d.ts.map +1 -1
- package/dist/dtos/change-password.dto.js +2 -0
- package/dist/dtos/change-password.dto.js.map +1 -1
- package/dist/dtos/confirm-forgot-password.dto.d.ts.map +1 -1
- package/dist/dtos/confirm-forgot-password.dto.js +2 -0
- package/dist/dtos/confirm-forgot-password.dto.js.map +1 -1
- package/dist/helpers/cors.helper.d.ts +4 -0
- package/dist/helpers/cors.helper.d.ts.map +1 -0
- package/dist/helpers/cors.helper.js +33 -0
- package/dist/helpers/cors.helper.js.map +1 -0
- package/dist/helpers/security.helper.d.ts +9 -0
- package/dist/helpers/security.helper.d.ts.map +1 -0
- package/dist/helpers/security.helper.js +46 -0
- package/dist/helpers/security.helper.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/repository/chatter-message-details.repository.d.ts +16 -0
- package/dist/repository/chatter-message-details.repository.d.ts.map +1 -0
- package/dist/repository/chatter-message-details.repository.js +62 -0
- package/dist/repository/chatter-message-details.repository.js.map +1 -0
- package/dist/repository/chatter-message.repository.d.ts +16 -0
- package/dist/repository/chatter-message.repository.d.ts.map +1 -0
- package/dist/repository/chatter-message.repository.js +61 -0
- package/dist/repository/chatter-message.repository.js.map +1 -0
- package/dist/repository/security-rule.repository.d.ts +1 -1
- package/dist/repository/security-rule.repository.d.ts.map +1 -1
- package/dist/repository/security-rule.repository.js +2 -2
- package/dist/repository/security-rule.repository.js.map +1 -1
- package/dist/repository/solid-base.repository.d.ts +6 -1
- package/dist/repository/solid-base.repository.d.ts.map +1 -1
- package/dist/repository/solid-base.repository.js +35 -0
- package/dist/repository/solid-base.repository.js.map +1 -1
- package/dist/seeders/seed-data/solid-core-metadata.json +9 -0
- package/dist/services/ai-interaction.service.d.ts +2 -4
- package/dist/services/ai-interaction.service.d.ts.map +1 -1
- package/dist/services/ai-interaction.service.js +4 -8
- package/dist/services/ai-interaction.service.js.map +1 -1
- package/dist/services/authentication.service.d.ts +6 -2
- package/dist/services/authentication.service.d.ts.map +1 -1
- package/dist/services/authentication.service.js +94 -43
- package/dist/services/authentication.service.js.map +1 -1
- package/dist/services/chatter-message-details.service.d.ts +4 -3
- package/dist/services/chatter-message-details.service.d.ts.map +1 -1
- package/dist/services/chatter-message-details.service.js +2 -3
- package/dist/services/chatter-message-details.service.js.map +1 -1
- package/dist/services/chatter-message.service.d.ts +3 -2
- package/dist/services/chatter-message.service.d.ts.map +1 -1
- package/dist/services/chatter-message.service.js +2 -2
- package/dist/services/chatter-message.service.js.map +1 -1
- package/dist/services/crud.service.d.ts.map +1 -1
- package/dist/services/crud.service.js +4 -1
- package/dist/services/crud.service.js.map +1 -1
- package/dist/services/model-metadata.service.d.ts.map +1 -1
- package/dist/services/model-metadata.service.js +4 -1
- package/dist/services/model-metadata.service.js.map +1 -1
- package/dist/services/request-context.service.d.ts +3 -0
- package/dist/services/request-context.service.d.ts.map +1 -1
- package/dist/services/request-context.service.js +6 -0
- package/dist/services/request-context.service.js.map +1 -1
- package/dist/solid-core.module.d.ts.map +1 -1
- package/dist/solid-core.module.js +23 -5
- package/dist/solid-core.module.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +3 -1
- package/src/config/iam.config.ts +3 -0
- package/src/constants/error-messages.ts +1 -1
- package/src/controllers/ai-interaction.controller.ts +4 -2
- package/src/controllers/authentication.controller.ts +16 -10
- package/src/controllers/email-template.controller.ts +4 -1
- package/src/controllers/google-authentication.controller.ts +4 -0
- package/src/controllers/media.controller.ts +5 -1
- package/src/controllers/model-metadata.controller.ts +7 -2
- package/src/controllers/otp-authentication.controller.ts +4 -1
- package/src/controllers/service.controller.ts +5 -1
- package/src/controllers/sms-template.controller.ts +8 -7
- package/src/decorators/solid-password.decorator.ts +51 -0
- package/src/dtos/change-password.dto.ts +2 -0
- package/src/dtos/confirm-forgot-password.dto.ts +2 -0
- package/src/helpers/cors.helper.ts +34 -0
- package/src/helpers/security.helper.ts +53 -0
- package/src/index.ts +3 -0
- package/src/repository/chatter-message-details.repository.ts +109 -0
- package/src/repository/chatter-message.repository.ts +68 -0
- package/src/repository/security-rule.repository.ts +2 -2
- package/src/repository/solid-base.repository.ts +66 -0
- package/src/seeders/seed-data/email-templates/password-changed.handlebars.html +158 -0
- package/src/seeders/seed-data/solid-core-metadata.json +9 -0
- package/src/services/ai-interaction.service.ts +5 -5
- package/src/services/authentication.service.ts +181 -56
- package/src/services/chatter-message-details.service.ts +3 -2
- package/src/services/chatter-message.service.ts +3 -2
- package/src/services/crud.service.ts +7 -2
- package/src/services/model-metadata.service.ts +15 -1
- package/src/services/request-context.service.ts +9 -0
- 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,
|
|
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;
|
|
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":";;;;;;;;;;;;;;;;AAAA,
|
|
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;
|
|
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,
|
|
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;
|
|
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,
|
|
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":"
|
|
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
|
|
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
|
|
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":";;;;;;;;;;;;;;;;AAAA,
|
|
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":"
|
|
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;
|
|
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":"
|
|
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;
|
|
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 @@
|
|
|
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('SECURITY_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,uBAAuB,CAAC,IAAI,GAAG,CAAC;IAC7E,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>('SECURITY_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';
|