@lenne.tech/nest-server 10.0.2 → 10.0.4

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 (219) hide show
  1. package/README.md +9 -0
  2. package/dist/config.env.js +47 -17
  3. package/dist/config.env.js.map +1 -1
  4. package/dist/core/common/args/filter.args.js +3 -3
  5. package/dist/core/common/args/filter.args.js.map +1 -1
  6. package/dist/core/common/args/pagination.args.js +6 -6
  7. package/dist/core/common/args/pagination.args.js.map +1 -1
  8. package/dist/core/common/decorators/restricted.decorator.js +15 -17
  9. package/dist/core/common/decorators/restricted.decorator.js.map +1 -1
  10. package/dist/core/common/filters/http-exception-log.filter.js +1 -3
  11. package/dist/core/common/filters/http-exception-log.filter.js.map +1 -1
  12. package/dist/core/common/helpers/db.helper.js +14 -14
  13. package/dist/core/common/helpers/db.helper.js.map +1 -1
  14. package/dist/core/common/helpers/file.helper.js +2 -2
  15. package/dist/core/common/helpers/file.helper.js.map +1 -1
  16. package/dist/core/common/helpers/filter.helper.d.ts +2 -2
  17. package/dist/core/common/helpers/filter.helper.js +1 -1
  18. package/dist/core/common/helpers/filter.helper.js.map +1 -1
  19. package/dist/core/common/helpers/graphql.helper.js +1 -1
  20. package/dist/core/common/helpers/graphql.helper.js.map +1 -1
  21. package/dist/core/common/helpers/input.helper.js +31 -38
  22. package/dist/core/common/helpers/input.helper.js.map +1 -1
  23. package/dist/core/common/helpers/model.helper.js +7 -7
  24. package/dist/core/common/helpers/model.helper.js.map +1 -1
  25. package/dist/core/common/helpers/service.helper.js +2 -2
  26. package/dist/core/common/helpers/service.helper.js.map +1 -1
  27. package/dist/core/common/inputs/combined-filter.input.js +3 -3
  28. package/dist/core/common/inputs/combined-filter.input.js.map +1 -1
  29. package/dist/core/common/inputs/core-input.input.js +1 -1
  30. package/dist/core/common/inputs/core-input.input.js.map +1 -1
  31. package/dist/core/common/inputs/filter.input.js +3 -3
  32. package/dist/core/common/inputs/filter.input.js.map +1 -1
  33. package/dist/core/common/inputs/single-filter.input.js +4 -4
  34. package/dist/core/common/inputs/single-filter.input.js.map +1 -1
  35. package/dist/core/common/inputs/sort.input.js +1 -1
  36. package/dist/core/common/inputs/sort.input.js.map +1 -1
  37. package/dist/core/common/interceptors/check-security.interceptor.d.ts +1 -1
  38. package/dist/core/common/interceptors/check-security.interceptor.js +2 -2
  39. package/dist/core/common/interceptors/check-security.interceptor.js.map +1 -1
  40. package/dist/core/common/interfaces/server-options.interface.d.ts +28 -0
  41. package/dist/core/common/models/core-model.model.js.map +1 -1
  42. package/dist/core/common/models/core-persistence.model.js +3 -3
  43. package/dist/core/common/models/core-persistence.model.js.map +1 -1
  44. package/dist/core/common/pipes/map-and-validate.pipe.d.ts +1 -1
  45. package/dist/core/common/pipes/map-and-validate.pipe.js +1 -1
  46. package/dist/core/common/pipes/map-and-validate.pipe.js.map +1 -1
  47. package/dist/core/common/scalars/any.scalar.js +2 -2
  48. package/dist/core/common/scalars/any.scalar.js.map +1 -1
  49. package/dist/core/common/scalars/date-timestamp.scalar.js +1 -1
  50. package/dist/core/common/scalars/date-timestamp.scalar.js.map +1 -1
  51. package/dist/core/common/scalars/date.scalar.js +1 -1
  52. package/dist/core/common/scalars/date.scalar.js.map +1 -1
  53. package/dist/core/common/scalars/json.scalar.js +2 -2
  54. package/dist/core/common/scalars/json.scalar.js.map +1 -1
  55. package/dist/core/common/services/config.service.js +7 -7
  56. package/dist/core/common/services/config.service.js.map +1 -1
  57. package/dist/core/common/services/core-cron-jobs.service.js +5 -5
  58. package/dist/core/common/services/core-cron-jobs.service.js.map +1 -1
  59. package/dist/core/common/services/crud.service.js +1 -1
  60. package/dist/core/common/services/crud.service.js.map +1 -1
  61. package/dist/core/common/services/mailjet.service.js +5 -5
  62. package/dist/core/common/services/mailjet.service.js.map +1 -1
  63. package/dist/core/common/services/model-doc.service.d.ts +16 -0
  64. package/dist/core/common/services/model-doc.service.js +107 -0
  65. package/dist/core/common/services/model-doc.service.js.map +1 -0
  66. package/dist/core/common/services/module.service.js.map +1 -1
  67. package/dist/core/common/services/template.service.js +3 -3
  68. package/dist/core/common/services/template.service.js.map +1 -1
  69. package/dist/core/common/types/core-model-constructor.type.d.ts +2 -2
  70. package/dist/core/modules/auth/core-auth.module.js +3 -3
  71. package/dist/core/modules/auth/core-auth.module.js.map +1 -1
  72. package/dist/core/modules/auth/core-auth.resolver.js +5 -5
  73. package/dist/core/modules/auth/core-auth.resolver.js.map +1 -1
  74. package/dist/core/modules/auth/guards/auth.guard.js +4 -4
  75. package/dist/core/modules/auth/guards/auth.guard.js.map +1 -1
  76. package/dist/core/modules/auth/guards/roles.guard.js +1 -1
  77. package/dist/core/modules/auth/guards/roles.guard.js.map +1 -1
  78. package/dist/core/modules/auth/services/core-auth.service.js +5 -5
  79. package/dist/core/modules/auth/services/core-auth.service.js.map +1 -1
  80. package/dist/core/modules/auth/strategies/jwt.strategy.js.map +1 -1
  81. package/dist/core/modules/auth/tokens.decorator.js +2 -2
  82. package/dist/core/modules/auth/tokens.decorator.js.map +1 -1
  83. package/dist/core/modules/file/core-file-info.model.js +2 -2
  84. package/dist/core/modules/file/core-file-info.model.js.map +1 -1
  85. package/dist/core/modules/file/core-file.controller.d.ts +1 -2
  86. package/dist/core/modules/file/core-file.controller.js +3 -6
  87. package/dist/core/modules/file/core-file.controller.js.map +1 -1
  88. package/dist/core/modules/file/core-file.service.js +1 -1
  89. package/dist/core/modules/file/core-file.service.js.map +1 -1
  90. package/dist/core/modules/file/interfaces/file-upload.interface.d.ts +1 -1
  91. package/dist/core/modules/health-check/core-health-check-result.model.d.ts +8 -0
  92. package/dist/core/modules/health-check/core-health-check-result.model.js +53 -0
  93. package/dist/core/modules/health-check/core-health-check-result.model.js.map +1 -0
  94. package/dist/core/modules/health-check/core-health-check.controller.d.ts +6 -0
  95. package/dist/core/modules/health-check/core-health-check.controller.js +33 -0
  96. package/dist/core/modules/health-check/core-health-check.controller.js.map +1 -0
  97. package/dist/core/modules/health-check/core-health-check.module.d.ts +2 -0
  98. package/dist/core/modules/health-check/core-health-check.module.js +24 -0
  99. package/dist/core/modules/health-check/core-health-check.module.js.map +1 -0
  100. package/dist/core/modules/health-check/core-health-check.resolver.d.ts +6 -0
  101. package/dist/core/modules/health-check/core-health-check.resolver.js +38 -0
  102. package/dist/core/modules/health-check/core-health-check.resolver.js.map +1 -0
  103. package/dist/core/modules/health-check/core-health-check.service.d.ts +11 -0
  104. package/dist/core/modules/health-check/core-health-check.service.js +52 -0
  105. package/dist/core/modules/health-check/core-health-check.service.js.map +1 -0
  106. package/dist/core/modules/user/core-user.model.js +5 -5
  107. package/dist/core/modules/user/core-user.model.js.map +1 -1
  108. package/dist/core/modules/user/core-user.service.js +2 -2
  109. package/dist/core/modules/user/core-user.service.js.map +1 -1
  110. package/dist/core/modules/user/inputs/core-user.input.js +1 -1
  111. package/dist/core/modules/user/inputs/core-user.input.js.map +1 -1
  112. package/dist/core.module.js +14 -5
  113. package/dist/core.module.js.map +1 -1
  114. package/dist/index.d.ts +6 -0
  115. package/dist/index.js +6 -0
  116. package/dist/index.js.map +1 -1
  117. package/dist/main.js +1 -1
  118. package/dist/main.js.map +1 -1
  119. package/dist/server/modules/auth/auth.service.js +1 -1
  120. package/dist/server/modules/auth/auth.service.js.map +1 -1
  121. package/dist/server/modules/file/file.controller.js +1 -1
  122. package/dist/server/modules/file/file.controller.js.map +1 -1
  123. package/dist/server/modules/file/file.resolver.js +2 -2
  124. package/dist/server/modules/file/file.resolver.js.map +1 -1
  125. package/dist/server/modules/file/file.service.js +1 -1
  126. package/dist/server/modules/file/file.service.js.map +1 -1
  127. package/dist/server/modules/file/multer-config.service.js +1 -1
  128. package/dist/server/modules/file/multer-config.service.js.map +1 -1
  129. package/dist/server/modules/user/avatar.controller.js +1 -1
  130. package/dist/server/modules/user/avatar.controller.js.map +1 -1
  131. package/dist/server/modules/user/user.resolver.js +1 -1
  132. package/dist/server/modules/user/user.resolver.js.map +1 -1
  133. package/dist/server/modules/user/user.service.js +3 -3
  134. package/dist/server/modules/user/user.service.js.map +1 -1
  135. package/dist/templates/index.ejs +2 -0
  136. package/dist/templates/password-reset.ejs +3 -0
  137. package/dist/templates/welcome.ejs +3 -0
  138. package/dist/test/test.helper.d.ts +1 -1
  139. package/dist/test/test.helper.js +7 -7
  140. package/dist/test/test.helper.js.map +1 -1
  141. package/dist/tsconfig.build.tsbuildinfo +1 -1
  142. package/package.json +32 -26
  143. package/src/config.env.ts +50 -20
  144. package/src/core/common/args/filter.args.ts +4 -4
  145. package/src/core/common/args/pagination.args.ts +7 -7
  146. package/src/core/common/decorators/graphql-service-options.decorator.ts +2 -2
  147. package/src/core/common/decorators/graphql-user.decorator.ts +1 -1
  148. package/src/core/common/decorators/rest-user.decorator.ts +1 -1
  149. package/src/core/common/decorators/restricted.decorator.ts +18 -18
  150. package/src/core/common/filters/http-exception-log.filter.ts +4 -4
  151. package/src/core/common/helpers/db.helper.ts +35 -40
  152. package/src/core/common/helpers/decorator.helper.ts +1 -1
  153. package/src/core/common/helpers/file.helper.ts +2 -2
  154. package/src/core/common/helpers/filter.helper.ts +7 -8
  155. package/src/core/common/helpers/graphql.helper.ts +6 -6
  156. package/src/core/common/helpers/input.helper.ts +54 -61
  157. package/src/core/common/helpers/model.helper.ts +33 -41
  158. package/src/core/common/helpers/service.helper.ts +8 -8
  159. package/src/core/common/inputs/combined-filter.input.ts +4 -4
  160. package/src/core/common/inputs/core-input.input.ts +2 -2
  161. package/src/core/common/inputs/filter.input.ts +4 -4
  162. package/src/core/common/inputs/single-filter.input.ts +4 -4
  163. package/src/core/common/inputs/sort.input.ts +1 -1
  164. package/src/core/common/interceptors/check-response.interceptor.ts +1 -1
  165. package/src/core/common/interceptors/check-security.interceptor.ts +5 -5
  166. package/src/core/common/interfaces/server-options.interface.ts +109 -0
  167. package/src/core/common/models/core-model.model.ts +6 -4
  168. package/src/core/common/models/core-persistence.model.ts +3 -3
  169. package/src/core/common/pipes/map-and-validate.pipe.ts +2 -2
  170. package/src/core/common/scalars/any.scalar.ts +2 -2
  171. package/src/core/common/scalars/date-timestamp.scalar.ts +1 -2
  172. package/src/core/common/scalars/date.scalar.ts +1 -2
  173. package/src/core/common/scalars/json.scalar.ts +4 -4
  174. package/src/core/common/services/config.service.ts +16 -16
  175. package/src/core/common/services/core-cron-jobs.service.ts +7 -7
  176. package/src/core/common/services/crud.service.ts +22 -22
  177. package/src/core/common/services/email.service.ts +1 -1
  178. package/src/core/common/services/mailjet.service.ts +8 -8
  179. package/src/core/common/services/model-doc.service.ts +140 -0
  180. package/src/core/common/services/module.service.ts +5 -6
  181. package/src/core/common/services/template.service.ts +4 -4
  182. package/src/core/common/types/core-model-constructor.type.ts +2 -2
  183. package/src/core/modules/auth/core-auth.controller.ts +2 -2
  184. package/src/core/modules/auth/core-auth.module.ts +4 -4
  185. package/src/core/modules/auth/core-auth.resolver.ts +9 -9
  186. package/src/core/modules/auth/guards/auth.guard.ts +8 -7
  187. package/src/core/modules/auth/guards/roles.guard.ts +1 -1
  188. package/src/core/modules/auth/services/core-auth.service.ts +9 -9
  189. package/src/core/modules/auth/strategies/jwt-refresh.strategy.ts +1 -1
  190. package/src/core/modules/auth/strategies/jwt.strategy.ts +1 -1
  191. package/src/core/modules/auth/tokens.decorator.ts +6 -7
  192. package/src/core/modules/file/core-file-info.model.ts +2 -2
  193. package/src/core/modules/file/core-file.controller.ts +2 -4
  194. package/src/core/modules/file/core-file.service.ts +6 -5
  195. package/src/core/modules/file/interfaces/file-upload.interface.ts +1 -1
  196. package/src/core/modules/health-check/core-health-check-result.model.ts +46 -0
  197. package/src/core/modules/health-check/core-health-check.controller.ts +24 -0
  198. package/src/core/modules/health-check/core-health-check.module.ts +17 -0
  199. package/src/core/modules/health-check/core-health-check.resolver.ts +32 -0
  200. package/src/core/modules/health-check/core-health-check.service.ts +62 -0
  201. package/src/core/modules/user/core-user.model.ts +6 -6
  202. package/src/core/modules/user/core-user.service.ts +10 -9
  203. package/src/core/modules/user/inputs/core-user.input.ts +1 -2
  204. package/src/core.module.ts +23 -12
  205. package/src/index.ts +11 -0
  206. package/src/main.ts +2 -2
  207. package/src/server/modules/auth/auth.controller.ts +1 -1
  208. package/src/server/modules/auth/auth.resolver.ts +3 -3
  209. package/src/server/modules/auth/auth.service.ts +2 -2
  210. package/src/server/modules/file/file.controller.ts +1 -2
  211. package/src/server/modules/file/file.module.ts +1 -1
  212. package/src/server/modules/file/file.resolver.ts +4 -3
  213. package/src/server/modules/file/file.service.ts +1 -1
  214. package/src/server/modules/file/multer-config.service.ts +1 -1
  215. package/src/server/modules/user/avatar.controller.ts +3 -3
  216. package/src/server/modules/user/user.model.ts +1 -1
  217. package/src/server/modules/user/user.resolver.ts +4 -4
  218. package/src/server/modules/user/user.service.ts +4 -4
  219. package/src/test/test.helper.ts +11 -11
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lenne.tech/nest-server",
3
- "version": "10.0.2",
3
+ "version": "10.0.4",
4
4
  "description": "Modern, fast, powerful Node.js web framework in TypeScript based on Nest with a GraphQL API and a connection to MongoDB (or other databases).",
5
5
  "keywords": [
6
6
  "node",
@@ -17,9 +17,9 @@
17
17
  "build": "rimraf dist && nest build",
18
18
  "build:pack": "npm pack && echo 'use file:/ROOT_PATH_TO_TGZ_FILE to integrate the package'",
19
19
  "build:dev": "npm run build && yalc push --private",
20
- "docs": "npm run docs:ci && open ./public/index.html",
20
+ "docs": "npm run docs:ci && open http://127.0.0.1:8080/ && open ./public/index.html && compodoc -p tsconfig.json -s ",
21
21
  "docs:bootstrap": "node extras/update-spectaql-version.mjs && npx -y spectaql ./spectaql.yml",
22
- "docs:ci": "ts-node ./scripts/init-server.ts && npm run docs:bootstrap",
22
+ "docs:ci": "ts-node ./scripts/init-server.ts && npm run docs:bootstrap && compodoc -p tsconfig.json",
23
23
  "format": "prettier --write 'src/**/*.ts'",
24
24
  "format:staged": "pretty-quick --staged",
25
25
  "lint": "eslint \"{src,tests}/**/*.ts\" --fix",
@@ -47,7 +47,7 @@
47
47
  "test:watch": "NODE_ENV=local jest --watch",
48
48
  "prepack": "npm run prestart:prod",
49
49
  "prepare": "husky install",
50
- "prepublishOnly": "npm run format && npm run lint && npm run test:ci",
50
+ "prepublishOnly": "npm run lint && npm run test:ci",
51
51
  "preversion": "npm run lint",
52
52
  "watch": "npm-watch"
53
53
  },
@@ -62,16 +62,17 @@
62
62
  "node": ">= 16.13.0"
63
63
  },
64
64
  "dependencies": {
65
- "@apollo/gateway": "2.4.9",
65
+ "@apollo/gateway": "2.5.1",
66
66
  "@nestjs/apollo": "12.0.7",
67
- "@nestjs/common": "10.0.5",
68
- "@nestjs/core": "10.0.5",
67
+ "@nestjs/common": "10.1.3",
68
+ "@nestjs/core": "10.1.3",
69
69
  "@nestjs/graphql": "12.0.8",
70
70
  "@nestjs/jwt": "10.1.0",
71
- "@nestjs/mongoose": "10.0.0",
71
+ "@nestjs/mongoose": "10.0.1",
72
72
  "@nestjs/passport": "10.0.0",
73
- "@nestjs/platform-express": "10.0.5",
73
+ "@nestjs/platform-express": "10.1.3",
74
74
  "@nestjs/schedule": "3.0.1",
75
+ "@nestjs/terminus": "10.0.1",
75
76
  "apollo-server-core": "3.11.1",
76
77
  "apollo-server-express": "3.11.1",
77
78
  "bcrypt": "5.1.0",
@@ -89,44 +90,49 @@
89
90
  "light-my-request": "5.10.0",
90
91
  "lodash": "4.17.21",
91
92
  "mongodb": "4.16.0",
92
- "mongoose": "6.11.3",
93
+ "mongoose": "6.11.5",
93
94
  "mongoose-gridfs": "1.3.0",
94
95
  "multer": "1.4.5-lts.1",
95
96
  "multer-gridfs-storage": "5.0.2",
96
- "node-mailjet": "6.0.3",
97
- "nodemailer": "6.9.3",
97
+ "node-mailjet": "6.0.4",
98
+ "nodemailer": "6.9.4",
98
99
  "nodemon": "3.0.1",
99
100
  "passport": "0.6.0",
100
101
  "passport-jwt": "4.0.1",
101
102
  "reflect-metadata": "0.1.13",
102
103
  "rfdc": "1.3.0",
103
104
  "rimraf": "5.0.1",
104
- "rxjs": "7.8.1"
105
+ "rxjs": "7.8.1",
106
+ "yuml-diagram": "1.2.0"
105
107
  },
106
108
  "devDependencies": {
107
- "@nestjs/cli": "10.1.8",
109
+ "@babel/plugin-proposal-private-methods": "7.18.6",
110
+ "@compodoc/compodoc": "1.1.21",
111
+ "@lenne.tech/eslint-config-ts": "0.0.8",
112
+ "@nestjs/cli": "10.1.11",
108
113
  "@nestjs/schematics": "10.0.1",
109
- "@nestjs/testing": "10.0.5",
114
+ "@nestjs/testing": "10.1.3",
110
115
  "@swc/cli": "0.1.62",
111
- "@swc/core": "1.3.69",
112
- "@swc/jest": "0.2.26",
116
+ "@swc/core": "1.3.73",
117
+ "@swc/jest": "0.2.27",
113
118
  "@types/compression": "1.7.2",
114
119
  "@types/cookie-parser": "1.4.3",
115
120
  "@types/cron": "2.0.1",
116
121
  "@types/ejs": "3.1.2",
117
122
  "@types/express": "4.17.17",
118
123
  "@types/jest": "29.5.3",
119
- "@types/lodash": "4.14.195",
124
+ "@types/lodash": "4.14.196",
120
125
  "@types/multer": "1.4.7",
121
- "@types/node": "20.4.2",
122
- "@types/nodemailer": "6.4.8",
126
+ "@types/node": "20.4.5",
127
+ "@types/nodemailer": "6.4.9",
123
128
  "@types/passport": "1.0.12",
124
129
  "@types/supertest": "2.0.12",
125
- "@typescript-eslint/eslint-plugin": "6.0.0",
126
- "@typescript-eslint/parser": "6.0.0",
130
+ "@typescript-eslint/eslint-plugin": "6.2.1",
131
+ "@typescript-eslint/parser": "6.2.1",
127
132
  "coffeescript": "2.7.0",
128
- "eslint": "8.45.0",
129
- "eslint-config-prettier": "8.8.0",
133
+ "eslint": "8.46.0",
134
+ "eslint-config-prettier": "8.9.0",
135
+ "eslint-plugin-unused-imports": "3.0.0",
130
136
  "find-file-up": "2.0.1",
131
137
  "grunt": "1.6.1",
132
138
  "grunt-bg-shell": "2.3.3",
@@ -134,10 +140,10 @@
134
140
  "grunt-contrib-watch": "1.1.0",
135
141
  "grunt-sync": "0.8.2",
136
142
  "husky": "8.0.3",
137
- "jest": "29.6.1",
143
+ "jest": "29.6.2",
138
144
  "npm-watch": "0.11.0",
139
145
  "pm2": "5.3.0",
140
- "prettier": "2.8.8",
146
+ "prettier": "3.0.0",
141
147
  "pretty-quick": "3.1.3",
142
148
  "supertest": "6.3.3",
143
149
  "ts-jest": "29.1.1",
package/src/config.env.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { CronExpression } from '@nestjs/schedule';
2
1
  import { join } from 'path';
2
+ import { CronExpression } from '@nestjs/schedule';
3
3
  import { merge } from './core/common/helpers/config.helper';
4
4
  import { IServerOptions } from './core/common/interfaces/server-options.interface';
5
5
 
@@ -55,6 +55,14 @@ const config: { [env: string]: IServerOptions } = {
55
55
  },
56
56
  maxComplexity: 20,
57
57
  },
58
+ healthCheck: {
59
+ enabled: true,
60
+ configs: {
61
+ database: {
62
+ enabled: true,
63
+ },
64
+ },
65
+ },
58
66
  ignoreSelectionsForPopulate: true,
59
67
  jwt: {
60
68
  secret: 'SECRET_OR_PRIVATE_KEY_LOCAL',
@@ -69,12 +77,13 @@ const config: { [env: string]: IServerOptions } = {
69
77
  },
70
78
  },
71
79
  },
72
- loadLocalConfig: false,
80
+ loadLocalConfig: true,
73
81
  logExceptions: true,
74
82
  mongoose: {
75
83
  collation: {
76
84
  locale: 'de',
77
85
  },
86
+ modelDocumentation: true,
78
87
  uri: 'mongodb://127.0.0.1/nest-server-local',
79
88
  },
80
89
  port: 3000,
@@ -128,6 +137,14 @@ const config: { [env: string]: IServerOptions } = {
128
137
  },
129
138
  maxComplexity: 20,
130
139
  },
140
+ healthCheck: {
141
+ enabled: true,
142
+ configs: {
143
+ database: {
144
+ enabled: true,
145
+ },
146
+ },
147
+ },
131
148
  ignoreSelectionsForPopulate: true,
132
149
  jwt: {
133
150
  secret: 'SECRET_OR_PRIVATE_KEY_DEV',
@@ -148,6 +165,7 @@ const config: { [env: string]: IServerOptions } = {
148
165
  collation: {
149
166
  locale: 'de',
150
167
  },
168
+ modelDocumentation: false,
151
169
  uri: 'mongodb://127.0.0.1/nest-server-dev',
152
170
  },
153
171
  port: 3000,
@@ -201,6 +219,14 @@ const config: { [env: string]: IServerOptions } = {
201
219
  },
202
220
  maxComplexity: 20,
203
221
  },
222
+ healthCheck: {
223
+ enabled: true,
224
+ configs: {
225
+ database: {
226
+ enabled: true,
227
+ },
228
+ },
229
+ },
204
230
  ignoreSelectionsForPopulate: true,
205
231
  jwt: {
206
232
  secret: 'SECRET_OR_PRIVATE_KEY_PROD',
@@ -221,6 +247,7 @@ const config: { [env: string]: IServerOptions } = {
221
247
  collation: {
222
248
  locale: 'de',
223
249
  },
250
+ modelDocumentation: false,
224
251
  uri: 'mongodb://127.0.0.1/nest-server-prod',
225
252
  },
226
253
  port: 3000,
@@ -239,32 +266,35 @@ const config: { [env: string]: IServerOptions } = {
239
266
  /**
240
267
  * Environment specific config
241
268
  *
242
- * default: development
269
+ * default: local
243
270
  */
244
- const env = process.env['NODE' + '_ENV'] || 'development';
245
- const envConfig = config[env] || config.development;
246
- console.info('Configured for: ' + envConfig.env + (env !== envConfig.env ? ' (requested: ' + env + ')' : ''));
247
-
271
+ const env = process.env['NODE' + '_ENV'] || 'local';
272
+ const envConfig = config[env] || config.local;
273
+ console.info(`Configured for: ${envConfig.env}${env !== envConfig.env ? ` (requested: ${env})` : ''}`);
248
274
  // Merge with localConfig (e.g. config.json)
249
275
  if (envConfig.loadLocalConfig) {
250
276
  let localConfig;
251
277
  if (typeof envConfig.loadLocalConfig === 'string') {
252
- localConfig = require(envConfig.loadLocalConfig);
253
- merge(envConfig, localConfig);
278
+ import(envConfig.loadLocalConfig).then((loadedConfig) => {
279
+ localConfig = loadedConfig.default || loadedConfig;
280
+ merge(envConfig, localConfig);
281
+ }).catch(() => {
282
+ console.info(`Configuration ${envConfig.loadLocalConfig} not found!`);
283
+ });
254
284
  } else {
255
- try {
256
- // get config from src directory
257
- localConfig = require(__dirname + '/config.json');
285
+ // get config from src directory
286
+ import(join(__dirname, 'config.json')).then((loadedConfig) => {
287
+ localConfig = loadedConfig.default || loadedConfig;
258
288
  merge(envConfig, localConfig);
259
- } catch {
260
- try {
261
- // if not found try to find in project directory
262
- localConfig = require(__dirname + '/../config.json');
289
+ }).catch(() => {
290
+ // if not found try to find in project directory
291
+ import(join(__dirname, '..', 'config.json')).then((loadedConfig) => {
292
+ localConfig = loadedConfig.default || loadedConfig;
263
293
  merge(envConfig, localConfig);
264
- } catch (e) {
265
- // No config.json found => nothing to do
266
- }
267
- }
294
+ }).catch(() => {
295
+ console.info('No local config.json found!');
296
+ });
297
+ });
268
298
  }
269
299
  }
270
300
 
@@ -8,7 +8,7 @@ export class FilterArgs extends PaginationArgs {
8
8
  /**
9
9
  * Filtering
10
10
  */
11
- @Field((type) => FilterInput, {
11
+ @Field(type => FilterInput, {
12
12
  description: 'Input for filtering',
13
13
  nullable: true,
14
14
  })
@@ -18,7 +18,7 @@ export class FilterArgs extends PaginationArgs {
18
18
  /**
19
19
  * Get a specific number of random samples from filter results
20
20
  */
21
- @Field((type) => Number, {
21
+ @Field(type => Number, {
22
22
  description:
23
23
  'Request only a specified number of samples from the filter results; if not specified, all results are returned.',
24
24
  nullable: true,
@@ -38,11 +38,11 @@ export class FilterArgs extends PaginationArgs {
38
38
  cloneDeep?: boolean;
39
39
  funcAllowed?: boolean;
40
40
  mapId?: boolean;
41
- } = {}
41
+ } = {},
42
42
  ): this {
43
43
  super.map(data, options);
44
44
  this.filter = data.filter ? FilterInput.map(data.filter, options) : undefined;
45
- Object.keys(this).forEach((key) => this[key] === undefined && delete this[key]);
45
+ Object.keys(this).forEach(key => this[key] === undefined && delete this[key]);
46
46
  return this;
47
47
  }
48
48
  }
@@ -9,7 +9,7 @@ export class PaginationArgs extends CoreInput {
9
9
  /**
10
10
  * Limit for pagination
11
11
  */
12
- @Field((type) => Int, {
12
+ @Field(type => Int, {
13
13
  description: 'Limit specifies the maximum number of elements found that are to be returned',
14
14
  nullable: true,
15
15
  })
@@ -19,7 +19,7 @@ export class PaginationArgs extends CoreInput {
19
19
  /**
20
20
  * Alias for skip
21
21
  */
22
- @Field((type) => Int, {
22
+ @Field(type => Int, {
23
23
  description: 'Alias for skip',
24
24
  nullable: true,
25
25
  })
@@ -29,7 +29,7 @@ export class PaginationArgs extends CoreInput {
29
29
  /**
30
30
  * Skip for pagination
31
31
  */
32
- @Field((type) => Int, {
32
+ @Field(type => Int, {
33
33
  description: 'Skip specifies how many found elements should be skipped on return',
34
34
  nullable: true,
35
35
  })
@@ -39,7 +39,7 @@ export class PaginationArgs extends CoreInput {
39
39
  /**
40
40
  * Sorting for pagination
41
41
  */
42
- @Field((type) => [SortInput], {
42
+ @Field(type => [SortInput], {
43
43
  description: 'Sorting the returned elements',
44
44
  nullable: true,
45
45
  })
@@ -49,7 +49,7 @@ export class PaginationArgs extends CoreInput {
49
49
  /**
50
50
  * Alias for limit
51
51
  */
52
- @Field((type) => Int, {
52
+ @Field(type => Int, {
53
53
  description: 'Alias for limit',
54
54
  nullable: true,
55
55
  })
@@ -69,11 +69,11 @@ export class PaginationArgs extends CoreInput {
69
69
  cloneDeep?: boolean;
70
70
  funcAllowed?: boolean;
71
71
  mapId?: boolean;
72
- } = {}
72
+ } = {},
73
73
  ): this {
74
74
  super.map(data, options);
75
75
  this.sort = maps(data.sort, SortInput, options.cloneDeep);
76
- Object.keys(this).forEach((key) => this[key] === undefined && delete this[key]);
76
+ Object.keys(this).forEach(key => this[key] === undefined && delete this[key]);
77
77
  return this;
78
78
  }
79
79
  }
@@ -1,4 +1,4 @@
1
- import { createParamDecorator, ExecutionContext } from '@nestjs/common';
1
+ import { ExecutionContext, createParamDecorator } from '@nestjs/common';
2
2
  import { currentUserDec, graphqlPopulateDec } from '../helpers/decorator.helper';
3
3
  import { ServiceOptions } from '../interfaces/service-options.interface';
4
4
 
@@ -25,5 +25,5 @@ export const GraphQLServiceOptions = createParamDecorator(
25
25
  currentUser: currentUserDec(null, ctx),
26
26
  populate: graphqlPopulateDec(data, ctx),
27
27
  };
28
- }
28
+ },
29
29
  );
@@ -1,4 +1,4 @@
1
- import { createParamDecorator, ExecutionContext } from '@nestjs/common';
1
+ import { ExecutionContext, createParamDecorator } from '@nestjs/common';
2
2
  import { GqlExecutionContext } from '@nestjs/graphql';
3
3
 
4
4
  /**
@@ -1,4 +1,4 @@
1
- import { createParamDecorator, ExecutionContext } from '@nestjs/common';
1
+ import { ExecutionContext, createParamDecorator } from '@nestjs/common';
2
2
 
3
3
  /**
4
4
  * User decorator for REST request
@@ -1,10 +1,10 @@
1
1
  import 'reflect-metadata';
2
2
  import { UnauthorizedException } from '@nestjs/common';
3
+ import _ = require('lodash');
3
4
  import { ProcessType } from '../enums/process-type.enum';
4
5
  import { RoleEnum } from '../enums/role.enum';
5
6
  import { getIncludedIds } from '../helpers/db.helper';
6
7
  import { RequireAtLeastOne } from '../types/required-at-least-one.type';
7
- import _ = require('lodash');
8
8
 
9
9
  /**
10
10
  * Restricted meta key
@@ -68,7 +68,7 @@ export const checkRestricted = (
68
68
  removeUndefinedFromResultArray?: boolean;
69
69
  throwError?: boolean;
70
70
  } = {},
71
- processedObjects: any[] = []
71
+ processedObjects: any[] = [],
72
72
  ) => {
73
73
  const config = {
74
74
  checkObjectItself: false,
@@ -92,9 +92,9 @@ export const checkRestricted = (
92
92
  // Array
93
93
  if (Array.isArray(data)) {
94
94
  // Check array items
95
- let result = data.map((item) => checkRestricted(item, user, config, processedObjects));
95
+ let result = data.map(item => checkRestricted(item, user, config, processedObjects));
96
96
  if (!config.throwError && config.removeUndefinedFromResultArray) {
97
- result = result.filter((item) => item !== undefined);
97
+ result = result.filter(item => item !== undefined);
98
98
  }
99
99
  return result;
100
100
  }
@@ -114,8 +114,8 @@ export const checkRestricted = (
114
114
  if (typeof item === 'string') {
115
115
  roles.push(item);
116
116
  } else if (
117
- item?.roles?.length &&
118
- (config.processType && item.processType ? config.processType === item.processType : true)
117
+ item?.roles?.length
118
+ && (config.processType && item.processType ? config.processType === item.processType : true)
119
119
  ) {
120
120
  if (Array.isArray(item.roles)) {
121
121
  roles.push(...item.roles);
@@ -134,11 +134,11 @@ export const checkRestricted = (
134
134
 
135
135
  // Check access rights
136
136
  if (
137
- roles.includes(RoleEnum.S_EVERYONE) ||
138
- user?.hasRole?.(roles) ||
139
- (user?.id && roles.includes(RoleEnum.S_USER)) ||
140
- (roles.includes(RoleEnum.S_SELF) && getIncludedIds(config.dbObject, user)) ||
141
- (roles.includes(RoleEnum.S_CREATOR) && getIncludedIds(config.dbObject?.createdBy, user))
137
+ roles.includes(RoleEnum.S_EVERYONE)
138
+ || user?.hasRole?.(roles)
139
+ || (user?.id && roles.includes(RoleEnum.S_USER))
140
+ || (roles.includes(RoleEnum.S_SELF) && getIncludedIds(config.dbObject, user))
141
+ || (roles.includes(RoleEnum.S_CREATOR) && getIncludedIds(config.dbObject?.createdBy, user))
142
142
  ) {
143
143
  valid = true;
144
144
  }
@@ -148,11 +148,11 @@ export const checkRestricted = (
148
148
  // Get groups
149
149
  const groups = restricted.filter((item) => {
150
150
  return (
151
- typeof item === 'object' &&
151
+ typeof item === 'object'
152
152
  // Check if object is valid
153
- item.memberOf?.length &&
153
+ && item.memberOf?.length
154
154
  // Check if processType is specified and is valid for current process
155
- (config.processType && item.processType ? config.processType === item.processType : true)
155
+ && (config.processType && item.processType ? config.processType === item.processType : true)
156
156
  );
157
157
  }) as { memberOf: string | string[] }[];
158
158
 
@@ -199,7 +199,7 @@ export const checkRestricted = (
199
199
  if (!objectIsValid) {
200
200
  // Throw error
201
201
  if (config.throwError) {
202
- throw new UnauthorizedException('The current user has no access rights for ' + data.constructor?.name);
202
+ throw new UnauthorizedException(`The current user has no access rights for ${data.constructor?.name}`);
203
203
  }
204
204
  return null;
205
205
  }
@@ -225,9 +225,9 @@ export const checkRestricted = (
225
225
  // Throw error
226
226
  if (config.throwError) {
227
227
  throw new UnauthorizedException(
228
- 'The current user has no access rights for ' +
229
- propertyKey +
230
- (data.constructor?.name ? ' of ' + data.constructor.name : '')
228
+ `The current user has no access rights for ${
229
+ propertyKey
230
+ }${data.constructor?.name ? ` of ${data.constructor.name}` : ''}`,
231
231
  );
232
232
  }
233
233
 
@@ -1,4 +1,4 @@
1
- import { ArgumentsHost, Catch, ExceptionFilter, HttpException } from '@nestjs/common';
1
+ import { ArgumentsHost, Catch, ExceptionFilter, HttpException, ServiceUnavailableException } from '@nestjs/common';
2
2
  import { GqlContextType } from '@nestjs/graphql';
3
3
  import { Response } from 'express';
4
4
 
@@ -21,8 +21,8 @@ export class HttpExceptionLogFilter implements ExceptionFilter {
21
21
  const ctx = host.switchToHttp();
22
22
  const res = ctx.getResponse<Response>();
23
23
  const status = exception.getStatus();
24
- res.status(status).json({
25
- ...exception,
26
- });
24
+ res.status(status).json(
25
+ exception instanceof ServiceUnavailableException ? ({ ...exception } as any).response : { ...exception },
26
+ );
27
27
  }
28
28
  }