@lenne.tech/nest-server 11.34.0 → 11.35.0

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 (151) hide show
  1. package/.claude/rules/architecture.md +3 -1
  2. package/.claude/rules/configurable-features.md +3 -3
  3. package/.claude/rules/role-system.md +281 -0
  4. package/CLAUDE.md +11 -1
  5. package/FRAMEWORK-API.md +7 -3
  6. package/dist/core/common/decorators/nested-type.registry.d.ts +2 -0
  7. package/dist/core/common/decorators/nested-type.registry.js +17 -0
  8. package/dist/core/common/decorators/nested-type.registry.js.map +1 -0
  9. package/dist/core/common/decorators/restricted.decorator.d.ts +2 -1
  10. package/dist/core/common/decorators/restricted.decorator.js +52 -16
  11. package/dist/core/common/decorators/restricted.decorator.js.map +1 -1
  12. package/dist/core/common/decorators/restrictions-checked.marker.d.ts +4 -0
  13. package/dist/core/common/decorators/restrictions-checked.marker.js +30 -0
  14. package/dist/core/common/decorators/restrictions-checked.marker.js.map +1 -0
  15. package/dist/core/common/decorators/unified-field.decorator.d.ts +1 -1
  16. package/dist/core/common/decorators/unified-field.decorator.js +6 -3
  17. package/dist/core/common/decorators/unified-field.decorator.js.map +1 -1
  18. package/dist/core/common/enums/role.enum.d.ts +8 -0
  19. package/dist/core/common/enums/role.enum.js +28 -1
  20. package/dist/core/common/enums/role.enum.js.map +1 -1
  21. package/dist/core/common/helpers/execution-context-request.helper.d.ts +7 -0
  22. package/dist/core/common/helpers/execution-context-request.helper.js +31 -0
  23. package/dist/core/common/helpers/execution-context-request.helper.js.map +1 -0
  24. package/dist/core/common/helpers/graphql-ws-context.helper.d.ts +15 -0
  25. package/dist/core/common/helpers/graphql-ws-context.helper.js +96 -0
  26. package/dist/core/common/helpers/graphql-ws-context.helper.js.map +1 -0
  27. package/dist/core/common/helpers/gridfs.helper.js +1 -1
  28. package/dist/core/common/helpers/gridfs.helper.js.map +1 -1
  29. package/dist/core/common/helpers/validation-message.helper.d.ts +3 -0
  30. package/dist/core/common/helpers/validation-message.helper.js +41 -0
  31. package/dist/core/common/helpers/validation-message.helper.js.map +1 -0
  32. package/dist/core/common/interceptors/check-security.interceptor.js +2 -1
  33. package/dist/core/common/interceptors/check-security.interceptor.js.map +1 -1
  34. package/dist/core/common/interceptors/response-model.interceptor.js +3 -2
  35. package/dist/core/common/interceptors/response-model.interceptor.js.map +1 -1
  36. package/dist/core/common/interfaces/server-options.interface.d.ts +5 -0
  37. package/dist/core/common/pipes/map-and-validate.pipe.js +16 -6
  38. package/dist/core/common/pipes/map-and-validate.pipe.js.map +1 -1
  39. package/dist/core/common/plugins/mongoose-system-role.plugin.d.ts +1 -0
  40. package/dist/core/common/plugins/mongoose-system-role.plugin.js +106 -0
  41. package/dist/core/common/plugins/mongoose-system-role.plugin.js.map +1 -0
  42. package/dist/core/common/plugins/mongoose-tenant.plugin.js +134 -9
  43. package/dist/core/common/plugins/mongoose-tenant.plugin.js.map +1 -1
  44. package/dist/core/common/services/core-s3.service.js +4 -1
  45. package/dist/core/common/services/core-s3.service.js.map +1 -1
  46. package/dist/core/common/services/core-tenant-context.registry.d.ts +10 -0
  47. package/dist/core/common/services/core-tenant-context.registry.js +12 -0
  48. package/dist/core/common/services/core-tenant-context.registry.js.map +1 -0
  49. package/dist/core/modules/auth/guards/roles.guard.d.ts +1 -1
  50. package/dist/core/modules/auth/guards/roles.guard.js +2 -2
  51. package/dist/core/modules/auth/guards/roles.guard.js.map +1 -1
  52. package/dist/core/modules/better-auth/better-auth-roles.guard.js +2 -10
  53. package/dist/core/modules/better-auth/better-auth-roles.guard.js.map +1 -1
  54. package/dist/core/modules/file/core-file.service.d.ts +3 -1
  55. package/dist/core/modules/file/core-file.service.js +62 -7
  56. package/dist/core/modules/file/core-file.service.js.map +1 -1
  57. package/dist/core/modules/file/file-access.helper.d.ts +18 -0
  58. package/dist/core/modules/file/file-access.helper.js +46 -0
  59. package/dist/core/modules/file/file-access.helper.js.map +1 -0
  60. package/dist/core/modules/file/file-metadata.helper.js +1 -1
  61. package/dist/core/modules/file/file-metadata.helper.js.map +1 -1
  62. package/dist/core/modules/file/file-roles.config.d.ts +10 -0
  63. package/dist/core/modules/file/file-roles.config.js +78 -0
  64. package/dist/core/modules/file/file-roles.config.js.map +1 -0
  65. package/dist/core/modules/file/file-roles.helper.d.ts +2 -2
  66. package/dist/core/modules/file/file-roles.helper.js +8 -20
  67. package/dist/core/modules/file/file-roles.helper.js.map +1 -1
  68. package/dist/core/modules/tenant/core-role-scope.registry.d.ts +28 -0
  69. package/dist/core/modules/tenant/core-role-scope.registry.js +93 -0
  70. package/dist/core/modules/tenant/core-role-scope.registry.js.map +1 -0
  71. package/dist/core/modules/tenant/core-tenant.guard.d.ts +5 -0
  72. package/dist/core/modules/tenant/core-tenant.guard.js +37 -11
  73. package/dist/core/modules/tenant/core-tenant.guard.js.map +1 -1
  74. package/dist/core/modules/tenant/core-tenant.helpers.d.ts +9 -1
  75. package/dist/core/modules/tenant/core-tenant.helpers.js +65 -4
  76. package/dist/core/modules/tenant/core-tenant.helpers.js.map +1 -1
  77. package/dist/core/modules/tenant/core-tenant.module.js +5 -0
  78. package/dist/core/modules/tenant/core-tenant.module.js.map +1 -1
  79. package/dist/core/modules/tenant/core-tenant.service.d.ts +1 -0
  80. package/dist/core/modules/tenant/core-tenant.service.js +25 -0
  81. package/dist/core/modules/tenant/core-tenant.service.js.map +1 -1
  82. package/dist/core/modules/tus/core-tus.service.d.ts +2 -0
  83. package/dist/core/modules/tus/core-tus.service.js +34 -4
  84. package/dist/core/modules/tus/core-tus.service.js.map +1 -1
  85. package/dist/core/modules/tus/index.d.ts +1 -0
  86. package/dist/core/modules/tus/index.js +1 -0
  87. package/dist/core/modules/tus/index.js.map +1 -1
  88. package/dist/core/modules/tus/tus.constants.d.ts +1 -0
  89. package/dist/core/modules/tus/tus.constants.js +2 -1
  90. package/dist/core/modules/tus/tus.constants.js.map +1 -1
  91. package/dist/core/modules/user/core-user.service.js +5 -0
  92. package/dist/core/modules/user/core-user.service.js.map +1 -1
  93. package/dist/core/modules/user/inputs/core-user.input.js +8 -0
  94. package/dist/core/modules/user/inputs/core-user.input.js.map +1 -1
  95. package/dist/core.module.js +10 -0
  96. package/dist/core.module.js.map +1 -1
  97. package/dist/index.d.ts +3 -0
  98. package/dist/index.js +3 -0
  99. package/dist/index.js.map +1 -1
  100. package/dist/server/modules/file/file.service.js +4 -1
  101. package/dist/server/modules/file/file.service.js.map +1 -1
  102. package/dist/test/test.helper.d.ts +1 -0
  103. package/dist/test/test.helper.js +26 -6
  104. package/dist/test/test.helper.js.map +1 -1
  105. package/dist/tsconfig.build.tsbuildinfo +1 -1
  106. package/docs/REQUEST-LIFECYCLE.md +60 -1
  107. package/migration-guides/11.34.0-to-11.34.1.md +132 -0
  108. package/migration-guides/11.34.x-to-11.35.x.md +832 -0
  109. package/package.json +1 -1
  110. package/src/core/common/decorators/nested-type.registry.ts +42 -0
  111. package/src/core/common/decorators/restricted.decorator.ts +149 -21
  112. package/src/core/common/decorators/restrictions-checked.marker.ts +87 -0
  113. package/src/core/common/decorators/unified-field.decorator.ts +4 -3
  114. package/src/core/common/enums/role.enum.ts +116 -0
  115. package/src/core/common/helpers/execution-context-request.helper.ts +102 -0
  116. package/src/core/common/helpers/graphql-ws-context.helper.ts +192 -0
  117. package/src/core/common/helpers/gridfs.helper.ts +18 -2
  118. package/src/core/common/helpers/validation-message.helper.ts +83 -0
  119. package/src/core/common/interceptors/check-security.interceptor.ts +4 -1
  120. package/src/core/common/interceptors/response-model.interceptor.ts +3 -2
  121. package/src/core/common/interfaces/server-options.interface.ts +139 -7
  122. package/src/core/common/pipes/map-and-validate.pipe.ts +25 -7
  123. package/src/core/common/plugins/mongoose-system-role.plugin.ts +193 -0
  124. package/src/core/common/plugins/mongoose-tenant.plugin.ts +244 -12
  125. package/src/core/common/services/core-s3.service.ts +9 -1
  126. package/src/core/common/services/core-tenant-context.registry.ts +50 -0
  127. package/src/core/modules/auth/guards/roles.guard.ts +7 -5
  128. package/src/core/modules/better-auth/better-auth-roles.guard.ts +7 -13
  129. package/src/core/modules/file/INTEGRATION-CHECKLIST.md +95 -1
  130. package/src/core/modules/file/README.md +61 -0
  131. package/src/core/modules/file/core-file.service.ts +166 -9
  132. package/src/core/modules/file/file-access.helper.ts +149 -0
  133. package/src/core/modules/file/file-metadata.helper.ts +13 -5
  134. package/src/core/modules/file/file-roles.config.ts +202 -0
  135. package/src/core/modules/file/file-roles.helper.ts +11 -40
  136. package/src/core/modules/tenant/README.md +20 -1
  137. package/src/core/modules/tenant/core-role-scope.registry.ts +195 -0
  138. package/src/core/modules/tenant/core-tenant.guard.ts +92 -12
  139. package/src/core/modules/tenant/core-tenant.helpers.ts +139 -7
  140. package/src/core/modules/tenant/core-tenant.module.ts +12 -0
  141. package/src/core/modules/tenant/core-tenant.service.ts +56 -0
  142. package/src/core/modules/tus/README.md +46 -7
  143. package/src/core/modules/tus/core-tus.service.ts +94 -5
  144. package/src/core/modules/tus/index.ts +1 -0
  145. package/src/core/modules/tus/tus.constants.ts +17 -1
  146. package/src/core/modules/user/core-user.service.ts +12 -0
  147. package/src/core/modules/user/inputs/core-user.input.ts +28 -2
  148. package/src/core.module.ts +62 -1
  149. package/src/index.ts +3 -0
  150. package/src/server/modules/file/file.service.ts +45 -2
  151. package/src/test/test.helper.ts +54 -11
@@ -1 +1 @@
1
- {"version":3,"file":"core-file.service.js","sourceRoot":"","sources":["../../../../src/core/modules/file/core-file.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"core-file.service.js","sourceRoot":"","sources":["../../../../src/core/modules/file/core-file.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ export type FileAccessPreset = 'authenticated' | 'custom' | 'owner' | 'public' | 'tenant';
2
+ type CheckInputType = 'file' | 'filename' | 'files' | 'filterArgs' | 'id';
3
+ export declare function resolveFileAccessPreset(fileConfig?: {
4
+ access?: FileAccessPreset;
5
+ }): FileAccessPreset;
6
+ export declare function fileAccessNeedsRawDocument(preset: FileAccessPreset, checkInputType?: CheckInputType): boolean;
7
+ export declare function decideFileAccess(options: {
8
+ checkInputType?: CheckInputType;
9
+ currentUser?: {
10
+ hasRole?: (roles: string[]) => boolean;
11
+ id?: any;
12
+ };
13
+ force?: boolean;
14
+ preset: FileAccessPreset;
15
+ raw?: null | Record<string, any>;
16
+ tenantId?: string;
17
+ }): boolean;
18
+ export {};
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.resolveFileAccessPreset = resolveFileAccessPreset;
4
+ exports.fileAccessNeedsRawDocument = fileAccessNeedsRawDocument;
5
+ exports.decideFileAccess = decideFileAccess;
6
+ const role_enum_1 = require("../../common/enums/role.enum");
7
+ const PRESETS = ['authenticated', 'custom', 'owner', 'public', 'tenant'];
8
+ function resolveFileAccessPreset(fileConfig) {
9
+ const configured = fileConfig?.access;
10
+ if (configured === undefined || configured === null) {
11
+ return 'custom';
12
+ }
13
+ return PRESETS.includes(configured) ? configured : 'owner';
14
+ }
15
+ function fileAccessNeedsRawDocument(preset, checkInputType) {
16
+ if (preset !== 'owner' && preset !== 'tenant') {
17
+ return false;
18
+ }
19
+ return checkInputType === 'id' || checkInputType === 'filename';
20
+ }
21
+ function decideFileAccess(options) {
22
+ const { checkInputType, currentUser, force, preset, raw, tenantId } = options;
23
+ if (force) {
24
+ return true;
25
+ }
26
+ if (preset === 'custom' || preset === 'public') {
27
+ return true;
28
+ }
29
+ if (preset === 'authenticated') {
30
+ return !!currentUser?.id;
31
+ }
32
+ if (currentUser?.hasRole?.([role_enum_1.RoleEnum.ADMIN])) {
33
+ return true;
34
+ }
35
+ if (checkInputType === 'file' || checkInputType === 'files') {
36
+ return true;
37
+ }
38
+ if (checkInputType === 'filterArgs') {
39
+ return false;
40
+ }
41
+ if (preset === 'owner') {
42
+ return !!raw?.metadata?.ownerId && String(raw.metadata.ownerId) === String(currentUser?.id);
43
+ }
44
+ return !!tenantId && !!raw?.metadata?.tenantId && String(raw.metadata.tenantId) === String(tenantId);
45
+ }
46
+ //# sourceMappingURL=file-access.helper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-access.helper.js","sourceRoot":"","sources":["../../../../src/core/modules/file/file-access.helper.ts"],"names":[],"mappings":";;AA4DA,0DAMC;AASD,gEAKC;AAWD,4CAyDC;AA7GD,4DAAwD;AAQxD,MAAM,OAAO,GAAgC,CAAC,eAAe,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAU,CAAC;AAa/G,SAAgB,uBAAuB,CAAC,UAA0C;IAChF,MAAM,UAAU,GAAG,UAAU,EAAE,MAAM,CAAC;IACtC,IAAI,UAAU,KAAK,SAAS,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;QACpD,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,OAAO,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC;AAC7D,CAAC;AASD,SAAgB,0BAA0B,CAAC,MAAwB,EAAE,cAA+B;IAClG,IAAI,MAAM,KAAK,OAAO,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC9C,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,cAAc,KAAK,IAAI,IAAI,cAAc,KAAK,UAAU,CAAC;AAClE,CAAC;AAWD,SAAgB,gBAAgB,CAAC,OAOhC;IACC,MAAM,EAAE,cAAc,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC;IAK9E,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,IAAI,CAAC;IACd,CAAC;IAGD,IAAI,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC/C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,MAAM,KAAK,eAAe,EAAE,CAAC;QAG/B,OAAO,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;IAC3B,CAAC;IAGD,IAAI,WAAW,EAAE,OAAO,EAAE,CAAC,CAAC,oBAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;QAC7C,OAAO,IAAI,CAAC;IACd,CAAC;IAKD,IAAI,cAAc,KAAK,MAAM,IAAI,cAAc,KAAK,OAAO,EAAE,CAAC;QAC5D,OAAO,IAAI,CAAC;IACd,CAAC;IAKD,IAAI,cAAc,KAAK,YAAY,EAAE,CAAC;QACpC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;QAIvB,OAAO,CAAC,CAAC,GAAG,EAAE,QAAQ,EAAE,OAAO,IAAI,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,MAAM,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IAC9F,CAAC;IAID,OAAO,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,GAAG,EAAE,QAAQ,EAAE,QAAQ,IAAI,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,MAAM,CAAC,QAAQ,CAAC,CAAC;AACvG,CAAC"}
@@ -9,7 +9,7 @@ async function findMetadataById(collection, id) {
9
9
  return (await collection.findOne({ _id: new mongoose_1.Types.ObjectId(id) }));
10
10
  }
11
11
  async function findMetadataByName(collection, filename) {
12
- return (await collection.findOne({ filename }));
12
+ return (await collection.findOne({ filename }, { sort: { uploadDate: -1, _id: -1 } }));
13
13
  }
14
14
  async function findMetadata(collection, filter = {}, options = {}) {
15
15
  return (await collection.find(filter, options).toArray());
@@ -1 +1 @@
1
- {"version":3,"file":"file-metadata.helper.js","sourceRoot":"","sources":["../../../../src/core/modules/file/file-metadata.helper.ts"],"names":[],"mappings":";;AAoEA,4CAKC;AASD,gDAKC;AAGD,oCAMC;AAgCD,kDAaC;AA7ID,uCAAwC;AAoEjC,KAAK,UAAU,gBAAgB,CACpC,UAA0B,EAC1B,EAA2B;IAE3B,OAAO,CAAC,MAAM,UAAU,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,IAAI,gBAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,CAA4B,CAAC;AAChG,CAAC;AASM,KAAK,UAAU,kBAAkB,CACtC,UAA0B,EAC1B,QAAgB;IAEhB,OAAO,CAAC,MAAM,UAAU,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,CAAC,CAA4B,CAAC;AAC7E,CAAC;AAGM,KAAK,UAAU,YAAY,CAChC,UAA0B,EAC1B,SAAc,EAAE,EAChB,UAAe,EAAE;IAEjB,OAAO,CAAC,MAAM,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,OAAO,EAAE,CAAuB,CAAC;AAClF,CAAC;AASD,MAAM,oBAAoB,GAAG,IAAI,GAAG,EAAU,CAAC;AAuBxC,KAAK,UAAU,mBAAmB,CAAC,UAA0B;IAClE,MAAM,SAAS,GAAG,GAAG,UAAU,CAAC,MAAM,IAAI,UAAU,CAAC,cAAc,EAAE,CAAC;IACtE,IAAI,oBAAoB,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;QACxC,OAAO,IAAI,CAAC;IACd,CAAC;IACD,oBAAoB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACpC,IAAI,CAAC;QACH,MAAM,UAAU,CAAC,WAAW,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;QAC9C,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,oBAAoB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACvC,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"file-metadata.helper.js","sourceRoot":"","sources":["../../../../src/core/modules/file/file-metadata.helper.ts"],"names":[],"mappings":";;AAoEA,4CAKC;AAeD,gDAOC;AAGD,oCAMC;AAgCD,kDAaC;AArJD,uCAAwC;AAoEjC,KAAK,UAAU,gBAAgB,CACpC,UAA0B,EAC1B,EAA2B;IAE3B,OAAO,CAAC,MAAM,UAAU,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,IAAI,gBAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,CAA4B,CAAC;AAChG,CAAC;AAeM,KAAK,UAAU,kBAAkB,CACtC,UAA0B,EAC1B,QAAgB;IAIhB,OAAO,CAAC,MAAM,UAAU,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAA4B,CAAC;AACpH,CAAC;AAGM,KAAK,UAAU,YAAY,CAChC,UAA0B,EAC1B,SAAc,EAAE,EAChB,UAAe,EAAE;IAEjB,OAAO,CAAC,MAAM,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,OAAO,EAAE,CAAuB,CAAC;AAClF,CAAC;AASD,MAAM,oBAAoB,GAAG,IAAI,GAAG,EAAU,CAAC;AAuBxC,KAAK,UAAU,mBAAmB,CAAC,UAA0B;IAClE,MAAM,SAAS,GAAG,GAAG,UAAU,CAAC,MAAM,IAAI,UAAU,CAAC,cAAc,EAAE,CAAC;IACtE,IAAI,oBAAoB,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;QACxC,OAAO,IAAI,CAAC;IACd,CAAC;IACD,oBAAoB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACpC,IAAI,CAAC;QACH,MAAM,UAAU,CAAC,WAAW,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;QAC9C,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,oBAAoB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACvC,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { IFileConfig, IS3Config } from '../../common/interfaces/server-options.interface';
2
+ export type FileRoleKey = 'deleteRoles' | 'downloadRoles' | 'uploadRoles';
3
+ export declare const FILE_ROLE_DEFAULTS: Record<FileRoleKey, string[]>;
4
+ export declare function resolveRoles(key: FileRoleKey, config?: IFileConfig): string[];
5
+ export declare function warnOnPresignedDownloadsWithRestrictedRoles(s3Config?: IS3Config, fileConfig?: IFileConfig): string | undefined;
6
+ export declare function warnOnUndecidedFileAccess(options: {
7
+ fileConfig?: IFileConfig;
8
+ hasPerFileRule: boolean;
9
+ multiTenancyEnabled: boolean;
10
+ }): string | undefined;
@@ -0,0 +1,78 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FILE_ROLE_DEFAULTS = void 0;
4
+ exports.resolveRoles = resolveRoles;
5
+ exports.warnOnPresignedDownloadsWithRestrictedRoles = warnOnPresignedDownloadsWithRestrictedRoles;
6
+ exports.warnOnUndecidedFileAccess = warnOnUndecidedFileAccess;
7
+ const common_1 = require("@nestjs/common");
8
+ const role_enum_1 = require("../../common/enums/role.enum");
9
+ const logger = new common_1.Logger('CoreFileRoles');
10
+ exports.FILE_ROLE_DEFAULTS = {
11
+ deleteRoles: [role_enum_1.RoleEnum.ADMIN],
12
+ downloadRoles: [role_enum_1.RoleEnum.ADMIN],
13
+ uploadRoles: [role_enum_1.RoleEnum.ADMIN],
14
+ };
15
+ function resolveRoles(key, config) {
16
+ const configured = config?.[key];
17
+ if (configured === undefined) {
18
+ return exports.FILE_ROLE_DEFAULTS[key];
19
+ }
20
+ if (!Array.isArray(configured) || configured.length === 0 || configured.some((role) => typeof role !== 'string')) {
21
+ logger.warn(`Ignoring file.${key}: expected a non-empty array of role strings, got ${JSON.stringify(configured)}. ` +
22
+ `Falling back to ${JSON.stringify(exports.FILE_ROLE_DEFAULTS[key])}.`);
23
+ return exports.FILE_ROLE_DEFAULTS[key];
24
+ }
25
+ return configured;
26
+ }
27
+ function warnOnPresignedDownloadsWithRestrictedRoles(s3Config, fileConfig) {
28
+ const presigned = s3Config?.presignedDownloads;
29
+ const presignedEnabled = presigned === true || (!!presigned && typeof presigned === 'object' && presigned.enabled !== false);
30
+ if (!presignedEnabled) {
31
+ return undefined;
32
+ }
33
+ const downloadRoles = resolveRoles('downloadRoles', fileConfig);
34
+ if (downloadRoles.includes(role_enum_1.RoleEnum.S_EVERYONE)) {
35
+ return undefined;
36
+ }
37
+ const message = `s3.presignedDownloads is enabled while file.downloadRoles restricts downloads to ` +
38
+ `${JSON.stringify(downloadRoles)}. A presigned URL is a BEARER capability: it is authorized ` +
39
+ `once, at issue time, and afterwards anyone holding it can fetch the object with no session, ` +
40
+ `from any IP, until it expires — the grant cannot be revoked in between, and it survives in ` +
41
+ `browser history, Referer headers and proxy logs. The role check therefore applies to ` +
42
+ `obtaining the link, not to reading the file. If these files are sensitive (personal or ` +
43
+ `medical data), set s3.presignedDownloads: false so the API streams them and re-checks ` +
44
+ `rights on every request.`;
45
+ logger.warn(message);
46
+ return message;
47
+ }
48
+ function warnOnUndecidedFileAccess(options) {
49
+ const { fileConfig, hasPerFileRule, multiTenancyEnabled } = options;
50
+ if (hasPerFileRule || (fileConfig?.access && fileConfig.access !== 'custom')) {
51
+ return undefined;
52
+ }
53
+ const widened = [];
54
+ for (const key of ['deleteRoles', 'downloadRoles', 'uploadRoles']) {
55
+ const roles = resolveRoles(key, fileConfig);
56
+ if (roles.some((role) => role !== role_enum_1.RoleEnum.ADMIN)) {
57
+ widened.push(`file.${key}=${JSON.stringify(roles)}`);
58
+ }
59
+ }
60
+ if (!widened.length) {
61
+ return undefined;
62
+ }
63
+ const tenantNote = multiTenancyEnabled
64
+ ? ' multiTenancy is active, and the leak crosses tenants too: the file stores are reached outside ' +
65
+ 'Mongoose, so mongooseTenantPlugin never scopes them and these role names resolve against ' +
66
+ 'user.roles — a GLOBAL attribute — never against membership.role.'
67
+ : '';
68
+ const message = `The file gate is open beyond platform admins (${widened.join(', ')}), but no per-file policy is ` +
69
+ `declared: file.access is unset and CoreFileService.checkRights() is not overridden. Every holder ` +
70
+ `of such a role can therefore read, overwrite or delete EVERY file — and file ids are not secret, ` +
71
+ `they are ENUMERABLE (an ObjectId shares a per-process random part and an incrementing counter, so ` +
72
+ `one own upload reveals the neighbourhood), with no rate limit on the file routes.${tenantNote} ` +
73
+ `Declare the project class with file.access ('public' | 'authenticated' | 'owner' | 'tenant'), or ` +
74
+ `override checkRights() — see src/core/modules/file/README.md § Access control.`;
75
+ logger.warn(message);
76
+ return message;
77
+ }
78
+ //# sourceMappingURL=file-roles.config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-roles.config.js","sourceRoot":"","sources":["../../../../src/core/modules/file/file-roles.config.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
1
  import { IFileConfig } from '../../common/interfaces/server-options.interface';
2
- export type FileRoleKey = 'deleteRoles' | 'downloadRoles' | 'uploadRoles';
3
- export declare const FILE_ROLE_DEFAULTS: Record<FileRoleKey, string[]>;
2
+ export { FILE_ROLE_DEFAULTS, resolveRoles, warnOnPresignedDownloadsWithRestrictedRoles, warnOnUndecidedFileAccess, } from './file-roles.config';
3
+ export type { FileRoleKey } from './file-roles.config';
4
4
  export declare function applyFileRoles(config?: IFileConfig): void;
@@ -1,17 +1,17 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.FILE_ROLE_DEFAULTS = void 0;
3
+ exports.warnOnUndecidedFileAccess = exports.warnOnPresignedDownloadsWithRestrictedRoles = exports.resolveRoles = exports.FILE_ROLE_DEFAULTS = void 0;
4
4
  exports.applyFileRoles = applyFileRoles;
5
5
  const common_1 = require("@nestjs/common");
6
- const role_enum_1 = require("../../common/enums/role.enum");
7
6
  const core_file_controller_1 = require("./core-file.controller");
8
7
  const core_file_resolver_1 = require("./core-file.resolver");
8
+ const file_roles_config_1 = require("./file-roles.config");
9
9
  const logger = new common_1.Logger('CoreFileRoles');
10
- exports.FILE_ROLE_DEFAULTS = {
11
- deleteRoles: [role_enum_1.RoleEnum.ADMIN],
12
- downloadRoles: [role_enum_1.RoleEnum.ADMIN],
13
- uploadRoles: [role_enum_1.RoleEnum.ADMIN],
14
- };
10
+ var file_roles_config_2 = require("./file-roles.config");
11
+ Object.defineProperty(exports, "FILE_ROLE_DEFAULTS", { enumerable: true, get: function () { return file_roles_config_2.FILE_ROLE_DEFAULTS; } });
12
+ Object.defineProperty(exports, "resolveRoles", { enumerable: true, get: function () { return file_roles_config_2.resolveRoles; } });
13
+ Object.defineProperty(exports, "warnOnPresignedDownloadsWithRestrictedRoles", { enumerable: true, get: function () { return file_roles_config_2.warnOnPresignedDownloadsWithRestrictedRoles; } });
14
+ Object.defineProperty(exports, "warnOnUndecidedFileAccess", { enumerable: true, get: function () { return file_roles_config_2.warnOnUndecidedFileAccess; } });
15
15
  const ROLE_TARGETS = [
16
16
  {
17
17
  key: 'downloadRoles',
@@ -24,23 +24,11 @@ const ROLE_TARGETS = [
24
24
  { key: 'uploadRoles', member: 'CoreFileResolver.uploadFiles', owner: () => core_file_resolver_1.CoreFileResolver.prototype.uploadFiles },
25
25
  { key: 'deleteRoles', member: 'CoreFileResolver.deleteFile', owner: () => core_file_resolver_1.CoreFileResolver.prototype.deleteFile },
26
26
  ];
27
- function resolveRoles(key, config) {
28
- const configured = config?.[key];
29
- if (configured === undefined) {
30
- return exports.FILE_ROLE_DEFAULTS[key];
31
- }
32
- if (!Array.isArray(configured) || configured.length === 0 || configured.some((role) => typeof role !== 'string')) {
33
- logger.warn(`Ignoring file.${key}: expected a non-empty array of role strings, got ${JSON.stringify(configured)}. ` +
34
- `Falling back to ${JSON.stringify(exports.FILE_ROLE_DEFAULTS[key])}.`);
35
- return exports.FILE_ROLE_DEFAULTS[key];
36
- }
37
- return configured;
38
- }
39
27
  function applyFileRoles(config) {
40
28
  const resolved = new Map();
41
29
  for (const { key, member, owner } of ROLE_TARGETS) {
42
30
  if (!resolved.has(key)) {
43
- resolved.set(key, resolveRoles(key, config));
31
+ resolved.set(key, (0, file_roles_config_1.resolveRoles)(key, config));
44
32
  }
45
33
  const target = owner();
46
34
  if (typeof target !== 'function') {
@@ -1 +1 @@
1
- {"version":3,"file":"file-roles.helper.js","sourceRoot":"","sources":["../../../../src/core/modules/file/file-roles.helper.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"file-roles.helper.js","sourceRoot":"","sources":["../../../../src/core/modules/file/file-roles.helper.ts"],"names":[],"mappings":";;;AAgEA,wCAgBC;AAhFD,2CAAwC;AAGxC,iEAA4D;AAC5D,6DAAwD;AACxD,2DAAgE;AAEhE,MAAM,MAAM,GAAG,IAAI,eAAM,CAAC,eAAe,CAAC,CAAC;AAK3C,yDAK6B;AAJ3B,uHAAA,kBAAkB,OAAA;AAClB,iHAAA,YAAY,OAAA;AACZ,gJAAA,2CAA2C,OAAA;AAC3C,8HAAA,yBAAyB,OAAA;AAY3B,MAAM,YAAY,GAAiE;IACjF;QACE,GAAG,EAAE,eAAe;QACpB,MAAM,EAAE,gCAAgC;QACxC,KAAK,EAAE,GAAG,EAAE,CAAC,yCAAkB,CAAC,SAAS,CAAC,WAAW;KACtD;IACD,EAAE,GAAG,EAAE,eAAe,EAAE,MAAM,EAAE,4BAA4B,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,yCAAkB,CAAC,SAAS,CAAC,OAAO,EAAE;IACjH,EAAE,GAAG,EAAE,eAAe,EAAE,MAAM,EAAE,8BAA8B,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,qCAAgB,CAAC,SAAS,CAAC,WAAW,EAAE;IACrH,EAAE,GAAG,EAAE,aAAa,EAAE,MAAM,EAAE,6BAA6B,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,qCAAgB,CAAC,SAAS,CAAC,UAAU,EAAE;IACjH,EAAE,GAAG,EAAE,aAAa,EAAE,MAAM,EAAE,8BAA8B,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,qCAAgB,CAAC,SAAS,CAAC,WAAW,EAAE;IACnH,EAAE,GAAG,EAAE,aAAa,EAAE,MAAM,EAAE,6BAA6B,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,qCAAgB,CAAC,SAAS,CAAC,UAAU,EAAE;CAClH,CAAC;AAyBF,SAAgB,cAAc,CAAC,MAAoB;IACjD,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAyB,CAAC;IAElD,KAAK,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,YAAY,EAAE,CAAC;QAClD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACvB,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,IAAA,gCAAY,EAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC;QAC/C,CAAC;QAED,MAAM,MAAM,GAAG,KAAK,EAAE,CAAC;QACvB,IAAI,OAAO,MAAM,KAAK,UAAU,EAAE,CAAC;YACjC,MAAM,CAAC,IAAI,CAAC,qBAAqB,GAAG,KAAK,MAAM,gCAAgC,CAAC,CAAC;YACjF,SAAS;QACX,CAAC;QAED,OAAO,CAAC,cAAc,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC;IAC7D,CAAC;AACH,CAAC"}
@@ -0,0 +1,28 @@
1
+ export declare enum RoleScope {
2
+ GLOBAL = "global",
3
+ SYSTEM = "system",
4
+ TENANT = "tenant",
5
+ UNKNOWN = "unknown"
6
+ }
7
+ export interface RoleScopeSource {
8
+ globalRoles(): Iterable<string>;
9
+ tenantRoles(): Iterable<string>;
10
+ }
11
+ export declare class CoreRoleScopeRegistry {
12
+ private readonly sources;
13
+ clear(): void;
14
+ conflicts(): string[];
15
+ isTenantRole(role: string): boolean;
16
+ register(source: RoleScopeSource): void;
17
+ scopeOf(role: string): RoleScope;
18
+ hasTenantKnowledge(): boolean;
19
+ split(requiredRoles: string[]): {
20
+ global: string[];
21
+ system: string[];
22
+ tenant: string[];
23
+ unknown: string[];
24
+ };
25
+ private configSource;
26
+ private collect;
27
+ }
28
+ export declare const roleScopeRegistry: CoreRoleScopeRegistry;
@@ -0,0 +1,93 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.roleScopeRegistry = exports.CoreRoleScopeRegistry = exports.RoleScope = void 0;
4
+ const role_enum_1 = require("../../common/enums/role.enum");
5
+ const config_service_1 = require("../../common/services/config.service");
6
+ const core_tenant_enums_1 = require("./core-tenant.enums");
7
+ var RoleScope;
8
+ (function (RoleScope) {
9
+ RoleScope["GLOBAL"] = "global";
10
+ RoleScope["SYSTEM"] = "system";
11
+ RoleScope["TENANT"] = "tenant";
12
+ RoleScope["UNKNOWN"] = "unknown";
13
+ })(RoleScope || (exports.RoleScope = RoleScope = {}));
14
+ class CoreRoleScopeRegistry {
15
+ sources = [];
16
+ clear() {
17
+ this.sources.length = 0;
18
+ }
19
+ conflicts() {
20
+ const global = this.collect((source) => source.globalRoles());
21
+ const tenant = this.collect((source) => source.tenantRoles());
22
+ return [...global].filter((role) => tenant.has(role)).sort();
23
+ }
24
+ isTenantRole(role) {
25
+ return this.scopeOf(role) === RoleScope.TENANT;
26
+ }
27
+ register(source) {
28
+ this.sources.push(source);
29
+ }
30
+ scopeOf(role) {
31
+ if (typeof role !== 'string') {
32
+ return RoleScope.UNKNOWN;
33
+ }
34
+ if ((0, role_enum_1.isSystemRole)(role) || (0, role_enum_1.looksLikeSystemRole)(role)) {
35
+ return RoleScope.SYSTEM;
36
+ }
37
+ if (role_enum_1.GLOBAL_ONLY_ROLES.includes(role) || this.collect((source) => source.globalRoles()).has(role)) {
38
+ return RoleScope.GLOBAL;
39
+ }
40
+ if (this.collect((source) => source.tenantRoles()).has(role)) {
41
+ return RoleScope.TENANT;
42
+ }
43
+ return RoleScope.UNKNOWN;
44
+ }
45
+ hasTenantKnowledge() {
46
+ return this.collect((source) => source.tenantRoles()).size > 0;
47
+ }
48
+ split(requiredRoles) {
49
+ const result = { global: [], system: [], tenant: [], unknown: [] };
50
+ for (const role of requiredRoles ?? []) {
51
+ switch (this.scopeOf(role)) {
52
+ case RoleScope.GLOBAL:
53
+ result.global.push(role);
54
+ break;
55
+ case RoleScope.SYSTEM:
56
+ result.system.push(role);
57
+ break;
58
+ case RoleScope.TENANT:
59
+ result.tenant.push(role);
60
+ break;
61
+ default:
62
+ result.unknown.push(role);
63
+ }
64
+ }
65
+ return result;
66
+ }
67
+ configSource() {
68
+ return {
69
+ globalRoles: () => config_service_1.ConfigService.configFastButReadOnly?.multiTenancy?.globalOnlyRoles ?? [],
70
+ tenantRoles: () => {
71
+ const config = config_service_1.ConfigService.configFastButReadOnly?.multiTenancy;
72
+ return [
73
+ ...Object.keys(config?.roleHierarchy ?? core_tenant_enums_1.DEFAULT_ROLE_HIERARCHY),
74
+ ...(config?.additionalMembershipRoles ?? []),
75
+ ];
76
+ },
77
+ };
78
+ }
79
+ collect(pick) {
80
+ const collected = new Set();
81
+ for (const source of [this.configSource(), ...this.sources]) {
82
+ for (const role of pick(source) ?? []) {
83
+ if (typeof role === 'string' && role.length) {
84
+ collected.add(role);
85
+ }
86
+ }
87
+ }
88
+ return collected;
89
+ }
90
+ }
91
+ exports.CoreRoleScopeRegistry = CoreRoleScopeRegistry;
92
+ exports.roleScopeRegistry = new CoreRoleScopeRegistry();
93
+ //# sourceMappingURL=core-role-scope.registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core-role-scope.registry.js","sourceRoot":"","sources":["../../../../src/core/modules/tenant/core-role-scope.registry.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  import { CanActivate, ExecutionContext, OnApplicationBootstrap, OnModuleDestroy } from '@nestjs/common';
2
2
  import { Reflector } from '@nestjs/core';
3
3
  import { Model } from 'mongoose';
4
+ import { ResolvedTenantContext } from '../../common/services/core-tenant-context.registry';
4
5
  import { CoreRedisService } from '../../common/services/core-redis.service';
5
6
  import { CoreTenantMemberModel } from './core-tenant-member.model';
6
7
  interface TenantCacheInvalidation {
@@ -21,6 +22,10 @@ export declare class CoreTenantGuard implements CanActivate, OnApplicationBootst
21
22
  private cleanupInterval;
22
23
  private lastSeenConfig;
23
24
  constructor(reflector: Reflector, memberModel: Model<CoreTenantMemberModel>, redisService?: CoreRedisService);
25
+ resolveTenantContext(user: {
26
+ id: string;
27
+ roles?: string[];
28
+ } | undefined, headerTenantId?: string): Promise<ResolvedTenantContext>;
24
29
  onApplicationBootstrap(): Promise<void>;
25
30
  onModuleDestroy(): void;
26
31
  invalidateUser(userId: string): void;
@@ -20,7 +20,9 @@ const graphql_1 = require("@nestjs/graphql");
20
20
  const mongoose_1 = require("@nestjs/mongoose");
21
21
  const mongoose_2 = require("mongoose");
22
22
  const role_enum_1 = require("../../common/enums/role.enum");
23
+ const execution_context_request_helper_1 = require("../../common/helpers/execution-context-request.helper");
23
24
  const config_service_1 = require("../../common/services/config.service");
25
+ const core_tenant_context_registry_1 = require("../../common/services/core-tenant-context.registry");
24
26
  const core_redis_service_1 = require("../../common/services/core-redis.service");
25
27
  const error_codes_1 = require("../error-code/error-codes");
26
28
  const core_tenant_decorators_1 = require("./core-tenant.decorators");
@@ -48,6 +50,35 @@ let CoreTenantGuard = class CoreTenantGuard {
48
50
  if (this.cleanupInterval.unref) {
49
51
  this.cleanupInterval.unref();
50
52
  }
53
+ (0, core_tenant_context_registry_1.setTenantContextResolver)({
54
+ resolve: (user, headerTenantId) => this.resolveTenantContext(user, headerTenantId),
55
+ });
56
+ }
57
+ async resolveTenantContext(user, headerTenantId) {
58
+ const config = config_service_1.ConfigService.configFastButReadOnly?.multiTenancy;
59
+ if (!config || config.enabled === false) {
60
+ return {};
61
+ }
62
+ const trimmed = headerTenantId && typeof headerTenantId === 'string' && headerTenantId.length <= 128
63
+ ? headerTenantId.trim()
64
+ : undefined;
65
+ const adminBypass = config.adminBypass !== false;
66
+ if (adminBypass && user?.roles?.includes(role_enum_1.RoleEnum.ADMIN)) {
67
+ return trimmed ? { isAdminBypass: true, tenantId: trimmed } : { isAdminBypass: true };
68
+ }
69
+ if (!user?.id) {
70
+ return {};
71
+ }
72
+ if (trimmed) {
73
+ const membership = await this.findMembershipCached(user.id, trimmed);
74
+ if (!membership) {
75
+ return {};
76
+ }
77
+ return { tenantId: trimmed, tenantRole: membership.role };
78
+ }
79
+ const carrier = { user: { id: user.id } };
80
+ await this.resolveUserTenantIds(carrier);
81
+ return { tenantIds: carrier.tenantIds ?? [] };
51
82
  }
52
83
  async onApplicationBootstrap() {
53
84
  if (!this.redisService?.enabled) {
@@ -197,7 +228,11 @@ let CoreTenantGuard = class CoreTenantGuard {
197
228
  }
198
229
  const memberRole = membership.role;
199
230
  if (checkableRoles.length > 0) {
200
- if (!(0, core_tenant_helpers_1.checkRoleAccess)(checkableRoles, undefined, memberRole)) {
231
+ const { global: globalRoles } = (0, core_tenant_helpers_1.resolveGlobalAndTenantRoles)(checkableRoles);
232
+ const tenantRoles = (0, core_tenant_helpers_1.tenantSatisfiableRoles)(checkableRoles);
233
+ const satisfiedGlobally = globalRoles.some((r) => user.roles?.includes(r));
234
+ const satisfiedByTenant = tenantRoles.length > 0 && (0, core_tenant_helpers_1.checkRoleAccess)(tenantRoles, undefined, memberRole);
235
+ if (!satisfiedGlobally && !satisfiedByTenant) {
201
236
  throw new common_1.ForbiddenException('Insufficient tenant role');
202
237
  }
203
238
  }
@@ -268,16 +303,7 @@ let CoreTenantGuard = class CoreTenantGuard {
268
303
  }
269
304
  }
270
305
  getRequest(context) {
271
- if (context.getType() === 'graphql') {
272
- const ctx = graphql_1.GqlExecutionContext.create(context);
273
- return ctx.getContext()?.req;
274
- }
275
- try {
276
- return context.switchToHttp().getRequest();
277
- }
278
- catch {
279
- return null;
280
- }
306
+ return (0, execution_context_request_helper_1.resolveGuardRequest)(context, (ctx) => graphql_1.GqlExecutionContext.create(ctx).getContext()) ?? null;
281
307
  }
282
308
  applyInvalidation(message) {
283
309
  let parsed;