@appxdigital/appx-core 0.1.68

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 (196) hide show
  1. package/dist/appx-core.module.d.ts +7 -0
  2. package/dist/appx-core.module.d.ts.map +1 -0
  3. package/dist/appx-core.module.js +46 -0
  4. package/dist/common/config/default-permissions.config.d.ts +3 -0
  5. package/dist/common/config/default-permissions.config.d.ts.map +1 -0
  6. package/dist/common/config/default-permissions.config.js +6 -0
  7. package/dist/common/config/permissions.config.provider.d.ts +8 -0
  8. package/dist/common/config/permissions.config.provider.d.ts.map +1 -0
  9. package/dist/common/config/permissions.config.provider.js +12 -0
  10. package/dist/common/config/permissions.service.d.ts +7 -0
  11. package/dist/common/config/permissions.service.d.ts.map +1 -0
  12. package/dist/common/config/permissions.service.js +31 -0
  13. package/dist/common/config/permissionsConfigTypes.d.ts +18 -0
  14. package/dist/common/config/permissionsConfigTypes.d.ts.map +1 -0
  15. package/dist/common/config/permissionsConfigTypes.js +2 -0
  16. package/dist/common/contants.d.ts +3 -0
  17. package/dist/common/contants.d.ts.map +1 -0
  18. package/dist/common/contants.js +5 -0
  19. package/dist/common/decorators/guard.decorator.d.ts +5 -0
  20. package/dist/common/decorators/guard.decorator.d.ts.map +1 -0
  21. package/dist/common/decorators/guard.decorator.js +22 -0
  22. package/dist/common/decorators/permission.decorator.d.ts +3 -0
  23. package/dist/common/decorators/permission.decorator.d.ts.map +1 -0
  24. package/dist/common/decorators/permission.decorator.js +7 -0
  25. package/dist/common/decorators/transaction.decorator.d.ts +8 -0
  26. package/dist/common/decorators/transaction.decorator.d.ts.map +1 -0
  27. package/dist/common/decorators/transaction.decorator.js +12 -0
  28. package/dist/common/enums/role.enum.d.ts +6 -0
  29. package/dist/common/enums/role.enum.d.ts.map +1 -0
  30. package/dist/common/enums/role.enum.js +9 -0
  31. package/dist/common/guards/rbac.guard.d.ts +10 -0
  32. package/dist/common/guards/rbac.guard.d.ts.map +1 -0
  33. package/dist/common/guards/rbac.guard.js +56 -0
  34. package/dist/common/guards/role.guard.d.ts +12 -0
  35. package/dist/common/guards/role.guard.d.ts.map +1 -0
  36. package/dist/common/guards/role.guard.js +44 -0
  37. package/dist/common/interceptors/file.interceptor.d.ts +9 -0
  38. package/dist/common/interceptors/file.interceptor.d.ts.map +1 -0
  39. package/dist/common/interceptors/file.interceptor.js +74 -0
  40. package/dist/common/interceptors/prisma.interceptor.d.ts +14 -0
  41. package/dist/common/interceptors/prisma.interceptor.d.ts.map +1 -0
  42. package/dist/common/interceptors/prisma.interceptor.js +82 -0
  43. package/dist/common/interfaces/file-upload.interface.d.ts +13 -0
  44. package/dist/common/interfaces/file-upload.interface.d.ts.map +1 -0
  45. package/dist/common/interfaces/file-upload.interface.js +2 -0
  46. package/dist/common/interfaces/storage-service.interface.d.ts +4 -0
  47. package/dist/common/interfaces/storage-service.interface.d.ts.map +1 -0
  48. package/dist/common/interfaces/storage-service.interface.js +2 -0
  49. package/dist/common/interfaces/user.interface.d.ts +12 -0
  50. package/dist/common/interfaces/user.interface.d.ts.map +1 -0
  51. package/dist/common/interfaces/user.interface.js +2 -0
  52. package/dist/common/providers/aws-storage.service.d.ts +10 -0
  53. package/dist/common/providers/aws-storage.service.d.ts.map +1 -0
  54. package/dist/common/providers/aws-storage.service.js +60 -0
  55. package/dist/common/providers/gcp-storage.service.d.ts +10 -0
  56. package/dist/common/providers/gcp-storage.service.d.ts.map +1 -0
  57. package/dist/common/providers/gcp-storage.service.js +87 -0
  58. package/dist/common/providers/local-storage.service.d.ts +7 -0
  59. package/dist/common/providers/local-storage.service.d.ts.map +1 -0
  60. package/dist/common/providers/local-storage.service.js +80 -0
  61. package/dist/common/types.d.ts +21 -0
  62. package/dist/common/types.d.ts.map +1 -0
  63. package/dist/common/types.js +3 -0
  64. package/dist/common/utils/context-transformer.util.d.ts +6 -0
  65. package/dist/common/utils/context-transformer.util.d.ts.map +1 -0
  66. package/dist/common/utils/context-transformer.util.js +28 -0
  67. package/dist/common/utils/error-handler.d.ts +2 -0
  68. package/dist/common/utils/error-handler.d.ts.map +1 -0
  69. package/dist/common/utils/error-handler.js +38 -0
  70. package/dist/config/admin/create.d.ts +2 -0
  71. package/dist/config/admin/create.d.ts.map +1 -0
  72. package/dist/config/admin/create.js +25 -0
  73. package/dist/config/admin/generate-admin.d.ts +2 -0
  74. package/dist/config/admin/generate-admin.d.ts.map +1 -0
  75. package/dist/config/admin/generate-admin.js +75 -0
  76. package/dist/config/admin/templates/admin.template.d.ts +2 -0
  77. package/dist/config/admin/templates/admin.template.d.ts.map +1 -0
  78. package/dist/config/admin/templates/admin.template.js +131 -0
  79. package/dist/config/admin/templates/component-loader.template.d.ts +2 -0
  80. package/dist/config/admin/templates/component-loader.template.d.ts.map +1 -0
  81. package/dist/config/admin/templates/component-loader.template.js +17 -0
  82. package/dist/config/admin/templates/dashboard.template.d.ts +2 -0
  83. package/dist/config/admin/templates/dashboard.template.d.ts.map +1 -0
  84. package/dist/config/admin/templates/dashboard.template.js +40 -0
  85. package/dist/config/admin/templates/utils.template.d.ts +2 -0
  86. package/dist/config/admin/templates/utils.template.d.ts.map +1 -0
  87. package/dist/config/admin/templates/utils.template.js +135 -0
  88. package/dist/config/generate-all.d.ts +3 -0
  89. package/dist/config/generate-all.d.ts.map +1 -0
  90. package/dist/config/generate-all.js +64 -0
  91. package/dist/config/generate-controllers.d.ts +2 -0
  92. package/dist/config/generate-controllers.d.ts.map +1 -0
  93. package/dist/config/generate-controllers.js +83 -0
  94. package/dist/config/generate-modules.d.ts +2 -0
  95. package/dist/config/generate-modules.d.ts.map +1 -0
  96. package/dist/config/generate-modules.js +158 -0
  97. package/dist/config/generate-resolvers.d.ts +2 -0
  98. package/dist/config/generate-resolvers.d.ts.map +1 -0
  99. package/dist/config/generate-resolvers.js +97 -0
  100. package/dist/config/generate-services.d.ts +2 -0
  101. package/dist/config/generate-services.d.ts.map +1 -0
  102. package/dist/config/generate-services.js +72 -0
  103. package/dist/config/generate-session-schema.d.ts +2 -0
  104. package/dist/config/generate-session-schema.d.ts.map +1 -0
  105. package/dist/config/generate-session-schema.js +78 -0
  106. package/dist/config/setup-fileupload.d.ts +3 -0
  107. package/dist/config/setup-fileupload.d.ts.map +1 -0
  108. package/dist/config/setup-fileupload.js +265 -0
  109. package/dist/config/utils.d.ts +3 -0
  110. package/dist/config/utils.d.ts.map +1 -0
  111. package/dist/config/utils.js +55 -0
  112. package/dist/graphql/batch.payload.d.ts +4 -0
  113. package/dist/graphql/batch.payload.d.ts.map +1 -0
  114. package/dist/graphql/batch.payload.js +23 -0
  115. package/dist/graphql/generic.resolver.d.ts +15 -0
  116. package/dist/graphql/generic.resolver.d.ts.map +1 -0
  117. package/dist/graphql/generic.resolver.js +107 -0
  118. package/dist/graphql/graphql.module.d.ts +3 -0
  119. package/dist/graphql/graphql.module.d.ts.map +1 -0
  120. package/dist/graphql/graphql.module.js +28 -0
  121. package/dist/index.d.ts +24 -0
  122. package/dist/index.d.ts.map +1 -0
  123. package/dist/index.js +39 -0
  124. package/dist/modules/auth/auth-field.decorator.d.ts +10 -0
  125. package/dist/modules/auth/auth-field.decorator.d.ts.map +1 -0
  126. package/dist/modules/auth/auth-field.decorator.js +18 -0
  127. package/dist/modules/auth/auth.controller.d.ts +25 -0
  128. package/dist/modules/auth/auth.controller.d.ts.map +1 -0
  129. package/dist/modules/auth/auth.controller.js +158 -0
  130. package/dist/modules/auth/auth.module.d.ts +3 -0
  131. package/dist/modules/auth/auth.module.d.ts.map +1 -0
  132. package/dist/modules/auth/auth.module.js +28 -0
  133. package/dist/modules/auth/auth.resolver.d.ts +6 -0
  134. package/dist/modules/auth/auth.resolver.d.ts.map +1 -0
  135. package/dist/modules/auth/auth.resolver.js +24 -0
  136. package/dist/modules/auth/auth.service.d.ts +28 -0
  137. package/dist/modules/auth/auth.service.d.ts.map +1 -0
  138. package/dist/modules/auth/auth.service.js +197 -0
  139. package/dist/modules/auth/authenticated.guard.d.ts +5 -0
  140. package/dist/modules/auth/authenticated.guard.d.ts.map +1 -0
  141. package/dist/modules/auth/authenticated.guard.js +20 -0
  142. package/dist/modules/auth/dto/register.dto.d.ts +6 -0
  143. package/dist/modules/auth/dto/register.dto.d.ts.map +1 -0
  144. package/dist/modules/auth/dto/register.dto.js +21 -0
  145. package/dist/modules/auth/dto/user.dto.d.ts +5 -0
  146. package/dist/modules/auth/dto/user.dto.d.ts.map +1 -0
  147. package/dist/modules/auth/dto/user.dto.js +36 -0
  148. package/dist/modules/auth/local-auth.guard.d.ts +7 -0
  149. package/dist/modules/auth/local-auth.guard.d.ts.map +1 -0
  150. package/dist/modules/auth/local-auth.guard.js +31 -0
  151. package/dist/modules/auth/local.strategy.d.ts +15 -0
  152. package/dist/modules/auth/local.strategy.d.ts.map +1 -0
  153. package/dist/modules/auth/local.strategy.js +48 -0
  154. package/dist/modules/auth/session/session-auth.guard.d.ts +5 -0
  155. package/dist/modules/auth/session/session-auth.guard.d.ts.map +1 -0
  156. package/dist/modules/auth/session/session-auth.guard.js +30 -0
  157. package/dist/modules/auth/session/session-serializer.d.ts +9 -0
  158. package/dist/modules/auth/session/session-serializer.d.ts.map +1 -0
  159. package/dist/modules/auth/session/session-serializer.js +44 -0
  160. package/dist/modules/auth/session/session-store.d.ts +11 -0
  161. package/dist/modules/auth/session/session-store.d.ts.map +1 -0
  162. package/dist/modules/auth/session/session-store.js +97 -0
  163. package/dist/modules/common.module.d.ts +3 -0
  164. package/dist/modules/common.module.d.ts.map +1 -0
  165. package/dist/modules/common.module.js +20 -0
  166. package/dist/modules/core/core.controller.d.ts +14 -0
  167. package/dist/modules/core/core.controller.d.ts.map +1 -0
  168. package/dist/modules/core/core.controller.js +114 -0
  169. package/dist/modules/core/core.module.d.ts +3 -0
  170. package/dist/modules/core/core.module.d.ts.map +1 -0
  171. package/dist/modules/core/core.module.js +22 -0
  172. package/dist/modules/core/core.service.d.ts +44 -0
  173. package/dist/modules/core/core.service.d.ts.map +1 -0
  174. package/dist/modules/core/core.service.js +121 -0
  175. package/dist/modules/file/file-upload.controller.d.ts +11 -0
  176. package/dist/modules/file/file-upload.controller.d.ts.map +1 -0
  177. package/dist/modules/file/file-upload.controller.js +52 -0
  178. package/dist/modules/file/file-upload.module.d.ts +6 -0
  179. package/dist/modules/file/file-upload.module.d.ts.map +1 -0
  180. package/dist/modules/file/file-upload.module.js +62 -0
  181. package/dist/modules/file/file-upload.service.d.ts +27 -0
  182. package/dist/modules/file/file-upload.service.d.ts.map +1 -0
  183. package/dist/modules/file/file-upload.service.js +69 -0
  184. package/dist/modules/user/user.module.d.ts +3 -0
  185. package/dist/modules/user/user.module.d.ts.map +1 -0
  186. package/dist/modules/user/user.module.js +20 -0
  187. package/dist/modules/user/user.service.d.ts +10 -0
  188. package/dist/modules/user/user.service.d.ts.map +1 -0
  189. package/dist/modules/user/user.service.js +49 -0
  190. package/dist/prisma/prisma.service.d.ts +128 -0
  191. package/dist/prisma/prisma.service.d.ts.map +1 -0
  192. package/dist/prisma/prisma.service.js +512 -0
  193. package/dist/tasks/session-cleanup.service.d.ts +7 -0
  194. package/dist/tasks/session-cleanup.service.d.ts.map +1 -0
  195. package/dist/tasks/session-cleanup.service.js +38 -0
  196. package/package.json +66 -0
@@ -0,0 +1,7 @@
1
+ import { DynamicModule } from '@nestjs/common';
2
+ import { PermissionsConfigType } from './common/config/permissionsConfigTypes';
3
+ import { FileUploadModuleOptions } from './common/interfaces/file-upload.interface';
4
+ export declare class AppxCoreModule {
5
+ static forRoot(config?: PermissionsConfigType, fileUploadConfig?: FileUploadModuleOptions): DynamicModule;
6
+ }
7
+ //# sourceMappingURL=appx-core.module.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"appx-core.module.d.ts","sourceRoot":"","sources":["../src/appx-core.module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,aAAa,EAA2B,MAAM,gBAAgB,CAAC;AAEvE,OAAO,EAAC,qBAAqB,EAAC,MAAM,wCAAwC,CAAC;AAG7E,OAAO,EAAC,uBAAuB,EAAC,MAAM,2CAA2C,CAAC;AAElF,qBAEa,cAAc;IACvB,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,qBAAqB,EAAE,gBAAgB,CAAC,EAAE,uBAAuB,GAAG,aAAa;CA6B5G"}
@@ -0,0 +1,46 @@
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 AppxCoreModule_1;
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.AppxCoreModule = void 0;
11
+ const common_1 = require("@nestjs/common");
12
+ const permissions_config_provider_1 = require("./common/config/permissions.config.provider");
13
+ const permissions_service_1 = require("./common/config/permissions.service");
14
+ const file_upload_module_1 = require("./modules/file/file-upload.module");
15
+ let AppxCoreModule = AppxCoreModule_1 = class AppxCoreModule {
16
+ static forRoot(config, fileUploadConfig) {
17
+ const customPermissionsProvider = {
18
+ provide: 'CUSTOM_PERMISSIONS_CONFIG',
19
+ useValue: config,
20
+ };
21
+ const modules = [
22
+ permissions_config_provider_1.PermissionsConfigProvider,
23
+ permissions_service_1.PermissionsService,
24
+ customPermissionsProvider,
25
+ ];
26
+ const imports = fileUploadConfig
27
+ ? [file_upload_module_1.FileUploadModule.register(fileUploadConfig)]
28
+ : [];
29
+ const exports = [
30
+ ...modules,
31
+ permissions_config_provider_1.PERMISSIONS_CONFIG_TOKEN,
32
+ ...(fileUploadConfig ? [file_upload_module_1.FileUploadModule] : []),
33
+ ];
34
+ return {
35
+ module: AppxCoreModule_1,
36
+ imports,
37
+ providers: modules,
38
+ exports,
39
+ };
40
+ }
41
+ };
42
+ exports.AppxCoreModule = AppxCoreModule;
43
+ exports.AppxCoreModule = AppxCoreModule = AppxCoreModule_1 = __decorate([
44
+ (0, common_1.Global)(),
45
+ (0, common_1.Module)({})
46
+ ], AppxCoreModule);
@@ -0,0 +1,3 @@
1
+ import { PermissionsConfigType } from './permissionsConfigTypes';
2
+ export declare const DefaultPermissionsConfig: PermissionsConfigType;
3
+ //# sourceMappingURL=default-permissions.config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"default-permissions.config.d.ts","sourceRoot":"","sources":["../../../src/common/config/default-permissions.config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,qBAAqB,EAAC,MAAM,0BAA0B,CAAC;AAE/D,eAAO,MAAM,wBAAwB,EAAE,qBAEtC,CAAC"}
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DefaultPermissionsConfig = void 0;
4
+ exports.DefaultPermissionsConfig = {
5
+ // TODO define default permissions
6
+ };
@@ -0,0 +1,8 @@
1
+ import { PermissionsConfigType } from './permissionsConfigTypes';
2
+ export declare const PERMISSIONS_CONFIG_TOKEN = "PERMISSIONS_CONFIG";
3
+ export declare const PermissionsConfigProvider: {
4
+ provide: string;
5
+ useFactory: (config?: PermissionsConfigType) => PermissionsConfigType;
6
+ inject: string[];
7
+ };
8
+ //# sourceMappingURL=permissions.config.provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permissions.config.provider.d.ts","sourceRoot":"","sources":["../../../src/common/config/permissions.config.provider.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,qBAAqB,EAAC,MAAM,0BAA0B,CAAC;AAE/D,eAAO,MAAM,wBAAwB,uBAAuB,CAAC;AAE7D,eAAO,MAAM,yBAAyB;;0BAEZ,qBAAqB,KAAG,qBAAqB;;CAItE,CAAC"}
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PermissionsConfigProvider = exports.PERMISSIONS_CONFIG_TOKEN = void 0;
4
+ const default_permissions_config_1 = require("./default-permissions.config");
5
+ exports.PERMISSIONS_CONFIG_TOKEN = 'PERMISSIONS_CONFIG';
6
+ exports.PermissionsConfigProvider = {
7
+ provide: exports.PERMISSIONS_CONFIG_TOKEN,
8
+ useFactory: (config) => {
9
+ return config || default_permissions_config_1.DefaultPermissionsConfig;
10
+ },
11
+ inject: ['CUSTOM_PERMISSIONS_CONFIG'],
12
+ };
@@ -0,0 +1,7 @@
1
+ import { PermissionsConfigType } from './permissionsConfigTypes';
2
+ export declare class PermissionsService {
3
+ private readonly permissionsConfig;
4
+ constructor(permissionsConfig: PermissionsConfigType);
5
+ getPermissionsConfig(): PermissionsConfigType;
6
+ }
7
+ //# sourceMappingURL=permissions.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permissions.service.d.ts","sourceRoot":"","sources":["../../../src/common/config/permissions.service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,qBAAqB,EAAC,MAAM,0BAA0B,CAAC;AAE/D,qBACa,kBAAkB;IAGvB,OAAO,CAAC,QAAQ,CAAC,iBAAiB;gBAAjB,iBAAiB,EAAE,qBAAqB;IAG7D,oBAAoB,IAAI,qBAAqB;CAGhD"}
@@ -0,0 +1,31 @@
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
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.PermissionsService = void 0;
16
+ const common_1 = require("@nestjs/common");
17
+ const permissions_config_provider_1 = require("./permissions.config.provider");
18
+ let PermissionsService = class PermissionsService {
19
+ constructor(permissionsConfig) {
20
+ this.permissionsConfig = permissionsConfig;
21
+ }
22
+ getPermissionsConfig() {
23
+ return this.permissionsConfig;
24
+ }
25
+ };
26
+ exports.PermissionsService = PermissionsService;
27
+ exports.PermissionsService = PermissionsService = __decorate([
28
+ (0, common_1.Injectable)(),
29
+ __param(0, (0, common_1.Inject)(permissions_config_provider_1.PERMISSIONS_CONFIG_TOKEN)),
30
+ __metadata("design:paramtypes", [Object])
31
+ ], PermissionsService);
@@ -0,0 +1,18 @@
1
+ export interface FieldConditions {
2
+ [key: string]: any;
3
+ }
4
+ export interface RolePermissions {
5
+ [action: string]: 'ALL' | ActionPermission;
6
+ }
7
+ export interface ActionPermission {
8
+ conditions: FieldConditions | FieldConditions[];
9
+ setUserIdField?: string;
10
+ restrictedFields?: string[];
11
+ }
12
+ export interface ModelPermissions {
13
+ [role: string]: RolePermissions;
14
+ }
15
+ export interface PermissionsConfigType {
16
+ [model: string]: ModelPermissions;
17
+ }
18
+ //# sourceMappingURL=permissionsConfigTypes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permissionsConfigTypes.d.ts","sourceRoot":"","sources":["../../../src/common/config/permissionsConfigTypes.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,eAAe;IAC5B,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACtB;AAED,MAAM,WAAW,eAAe;IAC5B,CAAC,MAAM,EAAE,MAAM,GAAG,KAAK,GAAG,gBAAgB,CAAC;CAC9C;AAED,MAAM,WAAW,gBAAgB;IAC7B,UAAU,EAAE,eAAe,GAAG,eAAe,EAAE,CAAC;IAChD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC/B;AAED,MAAM,WAAW,gBAAgB;IAC7B,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,CAAC;CACnC;AAED,MAAM,WAAW,qBAAqB;IAClC,CAAC,KAAK,EAAE,MAAM,GAAG,gBAAgB,CAAC;CACrC"}
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,3 @@
1
+ export declare const STORAGE_SERVICE = "STORAGE_SERVICE";
2
+ export declare const FILE_UPLOAD_OPTIONS = "FILE_UPLOAD_OPTIONS";
3
+ //# sourceMappingURL=contants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contants.d.ts","sourceRoot":"","sources":["../../src/common/contants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,eAAe,oBAAoB,CAAC;AACjD,eAAO,MAAM,mBAAmB,wBAAwB,CAAC"}
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FILE_UPLOAD_OPTIONS = exports.STORAGE_SERVICE = void 0;
4
+ exports.STORAGE_SERVICE = 'STORAGE_SERVICE';
5
+ exports.FILE_UPLOAD_OPTIONS = 'FILE_UPLOAD_OPTIONS';
@@ -0,0 +1,5 @@
1
+ export declare function GuardMethod(roles: string[]): <TFunction extends Function, Y>(target: TFunction | object, propertyKey?: string | symbol, descriptor?: TypedPropertyDescriptor<Y>) => void;
2
+ export declare function applyMethodGuards(target: any, guardedMethods: {
3
+ [key: string]: string[];
4
+ }): void;
5
+ //# sourceMappingURL=guard.decorator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"guard.decorator.d.ts","sourceRoot":"","sources":["../../../src/common/decorators/guard.decorator.ts"],"names":[],"mappings":"AAQA,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,+IAE1C;AAED,wBAAgB,iBAAiB,CAC7B,MAAM,EAAE,GAAG,EACX,cAAc,EAAE;IAAC,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;CAAC,QAe5C"}
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GuardMethod = GuardMethod;
4
+ exports.applyMethodGuards = applyMethodGuards;
5
+ const common_1 = require("@nestjs/common");
6
+ const role_guard_1 = require("../guards/role.guard");
7
+ function GuardMethod(roles) {
8
+ return (0, common_1.applyDecorators)((0, common_1.SetMetadata)('roles', roles), (0, common_1.UseGuards)(role_guard_1.RolesGuard));
9
+ }
10
+ function applyMethodGuards(target, guardedMethods) {
11
+ const logger = new common_1.Logger('applyMethodGuards');
12
+ for (const [methodName, roles] of Object.entries(guardedMethods)) {
13
+ const descriptor = Object.getOwnPropertyDescriptor(target.prototype, methodName);
14
+ if (descriptor) {
15
+ GuardMethod(roles)(target.prototype, methodName, descriptor);
16
+ Object.defineProperty(target.prototype, methodName, descriptor);
17
+ }
18
+ else {
19
+ logger.warn(`Method ${methodName} not found on ${target.name}`);
20
+ }
21
+ }
22
+ }
@@ -0,0 +1,3 @@
1
+ export declare const PERMISSION_METADATA_KEY = "permission";
2
+ export declare const Permission: (action: string) => import("@nestjs/common").CustomDecorator<string>;
3
+ //# sourceMappingURL=permission.decorator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permission.decorator.d.ts","sourceRoot":"","sources":["../../../src/common/decorators/permission.decorator.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,uBAAuB,eAAe,CAAC;AAEpD,eAAO,MAAM,UAAU,GAAI,QAAQ,MAAM,qDACS,CAAC"}
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Permission = exports.PERMISSION_METADATA_KEY = void 0;
4
+ const common_1 = require("@nestjs/common");
5
+ exports.PERMISSION_METADATA_KEY = 'permission';
6
+ const Permission = (action) => (0, common_1.SetMetadata)(exports.PERMISSION_METADATA_KEY, { action });
7
+ exports.Permission = Permission;
@@ -0,0 +1,8 @@
1
+ /**
2
+ * A custom decorator to indicate whether a transaction should be used for a specific method or class.
3
+ *
4
+ * @param {boolean} [useTransaction=true] - Flag that specifies whether to use a transaction.
5
+ *
6
+ */
7
+ export declare const UseTransaction: (useTransaction?: boolean) => import("@nestjs/common").CustomDecorator<string>;
8
+ //# sourceMappingURL=transaction.decorator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transaction.decorator.d.ts","sourceRoot":"","sources":["../../../src/common/decorators/transaction.decorator.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,eAAO,MAAM,cAAc,GAAI,iBAAgB,OAAc,qDACZ,CAAC"}
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.UseTransaction = void 0;
4
+ const common_1 = require("@nestjs/common");
5
+ /**
6
+ * A custom decorator to indicate whether a transaction should be used for a specific method or class.
7
+ *
8
+ * @param {boolean} [useTransaction=true] - Flag that specifies whether to use a transaction.
9
+ *
10
+ */
11
+ const UseTransaction = (useTransaction = true) => (0, common_1.SetMetadata)('useTransaction', useTransaction);
12
+ exports.UseTransaction = UseTransaction;
@@ -0,0 +1,6 @@
1
+ export declare enum DefaultRole {
2
+ ADMIN = "ADMIN",
3
+ USER = "USER",
4
+ GUEST = "GUEST"
5
+ }
6
+ //# sourceMappingURL=role.enum.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"role.enum.d.ts","sourceRoot":"","sources":["../../../src/common/enums/role.enum.ts"],"names":[],"mappings":"AAAA,oBAAY,WAAW;IACnB,KAAK,UAAU;IACf,IAAI,SAAS;IACb,KAAK,UAAU;CAClB"}
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DefaultRole = void 0;
4
+ var DefaultRole;
5
+ (function (DefaultRole) {
6
+ DefaultRole["ADMIN"] = "ADMIN";
7
+ DefaultRole["USER"] = "USER";
8
+ DefaultRole["GUEST"] = "GUEST";
9
+ })(DefaultRole || (exports.DefaultRole = DefaultRole = {}));
@@ -0,0 +1,10 @@
1
+ import { CanActivate, ExecutionContext } from '@nestjs/common';
2
+ import { Reflector } from '@nestjs/core';
3
+ import { PermissionsConfigType } from "../config/permissionsConfigTypes";
4
+ export declare class RbacGuard implements CanActivate {
5
+ private reflector;
6
+ private permissionsConfig;
7
+ constructor(reflector: Reflector, permissionsConfig: PermissionsConfigType);
8
+ canActivate(context: ExecutionContext): Promise<boolean>;
9
+ }
10
+ //# sourceMappingURL=rbac.guard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rbac.guard.d.ts","sourceRoot":"","sources":["../../../src/common/guards/rbac.guard.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,WAAW,EACX,gBAAgB,EAInB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAGvC,OAAO,EAAC,qBAAqB,EAAkB,MAAM,kCAAkC,CAAC;AAExF,qBACa,SAAU,YAAW,WAAW;IAErC,OAAO,CAAC,SAAS;IACiB,OAAO,CAAC,iBAAiB;gBADnD,SAAS,EAAE,SAAS,EACc,iBAAiB,EAAE,qBAAqB;IAGhF,WAAW,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC;CAoCjE"}
@@ -0,0 +1,56 @@
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
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.RbacGuard = void 0;
16
+ const common_1 = require("@nestjs/common");
17
+ const core_1 = require("@nestjs/core");
18
+ const permission_decorator_1 = require("../decorators/permission.decorator");
19
+ const permissions_config_provider_1 = require("../config/permissions.config.provider");
20
+ let RbacGuard = class RbacGuard {
21
+ constructor(reflector, permissionsConfig) {
22
+ this.reflector = reflector;
23
+ this.permissionsConfig = permissionsConfig;
24
+ }
25
+ async canActivate(context) {
26
+ const permissionMetadata = this.reflector.get(permission_decorator_1.PERMISSION_METADATA_KEY, context.getHandler()) || {};
27
+ const action = permissionMetadata['action'];
28
+ if (!action)
29
+ return true;
30
+ const request = context.switchToHttp().getRequest();
31
+ const user = { ...request.user, role: request.user?.role || 'GUEST' };
32
+ const controller = context.getClass();
33
+ const model = controller?.entityName;
34
+ if (!model || model === '') {
35
+ throw new common_1.HttpException('Entity name is not set. Please override method `static get entityName()` in the controller with the permissions entity.', 500);
36
+ }
37
+ const rolePermissions = this.permissionsConfig[model]?.[user.role];
38
+ if (!rolePermissions) {
39
+ throw new common_1.ForbiddenException(`No permissions defined for role ${user.role} on model ${model}`);
40
+ }
41
+ const permission = rolePermissions[action];
42
+ if (!permission) {
43
+ throw new common_1.ForbiddenException(`Action ${action} not allowed for role ${user.role} on model ${model}`);
44
+ }
45
+ if (permission === 'ALL') {
46
+ return true;
47
+ }
48
+ return true;
49
+ }
50
+ };
51
+ exports.RbacGuard = RbacGuard;
52
+ exports.RbacGuard = RbacGuard = __decorate([
53
+ (0, common_1.Injectable)(),
54
+ __param(1, (0, common_1.Inject)(permissions_config_provider_1.PERMISSIONS_CONFIG_TOKEN)),
55
+ __metadata("design:paramtypes", [core_1.Reflector, Object])
56
+ ], RbacGuard);
@@ -0,0 +1,12 @@
1
+ import { CanActivate, ExecutionContext } from '@nestjs/common';
2
+ import { Reflector } from '@nestjs/core';
3
+ export declare class RolesGuard implements CanActivate {
4
+ private reflector;
5
+ private rolesEnum;
6
+ private readonly logger;
7
+ constructor(reflector: Reflector, rolesEnum: {
8
+ [key: string]: any;
9
+ });
10
+ canActivate(context: ExecutionContext): boolean;
11
+ }
12
+ //# sourceMappingURL=role.guard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"role.guard.d.ts","sourceRoot":"","sources":["../../../src/common/guards/role.guard.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,WAAW,EACX,gBAAgB,EAInB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAGvC,qBACa,UAAW,YAAW,WAAW;IAItC,OAAO,CAAC,SAAS;IACK,OAAO,CAAC,SAAS;IAJ3C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA+B;gBAG1C,SAAS,EAAE,SAAS,EACE,SAAS,EAAE;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAC;IAGjE,WAAW,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO;CAalD"}
@@ -0,0 +1,44 @@
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
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ var RolesGuard_1;
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.RolesGuard = void 0;
17
+ const common_1 = require("@nestjs/common");
18
+ const core_1 = require("@nestjs/core");
19
+ const context_transformer_util_1 = require("../utils/context-transformer.util");
20
+ let RolesGuard = RolesGuard_1 = class RolesGuard {
21
+ constructor(reflector, rolesEnum) {
22
+ this.reflector = reflector;
23
+ this.rolesEnum = rolesEnum;
24
+ this.logger = new common_1.Logger(RolesGuard_1.name);
25
+ }
26
+ canActivate(context) {
27
+ const roles = this.reflector.get('roles', context.getHandler());
28
+ if (!roles) {
29
+ return true;
30
+ }
31
+ const { req } = (0, context_transformer_util_1.transformContext)(context);
32
+ if (!req || !req.user) {
33
+ this.logger.log('No user found in request');
34
+ return false;
35
+ }
36
+ return roles.some(role => this.rolesEnum[role] === req.user.role);
37
+ }
38
+ };
39
+ exports.RolesGuard = RolesGuard;
40
+ exports.RolesGuard = RolesGuard = RolesGuard_1 = __decorate([
41
+ (0, common_1.Injectable)(),
42
+ __param(1, (0, common_1.Inject)('ROLES_ENUM')),
43
+ __metadata("design:paramtypes", [core_1.Reflector, Object])
44
+ ], RolesGuard);
@@ -0,0 +1,9 @@
1
+ import { NestInterceptor, ExecutionContext, CallHandler } from '@nestjs/common';
2
+ import { Observable } from 'rxjs';
3
+ import { FileUploadService } from '../../modules/file/file-upload.service';
4
+ export declare class FileUploadInterceptor implements NestInterceptor {
5
+ private fileUploadService;
6
+ constructor(fileUploadService: FileUploadService);
7
+ intercept(context: ExecutionContext, next: CallHandler): Promise<Observable<any>>;
8
+ }
9
+ //# sourceMappingURL=file.interceptor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file.interceptor.d.ts","sourceRoot":"","sources":["../../../src/common/interceptors/file.interceptor.ts"],"names":[],"mappings":"AAAA,OAAO,EAEH,eAAe,EACf,gBAAgB,EAChB,WAAW,EAGd,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAC,UAAU,EAAC,MAAM,MAAM,CAAC;AAChC,OAAO,EAAC,iBAAiB,EAAC,MAAM,wCAAwC,CAAC;AAIzE,qBACa,qBAAsB,YAAW,eAAe;IAC7C,OAAO,CAAC,iBAAiB;gBAAjB,iBAAiB,EAAE,iBAAiB;IAElD,SAAS,CAAC,OAAO,EAAE,gBAAgB,EAAE,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;CAkD1F"}
@@ -0,0 +1,74 @@
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
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.FileUploadInterceptor = void 0;
16
+ const common_1 = require("@nestjs/common");
17
+ const file_upload_service_1 = require("../../modules/file/file-upload.service");
18
+ const multer_1 = __importDefault(require("multer"));
19
+ const nestjs_request_context_1 = require("nestjs-request-context");
20
+ let FileUploadInterceptor = class FileUploadInterceptor {
21
+ constructor(fileUploadService) {
22
+ this.fileUploadService = fileUploadService;
23
+ }
24
+ async intercept(context, next) {
25
+ const req = context.switchToHttp().getRequest();
26
+ const endpoint = req.url;
27
+ const config = this.fileUploadService.getEndpointConfig(endpoint);
28
+ if (!config) {
29
+ throw new common_1.BadRequestException('Endpoint not configured');
30
+ }
31
+ const userRole = req.user?.role;
32
+ if (!config.roles.includes('ALL')) {
33
+ if (!userRole) {
34
+ throw new common_1.ForbiddenException('User role is required for this upload endpoint');
35
+ }
36
+ this.fileUploadService.validateUserRole(endpoint, userRole);
37
+ }
38
+ const multerOptions = {
39
+ storage: multer_1.default.memoryStorage(),
40
+ limits: { fileSize: config.maxSize },
41
+ fileFilter: (req, file, cb) => {
42
+ const normalizedMimeType = file.mimetype === 'image/jpg' ? 'image/jpeg' : file.mimetype;
43
+ if (config.allowedTypes.includes(normalizedMimeType)) {
44
+ cb(null, true);
45
+ }
46
+ else {
47
+ cb(new common_1.BadRequestException('Invalid file type'));
48
+ }
49
+ },
50
+ };
51
+ const upload = (0, multer_1.default)(multerOptions)[config.multiple ? 'array' : 'single']('file');
52
+ const store = nestjs_request_context_1.RequestContext.cls.getStore();
53
+ if (!store) {
54
+ throw new Error('RequestContext store is undefined. Ensure that RequestContextMiddleware is applied.');
55
+ }
56
+ await new Promise((resolve, reject) => {
57
+ nestjs_request_context_1.RequestContext.cls.run(store, () => {
58
+ upload(req, req.res, (err) => {
59
+ if (err) {
60
+ console.log('Multer upload error:', err);
61
+ return reject(err);
62
+ }
63
+ resolve();
64
+ });
65
+ });
66
+ });
67
+ return next.handle();
68
+ }
69
+ };
70
+ exports.FileUploadInterceptor = FileUploadInterceptor;
71
+ exports.FileUploadInterceptor = FileUploadInterceptor = __decorate([
72
+ (0, common_1.Injectable)(),
73
+ __metadata("design:paramtypes", [file_upload_service_1.FileUploadService])
74
+ ], FileUploadInterceptor);
@@ -0,0 +1,14 @@
1
+ import { CallHandler, ExecutionContext, NestInterceptor } from '@nestjs/common';
2
+ import { PrismaService } from '../../prisma/prisma.service';
3
+ import { Reflector } from '@nestjs/core';
4
+ import { ConfigService } from '@nestjs/config';
5
+ import { Observable } from 'rxjs';
6
+ export declare class PrismaInterceptor implements NestInterceptor {
7
+ private readonly prismaService;
8
+ private reflector;
9
+ private configService;
10
+ private readonly defaultUseTransaction;
11
+ constructor(prismaService: PrismaService, reflector: Reflector, configService: ConfigService);
12
+ intercept(context: ExecutionContext, next: CallHandler): Observable<any>;
13
+ }
14
+ //# sourceMappingURL=prisma.interceptor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prisma.interceptor.d.ts","sourceRoot":"","sources":["../../../src/common/interceptors/prisma.interceptor.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,WAAW,EACX,gBAAgB,EAEhB,eAAe,EAClB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAC,aAAa,EAAC,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AACvC,OAAO,EAAC,aAAa,EAAC,MAAM,gBAAgB,CAAC;AAG7C,OAAO,EAAC,UAAU,EAAa,MAAM,MAAM,CAAC;AAI5C,qBACa,iBAAkB,YAAW,eAAe;IAIjD,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,aAAa;IALzB,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAS;gBAG1B,aAAa,EAAE,aAAa,EACrC,SAAS,EAAE,SAAS,EACpB,aAAa,EAAE,aAAa;IAKxC,SAAS,CAAC,OAAO,EAAE,gBAAgB,EAAE,IAAI,EAAE,WAAW,GAAG,UAAU,CAAC,GAAG,CAAC;CAuD3E"}
@@ -0,0 +1,82 @@
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.PrismaInterceptor = void 0;
13
+ const common_1 = require("@nestjs/common");
14
+ const prisma_service_1 = require("../../prisma/prisma.service");
15
+ const core_1 = require("@nestjs/core");
16
+ const config_1 = require("@nestjs/config");
17
+ const nestjs_request_context_1 = require("nestjs-request-context");
18
+ const operators_1 = require("rxjs/operators");
19
+ const rxjs_1 = require("rxjs");
20
+ const error_handler_1 = require("../utils/error-handler");
21
+ let PrismaInterceptor = class PrismaInterceptor {
22
+ constructor(prismaService, reflector, configService) {
23
+ this.prismaService = prismaService;
24
+ this.reflector = reflector;
25
+ this.configService = configService;
26
+ this.defaultUseTransaction = this.configService.get('USE_TRANSACTION', 'false');
27
+ }
28
+ intercept(context, next) {
29
+ const handlerType = context.getType();
30
+ const req = handlerType === 'graphql'
31
+ ? context.getArgByIndex(2) // GraphQL context
32
+ : context.switchToHttp().getRequest(); // HTTP context
33
+ const useTransaction = this.reflector.get('useTransaction', context.getHandler()) ||
34
+ this.defaultUseTransaction === 'true';
35
+ if (useTransaction) {
36
+ return new rxjs_1.Observable((observer) => {
37
+ this.prismaService
38
+ .$transaction(async (transactionClient) => {
39
+ nestjs_request_context_1.RequestContext.currentContext.req.prisma = transactionClient;
40
+ await new Promise((resolve, reject) => {
41
+ next
42
+ .handle()
43
+ .pipe((0, operators_1.tap)(() => { }), (0, operators_1.catchError)((err) => {
44
+ const handledError = (0, error_handler_1.handleError)(err);
45
+ reject(handledError);
46
+ return (0, rxjs_1.throwError)(() => handledError);
47
+ }))
48
+ .subscribe({
49
+ next: (result) => observer.next(result),
50
+ complete: () => {
51
+ delete nestjs_request_context_1.RequestContext.currentContext.req.prisma;
52
+ observer.complete();
53
+ resolve(null);
54
+ },
55
+ error: (err) => {
56
+ delete nestjs_request_context_1.RequestContext.currentContext.req.prisma;
57
+ observer.error(err);
58
+ reject(err);
59
+ },
60
+ });
61
+ });
62
+ })
63
+ .catch((err) => {
64
+ delete nestjs_request_context_1.RequestContext.currentContext.req.prisma;
65
+ observer.error(err);
66
+ });
67
+ });
68
+ }
69
+ else {
70
+ return next.handle().pipe((0, operators_1.tap)(() => { }), (0, operators_1.catchError)((error) => {
71
+ return (0, rxjs_1.throwError)(() => (0, error_handler_1.handleError)(error));
72
+ }));
73
+ }
74
+ }
75
+ };
76
+ exports.PrismaInterceptor = PrismaInterceptor;
77
+ exports.PrismaInterceptor = PrismaInterceptor = __decorate([
78
+ (0, common_1.Injectable)(),
79
+ __metadata("design:paramtypes", [prisma_service_1.PrismaService,
80
+ core_1.Reflector,
81
+ config_1.ConfigService])
82
+ ], PrismaInterceptor);