@lenne.tech/nest-server 11.13.5 → 11.14.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 (313) hide show
  1. package/README.md +1 -3
  2. package/dist/core/common/args/filter.args.js +3 -6
  3. package/dist/core/common/args/filter.args.js.map +1 -1
  4. package/dist/core/common/args/pagination.args.js +6 -9
  5. package/dist/core/common/args/pagination.args.js.map +1 -1
  6. package/dist/core/common/decorators/translatable.decorator.js +1 -1
  7. package/dist/core/common/decorators/translatable.decorator.js.map +1 -1
  8. package/dist/core/common/enums/role.enum.js.map +1 -1
  9. package/dist/core/common/filters/http-exception-log.filter.js +3 -1
  10. package/dist/core/common/filters/http-exception-log.filter.js.map +1 -1
  11. package/dist/core/common/helpers/config.helper.js +2 -2
  12. package/dist/core/common/helpers/config.helper.js.map +1 -1
  13. package/dist/core/common/helpers/db.helper.js +12 -12
  14. package/dist/core/common/helpers/db.helper.js.map +1 -1
  15. package/dist/core/common/helpers/graphql.helper.js +1 -1
  16. package/dist/core/common/helpers/graphql.helper.js.map +1 -1
  17. package/dist/core/common/helpers/input.helper.js +7 -4
  18. package/dist/core/common/helpers/input.helper.js.map +1 -1
  19. package/dist/core/common/helpers/scim.helper.js +2 -2
  20. package/dist/core/common/helpers/scim.helper.js.map +1 -1
  21. package/dist/core/common/helpers/service.helper.js +1 -1
  22. package/dist/core/common/helpers/service.helper.js.map +1 -1
  23. package/dist/core/common/inputs/combined-filter.input.js +3 -6
  24. package/dist/core/common/inputs/combined-filter.input.js.map +1 -1
  25. package/dist/core/common/inputs/core-input.input.js +1 -1
  26. package/dist/core/common/inputs/core-input.input.js.map +1 -1
  27. package/dist/core/common/inputs/filter.input.js +3 -6
  28. package/dist/core/common/inputs/filter.input.js.map +1 -1
  29. package/dist/core/common/inputs/single-filter.input.js +9 -12
  30. package/dist/core/common/inputs/single-filter.input.js.map +1 -1
  31. package/dist/core/common/inputs/sort.input.js +2 -5
  32. package/dist/core/common/inputs/sort.input.js.map +1 -1
  33. package/dist/core/common/interceptors/check-response.interceptor.js +12 -11
  34. package/dist/core/common/interceptors/check-response.interceptor.js.map +1 -1
  35. package/dist/core/common/interceptors/check-security.interceptor.js +5 -4
  36. package/dist/core/common/interceptors/check-security.interceptor.js.map +1 -1
  37. package/dist/core/common/models/core-model.model.d.ts +2 -2
  38. package/dist/core/common/models/core-model.model.js +2 -2
  39. package/dist/core/common/models/core-model.model.js.map +1 -1
  40. package/dist/core/common/models/core-persistence.model.js +3 -6
  41. package/dist/core/common/models/core-persistence.model.js.map +1 -1
  42. package/dist/core/common/models/pagination-info.model.js +6 -0
  43. package/dist/core/common/models/pagination-info.model.js.map +1 -1
  44. package/dist/core/common/pipes/check-input.pipe.js +1 -0
  45. package/dist/core/common/pipes/check-input.pipe.js.map +1 -1
  46. package/dist/core/common/plugins/complexity.plugin.js +2 -0
  47. package/dist/core/common/plugins/complexity.plugin.js.map +1 -1
  48. package/dist/core/common/scalars/any.scalar.js +2 -4
  49. package/dist/core/common/scalars/any.scalar.js.map +1 -1
  50. package/dist/core/common/scalars/date-timestamp.scalar.js +1 -3
  51. package/dist/core/common/scalars/date-timestamp.scalar.js.map +1 -1
  52. package/dist/core/common/scalars/date.scalar.js +1 -3
  53. package/dist/core/common/scalars/date.scalar.js.map +1 -1
  54. package/dist/core/common/scalars/json.scalar.js +2 -4
  55. package/dist/core/common/scalars/json.scalar.js.map +1 -1
  56. package/dist/core/common/services/brevo.service.js +3 -0
  57. package/dist/core/common/services/brevo.service.js.map +1 -1
  58. package/dist/core/common/services/config.service.js +15 -8
  59. package/dist/core/common/services/config.service.js.map +1 -1
  60. package/dist/core/common/services/core-cron-jobs.service.js +10 -7
  61. package/dist/core/common/services/core-cron-jobs.service.js.map +1 -1
  62. package/dist/core/common/services/crud.service.js +1 -9
  63. package/dist/core/common/services/crud.service.js.map +1 -1
  64. package/dist/core/common/services/email.service.js +2 -0
  65. package/dist/core/common/services/email.service.js.map +1 -1
  66. package/dist/core/common/services/mailjet.service.js +5 -4
  67. package/dist/core/common/services/mailjet.service.js.map +1 -1
  68. package/dist/core/common/services/model-doc.service.js +1 -0
  69. package/dist/core/common/services/model-doc.service.js.map +1 -1
  70. package/dist/core/common/services/module.service.js +6 -3
  71. package/dist/core/common/services/module.service.js.map +1 -1
  72. package/dist/core/common/services/template.service.js +2 -1
  73. package/dist/core/common/services/template.service.js.map +1 -1
  74. package/dist/core/common/types/array-element.type.d.ts +1 -1
  75. package/dist/core/modules/auth/core-auth.controller.js +2 -0
  76. package/dist/core/modules/auth/core-auth.controller.js.map +1 -1
  77. package/dist/core/modules/auth/core-auth.model.js +3 -6
  78. package/dist/core/modules/auth/core-auth.model.js.map +1 -1
  79. package/dist/core/modules/auth/core-auth.resolver.js +2 -0
  80. package/dist/core/modules/auth/core-auth.resolver.js.map +1 -1
  81. package/dist/core/modules/auth/guards/auth.guard.js +6 -4
  82. package/dist/core/modules/auth/guards/auth.guard.js.map +1 -1
  83. package/dist/core/modules/auth/guards/legacy-auth-rate-limit.guard.js +1 -0
  84. package/dist/core/modules/auth/guards/legacy-auth-rate-limit.guard.js.map +1 -1
  85. package/dist/core/modules/auth/guards/roles-guard-registry.js +3 -3
  86. package/dist/core/modules/auth/guards/roles-guard-registry.js.map +1 -1
  87. package/dist/core/modules/auth/guards/roles.guard.js +15 -7
  88. package/dist/core/modules/auth/guards/roles.guard.js.map +1 -1
  89. package/dist/core/modules/auth/inputs/core-auth-sign-in.input.js +4 -7
  90. package/dist/core/modules/auth/inputs/core-auth-sign-in.input.js.map +1 -1
  91. package/dist/core/modules/auth/services/core-auth.service.js +6 -1
  92. package/dist/core/modules/auth/services/core-auth.service.js.map +1 -1
  93. package/dist/core/modules/auth/services/legacy-auth-rate-limiter.service.js +4 -4
  94. package/dist/core/modules/auth/services/legacy-auth-rate-limiter.service.js.map +1 -1
  95. package/dist/core/modules/auth/strategies/jwt-refresh.strategy.js +2 -0
  96. package/dist/core/modules/auth/strategies/jwt-refresh.strategy.js.map +1 -1
  97. package/dist/core/modules/auth/strategies/jwt.strategy.js +2 -0
  98. package/dist/core/modules/auth/strategies/jwt.strategy.js.map +1 -1
  99. package/dist/core/modules/auth/tokens.decorator.js +2 -2
  100. package/dist/core/modules/auth/tokens.decorator.js.map +1 -1
  101. package/dist/core/modules/better-auth/better-auth-roles.guard.js +2 -4
  102. package/dist/core/modules/better-auth/better-auth-roles.guard.js.map +1 -1
  103. package/dist/core/modules/better-auth/better-auth-token.service.js +3 -1
  104. package/dist/core/modules/better-auth/better-auth-token.service.js.map +1 -1
  105. package/dist/core/modules/better-auth/better-auth.resolver.js +4 -0
  106. package/dist/core/modules/better-auth/better-auth.resolver.js.map +1 -1
  107. package/dist/core/modules/better-auth/better-auth.types.js.map +1 -1
  108. package/dist/core/modules/better-auth/core-better-auth-api.middleware.js +6 -3
  109. package/dist/core/modules/better-auth/core-better-auth-api.middleware.js.map +1 -1
  110. package/dist/core/modules/better-auth/core-better-auth-auth.model.js +7 -0
  111. package/dist/core/modules/better-auth/core-better-auth-auth.model.js.map +1 -1
  112. package/dist/core/modules/better-auth/core-better-auth-challenge.service.js +6 -4
  113. package/dist/core/modules/better-auth/core-better-auth-challenge.service.js.map +1 -1
  114. package/dist/core/modules/better-auth/core-better-auth-cookie.helper.js +3 -0
  115. package/dist/core/modules/better-auth/core-better-auth-cookie.helper.js.map +1 -1
  116. package/dist/core/modules/better-auth/core-better-auth-email-verification.service.js +13 -8
  117. package/dist/core/modules/better-auth/core-better-auth-email-verification.service.js.map +1 -1
  118. package/dist/core/modules/better-auth/core-better-auth-migration-status.model.js +8 -0
  119. package/dist/core/modules/better-auth/core-better-auth-migration-status.model.js.map +1 -1
  120. package/dist/core/modules/better-auth/core-better-auth-models.js +31 -0
  121. package/dist/core/modules/better-auth/core-better-auth-models.js.map +1 -1
  122. package/dist/core/modules/better-auth/core-better-auth-rate-limit.middleware.js +2 -0
  123. package/dist/core/modules/better-auth/core-better-auth-rate-limit.middleware.js.map +1 -1
  124. package/dist/core/modules/better-auth/core-better-auth-rate-limiter.service.js +4 -4
  125. package/dist/core/modules/better-auth/core-better-auth-rate-limiter.service.js.map +1 -1
  126. package/dist/core/modules/better-auth/core-better-auth-signup-validator.service.js +3 -2
  127. package/dist/core/modules/better-auth/core-better-auth-signup-validator.service.js.map +1 -1
  128. package/dist/core/modules/better-auth/core-better-auth-user.mapper.js +2 -1
  129. package/dist/core/modules/better-auth/core-better-auth-user.mapper.js.map +1 -1
  130. package/dist/core/modules/better-auth/core-better-auth.controller.js +27 -1
  131. package/dist/core/modules/better-auth/core-better-auth.controller.js.map +1 -1
  132. package/dist/core/modules/better-auth/core-better-auth.middleware.js +3 -1
  133. package/dist/core/modules/better-auth/core-better-auth.middleware.js.map +1 -1
  134. package/dist/core/modules/better-auth/core-better-auth.module.js +23 -18
  135. package/dist/core/modules/better-auth/core-better-auth.module.js.map +1 -1
  136. package/dist/core/modules/better-auth/core-better-auth.resolver.js +5 -1
  137. package/dist/core/modules/better-auth/core-better-auth.resolver.js.map +1 -1
  138. package/dist/core/modules/better-auth/core-better-auth.service.js +6 -1
  139. package/dist/core/modules/better-auth/core-better-auth.service.js.map +1 -1
  140. package/dist/core/modules/error-code/core-error-code.controller.js +1 -0
  141. package/dist/core/modules/error-code/core-error-code.controller.js.map +1 -1
  142. package/dist/core/modules/error-code/core-error-code.service.js +3 -3
  143. package/dist/core/modules/error-code/core-error-code.service.js.map +1 -1
  144. package/dist/core/modules/error-code/error-codes.js.map +1 -1
  145. package/dist/core/modules/file/core-file-info.model.js +6 -9
  146. package/dist/core/modules/file/core-file-info.model.js.map +1 -1
  147. package/dist/core/modules/file/core-file.controller.js +1 -0
  148. package/dist/core/modules/file/core-file.controller.js.map +1 -1
  149. package/dist/core/modules/file/core-file.resolver.js +1 -0
  150. package/dist/core/modules/file/core-file.resolver.js.map +1 -1
  151. package/dist/core/modules/file/core-file.service.d.ts +1 -1
  152. package/dist/core/modules/file/core-file.service.js +4 -4
  153. package/dist/core/modules/file/core-file.service.js.map +1 -1
  154. package/dist/core/modules/health-check/core-health-check-result.model.js +4 -7
  155. package/dist/core/modules/health-check/core-health-check-result.model.js.map +1 -1
  156. package/dist/core/modules/health-check/core-health-check.controller.js +1 -0
  157. package/dist/core/modules/health-check/core-health-check.controller.js.map +1 -1
  158. package/dist/core/modules/health-check/core-health-check.resolver.js +1 -0
  159. package/dist/core/modules/health-check/core-health-check.resolver.js.map +1 -1
  160. package/dist/core/modules/health-check/core-health-check.service.js +5 -0
  161. package/dist/core/modules/health-check/core-health-check.service.js.map +1 -1
  162. package/dist/core/modules/migrate/cli/migrate-cli.js.map +1 -1
  163. package/dist/core/modules/migrate/helpers/migration.helper.js +11 -19
  164. package/dist/core/modules/migrate/helpers/migration.helper.js.map +1 -1
  165. package/dist/core/modules/migrate/migration-runner.js +2 -0
  166. package/dist/core/modules/migrate/migration-runner.js.map +1 -1
  167. package/dist/core/modules/migrate/mongo-state-store.js +3 -0
  168. package/dist/core/modules/migrate/mongo-state-store.js.map +1 -1
  169. package/dist/core/modules/system-setup/core-system-setup.controller.js +4 -0
  170. package/dist/core/modules/system-setup/core-system-setup.controller.js.map +1 -1
  171. package/dist/core/modules/system-setup/core-system-setup.service.js +6 -5
  172. package/dist/core/modules/system-setup/core-system-setup.service.js.map +1 -1
  173. package/dist/core/modules/tus/core-tus.controller.js +2 -1
  174. package/dist/core/modules/tus/core-tus.controller.js.map +1 -1
  175. package/dist/core/modules/tus/core-tus.service.js +6 -3
  176. package/dist/core/modules/tus/core-tus.service.js.map +1 -1
  177. package/dist/core/modules/tus/tus.module.js +7 -5
  178. package/dist/core/modules/tus/tus.module.js.map +1 -1
  179. package/dist/core/modules/user/core-user.model.js +15 -18
  180. package/dist/core/modules/user/core-user.model.js.map +1 -1
  181. package/dist/core/modules/user/core-user.service.d.ts +1 -1
  182. package/dist/core/modules/user/core-user.service.js +7 -2
  183. package/dist/core/modules/user/core-user.service.js.map +1 -1
  184. package/dist/core/modules/user/inputs/core-user-create.input.js +1 -4
  185. package/dist/core/modules/user/inputs/core-user-create.input.js.map +1 -1
  186. package/dist/core/modules/user/inputs/core-user.input.js +6 -9
  187. package/dist/core/modules/user/inputs/core-user.input.js.map +1 -1
  188. package/dist/server/common/models/persistence.model.js +2 -5
  189. package/dist/server/common/models/persistence.model.js.map +1 -1
  190. package/dist/server/common/services/cron-jobs.service.js +2 -0
  191. package/dist/server/common/services/cron-jobs.service.js.map +1 -1
  192. package/dist/server/modules/auth/auth.controller.js +2 -0
  193. package/dist/server/modules/auth/auth.controller.js.map +1 -1
  194. package/dist/server/modules/auth/auth.model.js +1 -4
  195. package/dist/server/modules/auth/auth.model.js.map +1 -1
  196. package/dist/server/modules/auth/auth.module.js +1 -6
  197. package/dist/server/modules/auth/auth.module.js.map +1 -1
  198. package/dist/server/modules/auth/auth.resolver.js +2 -0
  199. package/dist/server/modules/auth/auth.resolver.js.map +1 -1
  200. package/dist/server/modules/auth/auth.service.js +4 -0
  201. package/dist/server/modules/auth/auth.service.js.map +1 -1
  202. package/dist/server/modules/auth/inputs/auth-sign-up.input.js +2 -5
  203. package/dist/server/modules/auth/inputs/auth-sign-up.input.js.map +1 -1
  204. package/dist/server/modules/better-auth/better-auth.controller.js +3 -0
  205. package/dist/server/modules/better-auth/better-auth.controller.js.map +1 -1
  206. package/dist/server/modules/better-auth/better-auth.resolver.js +4 -0
  207. package/dist/server/modules/better-auth/better-auth.resolver.js.map +1 -1
  208. package/dist/server/modules/error-code/error-code.controller.js +1 -0
  209. package/dist/server/modules/error-code/error-code.controller.js.map +1 -1
  210. package/dist/server/modules/file/file-info.model.d.ts +2 -2
  211. package/dist/server/modules/file/file.controller.js +1 -0
  212. package/dist/server/modules/file/file.controller.js.map +1 -1
  213. package/dist/server/modules/file/file.resolver.js +2 -1
  214. package/dist/server/modules/file/file.resolver.js.map +1 -1
  215. package/dist/server/modules/file/file.service.js +2 -3
  216. package/dist/server/modules/file/file.service.js.map +1 -1
  217. package/dist/server/modules/user/avatar.controller.js +1 -0
  218. package/dist/server/modules/user/avatar.controller.js.map +1 -1
  219. package/dist/server/modules/user/inputs/user-create.input.js +1 -4
  220. package/dist/server/modules/user/inputs/user-create.input.js.map +1 -1
  221. package/dist/server/modules/user/inputs/user.input.js +1 -4
  222. package/dist/server/modules/user/inputs/user.input.js.map +1 -1
  223. package/dist/server/modules/user/outputs/find-and-count-users-result.output.js +3 -0
  224. package/dist/server/modules/user/outputs/find-and-count-users-result.output.js.map +1 -1
  225. package/dist/server/modules/user/user.controller.js +1 -0
  226. package/dist/server/modules/user/user.controller.js.map +1 -1
  227. package/dist/server/modules/user/user.model.js +7 -10
  228. package/dist/server/modules/user/user.model.js.map +1 -1
  229. package/dist/server/modules/user/user.resolver.js +3 -1
  230. package/dist/server/modules/user/user.resolver.js.map +1 -1
  231. package/dist/server/modules/user/user.service.js +6 -0
  232. package/dist/server/modules/user/user.service.js.map +1 -1
  233. package/dist/server/server.controller.js +1 -0
  234. package/dist/server/server.controller.js.map +1 -1
  235. package/dist/test/test.helper.js +18 -10
  236. package/dist/test/test.helper.js.map +1 -1
  237. package/dist/tsconfig.build.tsbuildinfo +1 -1
  238. package/package.json +26 -58
  239. package/src/core/common/args/filter.args.ts +1 -1
  240. package/src/core/common/args/pagination.args.ts +1 -1
  241. package/src/core/common/decorators/translatable.decorator.ts +1 -1
  242. package/src/core/common/enums/role.enum.ts +0 -1
  243. package/src/core/common/filters/http-exception-log.filter.ts +3 -3
  244. package/src/core/common/helpers/config.helper.ts +2 -2
  245. package/src/core/common/helpers/db.helper.ts +12 -12
  246. package/src/core/common/helpers/graphql.helper.ts +1 -1
  247. package/src/core/common/helpers/input.helper.ts +7 -4
  248. package/src/core/common/helpers/scim.helper.ts +16 -13
  249. package/src/core/common/helpers/service.helper.ts +1 -1
  250. package/src/core/common/inputs/combined-filter.input.ts +1 -1
  251. package/src/core/common/inputs/core-input.input.ts +1 -1
  252. package/src/core/common/inputs/filter.input.ts +13 -13
  253. package/src/core/common/inputs/single-filter.input.ts +2 -2
  254. package/src/core/common/interceptors/check-response.interceptor.ts +2 -2
  255. package/src/core/common/interfaces/cron-job-config-with-time-zone.interface.ts +4 -2
  256. package/src/core/common/interfaces/cron-job-config-with-utc-offset.interface.ts +4 -2
  257. package/src/core/common/interfaces/scim-array-filter-node.interface.ts +1 -1
  258. package/src/core/common/interfaces/scim-condition-node.interface.ts +1 -1
  259. package/src/core/common/interfaces/scim-logical-node.interface.ts +1 -1
  260. package/src/core/common/models/core-model.model.ts +2 -4
  261. package/src/core/common/scalars/any.scalar.ts +1 -1
  262. package/src/core/common/scalars/json.scalar.ts +3 -3
  263. package/src/core/common/services/config.service.ts +17 -11
  264. package/src/core/common/services/core-cron-jobs.service.ts +6 -6
  265. package/src/core/common/services/crud.service.ts +3 -12
  266. package/src/core/common/services/mailjet.service.ts +4 -5
  267. package/src/core/common/services/module.service.ts +3 -3
  268. package/src/core/common/types/array-element.type.ts +3 -2
  269. package/src/core/common/types/require-only-one.type.ts +2 -2
  270. package/src/core/common/types/required-at-least-one.type.ts +2 -2
  271. package/src/core/common/types/scim-comparator.type.ts +1 -1
  272. package/src/core/common/types/scim-logical-operator.type.ts +1 -1
  273. package/src/core/common/types/scim-node.type.ts +1 -1
  274. package/src/core/modules/auth/guards/auth.guard.ts +4 -2
  275. package/src/core/modules/auth/guards/roles.guard.ts +17 -3
  276. package/src/core/modules/auth/tokens.decorator.ts +3 -3
  277. package/src/core/modules/better-auth/ARCHITECTURE.md +23 -20
  278. package/src/core/modules/better-auth/CUSTOMIZATION.md +64 -56
  279. package/src/core/modules/better-auth/INTEGRATION-CHECKLIST.md +67 -40
  280. package/src/core/modules/better-auth/README.md +268 -230
  281. package/src/core/modules/better-auth/better-auth-roles.guard.ts +8 -1
  282. package/src/core/modules/better-auth/better-auth-token.service.ts +10 -3
  283. package/src/core/modules/better-auth/better-auth.resolver.ts +3 -1
  284. package/src/core/modules/better-auth/better-auth.types.ts +3 -1
  285. package/src/core/modules/better-auth/core-better-auth-api.middleware.ts +3 -1
  286. package/src/core/modules/better-auth/core-better-auth-challenge.service.ts +3 -1
  287. package/src/core/modules/better-auth/core-better-auth-email-verification.service.ts +30 -25
  288. package/src/core/modules/better-auth/core-better-auth-signup-validator.service.ts +3 -1
  289. package/src/core/modules/better-auth/core-better-auth.middleware.ts +6 -2
  290. package/src/core/modules/error-code/INTEGRATION-CHECKLIST.md +28 -21
  291. package/src/core/modules/error-code/error-codes.ts +0 -2
  292. package/src/core/modules/file/README.md +12 -10
  293. package/src/core/modules/file/core-file.service.ts +5 -9
  294. package/src/core/modules/migrate/MIGRATION_FROM_NODEPIT.md +21 -9
  295. package/src/core/modules/migrate/README.md +30 -28
  296. package/src/core/modules/migrate/cli/migrate-cli.ts +0 -3
  297. package/src/core/modules/migrate/helpers/migration.helper.ts +13 -21
  298. package/src/core/modules/migrate/migration-runner.ts +0 -3
  299. package/src/core/modules/system-setup/INTEGRATION-CHECKLIST.md +15 -14
  300. package/src/core/modules/system-setup/README.md +28 -20
  301. package/src/core/modules/system-setup/core-system-setup.service.ts +4 -5
  302. package/src/core/modules/tus/INTEGRATION-CHECKLIST.md +15 -14
  303. package/src/core/modules/tus/README.md +50 -44
  304. package/src/core/modules/user/core-user.service.ts +1 -2
  305. package/src/server/modules/auth/auth.module.ts +1 -9
  306. package/src/server/modules/better-auth/better-auth.resolver.ts +3 -1
  307. package/src/server/modules/error-code/README.md +19 -16
  308. package/src/server/modules/error-code/error-code.controller.ts +4 -1
  309. package/src/server/modules/file/file.resolver.ts +1 -1
  310. package/src/server/modules/file/file.service.ts +1 -3
  311. package/src/server/modules/user/user.resolver.ts +1 -1
  312. package/src/test/README.md +31 -27
  313. package/src/test/test.helper.ts +18 -10
@@ -38,14 +38,14 @@ export class ConfigService {
38
38
  /**
39
39
  * BehaviorSubject for config
40
40
  */
41
- protected static _configSubject$: BehaviorSubject<Partial<IServerOptions> & { [key: string]: any }>
42
- = new BehaviorSubject(undefined);
41
+ protected static _configSubject$: BehaviorSubject<Partial<IServerOptions> & { [key: string]: any }> =
42
+ new BehaviorSubject(undefined);
43
43
 
44
44
  /**
45
45
  * BehaviorSubject for frozen config
46
46
  */
47
- protected static _frozenConfigSubject$: BehaviorSubject<Partial<IServerOptions> & { [key: string]: any }>
48
- = new BehaviorSubject(undefined);
47
+ protected static _frozenConfigSubject$: BehaviorSubject<Partial<IServerOptions> & { [key: string]: any }> =
48
+ new BehaviorSubject(undefined);
49
49
 
50
50
  /**
51
51
  * Singleton instance of ConfigService
@@ -82,8 +82,14 @@ export class ConfigService {
82
82
  // Set config before setting instance
83
83
  if (typeof configObject === 'object') {
84
84
  isInitialized
85
- ? ConfigService.mergeConfig(configObject, { ...config, ...{ init: false } })
86
- : ConfigService.setConfig(configObject, { ...config, ...{ init: false } });
85
+ ? ConfigService.mergeConfig(configObject, {
86
+ ...config,
87
+ init: false,
88
+ })
89
+ : ConfigService.setConfig(configObject, {
90
+ ...config,
91
+ init: false,
92
+ });
87
93
  }
88
94
 
89
95
  // Set instance if not yet initialized
@@ -181,8 +187,8 @@ export class ConfigService {
181
187
  */
182
188
  static get observable() {
183
189
  return ConfigService._configSubject$.asObservable().pipe(
184
- filter(config => !config),
185
- map(config => clone(config, { circles: false })),
190
+ filter((config) => !config),
191
+ map((config) => clone(config, { circles: false })),
186
192
  );
187
193
  }
188
194
 
@@ -197,7 +203,7 @@ export class ConfigService {
197
203
  * Get observable for faster but read-only deep-frozen configuration
198
204
  */
199
205
  static get observableFastButReadOnly() {
200
- return ConfigService._frozenConfigSubject$.asObservable().pipe(filter(config => !config));
206
+ return ConfigService._frozenConfigSubject$.asObservable().pipe(filter((config) => !config));
201
207
  }
202
208
 
203
209
  /**
@@ -343,8 +349,8 @@ export class ConfigService {
343
349
  // Check for unintentional overwriting
344
350
  if (!firstInitialization && !config.reInit) {
345
351
  throw new Error(
346
- 'Unintentional overwriting of the configuration. '
347
- + 'If overwriting is desired, please set `reInit` in setConfig of ConfigService to `true`.',
352
+ 'Unintentional overwriting of the configuration. ' +
353
+ 'If overwriting is desired, please set `reInit` in setConfig of ConfigService to `true`.',
348
354
  );
349
355
  }
350
356
 
@@ -68,8 +68,8 @@ export abstract class CoreCronJobs implements OnApplicationBootstrap {
68
68
  for (const [name, CronExpressionOrConfig] of Object.entries(this.cronJobs)) {
69
69
  // Check config
70
70
  if (
71
- !CronExpressionOrConfig
72
- || (typeof CronExpressionOrConfig === 'object' && (CronExpressionOrConfig as CronJobConfigWithTimeZone).disabled)
71
+ !CronExpressionOrConfig ||
72
+ (typeof CronExpressionOrConfig === 'object' && (CronExpressionOrConfig as CronJobConfigWithTimeZone).disabled)
73
73
  ) {
74
74
  continue;
75
75
  }
@@ -116,8 +116,8 @@ export abstract class CoreCronJobs implements OnApplicationBootstrap {
116
116
 
117
117
  // Check if parallel execution is allowed and if so how many can run in parallel
118
118
  if (
119
- dates?.length
120
- && (!config.runParallel || (typeof config.runParallel === 'number' && dates.length >= config.runParallel))
119
+ dates?.length &&
120
+ (!config.runParallel || (typeof config.runParallel === 'number' && dates.length >= config.runParallel))
121
121
  ) {
122
122
  return;
123
123
  }
@@ -134,7 +134,7 @@ export abstract class CoreCronJobs implements OnApplicationBootstrap {
134
134
  await this[name]();
135
135
  } catch (e) {
136
136
  // Remove job from running list
137
- this.runningJobs[name] = this.runningJobs[name].filter(item => item !== date);
137
+ this.runningJobs[name] = this.runningJobs[name].filter((item) => item !== date);
138
138
  if (config.throwException) {
139
139
  throw e;
140
140
  } else {
@@ -143,7 +143,7 @@ export abstract class CoreCronJobs implements OnApplicationBootstrap {
143
143
  }
144
144
 
145
145
  // Remove job from running list
146
- this.runningJobs[name] = this.runningJobs[name].filter(item => item !== date);
146
+ this.runningJobs[name] = this.runningJobs[name].filter((item) => item !== date);
147
147
  },
148
148
  null,
149
149
  true,
@@ -313,7 +313,7 @@ export abstract class CrudService<
313
313
  async findAndCountForce(
314
314
  filter?: FilterArgs | { filterQuery?: QueryFilter<any>; queryOptions?: QueryOptions; samples?: number },
315
315
  serviceOptions: ServiceOptions = {},
316
- ): Promise<{ items: Model[]; pagination: PaginationInfo; totalCount: number; }> {
316
+ ): Promise<{ items: Model[]; pagination: PaginationInfo; totalCount: number }> {
317
317
  serviceOptions.raw = true;
318
318
  return this.findAndCount(filter, serviceOptions);
319
319
  }
@@ -325,7 +325,7 @@ export abstract class CrudService<
325
325
  async findAndCountRaw(
326
326
  filter?: FilterArgs | { filterQuery?: QueryFilter<any>; queryOptions?: QueryOptions; samples?: number },
327
327
  serviceOptions: ServiceOptions = {},
328
- ): Promise<{ items: Model[]; pagination: PaginationInfo; totalCount: number; }> {
328
+ ): Promise<{ items: Model[]; pagination: PaginationInfo; totalCount: number }> {
329
329
  serviceOptions = serviceOptions || {};
330
330
  serviceOptions.raw = true;
331
331
  return this.findAndCountForce(filter, serviceOptions);
@@ -345,16 +345,7 @@ export abstract class CrudService<
345
345
  }
346
346
  const promises: Promise<Model>[] = [];
347
347
  for (const dbItem of dbItems) {
348
- promises.push(
349
- new Promise(async (resolve, reject) => {
350
- try {
351
- const item = await this.update(getStringIds(dbItem as any), update, serviceOptions);
352
- resolve(item);
353
- } catch (e) {
354
- reject(e);
355
- }
356
- }),
357
- );
348
+ promises.push(this.update(getStringIds(dbItem as any), update, serviceOptions));
358
349
  }
359
350
  return await Promise.all(promises);
360
351
  }
@@ -3,7 +3,6 @@ const Mailjet = require('node-mailjet');
3
3
 
4
4
  import { ConfigService } from './config.service';
5
5
 
6
-
7
6
  /**
8
7
  * Mailjet service
9
8
  */
@@ -83,8 +82,8 @@ export class MailjetService {
83
82
  });
84
83
  } catch (e) {
85
84
  if (
86
- this.configService.getFastButReadOnly('email.mailjet.api_key_public')
87
- && this.configService.getFastButReadOnly('email.mailjet.api_key_private')
85
+ this.configService.getFastButReadOnly('email.mailjet.api_key_public') &&
86
+ this.configService.getFastButReadOnly('email.mailjet.api_key_private')
88
87
  ) {
89
88
  throw new HttpException('Cannot connect to mailjet.', 502);
90
89
  }
@@ -95,8 +94,8 @@ export class MailjetService {
95
94
  this.configService.getFastButReadOnly('email.mailjet.api_key_private') || 'missing',
96
95
  'email.mailjet.api_key_public':
97
96
  this.configService.getFastButReadOnly('email.mailjet.api_key_public') || 'missing',
98
- 'info': 'Mailjet credentials are missing',
99
- 'templateData': templateData,
97
+ info: 'Mailjet credentials are missing',
98
+ templateData: templateData,
100
99
  },
101
100
  null,
102
101
  2,
@@ -96,7 +96,7 @@ export abstract class ModuleService<T extends CoreModel = any> {
96
96
  processFieldSelection: {},
97
97
  pubSub: true,
98
98
  setCreateOrUpdateUserId: false,
99
- ...(options?.serviceOptions || {}),
99
+ ...options?.serviceOptions,
100
100
  };
101
101
 
102
102
  // Note raw configuration
@@ -143,8 +143,8 @@ export abstract class ModuleService<T extends CoreModel = any> {
143
143
  const preparedInput = await this.prepareInput(config.input, config);
144
144
  new Promise(() => {
145
145
  if (
146
- inputJSON?.replace(/"password":\s*"[^"]*"/, '')
147
- !== JSON.stringify(preparedInput)?.replace(/"password":\s*"[^"]*"/, '')
146
+ inputJSON?.replace(/"password":\s*"[^"]*"/, '') !==
147
+ JSON.stringify(preparedInput)?.replace(/"password":\s*"[^"]*"/, '')
148
148
  ) {
149
149
  console.debug(
150
150
  'CheckSecurityInterceptor: securityCheck changed input of type',
@@ -1,5 +1,6 @@
1
1
  /**
2
2
  * Get type of array elements
3
3
  */
4
- export type ArrayElement<ArrayType extends (unknown | unknown[])> =
5
- ArrayType extends readonly (infer ElementType)[] ? ElementType : ArrayType;
4
+ export type ArrayElement<ArrayType extends unknown | unknown[]> = ArrayType extends readonly (infer ElementType)[]
5
+ ? ElementType
6
+ : ArrayType;
@@ -4,5 +4,5 @@
4
4
  */
5
5
  export type RequireOnlyOne<T, Keys extends keyof T = keyof T> = Pick<T, Exclude<keyof T, Keys>> &
6
6
  {
7
- [K in Keys]-?: Partial<Record<Exclude<Keys, K>, undefined>> & Required<Pick<T, K>>;
8
- }[Keys];
7
+ [K in Keys]-?: Partial<Record<Exclude<Keys, K>, undefined>> & Required<Pick<T, K>>;
8
+ }[Keys];
@@ -4,5 +4,5 @@
4
4
  */
5
5
  export type RequireAtLeastOne<T, Keys extends keyof T = keyof T> = Pick<T, Exclude<keyof T, Keys>> &
6
6
  {
7
- [K in Keys]-?: Partial<Pick<T, Exclude<Keys, K>>> & Required<Pick<T, K>>;
8
- }[Keys];
7
+ [K in Keys]-?: Partial<Pick<T, Exclude<Keys, K>>> & Required<Pick<T, K>>;
8
+ }[Keys];
@@ -1,2 +1,2 @@
1
1
  /** Supported SCIM comparison operators */
2
- export type Comparator = 'aco' | 'co' | 'eq' | 'ew' | 'ge' | 'gt' | 'le' | 'lt' | 'pr' | 'sw';
2
+ export type Comparator = 'aco' | 'co' | 'eq' | 'ew' | 'ge' | 'gt' | 'le' | 'lt' | 'pr' | 'sw';
@@ -1 +1 @@
1
- export type LogicalOperator = 'and' | 'or';
1
+ export type LogicalOperator = 'and' | 'or';
@@ -3,4 +3,4 @@ import { ConditionNode } from '../interfaces/scim-condition-node.interface';
3
3
  import { LogicalNode } from '../interfaces/scim-logical-node.interface';
4
4
 
5
5
  /** Union type representing any valid SCIM node */
6
- export type ScimNode = ArrayFilterNode | ConditionNode | LogicalNode;
6
+ export type ScimNode = ArrayFilterNode | ConditionNode | LogicalNode;
@@ -139,8 +139,10 @@ function createAuthGuard(type?: AuthGuardStrategy | string | string[]): Type<IAu
139
139
  // Proceed with Passport authentication for other strategies
140
140
  const response = context?.switchToHttp()?.getResponse();
141
141
  const passportFn = createPassportContext(request, response);
142
- const user = await passportFn(type || this.options?.defaultStrategy, options, (err: any, currentUser: any, info: any) =>
143
- this.handleRequest(err, currentUser, info, context),
142
+ const user = await passportFn(
143
+ type || this.options?.defaultStrategy,
144
+ options,
145
+ (err: any, currentUser: any, info: any) => this.handleRequest(err, currentUser, info, context),
144
146
  );
145
147
  request[options.property || defaultOptions.property] = user;
146
148
  return true;
@@ -1,4 +1,12 @@
1
- import { ExecutionContext, ForbiddenException, Inject, Injectable, Logger, Optional, UnauthorizedException } from '@nestjs/common';
1
+ import {
2
+ ExecutionContext,
3
+ ForbiddenException,
4
+ Inject,
5
+ Injectable,
6
+ Logger,
7
+ Optional,
8
+ UnauthorizedException,
9
+ } from '@nestjs/common';
2
10
  import { ModuleRef, Reflector } from '@nestjs/core';
3
11
  import { GqlExecutionContext } from '@nestjs/graphql';
4
12
  import { firstValueFrom, isObservable } from 'rxjs';
@@ -122,7 +130,10 @@ export class RolesGuard extends AuthGuard(AuthGuardStrategy.JWT) {
122
130
  */
123
131
  override async canActivate(context: ExecutionContext): Promise<boolean> {
124
132
  // Get roles FIRST to check if authentication is even needed
125
- const reflectorRoles = this.ensureReflector().getAll<string[][]>('roles', [context.getHandler(), context.getClass()]);
133
+ const reflectorRoles = this.ensureReflector().getAll<string[][]>('roles', [
134
+ context.getHandler(),
135
+ context.getClass(),
136
+ ]);
126
137
  const roles: string[] = reflectorRoles[0]
127
138
  ? reflectorRoles[1]
128
139
  ? [...reflectorRoles[0], ...reflectorRoles[1]]
@@ -279,7 +290,10 @@ export class RolesGuard extends AuthGuard(AuthGuardStrategy.JWT) {
279
290
  */
280
291
  override handleRequest(err: Error | null, user: any, info: any, context: ExecutionContext) {
281
292
  // Get roles
282
- const reflectorRoles = this.ensureReflector().getAll<string[][]>('roles', [context.getHandler(), context.getClass()]);
293
+ const reflectorRoles = this.ensureReflector().getAll<string[][]>('roles', [
294
+ context.getHandler(),
295
+ context.getClass(),
296
+ ]);
283
297
  const roles: string[] = reflectorRoles[0]
284
298
  ? reflectorRoles[1]
285
299
  ? [...reflectorRoles[0], ...reflectorRoles[1]]
@@ -14,9 +14,9 @@ export const Tokens = createParamDecorator(
14
14
  const context = getContextData(ctx);
15
15
 
16
16
  // Get token from cookie or authorization header
17
- const token
18
- = context?.request?.cookies?.['token']
19
- || context?.request
17
+ const token =
18
+ context?.request?.cookies?.['token'] ||
19
+ context?.request
20
20
  ?.get('Authorization')
21
21
  ?.replace(/bearer/i, '')
22
22
  .trim();
@@ -5,6 +5,7 @@ The `CoreBetterAuthController` implements custom endpoints instead of directly u
5
5
  ## 1. Hybrid-Auth-System (Legacy + Better-Auth)
6
6
 
7
7
  The nest-server supports bidirectional authentication:
8
+
8
9
  - **Legacy Auth → Better-Auth**: Users created via Legacy Auth can sign in via Better-Auth
9
10
  - **Better-Auth → Legacy Auth**: Users created via Better-Auth can sign in via Legacy Auth
10
11
 
@@ -14,14 +15,14 @@ This requires custom logic that cannot be implemented via Better-Auth hooks alon
14
15
 
15
16
  Better-Auth hooks have fundamental limitations that prevent full implementation of our requirements:
16
17
 
17
- | Requirement | Hook Support | Reason |
18
- |-------------|--------------|--------|
19
- | Legacy user migration | ⚠️ Partial | Requires global DB access outside NestJS DI |
20
- | Password sync to Legacy | ❌ No | **After-hooks don't have access to plaintext password** |
21
- | Custom response format | ❌ No | **Hooks cannot modify HTTP response** |
22
- | Multi-cookie setting | ❌ No | **Hooks cannot set cookies** |
23
- | User mapping with roles | ❌ No | Requires NestJS Dependency Injection |
24
- | Session token injection | ❌ No | Before-hooks cannot inject tokens into requests |
18
+ | Requirement | Hook Support | Reason |
19
+ | ----------------------- | ------------ | ------------------------------------------------------- |
20
+ | Legacy user migration | ⚠️ Partial | Requires global DB access outside NestJS DI |
21
+ | Password sync to Legacy | ❌ No | **After-hooks don't have access to plaintext password** |
22
+ | Custom response format | ❌ No | **Hooks cannot modify HTTP response** |
23
+ | Multi-cookie setting | ❌ No | **Hooks cannot set cookies** |
24
+ | User mapping with roles | ❌ No | Requires NestJS Dependency Injection |
25
+ | Session token injection | ❌ No | Before-hooks cannot inject tokens into requests |
25
26
 
26
27
  ## 3. Hook Limitations Explained
27
28
 
@@ -68,35 +69,37 @@ export const auth = betterAuth({
68
69
 
69
70
  ## 4. What Custom Endpoints Do
70
71
 
71
- | Endpoint | Custom Logic | Why Required |
72
- |----------|--------------|--------------|
72
+ | Endpoint | Custom Logic | Why Required |
73
+ | ---------------- | ------------------------------------------------ | ---------------------------------- |
73
74
  | `/sign-in/email` | Legacy migration, PW normalization, 2FA handling | Migration needs plaintext password |
74
- | `/sign-up/email` | PW normalization, Legacy sync, User linking | Sync needs plaintext password |
75
- | `/sign-out` | Multi-cookie clearing | Response modification |
76
- | `/session` | User mapping with roles | NestJS service access |
77
- | Plugin routes | Session token injection | Request modification |
75
+ | `/sign-up/email` | PW normalization, Legacy sync, User linking | Sync needs plaintext password |
76
+ | `/sign-out` | Multi-cookie clearing | Response modification |
77
+ | `/session` | User mapping with roles | NestJS service access |
78
+ | Plugin routes | Session token injection | Request modification |
78
79
 
79
80
  ## 5. Native Handler Where Possible
80
81
 
81
82
  Despite custom endpoints, we use Better-Auth's native handler where appropriate:
83
+
82
84
  - **Plugin routes** (Passkey, 2FA, OAuth) → `authInstance.handler()`
83
85
  - **2FA verification flow** → Native handler for correct cookie setting
84
86
  - **Passkey authentication** → Native WebAuthn handling
85
87
 
86
88
  ## 6. Alternative Approaches Considered
87
89
 
88
- | Approach | Evaluation |
89
- |----------|------------|
90
- | **Full Hook Approach** | ❌ Not feasible - missing plaintext password, no response modification |
91
- | **Hybrid with Global DB** | ⚠️ Possible but anti-pattern - bypasses NestJS DI, harder to test |
92
- | **Custom Controller (current)** | ✅ Best balance - NestJS DI access, testable, maintainable |
90
+ | Approach | Evaluation |
91
+ | ------------------------------- | ---------------------------------------------------------------------- |
92
+ | **Full Hook Approach** | ❌ Not feasible - missing plaintext password, no response modification |
93
+ | **Hybrid with Global DB** | ⚠️ Possible but anti-pattern - bypasses NestJS DI, harder to test |
94
+ | **Custom Controller (current)** | ✅ Best balance - NestJS DI access, testable, maintainable |
93
95
 
94
96
  ## Conclusion
95
97
 
96
98
  The custom controller architecture is **necessary complexity**, not unnecessary overhead. It enables:
99
+
97
100
  - ✅ Legacy Auth compatibility
98
101
  - ✅ Bidirectional password synchronization
99
102
  - ✅ Multi-cookie support
100
103
  - ✅ Custom user mapping with roles
101
104
  - ✅ Proper 2FA cookie handling
102
- - ✅ Full NestJS Dependency Injection access
105
+ - ✅ Full NestJS Dependency Injection access