@flusys/nestjs-shared 1.1.0 → 1.2.0-rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (158) hide show
  1. package/README.md +139 -1103
  2. package/cjs/classes/api-controller.class.js +320 -29
  3. package/cjs/classes/api-service.class.js +219 -64
  4. package/cjs/classes/handle-custome-db.js +37 -0
  5. package/cjs/classes/index.js +1 -2
  6. package/cjs/classes/winston.logger.class.js +103 -70
  7. package/cjs/constants/index.js +1 -4
  8. package/cjs/constants/message-keys.js +68 -0
  9. package/cjs/constants/permissions.js +114 -11
  10. package/cjs/decorators/api-response.decorator.js +1 -2
  11. package/cjs/decorators/index.js +1 -1
  12. package/cjs/decorators/log-action.decorator.js +149 -0
  13. package/cjs/decorators/require-permission.decorator.js +5 -5
  14. package/cjs/dtos/get-by-ids.dto.js +65 -0
  15. package/cjs/dtos/identity-response.dto.js +4 -8
  16. package/cjs/dtos/index.js +1 -0
  17. package/cjs/dtos/response-payload.dto.js +72 -0
  18. package/cjs/entities/identity.js +8 -2
  19. package/cjs/entities/index.js +1 -0
  20. package/cjs/entities/raw-type.js +4 -0
  21. package/cjs/entities/user-root.js +2 -1
  22. package/cjs/enums/index.js +20 -0
  23. package/cjs/enums/notification-type.enum.js +17 -0
  24. package/cjs/enums/participant-status.enum.js +17 -0
  25. package/cjs/enums/recurrence-type.enum.js +18 -0
  26. package/cjs/exceptions/base-app.exception.js +151 -0
  27. package/cjs/exceptions/index.js +1 -0
  28. package/cjs/exceptions/permission.exception.js +13 -9
  29. package/cjs/filters/global-exception.filter.js +279 -0
  30. package/cjs/filters/index.js +18 -0
  31. package/cjs/guards/jwt-auth.guard.js +4 -1
  32. package/cjs/guards/permission.guard.js +71 -77
  33. package/cjs/index.js +2 -0
  34. package/cjs/interceptors/idempotency.interceptor.js +1 -1
  35. package/cjs/interceptors/index.js +0 -1
  36. package/cjs/interfaces/event-manager-adapter.interface.js +11 -0
  37. package/cjs/interfaces/index.js +2 -1
  38. package/cjs/interfaces/notification-adapter.interface.js +11 -0
  39. package/cjs/interfaces/permission.interface.js +1 -1
  40. package/cjs/middlewares/logger.middleware.js +83 -26
  41. package/cjs/modules/datasource/index.js +0 -1
  42. package/cjs/modules/datasource/multi-tenant-datasource.service.js +46 -85
  43. package/cjs/modules/utils/utils.service.js +4 -20
  44. package/cjs/utils/date-time.util.js +94 -0
  45. package/cjs/utils/index.js +1 -1
  46. package/cjs/utils/query-helpers.util.js +8 -1
  47. package/cjs/utils/request.util.js +25 -0
  48. package/classes/api-controller.class.d.ts +14 -6
  49. package/classes/api-service.class.d.ts +25 -22
  50. package/classes/handle-custome-db.d.ts +3 -0
  51. package/classes/index.d.ts +1 -2
  52. package/classes/winston.logger.class.d.ts +1 -0
  53. package/constants/index.d.ts +1 -1
  54. package/constants/message-keys.d.ts +45 -0
  55. package/constants/permissions.d.ts +127 -0
  56. package/decorators/api-response.decorator.d.ts +1 -1
  57. package/decorators/current-user.decorator.d.ts +1 -1
  58. package/decorators/index.d.ts +1 -1
  59. package/decorators/log-action.decorator.d.ts +8 -0
  60. package/decorators/require-permission.decorator.d.ts +2 -2
  61. package/dtos/get-by-ids.dto.d.ts +4 -0
  62. package/dtos/index.d.ts +1 -0
  63. package/dtos/response-payload.dto.d.ts +8 -0
  64. package/entities/index.d.ts +1 -0
  65. package/entities/raw-type.d.ts +1 -0
  66. package/enums/index.d.ts +3 -0
  67. package/enums/notification-type.enum.d.ts +6 -0
  68. package/enums/participant-status.enum.d.ts +6 -0
  69. package/enums/recurrence-type.enum.d.ts +7 -0
  70. package/exceptions/base-app.exception.d.ts +41 -0
  71. package/exceptions/index.d.ts +1 -0
  72. package/exceptions/permission.exception.d.ts +2 -2
  73. package/fesm/classes/api-controller.class.js +321 -30
  74. package/fesm/classes/api-service.class.js +222 -67
  75. package/fesm/classes/handle-custome-db.js +19 -0
  76. package/fesm/classes/index.js +1 -2
  77. package/fesm/classes/winston.logger.class.js +100 -68
  78. package/fesm/constants/index.js +2 -1
  79. package/fesm/constants/message-keys.js +49 -0
  80. package/fesm/constants/permissions.js +86 -14
  81. package/fesm/decorators/api-response.decorator.js +2 -20
  82. package/fesm/decorators/index.js +1 -1
  83. package/fesm/decorators/log-action.decorator.js +139 -0
  84. package/fesm/decorators/require-permission.decorator.js +17 -65
  85. package/fesm/dtos/get-by-ids.dto.js +55 -0
  86. package/fesm/dtos/identity-response.dto.js +4 -8
  87. package/fesm/dtos/index.js +1 -0
  88. package/fesm/dtos/response-payload.dto.js +72 -0
  89. package/fesm/entities/identity.js +8 -2
  90. package/fesm/entities/index.js +1 -0
  91. package/fesm/entities/raw-type.js +1 -0
  92. package/fesm/entities/user-root.js +2 -1
  93. package/fesm/enums/index.js +3 -0
  94. package/fesm/enums/notification-type.enum.js +7 -0
  95. package/fesm/enums/participant-status.enum.js +7 -0
  96. package/fesm/enums/recurrence-type.enum.js +8 -0
  97. package/fesm/exceptions/base-app.exception.js +115 -0
  98. package/fesm/exceptions/index.js +1 -0
  99. package/fesm/exceptions/permission.exception.js +16 -18
  100. package/fesm/filters/global-exception.filter.js +269 -0
  101. package/fesm/filters/index.js +1 -0
  102. package/fesm/guards/jwt-auth.guard.js +5 -2
  103. package/fesm/guards/permission.guard.js +73 -79
  104. package/fesm/index.js +2 -0
  105. package/fesm/interceptors/idempotency.interceptor.js +2 -2
  106. package/fesm/interceptors/index.js +0 -1
  107. package/fesm/interfaces/datasource.interface.js +1 -20
  108. package/fesm/interfaces/event-manager-adapter.interface.js +1 -0
  109. package/fesm/interfaces/index.js +2 -1
  110. package/fesm/interfaces/notification-adapter.interface.js +1 -0
  111. package/fesm/interfaces/permission.interface.js +1 -3
  112. package/fesm/middlewares/logger.middleware.js +83 -26
  113. package/fesm/modules/datasource/index.js +0 -1
  114. package/fesm/modules/datasource/multi-tenant-datasource.service.js +47 -86
  115. package/fesm/modules/utils/utils.service.js +5 -21
  116. package/fesm/utils/date-time.util.js +70 -0
  117. package/fesm/utils/index.js +1 -1
  118. package/fesm/utils/query-helpers.util.js +8 -1
  119. package/fesm/utils/request.util.js +22 -0
  120. package/filters/global-exception.filter.d.ts +9 -0
  121. package/filters/index.d.ts +1 -0
  122. package/guards/permission.guard.d.ts +3 -7
  123. package/index.d.ts +2 -0
  124. package/interceptors/idempotency.interceptor.d.ts +1 -1
  125. package/interceptors/index.d.ts +0 -1
  126. package/interfaces/api.interface.d.ts +2 -0
  127. package/interfaces/event-manager-adapter.interface.d.ts +43 -0
  128. package/interfaces/index.d.ts +2 -1
  129. package/interfaces/notification-adapter.interface.d.ts +21 -0
  130. package/interfaces/permission.interface.d.ts +13 -8
  131. package/modules/datasource/index.d.ts +0 -1
  132. package/modules/datasource/multi-tenant-datasource.service.d.ts +5 -15
  133. package/modules/utils/utils.service.d.ts +0 -1
  134. package/package.json +21 -14
  135. package/utils/date-time.util.d.ts +8 -0
  136. package/utils/index.d.ts +1 -1
  137. package/utils/request.util.d.ts +2 -0
  138. package/cjs/classes/request-scoped-api.service.js +0 -61
  139. package/cjs/classes/winston-logger-adapter.class.js +0 -104
  140. package/cjs/decorators/sanitize-html.decorator.js +0 -36
  141. package/cjs/interceptors/query-performance.interceptor.js +0 -66
  142. package/cjs/interfaces/logger.interface.js +0 -7
  143. package/cjs/modules/datasource/datasource.module.js +0 -117
  144. package/cjs/utils/error-handler.util.js +0 -90
  145. package/classes/request-scoped-api.service.d.ts +0 -14
  146. package/classes/winston-logger-adapter.class.d.ts +0 -22
  147. package/decorators/sanitize-html.decorator.d.ts +0 -2
  148. package/fesm/classes/request-scoped-api.service.js +0 -51
  149. package/fesm/classes/winston-logger-adapter.class.js +0 -107
  150. package/fesm/decorators/sanitize-html.decorator.js +0 -45
  151. package/fesm/interceptors/query-performance.interceptor.js +0 -56
  152. package/fesm/interfaces/logger.interface.js +0 -4
  153. package/fesm/modules/datasource/datasource.module.js +0 -107
  154. package/fesm/utils/error-handler.util.js +0 -82
  155. package/interceptors/query-performance.interceptor.d.ts +0 -8
  156. package/interfaces/logger.interface.d.ts +0 -7
  157. package/modules/datasource/datasource.module.d.ts +0 -19
  158. package/utils/error-handler.util.d.ts +0 -19
@@ -1,26 +1,34 @@
1
+ import { DataSource, EntityTarget, QueryRunner, Repository, SelectQueryBuilder } from 'typeorm';
1
2
  import { DeleteDto, FilterAndPaginationDto } from '../dtos';
2
- import { Identity } from '../entities';
3
- import { ILoggedUserInfo, IService } from '../interfaces';
3
+ import { Identity, RawEntity } from '../entities';
4
+ import { IDataSourceProvider, ILoggedUserInfo, IService } from '../interfaces';
4
5
  import { UtilsService } from '../modules/utils/utils.service';
5
- import { Logger } from '@nestjs/common';
6
- import { QueryRunner, Repository, SelectQueryBuilder } from 'typeorm';
7
6
  import { HybridCache } from './hybrid-cache.class';
8
7
  export declare abstract class ApiService<CreateDtoT extends object, UpdateDtoT extends {
9
8
  id: string;
10
- }, InterfaceT extends Identity, EntityT extends Identity, RepositoryT extends Repository<EntityT>> implements IService<CreateDtoT, UpdateDtoT, InterfaceT> {
9
+ }, InterfaceT extends Identity, EntityT extends Identity> implements IService<CreateDtoT, UpdateDtoT, InterfaceT> {
11
10
  protected entityName: string;
12
- protected repository: RepositoryT;
13
11
  protected cacheManager: HybridCache;
14
12
  protected utilsService: UtilsService;
15
- protected loggerName: string;
13
+ protected _loggerName: string;
16
14
  protected isCacheable: boolean;
17
- protected logger: Logger;
18
- constructor(entityName: string, repository: RepositoryT, cacheManager: HybridCache, utilsService: UtilsService, loggerName: string, isCacheable?: boolean);
15
+ protected moduleName?: string | undefined;
16
+ protected repository: Repository<EntityT>;
17
+ private repositoryInitialized;
18
+ private _entity?;
19
+ private _dataSourceProvider?;
20
+ constructor(entityName: string, cacheManager: HybridCache, utilsService: UtilsService, _loggerName: string, isCacheable?: boolean, moduleName?: string | undefined, entity?: EntityTarget<EntityT>, dataSourceProvider?: IDataSourceProvider);
21
+ protected resolveEntity(): EntityTarget<EntityT>;
22
+ protected getDataSourceProvider(): IDataSourceProvider;
23
+ protected ensureDataSourceRepository(): Promise<void>;
24
+ protected resolveRepositories(entities: EntityTarget<any>[]): Promise<Repository<any>[]>;
25
+ protected getDataSourceForService(): Promise<DataSource>;
19
26
  insert(dto: CreateDtoT, user: ILoggedUserInfo | null): Promise<InterfaceT>;
20
27
  insertMany(dtos: Array<CreateDtoT>, user: ILoggedUserInfo | null): Promise<InterfaceT[]>;
21
28
  update(dto: UpdateDtoT, user: ILoggedUserInfo | null): Promise<InterfaceT>;
22
29
  updateMany(dtos: UpdateDtoT[], user: ILoggedUserInfo | null): Promise<InterfaceT[]>;
23
- findByIds(ids: string[], user: ILoggedUserInfo | null): Promise<InterfaceT[]>;
30
+ bulkUpsert(toInsert: CreateDtoT[], toUpdate: UpdateDtoT[], user: ILoggedUserInfo | null): Promise<InterfaceT[]>;
31
+ findByIds(ids: string[], user: ILoggedUserInfo | null, select?: string[] | string): Promise<InterfaceT[]>;
24
32
  findById(id: string, user: ILoggedUserInfo | null, select?: string[]): Promise<InterfaceT>;
25
33
  getAll(search: string, filterAndPaginationDto: FilterAndPaginationDto, user: ILoggedUserInfo | null): Promise<{
26
34
  data: Array<InterfaceT>;
@@ -32,24 +40,19 @@ export declare abstract class ApiService<CreateDtoT extends object, UpdateDtoT e
32
40
  private handleError;
33
41
  private ensureArray;
34
42
  private executeInTransaction;
35
- protected ensureRepositoryInitialized(): Promise<void>;
36
43
  protected beforeInsertOperation(_dto: CreateDtoT | Array<CreateDtoT>, _user: ILoggedUserInfo | null, _queryRunner: QueryRunner): Promise<void>;
37
- protected afterInsertOperation(_entity: EntityT[], _user: ILoggedUserInfo | null, _queryRunner: QueryRunner): Promise<void>;
44
+ protected afterInsertOperation(_entity: EntityT[], _dto: CreateDtoT | Array<CreateDtoT>, _user: ILoggedUserInfo | null, _queryRunner: QueryRunner): Promise<void>;
38
45
  protected beforeUpdateOperation(_dto: UpdateDtoT | Array<UpdateDtoT>, _user: ILoggedUserInfo | null, _queryRunner: QueryRunner): Promise<void>;
39
- protected afterUpdateOperation(_entity: EntityT[], _user: ILoggedUserInfo | null, _queryRunner: QueryRunner): Promise<void>;
46
+ protected afterUpdateOperation(_entity: EntityT[], _dto: UpdateDtoT | Array<UpdateDtoT>, _user: ILoggedUserInfo | null, _queryRunner: QueryRunner): Promise<void>;
40
47
  protected beforeDeleteOperation(_dto: DeleteDto, _user: ILoggedUserInfo | null, _queryRunner: QueryRunner): Promise<void>;
41
48
  protected afterDeleteOperation(_entity: Array<{
42
49
  id: string;
43
- }>, _user: ILoggedUserInfo | null, _queryRunner: QueryRunner): Promise<void>;
44
- protected getFilterQuery(query: SelectQueryBuilder<EntityT>, filter: {
45
- [key: string]: any;
46
- }, _user: ILoggedUserInfo | null): Promise<{
50
+ }>, _dto: DeleteDto, _user: ILoggedUserInfo | null, _queryRunner: QueryRunner): Promise<void>;
51
+ protected getFilterQuery(query: SelectQueryBuilder<EntityT>, filter: Record<string, unknown>, _user: ILoggedUserInfo | null): Promise<{
47
52
  query: SelectQueryBuilder<EntityT>;
48
53
  isRaw: boolean;
49
54
  }>;
50
- protected getSortQuery(query: SelectQueryBuilder<EntityT>, sort: {
51
- [key: string]: 'ASC' | 'DESC';
52
- }, _user: ILoggedUserInfo | null): Promise<{
55
+ protected getSortQuery(query: SelectQueryBuilder<EntityT>, sort: Record<string, 'ASC' | 'DESC'>, _user: ILoggedUserInfo | null): Promise<{
53
56
  query: SelectQueryBuilder<EntityT>;
54
57
  isRaw: boolean;
55
58
  }>;
@@ -68,7 +71,7 @@ export declare abstract class ApiService<CreateDtoT extends object, UpdateDtoT e
68
71
  protected convertRequestDtoToEntity(dto: CreateDtoT | UpdateDtoT | Array<CreateDtoT | UpdateDtoT>, user: ILoggedUserInfo | null): Promise<Array<EntityT>>;
69
72
  protected convertSingleDtoToEntity(dto: CreateDtoT | UpdateDtoT, _user: ILoggedUserInfo | null): Promise<EntityT>;
70
73
  protected convertArrayDtoToEntities(dtos: Array<CreateDtoT | UpdateDtoT>, user: ILoggedUserInfo | null): Promise<Array<EntityT>>;
71
- protected convertEntityToResponseDto(entity: EntityT, _isRaw: boolean): InterfaceT;
72
- protected convertEntityListToResponseListDto(entities: EntityT[], _isRaw: boolean): InterfaceT[];
74
+ protected convertEntityToResponseDto(entity: EntityT | RawEntity, _isRaw: boolean): InterfaceT;
75
+ protected convertEntityListToResponseListDto(entities: EntityT[] | RawEntity[], _isRaw: boolean): InterfaceT[];
73
76
  protected getEntityClass(): Promise<EntityT>;
74
77
  }
@@ -0,0 +1,3 @@
1
+ export declare function getJsonColumnType(): "simple-json" | "json" | "jsonb";
2
+ export declare function getCastIntType(): string;
3
+ export declare function buildQuery(sql: string, dbType: string): string;
@@ -1,7 +1,6 @@
1
1
  export * from './api-controller.class';
2
2
  export * from './api-service.class';
3
- export * from './request-scoped-api.service';
3
+ export * from './handle-custome-db';
4
4
  export * from './hybrid-cache.class';
5
- export * from './winston-logger-adapter.class';
6
5
  export * from './winston.logger.class';
7
6
  export * from '../constants/permissions';
@@ -1,2 +1,3 @@
1
1
  import { Logger } from 'winston';
2
2
  export declare const instance: Logger;
3
+ export declare function createModuleLogger(moduleName: string): Logger;
@@ -2,10 +2,10 @@ export declare const IS_PUBLIC_KEY = "isPublic";
2
2
  export declare const PERMISSIONS_KEY = "permissions";
3
3
  export declare const CACHE_INSTANCE = "CACHE_INSTANCE";
4
4
  export declare const PERMISSION_GUARD_CONFIG = "PERMISSION_GUARD_CONFIG";
5
- export declare const LOGGER_INSTANCE = "LOGGER_INSTANCE";
6
5
  export declare const IDEMPOTENCY_KEY_HEADER = "x-idempotency-key";
7
6
  export declare const REQUEST_ID_HEADER = "x-request-id";
8
7
  export declare const CLIENT_TYPE_HEADER = "x-client-type";
9
8
  export declare const PERMISSIONS_CACHE_PREFIX = "permissions";
10
9
  export declare const IDEMPOTENCY_CACHE_PREFIX = "idempotency";
11
10
  export * from './permissions';
11
+ export * from './message-keys';
@@ -0,0 +1,45 @@
1
+ export declare const AUTH_MESSAGES: {
2
+ readonly TOKEN_REQUIRED: "auth.token.required";
3
+ readonly TOKEN_INVALID: "auth.token.invalid";
4
+ readonly ENTITY_BELOG_ANOTHER_COMPANY: "entity.belongs.another.company";
5
+ readonly COMPANY_NO_ACCESS: "auth.company.no.access";
6
+ };
7
+ export declare const ERROR_MESSAGES: {
8
+ readonly NOT_FOUND: "error.not.found";
9
+ readonly VALIDATION: "error.validation";
10
+ readonly UNAUTHORIZED: "error.unauthorized";
11
+ readonly FORBIDDEN: "error.forbidden";
12
+ readonly CONFLICT: "error.conflict";
13
+ readonly DB_FOREIGN_KEY: "error.db.foreign.key";
14
+ readonly DB_NOT_NULL: "error.db.not.null";
15
+ readonly DB_INVALID_INPUT: "error.db.invalid.input";
16
+ readonly DB_VALUE_TOO_LONG: "error.db.value.too.long";
17
+ readonly DB_CHECK_CONSTRAINT: "error.db.check.constraint";
18
+ readonly DB_DEADLOCK: "error.db.deadlock";
19
+ readonly INTERNAL: "error.internal";
20
+ readonly SERVICE_UNAVAILABLE: "error.service.unavailable";
21
+ readonly UNKNOWN: "error.unknown";
22
+ readonly HTTP: "error.http";
23
+ readonly GENERIC: "error.generic";
24
+ readonly PERMISSION_SYSTEM_UNAVAILABLE: "error.permission.system.unavailable";
25
+ readonly INSUFFICIENT_PERMISSIONS: "error.insufficient.permissions";
26
+ readonly INSUFFICIENT_PERMISSIONS_OR: "error.insufficient.permissions.or";
27
+ readonly NO_PERMISSIONS_FOUND: "error.no.permissions.found";
28
+ readonly ENDPOINT_DISABLED: "error.endpoint.disabled";
29
+ };
30
+ export declare const SYSTEM_MESSAGES: {
31
+ readonly REPOSITORY_NOT_AVAILABLE: "system.repository.not.available";
32
+ readonly DATASOURCE_NOT_AVAILABLE: "system.datasource.not.available";
33
+ readonly DATABASE_CONFIG_NOT_AVAILABLE: "system.database.config.not.available";
34
+ readonly SERVICE_NOT_AVAILABLE: "system.service.not.available";
35
+ readonly CONFIG_REQUIRED: "system.config.required";
36
+ readonly INTERNAL_ERROR: "system.internal.error";
37
+ readonly DUPLICATE_REQUEST: "system.duplicate.request";
38
+ readonly INVALID_TENANT_ID: "system.invalid.tenant.id";
39
+ readonly TENANT_NOT_FOUND: "system.tenant.not.found";
40
+ readonly TENANT_HEADER_REQUIRED: "system.tenant.header.required";
41
+ readonly MISSING_PARAMETER: "system.missing.parameter";
42
+ readonly SDK_NOT_INSTALLED: "system.sdk.not.installed";
43
+ readonly PATH_TRAVERSAL_DETECTED: "system.path.traversal.detected";
44
+ readonly INVALID_FILE_KEY: "system.invalid.file.key";
45
+ };
@@ -62,6 +62,9 @@ export declare const STORAGE_CONFIG_PERMISSIONS: {
62
62
  readonly UPDATE: "storage-config.update";
63
63
  readonly DELETE: "storage-config.delete";
64
64
  };
65
+ export declare const UPLOAD_CONFIG_PERMISSIONS: {
66
+ readonly DELETE: "upload-config.delete";
67
+ };
65
68
  export declare const EMAIL_CONFIG_PERMISSIONS: {
66
69
  readonly CREATE: "email-config.create";
67
70
  readonly READ: "email-config.read";
@@ -86,6 +89,68 @@ export declare const FORM_RESULT_PERMISSIONS: {
86
89
  readonly UPDATE: "form-result.update";
87
90
  readonly DELETE: "form-result.delete";
88
91
  };
92
+ export declare const EVENT_PERMISSIONS: {
93
+ readonly CREATE: "event.create";
94
+ readonly READ: "event.read";
95
+ readonly UPDATE: "event.update";
96
+ readonly DELETE: "event.delete";
97
+ };
98
+ export declare const NOTIFICATION_PERMISSIONS: {
99
+ readonly CREATE: "notification.create";
100
+ readonly READ: "notification.read";
101
+ readonly UPDATE: "notification.update";
102
+ readonly DELETE: "notification.delete";
103
+ };
104
+ export declare const LANGUAGE_PERMISSIONS: {
105
+ readonly CREATE: "language.create";
106
+ readonly READ: "language.read";
107
+ readonly UPDATE: "language.update";
108
+ readonly DELETE: "language.delete";
109
+ };
110
+ export declare const TRANSLATION_KEY_PERMISSIONS: {
111
+ readonly CREATE: "translation-key.create";
112
+ readonly READ: "translation-key.read";
113
+ readonly UPDATE: "translation-key.update";
114
+ readonly DELETE: "translation-key.delete";
115
+ };
116
+ export declare const TRANSLATION_PERMISSIONS: {
117
+ readonly CREATE: "translation.create";
118
+ readonly READ: "translation.read";
119
+ readonly UPDATE: "translation.update";
120
+ readonly DELETE: "translation.delete";
121
+ };
122
+ export declare const TASK_BOARD_PERMISSIONS: {
123
+ readonly CREATE: "task-board.create";
124
+ readonly READ: "task-board.read";
125
+ readonly UPDATE: "task-board.update";
126
+ readonly DELETE: "task-board.delete";
127
+ readonly MANAGE_MEMBERS: "task-board.manage-members";
128
+ };
129
+ export declare const TASK_LIST_PERMISSIONS: {
130
+ readonly CREATE: "task-list.create";
131
+ readonly READ: "task-list.read";
132
+ readonly UPDATE: "task-list.update";
133
+ readonly DELETE: "task-list.delete";
134
+ };
135
+ export declare const TASK_PERMISSIONS: {
136
+ readonly CREATE: "task.create";
137
+ readonly READ: "task.read";
138
+ readonly UPDATE: "task.update";
139
+ readonly DELETE: "task.delete";
140
+ readonly MOVE: "task.move";
141
+ readonly ASSIGN: "task.assign";
142
+ };
143
+ export declare const TASK_LABEL_PERMISSIONS: {
144
+ readonly CREATE: "task-label.create";
145
+ readonly READ: "task-label.read";
146
+ readonly UPDATE: "task-label.update";
147
+ readonly DELETE: "task-label.delete";
148
+ };
149
+ export declare const TASK_COMMENT_PERMISSIONS: {
150
+ readonly CREATE: "task-comment.create";
151
+ readonly READ: "task-comment.read";
152
+ readonly DELETE: "task-comment.delete";
153
+ };
89
154
  export declare const PERMISSIONS: {
90
155
  readonly USER: {
91
156
  readonly CREATE: "user.create";
@@ -175,5 +240,67 @@ export declare const PERMISSIONS: {
175
240
  readonly UPDATE: "form-result.update";
176
241
  readonly DELETE: "form-result.delete";
177
242
  };
243
+ readonly EVENT: {
244
+ readonly CREATE: "event.create";
245
+ readonly READ: "event.read";
246
+ readonly UPDATE: "event.update";
247
+ readonly DELETE: "event.delete";
248
+ };
249
+ readonly NOTIFICATION: {
250
+ readonly CREATE: "notification.create";
251
+ readonly READ: "notification.read";
252
+ readonly UPDATE: "notification.update";
253
+ readonly DELETE: "notification.delete";
254
+ };
255
+ readonly LANGUAGE: {
256
+ readonly CREATE: "language.create";
257
+ readonly READ: "language.read";
258
+ readonly UPDATE: "language.update";
259
+ readonly DELETE: "language.delete";
260
+ };
261
+ readonly TRANSLATION_KEY: {
262
+ readonly CREATE: "translation-key.create";
263
+ readonly READ: "translation-key.read";
264
+ readonly UPDATE: "translation-key.update";
265
+ readonly DELETE: "translation-key.delete";
266
+ };
267
+ readonly TRANSLATION: {
268
+ readonly CREATE: "translation.create";
269
+ readonly READ: "translation.read";
270
+ readonly UPDATE: "translation.update";
271
+ readonly DELETE: "translation.delete";
272
+ };
273
+ readonly TASK_BOARD: {
274
+ readonly CREATE: "task-board.create";
275
+ readonly READ: "task-board.read";
276
+ readonly UPDATE: "task-board.update";
277
+ readonly DELETE: "task-board.delete";
278
+ readonly MANAGE_MEMBERS: "task-board.manage-members";
279
+ };
280
+ readonly TASK_LIST: {
281
+ readonly CREATE: "task-list.create";
282
+ readonly READ: "task-list.read";
283
+ readonly UPDATE: "task-list.update";
284
+ readonly DELETE: "task-list.delete";
285
+ };
286
+ readonly TASK: {
287
+ readonly CREATE: "task.create";
288
+ readonly READ: "task.read";
289
+ readonly UPDATE: "task.update";
290
+ readonly DELETE: "task.delete";
291
+ readonly MOVE: "task.move";
292
+ readonly ASSIGN: "task.assign";
293
+ };
294
+ readonly TASK_LABEL: {
295
+ readonly CREATE: "task-label.create";
296
+ readonly READ: "task-label.read";
297
+ readonly UPDATE: "task-label.update";
298
+ readonly DELETE: "task-label.delete";
299
+ };
300
+ readonly TASK_COMMENT: {
301
+ readonly CREATE: "task-comment.create";
302
+ readonly READ: "task-comment.read";
303
+ readonly DELETE: "task-comment.delete";
304
+ };
178
305
  };
179
306
  export type PermissionCode = (typeof PERMISSIONS)[keyof typeof PERMISSIONS][keyof (typeof PERMISSIONS)[keyof typeof PERMISSIONS]];
@@ -1,3 +1,3 @@
1
1
  import { Type } from '@nestjs/common';
2
- export type ArrayResponseType = 'list' | 'bulk';
2
+ export type ArrayResponseType = 'list' | 'bulk' | 'single';
3
3
  export declare const ApiResponseDto: <T extends Type<unknown>>(dto: T, isArray?: boolean, arrayType?: ArrayResponseType) => <TFunction extends Function, Y>(target: TFunction | object, propertyKey?: string | symbol, descriptor?: TypedPropertyDescriptor<Y>) => void;
@@ -1 +1 @@
1
- export declare const CurrentUser: (...dataOrPipes: (string | import("@nestjs/common").PipeTransform<any, any> | import("@nestjs/common").Type<import("@nestjs/common").PipeTransform<any, any>>)[]) => ParameterDecorator;
1
+ export declare const CurrentUser: (...dataOrPipes: (string | import("@nestjs/common").PipeTransform<any, any> | import("@nestjs/common").Type<import("@nestjs/common").PipeTransform<any, any>> | undefined)[]) => ParameterDecorator;
@@ -1,5 +1,5 @@
1
1
  export * from './api-response.decorator';
2
2
  export * from './current-user.decorator';
3
+ export * from './log-action.decorator';
3
4
  export * from './public.decorator';
4
5
  export * from './require-permission.decorator';
5
- export * from './sanitize-html.decorator';
@@ -0,0 +1,8 @@
1
+ export interface ILogActionOptions {
2
+ action?: string;
3
+ module?: string;
4
+ includeParams?: boolean;
5
+ includeResult?: boolean;
6
+ logLevel?: 'debug' | 'info' | 'warn';
7
+ }
8
+ export declare function LogAction(options?: ILogActionOptions): MethodDecorator;
@@ -1,4 +1,4 @@
1
- import { PermissionCondition } from '../interfaces/permission.interface';
1
+ import { IPermissionLogic } from '../interfaces/permission.interface';
2
2
  export declare const RequirePermission: (...permissions: string[]) => import("@nestjs/common").CustomDecorator<string>;
3
3
  export declare const RequireAnyPermission: (...permissions: string[]) => import("@nestjs/common").CustomDecorator<string>;
4
- export declare const RequirePermissionCondition: (condition: PermissionCondition) => import("@nestjs/common").CustomDecorator<string>;
4
+ export declare const RequirePermissionLogic: (logic: IPermissionLogic) => import("@nestjs/common").CustomDecorator<string>;
@@ -0,0 +1,4 @@
1
+ export declare class GetByIdsDto {
2
+ ids: string[];
3
+ select?: string[] | string;
4
+ }
package/dtos/index.d.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  export * from './delete.dto';
2
2
  export * from './filter-and-pagination.dto';
3
+ export * from './get-by-ids.dto';
3
4
  export * from './identity-response.dto';
4
5
  export * from './pagination.dto';
5
6
  export * from './response-payload.dto';
@@ -6,6 +6,8 @@ export declare class RequestMetaDto {
6
6
  export declare class SingleResponseDto<T> {
7
7
  success: boolean;
8
8
  message: string;
9
+ messageKey?: string;
10
+ messageVariables?: Record<string, string | number>;
9
11
  data?: T;
10
12
  _meta?: RequestMetaDto;
11
13
  }
@@ -20,6 +22,8 @@ export declare class PaginationMetaDto {
20
22
  export declare class ListResponseDto<T> {
21
23
  success: boolean;
22
24
  message: string;
25
+ messageKey?: string;
26
+ messageVariables?: Record<string, string | number>;
23
27
  data?: T[];
24
28
  meta: PaginationMetaDto;
25
29
  _meta?: RequestMetaDto;
@@ -32,6 +36,8 @@ export declare class BulkMetaDto {
32
36
  export declare class BulkResponseDto<T> {
33
37
  success: boolean;
34
38
  message: string;
39
+ messageKey?: string;
40
+ messageVariables?: Record<string, string | number>;
35
41
  data?: T[];
36
42
  meta: BulkMetaDto;
37
43
  _meta?: RequestMetaDto;
@@ -39,5 +45,7 @@ export declare class BulkResponseDto<T> {
39
45
  export declare class MessageResponseDto {
40
46
  success: boolean;
41
47
  message: string;
48
+ messageKey?: string;
49
+ messageVariables?: Record<string, string | number>;
42
50
  _meta?: RequestMetaDto;
43
51
  }
@@ -1,2 +1,3 @@
1
1
  export * from './identity';
2
+ export * from './raw-type';
2
3
  export * from './user-root';
@@ -0,0 +1 @@
1
+ export type RawEntity = Record<string, unknown>;
@@ -0,0 +1,3 @@
1
+ export * from './notification-type.enum';
2
+ export * from './participant-status.enum';
3
+ export * from './recurrence-type.enum';
@@ -0,0 +1,6 @@
1
+ export declare enum NotificationType {
2
+ INFO = "info",
3
+ WARNING = "warning",
4
+ SUCCESS = "success",
5
+ ERROR = "error"
6
+ }
@@ -0,0 +1,6 @@
1
+ export declare enum ParticipantStatus {
2
+ PENDING = "pending",
3
+ ACCEPTED = "accepted",
4
+ DECLINED = "declined",
5
+ TENTATIVE = "tentative"
6
+ }
@@ -0,0 +1,7 @@
1
+ export declare enum RecurrenceType {
2
+ NONE = "none",
3
+ DAILY = "daily",
4
+ WEEKLY = "weekly",
5
+ BIWEEKLY = "biweekly",
6
+ MONTHLY = "monthly"
7
+ }
@@ -0,0 +1,41 @@
1
+ import { HttpException, HttpStatus } from '@nestjs/common';
2
+ export interface IValidationError {
3
+ field: string;
4
+ message: string;
5
+ }
6
+ export interface IBaseAppExceptionOptions {
7
+ message: string;
8
+ messageKey?: string;
9
+ messageVariables?: Record<string, unknown>;
10
+ status?: HttpStatus;
11
+ errors?: IValidationError[];
12
+ metadata?: Record<string, unknown>;
13
+ }
14
+ export declare class BaseAppException extends HttpException {
15
+ readonly messageKey: string;
16
+ readonly messageVariables?: Record<string, unknown>;
17
+ readonly errors?: IValidationError[];
18
+ readonly metadata?: Record<string, unknown>;
19
+ constructor(options: IBaseAppExceptionOptions);
20
+ }
21
+ export declare class NotFoundException extends BaseAppException {
22
+ constructor(entity: string, id?: string);
23
+ }
24
+ export declare class ValidationException extends BaseAppException {
25
+ constructor(errors: IValidationError[]);
26
+ }
27
+ export declare class UnauthorizedException extends BaseAppException {
28
+ constructor(message?: string);
29
+ }
30
+ export declare class ForbiddenException extends BaseAppException {
31
+ constructor(message?: string);
32
+ }
33
+ export declare class ConflictException extends BaseAppException {
34
+ constructor(entity: string, field?: string);
35
+ }
36
+ export declare class InternalServerException extends BaseAppException {
37
+ constructor(message?: string);
38
+ }
39
+ export declare class ServiceUnavailableException extends BaseAppException {
40
+ constructor(service: string);
41
+ }
@@ -1 +1,2 @@
1
+ export * from './base-app.exception';
1
2
  export * from './permission.exception';
@@ -1,9 +1,9 @@
1
1
  import { ForbiddenException, InternalServerErrorException } from '@nestjs/common';
2
2
  export declare class PermissionSystemUnavailableException extends InternalServerErrorException {
3
- constructor(message?: string);
3
+ constructor();
4
4
  }
5
5
  export declare class InsufficientPermissionsException extends ForbiddenException {
6
- constructor(missingPermissions: string[], operator?: 'and' | 'or');
6
+ constructor(missingPermissions: string[], operator?: 'AND' | 'OR');
7
7
  }
8
8
  export declare class NoPermissionsFoundException extends ForbiddenException {
9
9
  constructor();