@evara-group/guard 1.0.30

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 (84) hide show
  1. package/README.md +46 -0
  2. package/dist/core/enums/locale.d.ts +4 -0
  3. package/dist/core/enums/locale.js +9 -0
  4. package/dist/core/enums/locale.js.map +1 -0
  5. package/dist/core/enums/user-role.d.ts +4 -0
  6. package/dist/core/enums/user-role.js +9 -0
  7. package/dist/core/enums/user-role.js.map +1 -0
  8. package/dist/core/utils/base.dto.d.ts +9 -0
  9. package/dist/core/utils/base.dto.js +7 -0
  10. package/dist/core/utils/base.dto.js.map +1 -0
  11. package/dist/core/utils/base.entity.d.ts +9 -0
  12. package/dist/core/utils/base.entity.js +45 -0
  13. package/dist/core/utils/base.entity.js.map +1 -0
  14. package/dist/core/utils/header-util.d.ts +4 -0
  15. package/dist/core/utils/header-util.js +12 -0
  16. package/dist/core/utils/header-util.js.map +1 -0
  17. package/dist/core/utils/paginate.dto.d.ts +6 -0
  18. package/dist/core/utils/paginate.dto.js +64 -0
  19. package/dist/core/utils/paginate.dto.js.map +1 -0
  20. package/dist/core/utils/pagination.entity.d.ts +19 -0
  21. package/dist/core/utils/pagination.entity.js +63 -0
  22. package/dist/core/utils/pagination.entity.js.map +1 -0
  23. package/dist/core/utils/password-util.d.ts +3 -0
  24. package/dist/core/utils/password-util.js +44 -0
  25. package/dist/core/utils/password-util.js.map +1 -0
  26. package/dist/core/utils/request.d.ts +7 -0
  27. package/dist/core/utils/request.js +3 -0
  28. package/dist/core/utils/request.js.map +1 -0
  29. package/dist/core/utils/response-message.dto.d.ts +3 -0
  30. package/dist/core/utils/response-message.dto.js +7 -0
  31. package/dist/core/utils/response-message.dto.js.map +1 -0
  32. package/dist/index.d.ts +9 -0
  33. package/dist/index.js +26 -0
  34. package/dist/index.js.map +1 -0
  35. package/dist/security/decorators/auth-user.decorator.d.ts +1 -0
  36. package/dist/security/decorators/auth-user.decorator.js +9 -0
  37. package/dist/security/decorators/auth-user.decorator.js.map +1 -0
  38. package/dist/security/decorators/roles.decorator.d.ts +1 -0
  39. package/dist/security/decorators/roles.decorator.js +7 -0
  40. package/dist/security/decorators/roles.decorator.js.map +1 -0
  41. package/dist/security/guards/jwt-auth.guard.d.ts +4 -0
  42. package/dist/security/guards/jwt-auth.guard.js +18 -0
  43. package/dist/security/guards/jwt-auth.guard.js.map +1 -0
  44. package/dist/security/guards/roles.guard.d.ts +7 -0
  45. package/dist/security/guards/roles.guard.js +35 -0
  46. package/dist/security/guards/roles.guard.js.map +1 -0
  47. package/dist/security/security.module.d.ts +7 -0
  48. package/dist/security/security.module.js +43 -0
  49. package/dist/security/security.module.js.map +1 -0
  50. package/dist/security/security.service.d.ts +7 -0
  51. package/dist/security/security.service.js +31 -0
  52. package/dist/security/security.service.js.map +1 -0
  53. package/dist/security/strategies/jwt.strategy.d.ts +9 -0
  54. package/dist/security/strategies/jwt.strategy.js +38 -0
  55. package/dist/security/strategies/jwt.strategy.js.map +1 -0
  56. package/dist/tsconfig.tsbuildinfo +1 -0
  57. package/dist/user/dtos/create-user.dto.d.ts +5 -0
  58. package/dist/user/dtos/create-user.dto.js +7 -0
  59. package/dist/user/dtos/create-user.dto.js.map +1 -0
  60. package/dist/user/dtos/update-user.dto.d.ts +5 -0
  61. package/dist/user/dtos/update-user.dto.js +9 -0
  62. package/dist/user/dtos/update-user.dto.js.map +1 -0
  63. package/dist/user/dtos/user-query.dto.d.ts +3 -0
  64. package/dist/user/dtos/user-query.dto.js +8 -0
  65. package/dist/user/dtos/user-query.dto.js.map +1 -0
  66. package/dist/user/dtos/user.dto.d.ts +11 -0
  67. package/dist/user/dtos/user.dto.js +81 -0
  68. package/dist/user/dtos/user.dto.js.map +1 -0
  69. package/dist/user/user.controller.d.ts +16 -0
  70. package/dist/user/user.controller.js +161 -0
  71. package/dist/user/user.controller.js.map +1 -0
  72. package/dist/user/user.entity.d.ts +11 -0
  73. package/dist/user/user.entity.js +52 -0
  74. package/dist/user/user.entity.js.map +1 -0
  75. package/dist/user/user.mapper.d.ts +6 -0
  76. package/dist/user/user.mapper.js +32 -0
  77. package/dist/user/user.mapper.js.map +1 -0
  78. package/dist/user/user.module.d.ts +4 -0
  79. package/dist/user/user.module.js +31 -0
  80. package/dist/user/user.module.js.map +1 -0
  81. package/dist/user/user.service.d.ts +15 -0
  82. package/dist/user/user.service.js +79 -0
  83. package/dist/user/user.service.js.map +1 -0
  84. package/package.json +43 -0
package/README.md ADDED
@@ -0,0 +1,46 @@
1
+ # NestJS Authorization Guards (Roles + Permissions)
2
+
3
+ A reusable and extensible **role + permission-based access control** system for NestJS applications.
4
+
5
+ ---
6
+
7
+ ## 🚀 Features
8
+
9
+ - ✅ Role-based access control (`UserRole`)
10
+ - ✅ Permission-based access control (`Permission`)
11
+ - ✅ Unified `@Roles()` decorator to handle both
12
+ - ✅ Built-in `AuthUser` decorator for easy access to authenticated user
13
+ - ✅ JWT-compatible `AuthGuard` via Passport strategy
14
+ - ✅ Plug-and-play with DTOs and enums
15
+
16
+ ---
17
+
18
+ ## 📦 Files Overview
19
+
20
+ | File | Purpose |
21
+ |-------------------------------|-----------------------------------------|
22
+ | `roles.guard.ts` | Guard that checks roles & permissions |
23
+ | `roles.decorator.ts` | `@Roles()` decorator |
24
+ | `auth.guard.ts` | JWT-based authentication guard |
25
+ | `auth-user.decorator.ts` | Custom param decorator for user access |
26
+ | `user-role.enum.ts` | Enum defining system roles |
27
+ | `permission.enum.ts` | Enum defining permission constants |
28
+ | `user.dto.ts` | DTO representing user payload structure |
29
+
30
+ ---
31
+
32
+ ## 🧑‍🏫 How It Works
33
+
34
+ ### ✅ Roles + Permissions Enum
35
+
36
+ ```ts
37
+ export enum UserRole {
38
+ Admin = 'admin',
39
+ Manager = 'manager',
40
+ User = 'user',
41
+ }
42
+
43
+ export enum Permission {
44
+ ReadScenarios = 'scenarios:read',
45
+ EditScenarios = 'scenarios:edit',
46
+ }
@@ -0,0 +1,4 @@
1
+ export declare enum Locale {
2
+ EN = "en",
3
+ AR = "ar"
4
+ }
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Locale = void 0;
4
+ var Locale;
5
+ (function (Locale) {
6
+ Locale["EN"] = "en";
7
+ Locale["AR"] = "ar";
8
+ })(Locale || (exports.Locale = Locale = {}));
9
+ //# sourceMappingURL=locale.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"locale.js","sourceRoot":"","sources":["../../../src/core/enums/locale.ts"],"names":[],"mappings":";;;AAAA,IAAY,MAGX;AAHD,WAAY,MAAM;IAChB,mBAAS,CAAA;IACT,mBAAS,CAAA;AACX,CAAC,EAHW,MAAM,sBAAN,MAAM,QAGjB"}
@@ -0,0 +1,4 @@
1
+ export declare enum UserRole {
2
+ ADMIN = "ADMIN",
3
+ USER = "USER"
4
+ }
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.UserRole = void 0;
4
+ var UserRole;
5
+ (function (UserRole) {
6
+ UserRole["ADMIN"] = "ADMIN";
7
+ UserRole["USER"] = "USER";
8
+ })(UserRole || (exports.UserRole = UserRole = {}));
9
+ //# sourceMappingURL=user-role.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user-role.js","sourceRoot":"","sources":["../../../src/core/enums/user-role.ts"],"names":[],"mappings":";;;AAAA,IAAY,QAGX;AAHD,WAAY,QAAQ;IAClB,2BAAe,CAAA;IACf,yBAAa,CAAA;AACf,CAAC,EAHW,QAAQ,wBAAR,QAAQ,QAGnB"}
@@ -0,0 +1,9 @@
1
+ export declare class BaseDTO {
2
+ id?: number;
3
+ createdBy?: string;
4
+ createdAt?: Date;
5
+ updatedBy?: string;
6
+ updatedAt?: Date;
7
+ deletedBy?: string;
8
+ deletedAt?: Date;
9
+ }
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BaseDTO = void 0;
4
+ class BaseDTO {
5
+ }
6
+ exports.BaseDTO = BaseDTO;
7
+ //# sourceMappingURL=base.dto.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.dto.js","sourceRoot":"","sources":["../../../src/core/utils/base.dto.ts"],"names":[],"mappings":";;;AAGA,MAAa,OAAO;CAQnB;AARD,0BAQC"}
@@ -0,0 +1,9 @@
1
+ export declare abstract class BaseEntity {
2
+ id?: number;
3
+ createdBy?: string;
4
+ createdAt?: Date;
5
+ updatedBy?: string;
6
+ updatedAt?: Date;
7
+ deletedBy?: string;
8
+ deletedAt?: Date;
9
+ }
@@ -0,0 +1,45 @@
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
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.BaseEntity = void 0;
13
+ const typeorm_1 = require("typeorm");
14
+ class BaseEntity {
15
+ }
16
+ exports.BaseEntity = BaseEntity;
17
+ __decorate([
18
+ (0, typeorm_1.PrimaryGeneratedColumn)(),
19
+ __metadata("design:type", Number)
20
+ ], BaseEntity.prototype, "id", void 0);
21
+ __decorate([
22
+ (0, typeorm_1.Column)({ name: "created_by", nullable: true }),
23
+ __metadata("design:type", String)
24
+ ], BaseEntity.prototype, "createdBy", void 0);
25
+ __decorate([
26
+ (0, typeorm_1.CreateDateColumn)({ name: "created_at", type: "timestamptz" }),
27
+ __metadata("design:type", Date)
28
+ ], BaseEntity.prototype, "createdAt", void 0);
29
+ __decorate([
30
+ (0, typeorm_1.Column)({ name: "updated_by", nullable: true }),
31
+ __metadata("design:type", String)
32
+ ], BaseEntity.prototype, "updatedBy", void 0);
33
+ __decorate([
34
+ (0, typeorm_1.UpdateDateColumn)({ name: "updated_at", type: "timestamptz" }),
35
+ __metadata("design:type", Date)
36
+ ], BaseEntity.prototype, "updatedAt", void 0);
37
+ __decorate([
38
+ (0, typeorm_1.Column)({ name: "deleted_by", nullable: true }),
39
+ __metadata("design:type", String)
40
+ ], BaseEntity.prototype, "deletedBy", void 0);
41
+ __decorate([
42
+ (0, typeorm_1.DeleteDateColumn)({ name: "deleted_at", type: "timestamptz", nullable: true }),
43
+ __metadata("design:type", Date)
44
+ ], BaseEntity.prototype, "deletedAt", void 0);
45
+ //# sourceMappingURL=base.entity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.entity.js","sourceRoot":"","sources":["../../../src/core/utils/base.entity.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qCAMiB;AAEjB,MAAsB,UAAU;CAqB/B;AArBD,gCAqBC;AAnBC;IADC,IAAA,gCAAsB,GAAE;;sCACb;AAGZ;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;6CAC5B;AAGnB;IADC,IAAA,0BAAgB,EAAC,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC;8BAClD,IAAI;6CAAC;AAGjB;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;6CAC5B;AAGnB;IADC,IAAA,0BAAgB,EAAC,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC;8BAClD,IAAI;6CAAC;AAGjB;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;6CAC5B;AAGnB;IADC,IAAA,0BAAgB,EAAC,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;8BAClE,IAAI;6CAAC"}
@@ -0,0 +1,4 @@
1
+ import { Response } from 'express';
2
+ export declare class HeaderUtil {
3
+ static addPaginationHeaders(res: Response, total: number, currentPage: number, nextPage: boolean): any;
4
+ }
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.HeaderUtil = void 0;
4
+ class HeaderUtil {
5
+ static addPaginationHeaders(res, total, currentPage, nextPage) {
6
+ res.set('X-Total-Count', total.toString());
7
+ res.set('Current-Page', currentPage.toString());
8
+ res.set('Has-Next-Page', nextPage.toString());
9
+ }
10
+ }
11
+ exports.HeaderUtil = HeaderUtil;
12
+ //# sourceMappingURL=header-util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"header-util.js","sourceRoot":"","sources":["../../../src/core/utils/header-util.ts"],"names":[],"mappings":";;;AAEA,MAAa,UAAU;IACrB,MAAM,CAAC,oBAAoB,CACzB,GAAa,EACb,KAAa,EACb,WAAmB,EACnB,QAAiB;QAEjB,GAAG,CAAC,GAAG,CAAC,eAAe,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC3C,GAAG,CAAC,GAAG,CAAC,cAAc,EAAE,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC;QAChD,GAAG,CAAC,GAAG,CAAC,eAAe,EAAE,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC;IAChD,CAAC;CACF;AAXD,gCAWC"}
@@ -0,0 +1,6 @@
1
+ export declare class PaginateDTO {
2
+ page?: number;
3
+ pageSize?: number;
4
+ sortField?: string;
5
+ sortOrder?: 'ASC' | 'DESC';
6
+ }
@@ -0,0 +1,64 @@
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
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.PaginateDTO = void 0;
13
+ const swagger_1 = require("@nestjs/swagger");
14
+ const class_validator_1 = require("class-validator");
15
+ const class_transformer_1 = require("class-transformer");
16
+ class PaginateDTO {
17
+ constructor() {
18
+ this.page = 1;
19
+ this.pageSize = 10;
20
+ }
21
+ }
22
+ exports.PaginateDTO = PaginateDTO;
23
+ __decorate([
24
+ (0, swagger_1.ApiProperty)({
25
+ required: false,
26
+ description: 'Page number',
27
+ default: 1,
28
+ }),
29
+ (0, class_validator_1.IsOptional)(),
30
+ (0, class_transformer_1.Type)(() => Number),
31
+ (0, class_validator_1.IsNumber)(),
32
+ __metadata("design:type", Number)
33
+ ], PaginateDTO.prototype, "page", void 0);
34
+ __decorate([
35
+ (0, swagger_1.ApiProperty)({
36
+ required: false,
37
+ description: 'Number of items per page',
38
+ default: 10,
39
+ }),
40
+ (0, class_validator_1.IsOptional)(),
41
+ (0, class_transformer_1.Type)(() => Number),
42
+ (0, class_validator_1.IsNumber)(),
43
+ __metadata("design:type", Number)
44
+ ], PaginateDTO.prototype, "pageSize", void 0);
45
+ __decorate([
46
+ (0, swagger_1.ApiProperty)({
47
+ required: false,
48
+ description: 'Field to sort by',
49
+ }),
50
+ (0, class_validator_1.IsOptional)(),
51
+ (0, class_validator_1.IsString)(),
52
+ __metadata("design:type", String)
53
+ ], PaginateDTO.prototype, "sortField", void 0);
54
+ __decorate([
55
+ (0, swagger_1.ApiProperty)({
56
+ required: false,
57
+ description: 'Sort order (ASC or DESC)',
58
+ enum: ['ASC', 'DESC'],
59
+ }),
60
+ (0, class_validator_1.IsOptional)(),
61
+ (0, class_validator_1.IsEnum)(['ASC', 'DESC']),
62
+ __metadata("design:type", String)
63
+ ], PaginateDTO.prototype, "sortOrder", void 0);
64
+ //# sourceMappingURL=paginate.dto.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paginate.dto.js","sourceRoot":"","sources":["../../../src/core/utils/paginate.dto.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,6CAA8C;AAC9C,qDAAyE;AACzE,yDAAyC;AAEzC,MAAa,WAAW;IAAxB;QASE,SAAI,GAAY,CAAC,CAAC;QAUlB,aAAQ,GAAY,EAAE,CAAC;IAkBzB,CAAC;CAAA;AArCD,kCAqCC;AA5BC;IARC,IAAA,qBAAW,EAAC;QACX,QAAQ,EAAE,KAAK;QACf,WAAW,EAAE,aAAa;QAC1B,OAAO,EAAE,CAAC;KACX,CAAC;IACD,IAAA,4BAAU,GAAE;IACZ,IAAA,wBAAI,EAAC,GAAG,EAAE,CAAC,MAAM,CAAC;IAClB,IAAA,0BAAQ,GAAE;;yCACO;AAUlB;IARC,IAAA,qBAAW,EAAC;QACX,QAAQ,EAAE,KAAK;QACf,WAAW,EAAE,0BAA0B;QACvC,OAAO,EAAE,EAAE;KACZ,CAAC;IACD,IAAA,4BAAU,GAAE;IACZ,IAAA,wBAAI,EAAC,GAAG,EAAE,CAAC,MAAM,CAAC;IAClB,IAAA,0BAAQ,GAAE;;6CACY;AAQvB;IANC,IAAA,qBAAW,EAAC;QACX,QAAQ,EAAE,KAAK;QACf,WAAW,EAAE,kBAAkB;KAChC,CAAC;IACD,IAAA,4BAAU,GAAE;IACZ,IAAA,0BAAQ,GAAE;;8CACQ;AASnB;IAPC,IAAA,qBAAW,EAAC;QACX,QAAQ,EAAE,KAAK;QACf,WAAW,EAAE,0BAA0B;QACvC,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC;KACtB,CAAC;IACD,IAAA,4BAAU,GAAE;IACZ,IAAA,wBAAM,EAAC,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;;8CACG"}
@@ -0,0 +1,19 @@
1
+ import { BaseEntity } from "./base.entity";
2
+ export declare class Sort {
3
+ property: string;
4
+ direction: "ASC" | "DESC";
5
+ constructor(sort: string);
6
+ asOrder(): Record<string, "ASC" | "DESC">;
7
+ }
8
+ export declare class PageRequest {
9
+ page: number;
10
+ size: number;
11
+ sort: Sort;
12
+ constructor(page: number | string, size: number | string, sort: string);
13
+ }
14
+ export declare class Page<T extends BaseEntity> {
15
+ content: T[];
16
+ total: number;
17
+ pageable: PageRequest;
18
+ constructor(content: T[], total: number, pageable: PageRequest);
19
+ }
@@ -0,0 +1,63 @@
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
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.Page = exports.PageRequest = exports.Sort = void 0;
13
+ const class_transformer_1 = require("class-transformer");
14
+ class Sort {
15
+ constructor(sort) {
16
+ this.property = "id";
17
+ this.direction = "ASC";
18
+ if (sort) {
19
+ const [property, direction] = sort.split(",");
20
+ this.property = property;
21
+ const upperDirection = direction?.toUpperCase();
22
+ this.direction = upperDirection === "DESC" ? "DESC" : "ASC";
23
+ }
24
+ }
25
+ asOrder() {
26
+ const order = {};
27
+ order[this.property] = this.direction;
28
+ return order;
29
+ }
30
+ }
31
+ exports.Sort = Sort;
32
+ class PageRequest {
33
+ constructor(page, size, sort) {
34
+ this.page = 0;
35
+ this.size = 20;
36
+ this.sort = new Sort("id,ASC");
37
+ this.page = +page - 1 || this.page;
38
+ this.size = +size || this.size;
39
+ this.sort = sort ? new Sort(sort) : this.sort;
40
+ }
41
+ }
42
+ exports.PageRequest = PageRequest;
43
+ __decorate([
44
+ (0, class_transformer_1.Expose)(),
45
+ __metadata("design:type", Object)
46
+ ], PageRequest.prototype, "page", void 0);
47
+ __decorate([
48
+ (0, class_transformer_1.Expose)(),
49
+ __metadata("design:type", Object)
50
+ ], PageRequest.prototype, "size", void 0);
51
+ __decorate([
52
+ (0, class_transformer_1.Type)(() => Sort),
53
+ __metadata("design:type", Sort)
54
+ ], PageRequest.prototype, "sort", void 0);
55
+ class Page {
56
+ constructor(content, total, pageable) {
57
+ this.content = content;
58
+ this.total = total;
59
+ this.pageable = pageable;
60
+ }
61
+ }
62
+ exports.Page = Page;
63
+ //# sourceMappingURL=pagination.entity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pagination.entity.js","sourceRoot":"","sources":["../../../src/core/utils/pagination.entity.ts"],"names":[],"mappings":";;;;;;;;;;;;AACA,yDAAiE;AAEjE,MAAa,IAAI;IAGf,YAAY,IAAY;QAFjB,aAAQ,GAAW,IAAI,CAAC;QACxB,cAAS,GAAmB,KAAK,CAAC;QAEvC,IAAI,IAAI,EAAE,CAAC;YACT,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC9C,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;YAEzB,MAAM,cAAc,GAAG,SAAS,EAAE,WAAW,EAAE,CAAC;YAChD,IAAI,CAAC,SAAS,GAAG,cAAc,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;QAC9D,CAAC;IACH,CAAC;IAED,OAAO;QAEL,MAAM,KAAK,GAAmC,EAAE,CAAC;QACjD,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC;QACtC,OAAO,KAAK,CAAC;IACf,CAAC;CACF;AAnBD,oBAmBC;AAED,MAAa,WAAW;IAQtB,YAAY,IAAqB,EAAE,IAAqB,EAAE,IAAY;QANtE,SAAI,GAAG,CAAC,CAAC;QAET,SAAI,GAAG,EAAE,CAAC;QAEV,SAAI,GAAS,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC;QAG9B,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC;QACnC,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC;QAC/B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;IAChD,CAAC;CACF;AAbD,kCAaC;AAXC;IADC,IAAA,0BAAY,GAAE;;yCACN;AAET;IADC,IAAA,0BAAY,GAAE;;yCACL;AAEV;IADC,IAAA,wBAAI,EAAC,GAAG,EAAE,CAAC,IAAI,CAAC;8BACX,IAAI;yCAAsB;AASlC,MAAa,IAAI;IACf,YACS,OAAY,EACZ,KAAa,EACb,QAAqB;QAFrB,YAAO,GAAP,OAAO,CAAK;QACZ,UAAK,GAAL,KAAK,CAAQ;QACb,aAAQ,GAAR,QAAQ,CAAa;IAC3B,CAAC;CACL;AAND,oBAMC"}
@@ -0,0 +1,3 @@
1
+ export declare function transformPassword(user: {
2
+ password?: string;
3
+ }): Promise<void>;
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.transformPassword = transformPassword;
37
+ const bcrypt = __importStar(require("bcrypt"));
38
+ async function transformPassword(user) {
39
+ if (user.password) {
40
+ user.password = await bcrypt.hash(user.password, 10);
41
+ }
42
+ return Promise.resolve();
43
+ }
44
+ //# sourceMappingURL=password-util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"password-util.js","sourceRoot":"","sources":["../../../src/core/utils/password-util.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,8CAOC;AATD,+CAAiC;AAE1B,KAAK,UAAU,iBAAiB,CAAC,IAEvC;IACC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClB,IAAI,CAAC,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IACvD,CAAC;IACD,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;AAC3B,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { Locale } from "../../core/enums/locale";
2
+ import { Request as ExpressRequest } from "express";
3
+ import { UserDTO } from "../../user/dtos/user.dto";
4
+ export interface Request extends ExpressRequest {
5
+ user?: UserDTO;
6
+ locale: Locale;
7
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=request.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request.js","sourceRoot":"","sources":["../../../src/core/utils/request.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ export declare class MessageResponseDto {
2
+ message?: string;
3
+ }
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MessageResponseDto = void 0;
4
+ class MessageResponseDto {
5
+ }
6
+ exports.MessageResponseDto = MessageResponseDto;
7
+ //# sourceMappingURL=response-message.dto.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"response-message.dto.js","sourceRoot":"","sources":["../../../src/core/utils/response-message.dto.ts"],"names":[],"mappings":";;;AAAA,MAAa,kBAAkB;CAE9B;AAFD,gDAEC"}
@@ -0,0 +1,9 @@
1
+ export * from "./security/security.module";
2
+ export * from "./security/security.service";
3
+ export * from "./security/guards/jwt-auth.guard";
4
+ export * from "./security/guards/roles.guard";
5
+ export * from "./security/decorators/auth-user.decorator";
6
+ export * from "./security/decorators/roles.decorator";
7
+ export * from "./user/user.module";
8
+ export * from "./user/user.service";
9
+ export * from "./user/user.entity";
package/dist/index.js ADDED
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./security/security.module"), exports);
18
+ __exportStar(require("./security/security.service"), exports);
19
+ __exportStar(require("./security/guards/jwt-auth.guard"), exports);
20
+ __exportStar(require("./security/guards/roles.guard"), exports);
21
+ __exportStar(require("./security/decorators/auth-user.decorator"), exports);
22
+ __exportStar(require("./security/decorators/roles.decorator"), exports);
23
+ __exportStar(require("./user/user.module"), exports);
24
+ __exportStar(require("./user/user.service"), exports);
25
+ __exportStar(require("./user/user.entity"), exports);
26
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,6DAA2C;AAC3C,8DAA4C;AAC5C,mEAAiD;AACjD,gEAA8C;AAC9C,4EAA0D;AAC1D,wEAAsD;AACtD,qDAAmC;AACnC,sDAAoC;AACpC,qDAAmC"}
@@ -0,0 +1 @@
1
+ export declare const AuthUser: (...dataOrPipes: any[]) => ParameterDecorator;
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AuthUser = void 0;
4
+ const common_1 = require("@nestjs/common");
5
+ exports.AuthUser = (0, common_1.createParamDecorator)((_, ctx) => {
6
+ const req = ctx.switchToHttp().getRequest();
7
+ return req.user;
8
+ });
9
+ //# sourceMappingURL=auth-user.decorator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-user.decorator.js","sourceRoot":"","sources":["../../../src/security/decorators/auth-user.decorator.ts"],"names":[],"mappings":";;;AAAA,2CAAwE;AAE3D,QAAA,QAAQ,GAAG,IAAA,6BAAoB,EAAC,CAAC,CAAC,EAAE,GAAqB,EAAE,EAAE;IACxE,MAAM,GAAG,GAAG,GAAG,CAAC,YAAY,EAAE,CAAC,UAAU,EAAE,CAAC;IAC5C,OAAO,GAAG,CAAC,IAAI,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -0,0 +1 @@
1
+ export declare const Roles: (...roles: string[]) => import("@nestjs/common").CustomDecorator<string>;
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Roles = void 0;
4
+ const common_1 = require("@nestjs/common");
5
+ const Roles = (...roles) => (0, common_1.SetMetadata)('roles', roles);
6
+ exports.Roles = Roles;
7
+ //# sourceMappingURL=roles.decorator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"roles.decorator.js","sourceRoot":"","sources":["../../../src/security/decorators/roles.decorator.ts"],"names":[],"mappings":";;;AAAA,2CAA6C;AAEtC,MAAM,KAAK,GAAG,CAAC,GAAG,KAAe,EAAE,EAAE,CAAC,IAAA,oBAAW,EAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AAA5D,QAAA,KAAK,SAAuD"}
@@ -0,0 +1,4 @@
1
+ declare const JwtAuthGuard_base: import("@nestjs/passport").Type<import("@nestjs/passport").IAuthGuard>;
2
+ export declare class JwtAuthGuard extends JwtAuthGuard_base {
3
+ }
4
+ export {};
@@ -0,0 +1,18 @@
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.JwtAuthGuard = void 0;
10
+ const common_1 = require("@nestjs/common");
11
+ const passport_1 = require("@nestjs/passport");
12
+ let JwtAuthGuard = class JwtAuthGuard extends (0, passport_1.AuthGuard)('jwt') {
13
+ };
14
+ exports.JwtAuthGuard = JwtAuthGuard;
15
+ exports.JwtAuthGuard = JwtAuthGuard = __decorate([
16
+ (0, common_1.Injectable)()
17
+ ], JwtAuthGuard);
18
+ //# sourceMappingURL=jwt-auth.guard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jwt-auth.guard.js","sourceRoot":"","sources":["../../../src/security/guards/jwt-auth.guard.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAA4C;AAC5C,+CAA6C;AAGtC,IAAM,YAAY,GAAlB,MAAM,YAAa,SAAQ,IAAA,oBAAS,EAAC,KAAK,CAAC;CAAG,CAAA;AAAxC,oCAAY;uBAAZ,YAAY;IADxB,IAAA,mBAAU,GAAE;GACA,YAAY,CAA4B"}
@@ -0,0 +1,7 @@
1
+ import { CanActivate, ExecutionContext } from '@nestjs/common';
2
+ import { Reflector } from '@nestjs/core';
3
+ export declare class RolesGuard implements CanActivate {
4
+ private reflector;
5
+ constructor(reflector: Reflector);
6
+ canActivate(ctx: ExecutionContext): boolean;
7
+ }
@@ -0,0 +1,35 @@
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
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.RolesGuard = void 0;
13
+ const common_1 = require("@nestjs/common");
14
+ const core_1 = require("@nestjs/core");
15
+ let RolesGuard = class RolesGuard {
16
+ constructor(reflector) {
17
+ this.reflector = reflector;
18
+ }
19
+ canActivate(ctx) {
20
+ const required = this.reflector.get('roles', ctx.getHandler());
21
+ if (!required)
22
+ return true;
23
+ const req = ctx.switchToHttp().getRequest();
24
+ const user = req.user;
25
+ if (!user)
26
+ return false;
27
+ return required.some((r) => user.roles?.includes(r));
28
+ }
29
+ };
30
+ exports.RolesGuard = RolesGuard;
31
+ exports.RolesGuard = RolesGuard = __decorate([
32
+ (0, common_1.Injectable)(),
33
+ __metadata("design:paramtypes", [core_1.Reflector])
34
+ ], RolesGuard);
35
+ //# sourceMappingURL=roles.guard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"roles.guard.js","sourceRoot":"","sources":["../../../src/security/guards/roles.guard.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA2E;AAC3E,uCAAyC;AAGlC,IAAM,UAAU,GAAhB,MAAM,UAAU;IACrB,YAAoB,SAAoB;QAApB,cAAS,GAAT,SAAS,CAAW;IAAG,CAAC;IAE5C,WAAW,CAAC,GAAqB;QAC/B,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAW,OAAO,EAAE,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC;QACzE,IAAI,CAAC,QAAQ;YAAE,OAAO,IAAI,CAAC;QAE3B,MAAM,GAAG,GAAG,GAAG,CAAC,YAAY,EAAE,CAAC,UAAU,EAAE,CAAC;QAC5C,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;QACtB,IAAI,CAAC,IAAI;YAAE,OAAO,KAAK,CAAC;QAExB,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IACvD,CAAC;CACF,CAAA;AAbY,gCAAU;qBAAV,UAAU;IADtB,IAAA,mBAAU,GAAE;qCAEoB,gBAAS;GAD7B,UAAU,CAatB"}
@@ -0,0 +1,7 @@
1
+ import { DynamicModule } from "@nestjs/common";
2
+ export declare class SecurityModule {
3
+ static register(config: {
4
+ jwtSecret: string;
5
+ expiresIn?: string;
6
+ }): DynamicModule;
7
+ }