arkos 2.0.0-next.17 → 2.0.0-next.19

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 (432) hide show
  1. package/cli.js +8 -8
  2. package/dist/esm/app.js +3 -3
  3. package/dist/esm/app.js.map +1 -1
  4. package/dist/esm/components/arkos-gateway/arkos-gateway.js +5 -4
  5. package/dist/esm/components/arkos-gateway/arkos-gateway.js.map +1 -1
  6. package/dist/esm/components/arkos-gateway/socket-extensions.js +7 -0
  7. package/dist/esm/components/arkos-gateway/socket-extensions.js.map +1 -1
  8. package/dist/esm/components/arkos-gateway/utils/memory-gateway-store.js +2 -4
  9. package/dist/esm/components/arkos-gateway/utils/memory-gateway-store.js.map +1 -1
  10. package/dist/esm/components/arkos-gateway/utils/multi-tier-arkos-gateway-store.js +1 -0
  11. package/dist/esm/components/arkos-gateway/utils/multi-tier-arkos-gateway-store.js.map +1 -1
  12. package/dist/esm/components/arkos-loadable-registry/index.js +1 -3
  13. package/dist/esm/components/arkos-loadable-registry/index.js.map +1 -1
  14. package/dist/esm/components/arkos-route-hook/index.js +2 -1
  15. package/dist/esm/components/arkos-route-hook/index.js.map +1 -1
  16. package/dist/esm/components/arkos-route-hook/reader.js.map +1 -1
  17. package/dist/esm/components/arkos-route-hook/types.js.map +1 -1
  18. package/dist/esm/exports/index.js +2 -3
  19. package/dist/esm/exports/index.js.map +1 -1
  20. package/dist/esm/exports/middlewares/index.js +1 -1
  21. package/dist/esm/exports/middlewares/index.js.map +1 -1
  22. package/dist/esm/exports/services/index.js.map +1 -1
  23. package/dist/esm/modules/auth/auth.controller.js +213 -221
  24. package/dist/esm/modules/auth/auth.controller.js.map +1 -1
  25. package/dist/esm/modules/auth/auth.service.js +11 -58
  26. package/dist/esm/modules/auth/auth.service.js.map +1 -1
  27. package/dist/esm/modules/auth/utils/auth-prisma-json-schema-generator.js +1 -0
  28. package/dist/esm/modules/auth/utils/auth-prisma-json-schema-generator.js.map +1 -1
  29. package/dist/esm/modules/auth/utils/services/auth-action.service.js +10 -12
  30. package/dist/esm/modules/auth/utils/services/auth-action.service.js.map +1 -1
  31. package/dist/esm/modules/base/base.controller.js +179 -177
  32. package/dist/esm/modules/base/base.controller.js.map +1 -1
  33. package/dist/esm/modules/base/base.middlewares.js +6 -21
  34. package/dist/esm/modules/base/base.middlewares.js.map +1 -1
  35. package/dist/esm/modules/base/base.service.js +28 -72
  36. package/dist/esm/modules/base/base.service.js.map +1 -1
  37. package/dist/esm/modules/base/types/base.service.types.js.map +1 -1
  38. package/dist/esm/modules/base/utils/error-prettifier.js +26 -30
  39. package/dist/esm/modules/base/utils/error-prettifier.js.map +1 -1
  40. package/dist/esm/modules/email/email.service.js +2 -2
  41. package/dist/esm/modules/email/email.service.js.map +1 -1
  42. package/dist/esm/modules/error-handler/utils/app-error.js +5 -1
  43. package/dist/esm/modules/error-handler/utils/app-error.js.map +1 -1
  44. package/dist/esm/modules/file-upload/file-upload.controller.js +203 -205
  45. package/dist/esm/modules/file-upload/file-upload.controller.js.map +1 -1
  46. package/dist/esm/modules/file-upload/file-upload.router.js +3 -3
  47. package/dist/esm/modules/file-upload/file-upload.router.js.map +1 -1
  48. package/dist/esm/modules/file-upload/file-upload.service.js +12 -7
  49. package/dist/esm/modules/file-upload/file-upload.service.js.map +1 -1
  50. package/dist/esm/modules/file-upload/utils/file-upload-json-schema-generator.js +1 -1
  51. package/dist/esm/modules/file-upload/utils/file-upload-json-schema-generator.js.map +1 -1
  52. package/dist/esm/modules/swagger/swagger.router.js.map +1 -1
  53. package/dist/esm/modules/swagger/utils/helpers/openapi-schema-converter.js +1 -0
  54. package/dist/esm/modules/swagger/utils/helpers/openapi-schema-converter.js.map +1 -1
  55. package/dist/esm/types/arkos.js.map +1 -1
  56. package/dist/esm/types/index.js.map +1 -1
  57. package/dist/esm/types/new-arkos-config.js.map +1 -1
  58. package/dist/esm/types/router-config.js.map +1 -1
  59. package/dist/esm/types/validation/validation-manager.js +21 -22
  60. package/dist/esm/types/validation/validation-manager.js.map +1 -1
  61. package/dist/esm/utils/arkos-router/index.js +1 -6
  62. package/dist/esm/utils/arkos-router/index.js.map +1 -1
  63. package/dist/esm/utils/arkos-router/route-config-registry.js +2 -3
  64. package/dist/esm/utils/arkos-router/route-config-registry.js.map +1 -1
  65. package/dist/esm/utils/arkos-router/types/index.js.map +1 -1
  66. package/dist/esm/utils/arkos-router/utils/helpers/apply-arkos-router-proxy.js +4 -0
  67. package/dist/esm/utils/arkos-router/utils/helpers/apply-arkos-router-proxy.js.map +1 -1
  68. package/dist/esm/utils/arkos-router/utils/helpers/index.js +86 -43
  69. package/dist/esm/utils/arkos-router/utils/helpers/index.js.map +1 -1
  70. package/dist/esm/utils/arkos-router/utils/helpers/upload-manager.js +12 -14
  71. package/dist/esm/utils/arkos-router/utils/helpers/upload-manager.js.map +1 -1
  72. package/dist/esm/utils/bundler.js +6 -6
  73. package/dist/esm/utils/bundler.js.map +1 -1
  74. package/dist/esm/utils/cli/dev.js +4 -17
  75. package/dist/esm/utils/cli/dev.js.map +1 -1
  76. package/dist/esm/utils/cli/generate.js +0 -90
  77. package/dist/esm/utils/cli/generate.js.map +1 -1
  78. package/dist/esm/utils/cli/index.js +9 -73
  79. package/dist/esm/utils/cli/index.js.map +1 -1
  80. package/dist/esm/utils/cli/prisma-generate.js +8 -37
  81. package/dist/esm/utils/cli/prisma-generate.js.map +1 -1
  82. package/dist/esm/utils/cli/utils/cli.helpers.js +1 -1
  83. package/dist/esm/utils/cli/utils/smart-fs-watcher.js +3 -0
  84. package/dist/esm/utils/cli/utils/smart-fs-watcher.js.map +1 -1
  85. package/dist/esm/utils/cli/utils/template-generator/templates/generate-multiple-components.js +0 -51
  86. package/dist/esm/utils/cli/utils/template-generator/templates/generate-multiple-components.js.map +1 -1
  87. package/dist/esm/utils/cli/utils/template-generator/templates/router-template.js +11 -4
  88. package/dist/esm/utils/cli/utils/template-generator/templates/router-template.js.map +1 -1
  89. package/dist/esm/utils/cli/utils/template-generator/templates/service-template.js +2 -2
  90. package/dist/esm/utils/cli/utils/template-generator/templates/service-template.js.map +1 -1
  91. package/dist/esm/utils/cli/utils/template-generators.js +27 -24
  92. package/dist/esm/utils/cli/utils/template-generators.js.map +1 -1
  93. package/dist/esm/utils/dynamic-loader.js +2 -1
  94. package/dist/esm/utils/dynamic-loader.js.map +1 -1
  95. package/dist/esm/utils/features/api.features.js +24 -20
  96. package/dist/esm/utils/features/api.features.js.map +1 -1
  97. package/dist/esm/utils/features/port-and-host-allocator.js +4 -3
  98. package/dist/esm/utils/features/port-and-host-allocator.js.map +1 -1
  99. package/dist/esm/utils/helpers/arkos-config.helpers.js.map +1 -1
  100. package/dist/esm/utils/helpers/query-parser.helpers.js +7 -22
  101. package/dist/esm/utils/helpers/query-parser.helpers.js.map +1 -1
  102. package/dist/esm/utils/initialize-app.js +1 -1
  103. package/dist/esm/utils/initialize-app.js.map +1 -1
  104. package/dist/esm/utils/prisma/prisma-json-schema-generator.js +20 -21
  105. package/dist/esm/utils/prisma/prisma-json-schema-generator.js.map +1 -1
  106. package/dist/esm/utils/prisma/prisma-schema-parser.js +14 -8
  107. package/dist/esm/utils/prisma/prisma-schema-parser.js.map +1 -1
  108. package/dist/esm/utils/validate-schema.js +23 -21
  109. package/dist/esm/utils/validate-schema.js.map +1 -1
  110. package/dist/types/app.d.ts +5 -1
  111. package/dist/types/components/arkos-route-hook/index.d.ts +7 -1
  112. package/dist/types/components/arkos-route-hook/reader.d.ts +3 -6
  113. package/dist/types/components/arkos-route-hook/types.d.ts +8 -10
  114. package/dist/types/exports/index.d.ts +3 -5
  115. package/dist/types/exports/middlewares/index.d.ts +1 -1
  116. package/dist/types/exports/services/index.d.ts +2 -2
  117. package/dist/types/modules/auth/auth.service.d.ts +1 -40
  118. package/dist/types/modules/base/base.middlewares.d.ts +1 -10
  119. package/dist/types/modules/base/base.service.d.ts +1 -8
  120. package/dist/types/modules/base/types/base.service.types.d.ts +11 -0
  121. package/dist/types/modules/swagger/swagger.router.d.ts +1 -2
  122. package/dist/types/types/arkos.d.ts +1 -2
  123. package/dist/types/types/index.d.ts +3 -3
  124. package/dist/types/types/new-arkos-config.d.ts +0 -14
  125. package/dist/types/types/router-config.d.ts +0 -111
  126. package/dist/types/utils/arkos-router/types/index.d.ts +3 -3
  127. package/dist/types/utils/arkos-router/utils/helpers/index.d.ts +2 -6
  128. package/dist/types/utils/cli/generate.d.ts +11 -10
  129. package/dist/types/utils/dynamic-loader.d.ts +2 -2
  130. package/dist/types/utils/helpers/query-parser.helpers.d.ts +1 -1
  131. package/dist/types/utils/prisma/prisma-schema-parser.d.ts +1 -0
  132. package/package.json +56 -58
  133. package/dist/cjs/app.js +0 -114
  134. package/dist/cjs/app.js.map +0 -1
  135. package/dist/cjs/components/arkos-gateway/arkos-gateway.js +0 -344
  136. package/dist/cjs/components/arkos-gateway/arkos-gateway.js.map +0 -1
  137. package/dist/cjs/components/arkos-gateway/socket-extensions.js +0 -166
  138. package/dist/cjs/components/arkos-gateway/socket-extensions.js.map +0 -1
  139. package/dist/cjs/components/arkos-gateway/types.js +0 -7
  140. package/dist/cjs/components/arkos-gateway/types.js.map +0 -1
  141. package/dist/cjs/components/arkos-gateway/utils/helpers.js +0 -111
  142. package/dist/cjs/components/arkos-gateway/utils/helpers.js.map +0 -1
  143. package/dist/cjs/components/arkos-gateway/utils/memory-gateway-store.js +0 -51
  144. package/dist/cjs/components/arkos-gateway/utils/memory-gateway-store.js.map +0 -1
  145. package/dist/cjs/components/arkos-gateway/utils/multi-tier-arkos-gateway-store.js +0 -43
  146. package/dist/cjs/components/arkos-gateway/utils/multi-tier-arkos-gateway-store.js.map +0 -1
  147. package/dist/cjs/components/arkos-gateway/utils/rate-limiter.js +0 -17
  148. package/dist/cjs/components/arkos-gateway/utils/rate-limiter.js.map +0 -1
  149. package/dist/cjs/components/arkos-loadable-registry/index.js +0 -28
  150. package/dist/cjs/components/arkos-loadable-registry/index.js.map +0 -1
  151. package/dist/cjs/components/arkos-loadable-translator/index.js +0 -144
  152. package/dist/cjs/components/arkos-loadable-translator/index.js.map +0 -1
  153. package/dist/cjs/components/arkos-policy/index.js +0 -38
  154. package/dist/cjs/components/arkos-policy/index.js.map +0 -1
  155. package/dist/cjs/components/arkos-policy/types.js +0 -3
  156. package/dist/cjs/components/arkos-policy/types.js.map +0 -1
  157. package/dist/cjs/components/arkos-route-hook/index.js +0 -50
  158. package/dist/cjs/components/arkos-route-hook/index.js.map +0 -1
  159. package/dist/cjs/components/arkos-route-hook/reader.js +0 -47
  160. package/dist/cjs/components/arkos-route-hook/reader.js.map +0 -1
  161. package/dist/cjs/components/arkos-route-hook/types.js +0 -3
  162. package/dist/cjs/components/arkos-route-hook/types.js.map +0 -1
  163. package/dist/cjs/components/arkos-service-hook/index.js +0 -35
  164. package/dist/cjs/components/arkos-service-hook/index.js.map +0 -1
  165. package/dist/cjs/components/arkos-service-hook/reader.js +0 -30
  166. package/dist/cjs/components/arkos-service-hook/reader.js.map +0 -1
  167. package/dist/cjs/components/arkos-service-hook/types.js +0 -3
  168. package/dist/cjs/components/arkos-service-hook/types.js.map +0 -1
  169. package/dist/cjs/exports/auth/index.js +0 -6
  170. package/dist/cjs/exports/auth/index.js.map +0 -1
  171. package/dist/cjs/exports/config.js +0 -6
  172. package/dist/cjs/exports/config.js.map +0 -1
  173. package/dist/cjs/exports/controllers/index.js +0 -42
  174. package/dist/cjs/exports/controllers/index.js.map +0 -1
  175. package/dist/cjs/exports/error-handler/index.js +0 -26
  176. package/dist/cjs/exports/error-handler/index.js.map +0 -1
  177. package/dist/cjs/exports/index.js +0 -25
  178. package/dist/cjs/exports/index.js.map +0 -1
  179. package/dist/cjs/exports/middlewares/index.js +0 -7
  180. package/dist/cjs/exports/middlewares/index.js.map +0 -1
  181. package/dist/cjs/exports/prisma/index.js +0 -13
  182. package/dist/cjs/exports/prisma/index.js.map +0 -1
  183. package/dist/cjs/exports/services/index.js +0 -53
  184. package/dist/cjs/exports/services/index.js.map +0 -1
  185. package/dist/cjs/exports/utils/index.js +0 -26
  186. package/dist/cjs/exports/utils/index.js.map +0 -1
  187. package/dist/cjs/exports/validation/index.js +0 -11
  188. package/dist/cjs/exports/validation/index.js.map +0 -1
  189. package/dist/cjs/exports/websockets.js +0 -13
  190. package/dist/cjs/exports/websockets.js.map +0 -1
  191. package/dist/cjs/generated.js +0 -7
  192. package/dist/cjs/generated.js.map +0 -1
  193. package/dist/cjs/modules/auth/auth.controller.js +0 -254
  194. package/dist/cjs/modules/auth/auth.controller.js.map +0 -1
  195. package/dist/cjs/modules/auth/auth.router.js +0 -130
  196. package/dist/cjs/modules/auth/auth.router.js.map +0 -1
  197. package/dist/cjs/modules/auth/auth.service.js +0 -312
  198. package/dist/cjs/modules/auth/auth.service.js.map +0 -1
  199. package/dist/cjs/modules/auth/utils/auth-error-objects.js +0 -10
  200. package/dist/cjs/modules/auth/utils/auth-error-objects.js.map +0 -1
  201. package/dist/cjs/modules/auth/utils/auth-hooks-manager.js +0 -153
  202. package/dist/cjs/modules/auth/utils/auth-hooks-manager.js.map +0 -1
  203. package/dist/cjs/modules/auth/utils/auth-openapi-generator.js +0 -372
  204. package/dist/cjs/modules/auth/utils/auth-openapi-generator.js.map +0 -1
  205. package/dist/cjs/modules/auth/utils/auth-prisma-json-schema-generator.js +0 -101
  206. package/dist/cjs/modules/auth/utils/auth-prisma-json-schema-generator.js.map +0 -1
  207. package/dist/cjs/modules/auth/utils/docs-links.js +0 -9
  208. package/dist/cjs/modules/auth/utils/docs-links.js.map +0 -1
  209. package/dist/cjs/modules/auth/utils/helpers/auth.controller.helpers.js +0 -83
  210. package/dist/cjs/modules/auth/utils/helpers/auth.controller.helpers.js.map +0 -1
  211. package/dist/cjs/modules/auth/utils/services/auth-action.service.js +0 -156
  212. package/dist/cjs/modules/auth/utils/services/auth-action.service.js.map +0 -1
  213. package/dist/cjs/modules/base/base.controller.js +0 -293
  214. package/dist/cjs/modules/base/base.controller.js.map +0 -1
  215. package/dist/cjs/modules/base/base.middlewares.js +0 -229
  216. package/dist/cjs/modules/base/base.middlewares.js.map +0 -1
  217. package/dist/cjs/modules/base/base.router.js +0 -126
  218. package/dist/cjs/modules/base/base.router.js.map +0 -1
  219. package/dist/cjs/modules/base/base.service.js +0 -371
  220. package/dist/cjs/modules/base/base.service.js.map +0 -1
  221. package/dist/cjs/modules/base/types/base.service.types.js +0 -3
  222. package/dist/cjs/modules/base/types/base.service.types.js.map +0 -1
  223. package/dist/cjs/modules/base/utils/error-prettifier.js +0 -188
  224. package/dist/cjs/modules/base/utils/error-prettifier.js.map +0 -1
  225. package/dist/cjs/modules/base/utils/helpers/base.middlewares.helpers.js +0 -49
  226. package/dist/cjs/modules/base/utils/helpers/base.middlewares.helpers.js.map +0 -1
  227. package/dist/cjs/modules/base/utils/helpers/base.service.helpers.js +0 -243
  228. package/dist/cjs/modules/base/utils/helpers/base.service.helpers.js.map +0 -1
  229. package/dist/cjs/modules/base/utils/model-openapi-generator.js +0 -443
  230. package/dist/cjs/modules/base/utils/model-openapi-generator.js.map +0 -1
  231. package/dist/cjs/modules/base/utils/router-validator.js +0 -13
  232. package/dist/cjs/modules/base/utils/router-validator.js.map +0 -1
  233. package/dist/cjs/modules/base/utils/service-hooks-manager.js +0 -19
  234. package/dist/cjs/modules/base/utils/service-hooks-manager.js.map +0 -1
  235. package/dist/cjs/modules/debugger/debugger.service.js +0 -59
  236. package/dist/cjs/modules/debugger/debugger.service.js.map +0 -1
  237. package/dist/cjs/modules/email/email.service.js +0 -113
  238. package/dist/cjs/modules/email/email.service.js.map +0 -1
  239. package/dist/cjs/modules/error-handler/error-handler.controller.js +0 -70
  240. package/dist/cjs/modules/error-handler/error-handler.controller.js.map +0 -1
  241. package/dist/cjs/modules/error-handler/utils/app-error.js +0 -27
  242. package/dist/cjs/modules/error-handler/utils/app-error.js.map +0 -1
  243. package/dist/cjs/modules/error-handler/utils/catch-async.js +0 -21
  244. package/dist/cjs/modules/error-handler/utils/catch-async.js.map +0 -1
  245. package/dist/cjs/modules/error-handler/utils/error-handler.helpers.js +0 -104
  246. package/dist/cjs/modules/error-handler/utils/error-handler.helpers.js.map +0 -1
  247. package/dist/cjs/modules/error-handler/utils/errors.js +0 -158
  248. package/dist/cjs/modules/error-handler/utils/errors.js.map +0 -1
  249. package/dist/cjs/modules/error-handler/utils/get-handled-error.js +0 -107
  250. package/dist/cjs/modules/error-handler/utils/get-handled-error.js.map +0 -1
  251. package/dist/cjs/modules/error-handler/utils/multer-error-handler.js +0 -39
  252. package/dist/cjs/modules/error-handler/utils/multer-error-handler.js.map +0 -1
  253. package/dist/cjs/modules/file-upload/file-upload.controller.js +0 -252
  254. package/dist/cjs/modules/file-upload/file-upload.controller.js.map +0 -1
  255. package/dist/cjs/modules/file-upload/file-upload.router.js +0 -103
  256. package/dist/cjs/modules/file-upload/file-upload.router.js.map +0 -1
  257. package/dist/cjs/modules/file-upload/file-upload.service.js +0 -343
  258. package/dist/cjs/modules/file-upload/file-upload.service.js.map +0 -1
  259. package/dist/cjs/modules/file-upload/utils/file-upload-json-schema-generator.js +0 -351
  260. package/dist/cjs/modules/file-upload/utils/file-upload-json-schema-generator.js.map +0 -1
  261. package/dist/cjs/modules/file-upload/utils/helpers/file-extensions.js +0 -134
  262. package/dist/cjs/modules/file-upload/utils/helpers/file-extensions.js.map +0 -1
  263. package/dist/cjs/modules/file-upload/utils/helpers/file-upload.helpers.js +0 -100
  264. package/dist/cjs/modules/file-upload/utils/helpers/file-upload.helpers.js.map +0 -1
  265. package/dist/cjs/modules/swagger/swagger.router.js +0 -115
  266. package/dist/cjs/modules/swagger/swagger.router.js.map +0 -1
  267. package/dist/cjs/modules/swagger/utils/get-open-api-login-html.js +0 -308
  268. package/dist/cjs/modules/swagger/utils/get-open-api-login-html.js.map +0 -1
  269. package/dist/cjs/modules/swagger/utils/helpers/class-validator-to-json-schema.js +0 -53
  270. package/dist/cjs/modules/swagger/utils/helpers/class-validator-to-json-schema.js.map +0 -1
  271. package/dist/cjs/modules/swagger/utils/helpers/get-swagger-default-configs.js +0 -72
  272. package/dist/cjs/modules/swagger/utils/helpers/get-swagger-default-configs.js.map +0 -1
  273. package/dist/cjs/modules/swagger/utils/helpers/openapi-schema-converter.js +0 -333
  274. package/dist/cjs/modules/swagger/utils/helpers/openapi-schema-converter.js.map +0 -1
  275. package/dist/cjs/package.json +0 -3
  276. package/dist/cjs/server.js +0 -60
  277. package/dist/cjs/server.js.map +0 -1
  278. package/dist/cjs/types/arkos-config/utils.js +0 -3
  279. package/dist/cjs/types/arkos-config/utils.js.map +0 -1
  280. package/dist/cjs/types/arkos-prisma-input.js +0 -3
  281. package/dist/cjs/types/arkos-prisma-input.js.map +0 -1
  282. package/dist/cjs/types/arkos.js +0 -3
  283. package/dist/cjs/types/arkos.js.map +0 -1
  284. package/dist/cjs/types/auth.js +0 -3
  285. package/dist/cjs/types/auth.js.map +0 -1
  286. package/dist/cjs/types/index.js +0 -3
  287. package/dist/cjs/types/index.js.map +0 -1
  288. package/dist/cjs/types/new-arkos-config.js +0 -3
  289. package/dist/cjs/types/new-arkos-config.js.map +0 -1
  290. package/dist/cjs/types/router-config.js +0 -3
  291. package/dist/cjs/types/router-config.js.map +0 -1
  292. package/dist/cjs/types/upload.js +0 -3
  293. package/dist/cjs/types/upload.js.map +0 -1
  294. package/dist/cjs/types/validation/validation-manager.js +0 -55
  295. package/dist/cjs/types/validation/validation-manager.js.map +0 -1
  296. package/dist/cjs/types/validation/validator.js +0 -3
  297. package/dist/cjs/types/validation/validator.js.map +0 -1
  298. package/dist/cjs/utils/arkos-env.js +0 -9
  299. package/dist/cjs/utils/arkos-env.js.map +0 -1
  300. package/dist/cjs/utils/arkos-router/arkos-router-openapi-manager.js +0 -160
  301. package/dist/cjs/utils/arkos-router/arkos-router-openapi-manager.js.map +0 -1
  302. package/dist/cjs/utils/arkos-router/index.js +0 -165
  303. package/dist/cjs/utils/arkos-router/index.js.map +0 -1
  304. package/dist/cjs/utils/arkos-router/route-config-registry.js +0 -16
  305. package/dist/cjs/utils/arkos-router/route-config-registry.js.map +0 -1
  306. package/dist/cjs/utils/arkos-router/route-config-validator.js +0 -56
  307. package/dist/cjs/utils/arkos-router/route-config-validator.js.map +0 -1
  308. package/dist/cjs/utils/arkos-router/types/body-parser-config.js +0 -3
  309. package/dist/cjs/utils/arkos-router/types/body-parser-config.js.map +0 -1
  310. package/dist/cjs/utils/arkos-router/types/index.js +0 -3
  311. package/dist/cjs/utils/arkos-router/types/index.js.map +0 -1
  312. package/dist/cjs/utils/arkos-router/types/openapi-config.js +0 -3
  313. package/dist/cjs/utils/arkos-router/types/openapi-config.js.map +0 -1
  314. package/dist/cjs/utils/arkos-router/types/upload-config.js +0 -3
  315. package/dist/cjs/utils/arkos-router/types/upload-config.js.map +0 -1
  316. package/dist/cjs/utils/arkos-router/utils/helpers/apply-arkos-router-proxy.js +0 -190
  317. package/dist/cjs/utils/arkos-router/utils/helpers/apply-arkos-router-proxy.js.map +0 -1
  318. package/dist/cjs/utils/arkos-router/utils/helpers/index.js +0 -179
  319. package/dist/cjs/utils/arkos-router/utils/helpers/index.js.map +0 -1
  320. package/dist/cjs/utils/arkos-router/utils/helpers/upload-manager.js +0 -560
  321. package/dist/cjs/utils/arkos-router/utils/helpers/upload-manager.js.map +0 -1
  322. package/dist/cjs/utils/bundler.js +0 -163
  323. package/dist/cjs/utils/bundler.js.map +0 -1
  324. package/dist/cjs/utils/cli/build.js +0 -208
  325. package/dist/cjs/utils/cli/build.js.map +0 -1
  326. package/dist/cjs/utils/cli/dev.js +0 -131
  327. package/dist/cjs/utils/cli/dev.js.map +0 -1
  328. package/dist/cjs/utils/cli/export-auth-action.js +0 -80
  329. package/dist/cjs/utils/cli/export-auth-action.js.map +0 -1
  330. package/dist/cjs/utils/cli/generate.js +0 -333
  331. package/dist/cjs/utils/cli/generate.js.map +0 -1
  332. package/dist/cjs/utils/cli/index.js +0 -259
  333. package/dist/cjs/utils/cli/index.js.map +0 -1
  334. package/dist/cjs/utils/cli/prisma-generate.js +0 -112
  335. package/dist/cjs/utils/cli/prisma-generate.js.map +0 -1
  336. package/dist/cjs/utils/cli/start.js +0 -83
  337. package/dist/cjs/utils/cli/start.js.map +0 -1
  338. package/dist/cjs/utils/cli/utils/cli.helpers.js +0 -24
  339. package/dist/cjs/utils/cli/utils/cli.helpers.js.map +0 -1
  340. package/dist/cjs/utils/cli/utils/runtime-cli-commander.js +0 -118
  341. package/dist/cjs/utils/cli/utils/runtime-cli-commander.js.map +0 -1
  342. package/dist/cjs/utils/cli/utils/smart-fs-watcher.js +0 -73
  343. package/dist/cjs/utils/cli/utils/smart-fs-watcher.js.map +0 -1
  344. package/dist/cjs/utils/cli/utils/template-generator/templates/class-validator-dto-generator.js +0 -846
  345. package/dist/cjs/utils/cli/utils/template-generator/templates/class-validator-dto-generator.js.map +0 -1
  346. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-controller-template.js +0 -64
  347. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-controller-template.js.map +0 -1
  348. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-multiple-components.js +0 -242
  349. package/dist/cjs/utils/cli/utils/template-generator/templates/generate-multiple-components.js.map +0 -1
  350. package/dist/cjs/utils/cli/utils/template-generator/templates/policy-template.js +0 -51
  351. package/dist/cjs/utils/cli/utils/template-generator/templates/policy-template.js.map +0 -1
  352. package/dist/cjs/utils/cli/utils/template-generator/templates/router-template.js +0 -23
  353. package/dist/cjs/utils/cli/utils/template-generator/templates/router-template.js.map +0 -1
  354. package/dist/cjs/utils/cli/utils/template-generator/templates/service-template.js +0 -50
  355. package/dist/cjs/utils/cli/utils/template-generator/templates/service-template.js.map +0 -1
  356. package/dist/cjs/utils/cli/utils/template-generator/templates/zod-schema-generator.js +0 -545
  357. package/dist/cjs/utils/cli/utils/template-generator/templates/zod-schema-generator.js.map +0 -1
  358. package/dist/cjs/utils/cli/utils/template-generators.js +0 -62
  359. package/dist/cjs/utils/cli/utils/template-generators.js.map +0 -1
  360. package/dist/cjs/utils/cli/utils/watermark-stamper.js +0 -26
  361. package/dist/cjs/utils/cli/utils/watermark-stamper.js.map +0 -1
  362. package/dist/cjs/utils/define-config.js +0 -60
  363. package/dist/cjs/utils/define-config.js.map +0 -1
  364. package/dist/cjs/utils/docs-links.js +0 -5
  365. package/dist/cjs/utils/docs-links.js.map +0 -1
  366. package/dist/cjs/utils/dotenv.helpers.js +0 -46
  367. package/dist/cjs/utils/dotenv.helpers.js.map +0 -1
  368. package/dist/cjs/utils/dynamic-loader.js +0 -22
  369. package/dist/cjs/utils/dynamic-loader.js.map +0 -1
  370. package/dist/cjs/utils/expand-env.js +0 -72
  371. package/dist/cjs/utils/expand-env.js.map +0 -1
  372. package/dist/cjs/utils/features/api.features.js +0 -216
  373. package/dist/cjs/utils/features/api.features.js.map +0 -1
  374. package/dist/cjs/utils/features/port-and-host-allocator.js +0 -129
  375. package/dist/cjs/utils/features/port-and-host-allocator.js.map +0 -1
  376. package/dist/cjs/utils/helpers/api.features.helpers.js +0 -347
  377. package/dist/cjs/utils/helpers/api.features.helpers.js.map +0 -1
  378. package/dist/cjs/utils/helpers/arkos-config.helpers.js +0 -106
  379. package/dist/cjs/utils/helpers/arkos-config.helpers.js.map +0 -1
  380. package/dist/cjs/utils/helpers/change-case.helpers.js +0 -177
  381. package/dist/cjs/utils/helpers/change-case.helpers.js.map +0 -1
  382. package/dist/cjs/utils/helpers/deepmerge.helper.js +0 -115
  383. package/dist/cjs/utils/helpers/deepmerge.helper.js.map +0 -1
  384. package/dist/cjs/utils/helpers/exit-error.js +0 -13
  385. package/dist/cjs/utils/helpers/exit-error.js.map +0 -1
  386. package/dist/cjs/utils/helpers/fs.helpers.js +0 -52
  387. package/dist/cjs/utils/helpers/fs.helpers.js.map +0 -1
  388. package/dist/cjs/utils/helpers/global.helpers.js +0 -106
  389. package/dist/cjs/utils/helpers/global.helpers.js.map +0 -1
  390. package/dist/cjs/utils/helpers/prisma.helpers.js +0 -56
  391. package/dist/cjs/utils/helpers/prisma.helpers.js.map +0 -1
  392. package/dist/cjs/utils/helpers/query-parser.helpers.js +0 -69
  393. package/dist/cjs/utils/helpers/query-parser.helpers.js.map +0 -1
  394. package/dist/cjs/utils/helpers/routers.helpers.js +0 -36
  395. package/dist/cjs/utils/helpers/routers.helpers.js.map +0 -1
  396. package/dist/cjs/utils/helpers/text.helpers.js +0 -28
  397. package/dist/cjs/utils/helpers/text.helpers.js.map +0 -1
  398. package/dist/cjs/utils/helpers/url-helpers.js +0 -14
  399. package/dist/cjs/utils/helpers/url-helpers.js.map +0 -1
  400. package/dist/cjs/utils/initialize-app.js +0 -80
  401. package/dist/cjs/utils/initialize-app.js.map +0 -1
  402. package/dist/cjs/utils/prisma/prisma-json-schema-generator.js +0 -366
  403. package/dist/cjs/utils/prisma/prisma-json-schema-generator.js.map +0 -1
  404. package/dist/cjs/utils/prisma/prisma-schema-parser.js +0 -380
  405. package/dist/cjs/utils/prisma/prisma-schema-parser.js.map +0 -1
  406. package/dist/cjs/utils/prisma/types.js +0 -3
  407. package/dist/cjs/utils/prisma/types.js.map +0 -1
  408. package/dist/cjs/utils/remove-dir.js +0 -14
  409. package/dist/cjs/utils/remove-dir.js.map +0 -1
  410. package/dist/cjs/utils/setup-app.js +0 -136
  411. package/dist/cjs/utils/setup-app.js.map +0 -1
  412. package/dist/cjs/utils/sheu.js +0 -131
  413. package/dist/cjs/utils/sheu.js.map +0 -1
  414. package/dist/cjs/utils/validate-dto.js +0 -19
  415. package/dist/cjs/utils/validate-dto.js.map +0 -1
  416. package/dist/cjs/utils/validate-schema.js +0 -75
  417. package/dist/cjs/utils/validate-schema.js.map +0 -1
  418. package/dist/esm/components/arkos-loadable-translator/index.js +0 -138
  419. package/dist/esm/components/arkos-loadable-translator/index.js.map +0 -1
  420. package/dist/esm/components/arkos-service-hook/index.js +0 -32
  421. package/dist/esm/components/arkos-service-hook/index.js.map +0 -1
  422. package/dist/esm/components/arkos-service-hook/reader.js +0 -24
  423. package/dist/esm/components/arkos-service-hook/reader.js.map +0 -1
  424. package/dist/esm/components/arkos-service-hook/types.js +0 -2
  425. package/dist/esm/components/arkos-service-hook/types.js.map +0 -1
  426. package/dist/esm/modules/base/utils/service-hooks-manager.js +0 -17
  427. package/dist/esm/modules/base/utils/service-hooks-manager.js.map +0 -1
  428. package/dist/types/components/arkos-loadable-translator/index.d.ts +0 -53
  429. package/dist/types/components/arkos-service-hook/index.d.ts +0 -41
  430. package/dist/types/components/arkos-service-hook/reader.d.ts +0 -35
  431. package/dist/types/components/arkos-service-hook/types.d.ts +0 -219
  432. package/dist/types/modules/base/utils/service-hooks-manager.d.ts +0 -10
@@ -1 +1 @@
1
- {"version":3,"file":"auth.controller.js","sourceRoot":"","sources":["../../../../src/modules/auth/auth.controller.ts"],"names":[],"mappings":"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","sourcesContent":["import catchAsync from \"../error-handler/utils/catch-async\";\nimport AppError from \"../error-handler/utils/app-error\";\nimport { ArkosRequest, ArkosResponse, ArkosNextFunction } from \"../../types\";\nimport authService from \"./auth.service\";\nimport { ArkosPrismaService } from \"../base/base.service\";\nimport { User } from \"../../types\";\nimport { getArkosConfig } from \"../../server\";\nimport {\n createPrismaWhereClause,\n determineUsernameField,\n getNestedValue,\n} from \"./utils/helpers/auth.controller.helpers\";\nimport authActionService from \"./utils/services/auth-action.service\";\nimport { routeHookReader } from \"../../components/arkos-route-hook/reader\";\n\n/**\n * Default fields to exclude from user object when returning to client\n */\nexport const defaultExcludedUserFields = {\n password: false,\n};\n\n/**\n * Authentication controller class handling all auth-related operations\n */\nexport class AuthController {\n private userService?: ArkosPrismaService<\"user\">;\n\n private getUserService() {\n if (!this.userService) this.userService = new ArkosPrismaService(\"user\");\n return this.userService;\n }\n\n /**\n * Retrieves the current authenticated user's information\n */\n getMe = catchAsync(\n async (req: ArkosRequest, res: ArkosResponse, next: ArkosNextFunction) => {\n const user = (await this.getUserService().findOne(\n { id: req.user!.id },\n req.prismaQueryOptions || {}\n )) as Record<string, any>;\n\n Object.keys(defaultExcludedUserFields).forEach((key) => {\n if (user) delete user[key as keyof User];\n });\n\n if (routeHookReader.getHooks(\"auth\", \"getMe\")?.after) {\n (res as any).originalData = { data: user };\n req.responseData = { data: user };\n res.locals.data = { data: user };\n (res as any).originalStatus = 200;\n req.responseStatus = 200;\n res.locals.status = 200;\n return next();\n }\n\n res.status(200).json({ data: user });\n }\n );\n\n /**\n * Updates the current authenticated user's information\n */\n updateMe = catchAsync(\n async (req: ArkosRequest, res: ArkosResponse, next: ArkosNextFunction) => {\n if (\"password\" in req.body)\n throw new AppError(\n \"In order to update password use the update-password endpoint.\",\n 400,\n \"InvalidFieldPassword\"\n );\n\n const user = (await this.getUserService().updateOne(\n { id: req.user!.id },\n req.body,\n req.prismaQueryOptions || {}\n )) as Record<string, any>;\n\n Object.keys(defaultExcludedUserFields).forEach((key) => {\n if (user) delete user[key as keyof User];\n });\n\n if (routeHookReader.getHooks(\"auth\", \"updateMe\")?.after) {\n (res as any).originalData = { data: user };\n req.responseData = { data: user };\n res.locals.data = { data: user };\n (res as any).originalStatus = 200;\n req.responseStatus = 200;\n res.locals.status = 200;\n return next();\n }\n\n res.status(200).json({ data: user });\n }\n );\n\n /**\n * Logs out the current user by invalidating their access token cookie\n */\n logout = catchAsync(\n async (req: ArkosRequest, res: ArkosResponse, next: ArkosNextFunction) => {\n res.cookie(\"arkos_access_token\", \"no-token\", {\n expires: new Date(Date.now() + 10 * 1000),\n httpOnly: true,\n });\n\n if (routeHookReader.getHooks(\"auth\", \"logout\")?.after) {\n (res as any).originalData = null;\n req.responseData = null;\n res.locals.data = null;\n (res as any).originalStatus = 204;\n req.responseStatus = 204;\n res.locals.status = 204;\n return next();\n }\n\n res.status(204).json();\n }\n );\n\n /**\n * Authenticates a user using configurable username field and password\n */\n login = catchAsync(\n async (req: ArkosRequest, res: ArkosResponse, next: ArkosNextFunction) => {\n const authConfigs = getArkosConfig()?.authentication;\n\n const usernameField = determineUsernameField(req);\n\n const lastField =\n usernameField.split(\".\")[usernameField.split(\".\").length - 1];\n\n const usernameValue = req.body[lastField];\n const { password } = req.body;\n\n if (!usernameValue || !password)\n return next(\n new AppError(\n `Please provide both ${lastField} and password`,\n 400,\n `MissingCredentialFields`\n )\n );\n\n let whereClause: Record<string, any>;\n\n if (usernameField?.includes?.(\".\")) {\n const valueToFind = getNestedValue(req.body, usernameField);\n if (valueToFind === undefined) {\n return next(new AppError(`Invalid ${usernameField} provided`, 400));\n }\n whereClause = createPrismaWhereClause(usernameField, valueToFind);\n } else {\n whereClause = { [usernameField]: usernameValue };\n }\n\n const user = (await this.getUserService().findOne(\n whereClause,\n req.prismaQueryOptions || {}\n )) as Record<string, any>;\n\n if (\n !user ||\n !(await authService.isCorrectPassword(password, user.password))\n ) {\n return next(\n new AppError(\n `Incorrect ${lastField} or password`,\n 401,\n `IncorrectCredentials`\n )\n );\n }\n\n const token = authService.signJwtToken(user.id!);\n const cookieOptions = authService.getJwtCookieOptions(req);\n\n if (\n authConfigs?.login?.sendAccessTokenThrough === \"response-only\" ||\n authConfigs?.login?.sendAccessTokenThrough === \"both\" ||\n !authConfigs?.login?.sendAccessTokenThrough\n ) {\n req.responseData = { accessToken: token };\n res.locals.data = { accessToken: token };\n }\n\n if (\n authConfigs?.login?.sendAccessTokenThrough === \"cookie-only\" ||\n authConfigs?.login?.sendAccessTokenThrough === \"both\" ||\n !authConfigs?.login?.sendAccessTokenThrough\n )\n res.cookie(\"arkos_access_token\", token, cookieOptions);\n\n req.accessToken = token;\n\n if (routeHookReader.getHooks(\"auth\", \"login\")?.after) {\n (res as any).originalData = req.responseData;\n req.additionalData = { user };\n res.locals.additional = { user };\n (res as any).originalStatus = 200;\n req.responseStatus = 200;\n res.locals.status = 200;\n return next();\n }\n\n if (\n authConfigs?.login?.sendAccessTokenThrough === \"response-only\" ||\n authConfigs?.login?.sendAccessTokenThrough === \"both\" ||\n !authConfigs?.login?.sendAccessTokenThrough\n ) {\n res.status(200).json(req.responseData);\n } else if (\n authConfigs?.login?.sendAccessTokenThrough === \"cookie-only\" ||\n authConfigs?.login?.sendAccessTokenThrough === \"both\" ||\n !authConfigs?.login?.sendAccessTokenThrough\n )\n res.status(200).send();\n }\n );\n\n /**\n * Creates a new user account\n */\n signup = catchAsync(\n async (req: ArkosRequest, res: ArkosResponse, next: ArkosNextFunction) => {\n const user = (await this.getUserService().createOne(\n req.body,\n req.prismaQueryOptions || {}\n )) as Record<string, any>;\n\n if (routeHookReader.getHooks(\"auth\", \"signup\")?.after) {\n (res as any).originalData = { data: user };\n req.responseData = { data: user };\n res.locals.data = { data: user };\n (res as any).originalStatus = 201;\n req.responseStatus = 201;\n res.locals.status = 201;\n return next();\n }\n\n Object.keys(defaultExcludedUserFields).forEach((key) => {\n delete user[key as keyof User];\n });\n\n res.status(201).json({ data: user });\n }\n );\n\n /**\n * Marks user account as self-deleted\n */\n deleteMe = catchAsync(\n async (req: ArkosRequest, res: ArkosResponse, next: ArkosNextFunction) => {\n const userId = req.user!.id;\n\n const updatedUser = (await this.getUserService().updateOne(\n { id: userId },\n { deletedSelfAccountAt: new Date().toISOString() },\n req.prismaQueryOptions || {}\n )) as Record<string, any>;\n\n if (routeHookReader.getHooks(\"auth\", \"deleteMe\")?.after) {\n (res as any).originalData = { data: updatedUser };\n req.responseData = { data: updatedUser };\n res.locals.data = { data: updatedUser };\n (res as any).originalStatus = 200;\n req.responseStatus = 200;\n res.locals.status = 200;\n return next();\n }\n\n Object.keys(defaultExcludedUserFields).forEach((key) => {\n delete updatedUser[key as keyof User];\n });\n\n res.status(200).json({ message: \"Account deleted successfully\" });\n }\n );\n\n /**\n * Updates the password of the authenticated user\n */\n updatePassword = catchAsync(\n async (req: ArkosRequest, res: ArkosResponse, next: ArkosNextFunction) => {\n const { currentPassword, newPassword } = req.body;\n\n if (!currentPassword || !newPassword)\n return next(\n new AppError(\n \"currentPassword and newPassword are required\",\n 400,\n \"SameCurrentAndNewPassword\"\n )\n );\n\n const user = req.user;\n\n if (!user || user?.isActive === false || user?.deletedSelfAccountAt)\n return next(new AppError(\"User not found!\", 404));\n\n const isPasswordCorrect = await authService.isCorrectPassword(\n String(currentPassword),\n String(user.password)\n );\n\n const configs = getArkosConfig();\n const initAuthConfigs = configs?.authentication;\n\n if (!isPasswordCorrect)\n return next(\n new AppError(\n \"Current password is incorrect\",\n 400,\n \"IncorrentCurrentPassword\"\n )\n );\n\n if (\n !authService.isPasswordStrong(String(newPassword)) &&\n !configs?.validation\n ) {\n return next(\n new AppError(\n initAuthConfigs?.passwordValidation?.message ||\n \"The new password must contain at least one uppercase letter, one lowercase letter, and one number\",\n 400,\n \"PasswordDoesNotMeetRequirements\"\n )\n );\n }\n\n await this.getUserService().updateOne(\n { id: user.id },\n {\n password: await authService.hashPassword(newPassword),\n passwordChangedAt: new Date(Date.now()).toISOString(),\n }\n );\n\n const token = authService.signJwtToken(user.id!);\n const cookieOptions = authService.getJwtCookieOptions(req);\n const authConfigs = getArkosConfig()?.authentication;\n\n const responseData: Record<string, string> = {\n status: \"success\",\n message: \"Password updated successfully!\",\n };\n\n if (\n authConfigs?.login?.sendAccessTokenThrough === \"response-only\" ||\n authConfigs?.login?.sendAccessTokenThrough === \"both\" ||\n !authConfigs?.login?.sendAccessTokenThrough\n ) {\n responseData.accessToken = token;\n }\n\n if (\n authConfigs?.login?.sendAccessTokenThrough === \"cookie-only\" ||\n authConfigs?.login?.sendAccessTokenThrough === \"both\" ||\n !authConfigs?.login?.sendAccessTokenThrough\n )\n res.cookie(\"arkos_access_token\", token, cookieOptions);\n\n req.accessToken = token;\n\n if (routeHookReader.getHooks(\"auth\", \"updatePassword\")?.after) {\n (res as any).originalData = responseData;\n req.additionalData = { user };\n req.responseData = responseData;\n res.locals.data = responseData;\n (res as any).originalStatus = 200;\n req.responseStatus = 200;\n res.locals.status = 200;\n return next();\n }\n\n res.status(200).json(responseData);\n }\n );\n\n findManyAuthAction = catchAsync(\n async (_: ArkosRequest, res: ArkosResponse) => {\n const arkosConfig = getArkosConfig();\n const authActions = authActionService.getAll()?.map((authAction) => {\n if (arkosConfig?.authentication?.mode === \"dynamic\")\n delete (authAction as any)?.roles;\n return authAction;\n });\n\n res.json({\n total: authActions.length,\n results: authActions.length,\n data: authActions,\n });\n }\n );\n\n findOneAuthAction = catchAsync(\n async (req: ArkosRequest, res: ArkosResponse) => {\n const arkosConfig = getArkosConfig();\n const resourceName = req.params?.resourceName;\n\n if (!resourceName)\n throw new AppError(\n `Please provide a resoureName`,\n 400,\n \"MissiongResourseName\"\n );\n\n const authActions = authActionService\n .getByResource(req.params?.resourceName)\n ?.map((authAction) => {\n if (arkosConfig?.authentication?.mode === \"dynamic\")\n delete (authAction as any)?.roles;\n return authAction;\n });\n\n if (!authActions)\n throw new AppError(\n `No auth action with resource name ${resourceName}`,\n 404,\n \"AuthActionNotFound\"\n );\n\n res.json({\n total: authActions.length,\n results: authActions.length,\n data: authActions,\n });\n }\n );\n}\n\nexport const authController = new AuthController();\n\nexport default authController;\n"]}
1
+ {"version":3,"file":"auth.controller.js","sourceRoot":"","sources":["../../../../src/modules/auth/auth.controller.ts"],"names":[],"mappings":"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","sourcesContent":["import catchAsync from \"../error-handler/utils/catch-async\";\nimport AppError from \"../error-handler/utils/app-error\";\nimport { ArkosRequest, ArkosResponse, ArkosNextFunction } from \"../../types\";\nimport authService from \"./auth.service\";\nimport { ArkosPrismaService } from \"../base/base.service\";\nimport { User } from \"../../types\";\nimport { getArkosConfig } from \"../../server\";\nimport {\n createPrismaWhereClause,\n determineUsernameField,\n getNestedValue,\n} from \"./utils/helpers/auth.controller.helpers\";\nimport authActionService from \"./utils/services/auth-action.service\";\nimport { routeHookReader } from \"../../components/arkos-route-hook/reader\";\n\n/**\n * Default fields to exclude from user object when returning to client\n */\nexport const defaultExcludedUserFields = {\n password: false,\n};\n\n/**\n * Authentication controller class handling all auth-related operations\n */\nexport class AuthController {\n private userService?: ArkosPrismaService<\"user\">;\n\n private getUserService() {\n if (!this.userService) this.userService = new ArkosPrismaService(\"user\");\n return this.userService;\n }\n\n /**\n * Retrieves the current authenticated user's information\n */\n getMe = catchAsync(\n async (req: ArkosRequest, res: ArkosResponse, next: ArkosNextFunction) => {\n const user = (await this.getUserService().findOne(\n { id: req.user!.id },\n req.prismaQueryOptions || {}\n )) as Record<string, any>;\n\n Object.keys(defaultExcludedUserFields).forEach((key) => {\n if (user) delete user[key as keyof User];\n });\n\n if (routeHookReader.getHooks(\"auth\", \"getMe\")?.after) {\n (res as any).originalData = { data: user };\n req.responseData = { data: user };\n res.locals.data = { data: user };\n (res as any).originalStatus = 200;\n req.responseStatus = 200;\n res.locals.status = 200;\n return next();\n }\n\n res.status(200).json({ data: user });\n }\n );\n\n /**\n * Updates the current authenticated user's information\n */\n updateMe = catchAsync(\n async (req: ArkosRequest, res: ArkosResponse, next: ArkosNextFunction) => {\n if (\"password\" in req.body)\n throw new AppError(\n \"In order to update password use the update-password endpoint.\",\n 400,\n \"InvalidFieldPassword\"\n );\n\n const user = (await this.getUserService().updateOne(\n { id: req.user!.id },\n req.body,\n req.prismaQueryOptions || {}\n )) as Record<string, any>;\n\n Object.keys(defaultExcludedUserFields).forEach((key) => {\n if (user) delete user[key as keyof User];\n });\n\n if (routeHookReader.getHooks(\"auth\", \"updateMe\")?.after) {\n (res as any).originalData = { data: user };\n req.responseData = { data: user };\n res.locals.data = { data: user };\n (res as any).originalStatus = 200;\n req.responseStatus = 200;\n res.locals.status = 200;\n return next();\n }\n\n res.status(200).json({ data: user });\n }\n );\n\n /**\n * Logs out the current user by invalidating their access token cookie\n */\n logout = catchAsync(\n async (req: ArkosRequest, res: ArkosResponse, next: ArkosNextFunction) => {\n res.cookie(\"arkos_access_token\", \"no-token\", {\n expires: new Date(Date.now() + 10 * 1000),\n httpOnly: true,\n });\n\n if (routeHookReader.getHooks(\"auth\", \"logout\")?.after) {\n (res as any).originalData = null;\n req.responseData = null;\n res.locals.data = null;\n (res as any).originalStatus = 204;\n req.responseStatus = 204;\n res.locals.status = 204;\n return next();\n }\n\n res.status(204).json();\n }\n );\n\n /**\n * Authenticates a user using configurable username field and password\n */\n login = catchAsync(\n async (req: ArkosRequest, res: ArkosResponse, next: ArkosNextFunction) => {\n const authConfigs = getArkosConfig()?.authentication;\n\n const usernameField = determineUsernameField(req);\n\n const lastField =\n usernameField.split(\".\")[usernameField.split(\".\").length - 1];\n\n const usernameValue = req.body[lastField];\n const { password } = req.body;\n\n if (!usernameValue || !password)\n return next(\n new AppError(\n `Please provide both ${lastField} and password`,\n 400,\n `MissingCredentialFields`\n )\n );\n\n let whereClause: Record<string, any>;\n\n if (usernameField?.includes?.(\".\")) {\n const valueToFind = getNestedValue(req.body, usernameField);\n if (valueToFind === undefined) {\n return next(new AppError(`Invalid ${usernameField} provided`, 400));\n }\n whereClause = createPrismaWhereClause(usernameField, valueToFind);\n } else {\n whereClause = { [usernameField]: usernameValue };\n }\n\n const user = (await this.getUserService().findOne(\n whereClause,\n req.prismaQueryOptions || {}\n )) as Record<string, any>;\n\n if (\n !user ||\n !(await authService.isCorrectPassword(password, user.password))\n ) {\n return next(\n new AppError(\n `Incorrect ${lastField} or password`,\n 401,\n `IncorrectCredentials`\n )\n );\n }\n\n const token = authService.signJwtToken(user.id!);\n const cookieOptions = authService.getJwtCookieOptions(req);\n\n if (\n authConfigs?.login?.sendAccessTokenThrough === \"response-only\" ||\n authConfigs?.login?.sendAccessTokenThrough === \"both\" ||\n !authConfigs?.login?.sendAccessTokenThrough\n ) {\n req.responseData = { accessToken: token };\n res.locals.data = { accessToken: token };\n }\n\n if (\n authConfigs?.login?.sendAccessTokenThrough === \"cookie-only\" ||\n authConfigs?.login?.sendAccessTokenThrough === \"both\" ||\n !authConfigs?.login?.sendAccessTokenThrough\n )\n res.cookie(\"arkos_access_token\", token, cookieOptions);\n\n req.accessToken = token;\n\n if (routeHookReader.getHooks(\"auth\", \"login\")?.after) {\n (res as any).originalData = req.responseData;\n req.additionalData = { user };\n res.locals.additional = { user };\n (res as any).originalStatus = 200;\n req.responseStatus = 200;\n res.locals.status = 200;\n return next();\n }\n\n if (\n authConfigs?.login?.sendAccessTokenThrough === \"response-only\" ||\n authConfigs?.login?.sendAccessTokenThrough === \"both\" ||\n !authConfigs?.login?.sendAccessTokenThrough\n ) {\n res.status(200).json(req.responseData);\n } else if (\n authConfigs?.login?.sendAccessTokenThrough === \"cookie-only\" ||\n authConfigs?.login?.sendAccessTokenThrough === \"both\" ||\n !authConfigs?.login?.sendAccessTokenThrough\n )\n res.status(200).send();\n }\n );\n\n /**\n * Creates a new user account\n */\n signup = catchAsync(\n async (req: ArkosRequest, res: ArkosResponse, next: ArkosNextFunction) => {\n const user = (await this.getUserService().createOne(\n req.body,\n req.prismaQueryOptions || {}\n )) as Record<string, any>;\n\n if (routeHookReader.getHooks(\"auth\", \"signup\")?.after) {\n (res as any).originalData = { data: user };\n req.responseData = { data: user };\n res.locals.data = { data: user };\n (res as any).originalStatus = 201;\n req.responseStatus = 201;\n res.locals.status = 201;\n return next();\n }\n\n Object.keys(defaultExcludedUserFields).forEach((key) => {\n delete user[key as keyof User];\n });\n\n res.status(201).json({ data: user });\n }\n );\n\n /**\n * Marks user account as self-deleted\n */\n deleteMe = catchAsync(\n async (req: ArkosRequest, res: ArkosResponse, next: ArkosNextFunction) => {\n const userId = req.user!.id;\n\n const updatedUser = (await this.getUserService().updateOne(\n { id: userId },\n { deletedSelfAccountAt: new Date().toISOString() },\n req.prismaQueryOptions || {}\n )) as Record<string, any>;\n\n if (routeHookReader.getHooks(\"auth\", \"deleteMe\")?.after) {\n (res as any).originalData = { data: updatedUser };\n req.responseData = { data: updatedUser };\n res.locals.data = { data: updatedUser };\n (res as any).originalStatus = 200;\n req.responseStatus = 200;\n res.locals.status = 200;\n return next();\n }\n\n Object.keys(defaultExcludedUserFields).forEach((key) => {\n delete updatedUser[key as keyof User];\n });\n\n res.status(200).json({ message: \"Account deleted successfully\" });\n }\n );\n\n /**\n * Updates the password of the authenticated user\n */\n updatePassword = catchAsync(\n async (req: ArkosRequest, res: ArkosResponse, next: ArkosNextFunction) => {\n const { currentPassword, newPassword } = req.body;\n\n if (!currentPassword || !newPassword)\n return next(\n new AppError(\n \"currentPassword and newPassword are required\",\n 400,\n \"SameCurrentAndNewPassword\"\n )\n );\n\n const user = req.user;\n\n if (!user || user?.isActive === false || user?.deletedSelfAccountAt)\n return next(new AppError(\"User not found!\", 404));\n\n const isPasswordCorrect = await authService.isCorrectPassword(\n String(currentPassword),\n String(user.password)\n );\n\n if (!isPasswordCorrect)\n return next(\n new AppError(\n \"Current password is incorrect\",\n 400,\n \"IncorrentCurrentPassword\"\n )\n );\n\n\n await this.getUserService().updateOne(\n { id: user.id },\n {\n password: await authService.hashPassword(newPassword),\n passwordChangedAt: new Date(Date.now()).toISOString(),\n }\n );\n\n const token = authService.signJwtToken(user.id!);\n const cookieOptions = authService.getJwtCookieOptions(req);\n const authConfigs = getArkosConfig()?.authentication;\n\n const responseData: Record<string, string> = {\n status: \"success\",\n message: \"Password updated successfully!\",\n };\n\n if (\n authConfigs?.login?.sendAccessTokenThrough === \"response-only\" ||\n authConfigs?.login?.sendAccessTokenThrough === \"both\" ||\n !authConfigs?.login?.sendAccessTokenThrough\n ) {\n responseData.accessToken = token;\n }\n\n if (\n authConfigs?.login?.sendAccessTokenThrough === \"cookie-only\" ||\n authConfigs?.login?.sendAccessTokenThrough === \"both\" ||\n !authConfigs?.login?.sendAccessTokenThrough\n )\n res.cookie(\"arkos_access_token\", token, cookieOptions);\n\n req.accessToken = token;\n\n if (routeHookReader.getHooks(\"auth\", \"updatePassword\")?.after) {\n (res as any).originalData = responseData;\n req.additionalData = { user };\n req.responseData = responseData;\n res.locals.data = responseData;\n (res as any).originalStatus = 200;\n req.responseStatus = 200;\n res.locals.status = 200;\n return next();\n }\n\n res.status(200).json(responseData);\n }\n );\n\n findManyAuthAction = catchAsync(\n async (_: ArkosRequest, res: ArkosResponse) => {\n const arkosConfig = getArkosConfig();\n const authActions = authActionService.getAll()?.map((authAction) => {\n if (arkosConfig?.authentication?.mode === \"dynamic\")\n delete (authAction as any)?.roles;\n return authAction;\n });\n\n res.json({\n total: authActions.length,\n results: authActions.length,\n data: authActions,\n });\n }\n );\n\n findOneAuthAction = catchAsync(\n async (req: ArkosRequest, res: ArkosResponse) => {\n const arkosConfig = getArkosConfig();\n const resourceName = req.params?.resourceName;\n\n if (!resourceName)\n throw new AppError(\n `Please provide a resoureName`,\n 400,\n \"MissiongResourseName\"\n );\n\n const authActions = authActionService\n .getByResource(req.params?.resourceName)\n ?.map((authAction) => {\n if (arkosConfig?.authentication?.mode === \"dynamic\")\n delete (authAction as any)?.roles;\n return authAction;\n });\n\n if (!authActions)\n throw new AppError(\n `No auth action with resource name ${resourceName}`,\n 404,\n \"AuthActionNotFound\"\n );\n\n res.json({\n total: authActions.length,\n results: authActions.length,\n data: authActions,\n });\n }\n );\n}\n\nexport const authController = new AuthController();\n\nexport default authController;\n"]}
@@ -2,7 +2,6 @@ import jwt from "jsonwebtoken";
2
2
  import bcrypt from "bcryptjs";
3
3
  import catchAsync from "../error-handler/utils/catch-async.js";
4
4
  import AppError from "../error-handler/utils/app-error.js";
5
- import { callNext } from "../base/base.middlewares.js";
6
5
  import arkosEnv from "../../utils/arkos-env.js";
7
6
  import { getPrismaInstance } from "../../utils/helpers/prisma.helpers.js";
8
7
  import { toMs } from "./utils/helpers/auth.controller.helpers.js";
@@ -13,19 +12,7 @@ import { getUserFileExtension } from "../../utils/helpers/fs.helpers.js";
13
12
  import { authenticationDocsLinks } from "./utils/docs-links.js";
14
13
  import authHookManager from "./utils/auth-hooks-manager.js";
15
14
  export class AuthService {
16
- constructor() {
17
- this.actionsPerResource = {};
18
- this.authenticate = catchAsync(async (req, _, next) => {
19
- await authHookManager.runAuthenticate({ context: req, done: next }, async (req) => {
20
- if (!isAuthenticationEnabled())
21
- return null;
22
- const user = (await this.getAuthenticatedUser(req, req.path.includes("logout") ? "logout" : "default"));
23
- if (!user)
24
- throw loginRequiredError;
25
- return user;
26
- });
27
- });
28
- }
15
+ actionsPerResource = {};
29
16
  signJwtToken(id, expiresIn, secret) {
30
17
  const { authentication: configs } = getArkosConfig();
31
18
  if (process.env.ARKOS_BUILD === "true" &&
@@ -85,12 +72,6 @@ export class AuthService {
85
72
  async hashPassword(password) {
86
73
  return await bcrypt.hash(password, 12);
87
74
  }
88
- isPasswordStrong(password) {
89
- const initAuthConfigs = getArkosConfig()?.authentication;
90
- const strongPasswordRegex = initAuthConfigs?.passwordValidation?.regex ||
91
- /^(?=.*[A-Z])(?=.*[a-z])(?=.*\d).+$/;
92
- return strongPasswordRegex.test(password);
93
- }
94
75
  userChangedPasswordAfter(user, JWTTimestamp) {
95
76
  if (user.passwordChangedAt) {
96
77
  const convertedTimestamp = parseInt(String(new Date(user.passwordChangedAt).getTime() / 1000), 10);
@@ -186,33 +167,6 @@ export class AuthService {
186
167
  return userPermission.effect === "Allow";
187
168
  return !!hasRolePermission;
188
169
  }
189
- handleAccessControl(action, resource, accessControl) {
190
- const authAction = authActionService.add(action, resource, accessControl);
191
- return catchAsync(async (req, _, next) => {
192
- if (req.user) {
193
- const user = req.user;
194
- const configs = getArkosConfig();
195
- if (user.isSuperUser) {
196
- next();
197
- return;
198
- }
199
- const notEnoughPermissionsError = new AppError(authAction.errorMessage, 403, "NotEnoughPermissions");
200
- if (configs?.authentication?.mode === "dynamic") {
201
- const hasPermission = await this.checkDynamicAccessControl(user.id, action, resource);
202
- if (!hasPermission)
203
- return next(notEnoughPermissionsError);
204
- }
205
- else if (configs?.authentication?.mode === "static") {
206
- if (!accessControl)
207
- return next(notEnoughPermissionsError);
208
- const hasPermission = this.checkStaticAccessControl(user, action, accessControl);
209
- if (!hasPermission)
210
- return next(notEnoughPermissionsError);
211
- }
212
- }
213
- next();
214
- });
215
- }
216
170
  extractRequestToken(req, cookie = "arkos_access_token") {
217
171
  let token = null;
218
172
  if (req?.headers?.authorization &&
@@ -255,6 +209,16 @@ export class AuthService {
255
209
  ctx.accessToken = token;
256
210
  return this.validateDecodedUser(decoded, action);
257
211
  }
212
+ authenticate = catchAsync(async (req, _, next) => {
213
+ await authHookManager.runAuthenticate({ context: req, done: next }, async (req) => {
214
+ if (!isAuthenticationEnabled())
215
+ return null;
216
+ const user = (await this.getAuthenticatedUser(req, req.path.includes("logout") ? "logout" : "default"));
217
+ if (!user)
218
+ throw loginRequiredError;
219
+ return user;
220
+ });
221
+ });
258
222
  authorize(action, resource, rule) {
259
223
  const authAction = authActionService.add(action, resource, {
260
224
  [action]: rule,
@@ -263,17 +227,6 @@ export class AuthService {
263
227
  await authHookManager.runAuthorize({ context: req, done: next }, authAction);
264
228
  });
265
229
  }
266
- handleAuthenticationControl(action, authenticationControl) {
267
- if (authenticationControl && typeof authenticationControl === "object") {
268
- if (authenticationControl[action] === false)
269
- return callNext;
270
- else if (authenticationControl[action] === true)
271
- return this.authenticate;
272
- }
273
- else
274
- return this.authenticate;
275
- return this.authenticate;
276
- }
277
230
  permission(action, resource, accessControl) {
278
231
  const stack = new Error().stack;
279
232
  if (stack?.includes("node_modules/express/lib/router/index.js"))
@@ -1 +1 @@
1
- {"version":3,"file":"auth.service.js","sourceRoot":"","sources":["../../../../src/modules/auth/auth.service.ts"],"names":[],"mappings":"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","sourcesContent":["import jwt, { SignOptions } from \"jsonwebtoken\";\nimport bcrypt from \"bcryptjs\";\nimport { User } from \"../../types\";\nimport catchAsync from \"../error-handler/utils/catch-async\";\nimport AppError from \"../error-handler/utils/app-error\";\nimport { callNext } from \"../base/base.middlewares\";\nimport arkosEnv from \"../../utils/arkos-env\";\nimport { getPrismaInstance } from \"../../utils/helpers/prisma.helpers\";\nimport {\n ArkosRequest,\n ArkosResponse,\n ArkosNextFunction,\n ArkosRequestHandler,\n} from \"../../types\";\nimport {\n AuthJwtPayload,\n AccessAction,\n AccessControlConfig,\n AuthenticationControlConfig,\n AccessControlRules,\n DetailedAccessControlRule,\n} from \"../../types/auth\";\nimport { MsDuration, toMs } from \"./utils/helpers/auth.controller.helpers\";\nimport {\n invaliAuthTokenError,\n loginRequiredError,\n} from \"./utils/auth-error-objects\";\nimport authActionService from \"./utils/services/auth-action.service\";\nimport {\n getArkosConfig,\n isAuthenticationEnabled,\n isUsingAuthentication,\n} from \"../../utils/helpers/arkos-config.helpers\";\nimport { CookieOptions } from \"express\";\nimport { getUserFileExtension } from \"../../utils/helpers/fs.helpers\";\nimport { authenticationDocsLinks } from \"./utils/docs-links\";\nimport authHookManager from \"./utils/auth-hooks-manager\";\nimport { ArkosSocket } from \"../../components/arkos-gateway/types\";\n\n/**\n * Handles various authentication-related tasks such as JWT signing, password hashing, and verifying user credentials.\n */\nexport class AuthService {\n /**\n * Object containing a combination of actions per resource, tracked by each set of calls of `authService.handleAccessControl`, this can be accessed through the `authService` object or through the endpoint\n */\n actionsPerResource: Record<string, Set<string>> = {};\n\n /**\n * Signs a JWT token for the user.\n *\n * @param {number | string} id - The unique identifier of the user to generate the token for.\n * @param {string | number} [expiresIn] - The expiration time for the token. Defaults to environment variable `JWT_EXPIRES_IN`.\n * @param {string} [secret] - The secret key used to sign the token. Defaults to environment variable `JWT_SECRET`.\n * @returns {string} The signed JWT token.\n */\n signJwtToken(\n id: number | string,\n expiresIn?: MsDuration | number,\n secret?: string\n ): string {\n const { authentication: configs } = getArkosConfig();\n\n if (\n process.env.ARKOS_BUILD === \"true\" &&\n !process.env.JWT_SECRET &&\n !configs?.jwt?.secret\n )\n throw new AppError(\n \"Missing JWT secret on production!\",\n 500,\n \"MissingJWTOnProduction\"\n );\n\n secret =\n secret ||\n configs?.jwt?.secret ||\n process.env.JWT_SECRET ||\n arkosEnv.JWT_SECRET;\n\n expiresIn = (expiresIn ||\n configs?.jwt?.expiresIn ||\n process.env.JWT_EXPIRES_IN ||\n arkosEnv.JWT_EXPIRES_IN) as keyof SignOptions[\"expiresIn\"];\n\n return jwt.sign({ id }, secret, {\n expiresIn: expiresIn as MsDuration,\n });\n }\n\n /**\n * Retrieves cookie configuration options for JWT authentication.\n *\n * Merges configuration from multiple sources in order of precedence:\n * 1. Arkos configuration file\n * 2. Environment variables\n * 3. Request properties (for secure flag)\n * 4. Default fallback values\n *\n * @param req - ArkosRequest object used to determine if the connection is secure\n * @returns Cookie options object with expires, httpOnly, secure, and sameSite properties\n *\n * @example\n * ```typescript\n * const cookieOptions = authService.getJwtCookieOptions(req);\n * res.cookie('jwt', token, cookieOptions);\n * ```\n */\n getJwtCookieOptions(req: ArkosRequest) {\n const arkosConfig = getArkosConfig();\n const authConfigs = arkosConfig?.authentication;\n\n if (!req)\n throw new Error(\"Missing req object in order get jwt cookie options\");\n\n const sameSite =\n authConfigs?.jwt?.cookie?.sameSite ||\n (process.env.JWT_COOKIE_SAME_SITE as\n | \"none\"\n | \"lax\"\n | \"strict\"\n | undefined) ||\n \"lax\";\n\n return {\n expires: new Date(\n Date.now() +\n Number(\n toMs(\n authConfigs?.jwt?.expiresIn ||\n (process.env.JWT_EXPIRES_IN as MsDuration) ||\n (arkosEnv.JWT_EXPIRES_IN as MsDuration)\n )\n )\n ),\n httpOnly:\n authConfigs?.jwt?.cookie?.httpOnly ??\n (process.env.JWT_COOKIE_HTTP_ONLY !== undefined\n ? process.env.JWT_COOKIE_HTTP_ONLY === \"true\"\n : undefined) ??\n true,\n secure: (() => {\n if (authConfigs?.jwt?.cookie?.secure !== undefined)\n return authConfigs?.jwt?.cookie?.secure;\n else if (process.env.JWT_COOKIE_SECURE !== undefined)\n return process.env.JWT_COOKIE_SECURE === \"true\";\n else return req.secure || req.headers[\"x-forwarded-proto\"] === \"https\";\n })(),\n sameSite,\n domain: authConfigs?.jwt?.cookie?.domain || process.env.JWT_COOKIE_DOMAIN,\n ...arkosConfig?.authentication?.jwt?.cookie,\n } as CookieOptions;\n }\n\n /**\n * Is used by default internally by Arkos under `ArkosPrismaService` class to check if the password is already hashed.\n *\n * This was just added to prevent unwanted errors when someone just forgets that the `ArkosPrismaService` class will automatically hash the password field using `authService.hashPassword` by default.\n *\n * So now before `ArkosPrismaService` hashes it will test it.\n *\n *\n * @param password The password to be tested if is hashed\n * @returns\n */\n isPasswordHashed(password: string) {\n return !Number.isNaN(bcrypt.getRounds(password) * 1);\n }\n\n /**\n * Compares a candidate password with the stored user password to check if they match.\n *\n * @param {string} candidatePassword - The password provided by the user during login.\n * @param {string} userPassword - The password stored in the database.\n * @returns {Promise<boolean>} Returns true if the passwords match, otherwise false.\n */\n async isCorrectPassword(\n candidatePassword: string,\n userPassword: string\n ): Promise<boolean> {\n return await bcrypt.compare(candidatePassword, userPassword);\n }\n\n /**\n * Hashes a plain text password using bcrypt.\n *\n * @param {string} password - The password to be hashed.\n * @returns {Promise<string>} Returns the hashed password.\n */\n async hashPassword(password: string): Promise<string> {\n return await bcrypt.hash(password, 12);\n }\n\n /**\n * Checks if a password is strong, requiring uppercase, lowercase, and numeric characters as the default.\n *\n * **NB**: You must pay attention when using custom validation with zod or class-validator, try to use the same regex always.\n *\n * **Note**: You can define it when calling arkos.init()\n * ```ts\n * arkos.init({\n * authentication: {\n * passwordValidation:{ regex: /your-desired-regex/, message: 'password must contain...'}\n * }\n * })\n * ```\n *\n * @param {string} password - The password to check.\n * @returns {boolean} Returns true if the password meets the strength criteria, otherwise false.\n */\n public isPasswordStrong(password: string): boolean {\n const initAuthConfigs = getArkosConfig()?.authentication;\n\n const strongPasswordRegex =\n initAuthConfigs?.passwordValidation?.regex ||\n /^(?=.*[A-Z])(?=.*[a-z])(?=.*\\d).+$/;\n return strongPasswordRegex.test(password);\n }\n\n /**\n * Checks if a user has changed their password after the JWT was issued.\n *\n * @param {User} user - The user object containing the passwordChangedAt field.\n * @param {number} JWTTimestamp - The timestamp when the JWT was issued.\n * @returns {boolean} Returns true if the user changed their password after the JWT was issued, otherwise false.\n */\n userChangedPasswordAfter(user: User, JWTTimestamp: number): boolean {\n if (user.passwordChangedAt) {\n const convertedTimestamp = parseInt(\n String(new Date(user.passwordChangedAt).getTime() / 1000),\n 10\n );\n\n return JWTTimestamp < convertedTimestamp;\n }\n return false;\n }\n\n /**\n * Verifies the authenticity of a JWT token.\n *\n * @param {string} token - The JWT token to verify.\n * @param {string} [secret] - The secret key used to verify the token. Defaults to environment variable `JWT_SECRET`.\n * @returns {Promise<AuthJwtPayload>} Returns the decoded JWT payload if the token is valid.\n * @throws {Error} Throws an error if the token is invalid or expired.\n */\n async verifyJwtToken(\n token: string,\n secret?: string\n ): Promise<AuthJwtPayload> {\n const { authentication: configs } = getArkosConfig();\n\n if (\n process.env.ARKOS_BUILD === \"true\" &&\n !process.env.JWT_SECRET &&\n !configs?.jwt?.secret\n )\n throw new AppError(\n \"Missing JWT secret in production\",\n 500,\n \"MissingJWTSecretInProduction\"\n );\n\n secret =\n secret ||\n configs?.jwt?.secret ||\n process.env.JWT_SECRET ||\n arkosEnv.JWT_SECRET;\n\n try {\n const decoded = (await new Promise((resolve, reject) => {\n jwt.verify(token, secret, (err, decoded) => {\n if (err) reject(err);\n else resolve(decoded as AuthJwtPayload);\n });\n })) as AuthJwtPayload;\n\n if (!decoded?.id) throw invaliAuthTokenError;\n\n return decoded;\n } catch (err) {\n throw invaliAuthTokenError;\n }\n }\n\n private isWildcardAccess(config: AccessControlConfig): config is \"*\" {\n return config === \"*\";\n }\n\n private isRoleList(config: AccessControlConfig): config is string[] {\n return Array.isArray(config);\n }\n\n private isAccessRules(\n config: AccessControlConfig\n ): config is Partial<AccessControlRules> {\n return (\n typeof config === \"object\" && config !== null && !Array.isArray(config)\n );\n }\n\n private normalizeRuleToRoles(\n rule: string[] | DetailedAccessControlRule | \"*\" | undefined\n ): string[] {\n if (!rule) return [];\n if (rule === \"*\") return [\"*\"];\n if (Array.isArray(rule)) return rule;\n return rule.roles === \"*\" ? [\"*\"] : (rule.roles ?? []);\n }\n\n private resolveAuthorizedRoles(\n action: AccessAction,\n accessControl: AccessControlConfig\n ): string[] {\n if (this.isWildcardAccess(accessControl)) return [\"*\"];\n if (this.isRoleList(accessControl)) return accessControl;\n if (this.isAccessRules(accessControl))\n return this.normalizeRuleToRoles(accessControl[action]);\n return [];\n }\n\n /**\n * Checks if a user has permission for a specific action using static access control rules.\n * Validates user roles against predefined access control configuration.\n *\n * @param user - The user object containing role or roles field\n * @param action - The action being performed\n * @param accessControl - Access control configuration (array of roles or object with action-role mappings)\n * @returns True if user has permission, false otherwise\n * @throws Error if user doesn't have role/roles field\n */\n checkStaticAccessControl(\n user: User,\n action: string,\n accessControl: AccessControlConfig\n ) {\n if (!user?.role && !user.roles)\n throw Error(\n \"Validation Error: In order to use static authentication user needs at least role field or roles for multiple roles.\"\n );\n\n let authorizedRoles = this.resolveAuthorizedRoles(action, accessControl);\n\n const userRoles = Array.isArray(user?.roles) ? user.roles : [user.role];\n\n return (\n authorizedRoles?.[0] === \"*\" ||\n !!userRoles.some((role: string) => authorizedRoles.includes(role))\n );\n }\n\n /**\n * Checks if a user has permission for a specific action and resource using dynamic access control.\n * Queries the database to verify user's role permissions.\n *\n * @param userId - The unique identifier of the user\n * @param action - The action being performed\n * @param resource - The resource being accessed\n * @returns Promise resolving to true if user has permission, false otherwise\n */\n async checkDynamicAccessControl(\n userId: string,\n action: string,\n resource: string\n ) {\n const prisma = getPrismaInstance();\n\n const [userPermission, hasRolePermission] = await Promise.all([\n prisma.userPermission\n ? prisma.userPermission.findFirst({\n where: { userId, permission: { resource, action } },\n select: { effect: true },\n })\n : Promise.resolve(null),\n\n prisma.userRole.findFirst({\n where: {\n userId,\n role: {\n permissions: {\n some: { resource, action },\n },\n },\n },\n select: { id: true },\n }),\n ]);\n\n if (userPermission) return userPermission.effect === \"Allow\";\n return !!hasRolePermission;\n }\n\n /**\n * Middleware function to handle access control based on user roles and permissions.\n *\n * @param {AccessAction} action - The action being performed (e.g., create, update, delete, view).\n * @param {string} resource - The resource name that the action is being performed on (e.g., \"User\", \"Post\").\n * @param {AccessControlConfig} accessControl - The access control configuration.\n * @returns {ArkosRequestHandler} The middleware function that checks if the user has permission to perform the action.\n *\n * @deprecated Will be removed on v2.0, use AuthService.authorize instead\n */\n handleAccessControl(\n action: AccessAction,\n resource: string,\n accessControl?: AccessControlConfig\n ): ArkosRequestHandler {\n const authAction = authActionService.add(action, resource, accessControl);\n\n return catchAsync(\n async (req: ArkosRequest, _: ArkosResponse, next: ArkosNextFunction) => {\n if (req.user) {\n const user = req.user as User;\n const configs = getArkosConfig();\n\n if (user.isSuperUser) {\n next();\n return;\n }\n\n const notEnoughPermissionsError = new AppError(\n authAction.errorMessage,\n 403,\n \"NotEnoughPermissions\"\n );\n\n if (configs?.authentication?.mode === \"dynamic\") {\n const hasPermission = await this.checkDynamicAccessControl(\n user.id,\n action,\n resource\n );\n\n if (!hasPermission) return next(notEnoughPermissionsError);\n } else if (configs?.authentication?.mode === \"static\") {\n if (!accessControl) return next(notEnoughPermissionsError);\n\n const hasPermission = this.checkStaticAccessControl(\n user,\n action,\n accessControl\n );\n\n if (!hasPermission) return next(notEnoughPermissionsError);\n }\n }\n\n next();\n }\n );\n }\n\n private extractRequestToken(\n req: ArkosRequest,\n cookie: \"arkos_access_token\" = \"arkos_access_token\"\n ) {\n let token: string | null = null;\n\n if (\n req?.headers?.authorization &&\n req?.headers?.authorization.startsWith(\"Bearer\") &&\n req?.headers?.authorization.split?.(\" \")?.[1]\n )\n token = req?.headers?.authorization.split(\" \")[1];\n\n if (\n !token &&\n req?.cookies?.arkos_access_token !== \"no-token\" &&\n req.cookies\n )\n token = req?.cookies?.[cookie];\n\n return token;\n }\n\n private extractSocketToken(socket: ArkosSocket, key: \"token\" = \"token\") {\n return (\n socket.handshake.auth?.[key] ||\n socket.handshake.headers?.authorization?.replace(\"Bearer \", \"\")\n );\n }\n\n async validateDecodedUser(\n decoded: AuthJwtPayload,\n action: \"logout\" | \"default\" = \"default\"\n ): Promise<User> {\n const prisma = getPrismaInstance();\n const user = await (prisma as any).user.findUnique({\n where: { id: decoded.id },\n });\n\n if (!user)\n throw new AppError(\n \"The user belonging to this token no longer exists\",\n 401,\n \"UserNoLongerExists\"\n );\n\n if (\n action !== \"logout\" &&\n this.userChangedPasswordAfter(user, decoded.iat!)\n )\n throw new AppError(\n \"User recently changed password! Please log in again.\",\n 401,\n \"PasswordChanged\"\n );\n\n return user;\n }\n\n /**\n * Processes the cookies or authoriation token and returns the user.\n *\n * @param ctx | socket\n * @returns {Promise<User | null>} - if authentication is turned off in arkosConfig it returns null\n * @throws {AppError} Throws an error if the token is invalid or the user is not logged in.\n */\n async getAuthenticatedUser(\n ctx: ArkosRequest | ArkosSocket,\n action: \"logout\" | \"default\" = \"default\"\n ): Promise<User | null> {\n if (!isAuthenticationEnabled())\n throw Error(\n `Trying to call authService.getAuthenticatedUser without setting up authentication in arkos.config.${getUserFileExtension()}, see ${authenticationDocsLinks.setup}`\n );\n\n let token: string | null = null;\n\n if (\"headers\" in ctx) token = this.extractRequestToken(ctx);\n else if (\"join\" in ctx) token = this.extractSocketToken(ctx);\n\n if (!token) return null;\n\n const decoded = await this.verifyJwtToken(token);\n ctx.accessToken = token;\n\n return this.validateDecodedUser(decoded, action);\n }\n\n /**\n * Middleware to authenticate the request by extracting and verifying the JWT token and setting `req.user`.\n *\n * Runs `authentication.hooks.authenticate` before/after the authentication logic.\n *\n * Hook execution flow:\n * - `before` hooks run first — call `ctx.skip()` to bypass core logic and jump to `after` hooks,\n * call `ctx.next()` to stop the chain early, or return without calling anything to continue.\n * - Core logic runs — extracts and verifies the JWT token, sets `req.user`.\n * - `after` hooks run — call `ctx.next(err)` to abort or return without calling anything to continue.\n * - `onError` hooks run if core logic throws — call `ctx.skip()` to suppress the error and jump to\n * `after` hooks, or call `ctx.next(err)` to forward it to the global error handler.\n *\n * On custom routes, hooks defined in `arkosConfig` still apply since they are baked into this method.\n *\n * @example\n * ```ts\n * // custom route - hooks still run\n * router.get(\"/custom\", authService.authenticate, handler);\n * ```\n *\n * @example\n * ```ts\n * // skip built-in auth from a before hook\n * before: (ctx) => {\n * ctx.req.user = myCustomAuth(ctx.req);\n * ctx.skip();\n * }\n * ```\n *\n * @see {@link https://www.arkosjs.com/docs/core-concepts/authentication/hooks}\n */\n authenticate = catchAsync(\n async (req: ArkosRequest, _: ArkosResponse, next: ArkosNextFunction) => {\n await authHookManager.runAuthenticate(\n { context: req, done: next },\n async (req): Promise<any> => {\n if (!isAuthenticationEnabled()) return null;\n const user = (await this.getAuthenticatedUser(\n req,\n req.path.includes(\"logout\") ? \"logout\" : \"default\"\n )) as User;\n if (!user) throw loginRequiredError;\n return user;\n }\n );\n }\n );\n\n /**\n * Middleware to authorize the authenticated user for a given action on a resource.\n *\n * Runs `authentication.hooks.authorize` before/after the authorization logic.\n *\n * Hook execution flow:\n * - `before` hooks run first — call `ctx.skip()` to bypass core logic and jump to `after` hooks,\n * call `ctx.next()` to stop the chain early, or return without calling anything to continue.\n * - Core logic runs — checks user role/permissions against the access control rules.\n * - `after` hooks run — call `ctx.next(err)` to abort or return without calling anything to continue.\n * - `onError` hooks run if authorization fails — call `ctx.skip()` to suppress the error and jump to\n * `after` hooks, or call `ctx.next(err)` to forward it to the global error handler.\n *\n * @param resource - The resource being accessed, in kebabCase (e.g. `\"product\"`, `\"cart-item\"`)\n * @param action - The action being performed (e.g. `\"View\"`, `\"Create\"`, `\"Delete\"`)\n * @param rule - Access control rules for this action. Accepts a role list, a wildcard, or a `DetailedAccessControlRule`.\n *\n * @example\n * ```ts\n * router.delete(\"/products/:id\",\n * authService.authenticate,\n * authService.authorize(\"product\", \"Delete\", [\"admin\"]),\n * handler\n * );\n * ```\n *\n * @example\n * ```ts\n * // skip built-in authorization from a before hook\n * before: (ctx) => {\n * ctx.req.user.role = myCustomRoleResolver(ctx.req);\n * ctx.skip();\n * }\n * ```\n *\n * @see {@link https://www.arkosjs.com/docs/core-concepts/authentication/hooks#authorize}\n * @since v1.6.0-beta\n */\n authorize(\n action: AccessAction,\n resource: string,\n rule?: string[] | DetailedAccessControlRule | \"*\"\n ): ArkosRequestHandler {\n const authAction = authActionService.add(action, resource, {\n [action]: rule,\n });\n\n return catchAsync(\n async (req: ArkosRequest, _: ArkosResponse, next: ArkosNextFunction) => {\n await authHookManager.runAuthorize(\n { context: req, done: next },\n authAction\n );\n }\n );\n }\n\n /**\n * Handles authentication control by checking the `authenticationControl` configuration in the `authConfigs`.\n *\n * @param {ControllerActions} action - The action being performed (e.g., create, update, delete, view).\n * @param {AuthenticationControlConfig} authenticationControl - The authentication configuration object.\n * @returns {ArkosRequestHandler} The middleware function that checks if authentication is required.\n *\n * @deprecated Will be removed on v2.0, use AuthService.authenticate instead\n */\n handleAuthenticationControl(\n action: AccessAction,\n authenticationControl?: AuthenticationControlConfig | undefined\n ): ArkosRequestHandler {\n if (authenticationControl && typeof authenticationControl === \"object\") {\n if (authenticationControl[action] === false) return callNext;\n else if (authenticationControl[action] === true) return this.authenticate;\n } else return this.authenticate;\n\n return this.authenticate;\n }\n\n /**\n * Creates a permission checker function for a specific action and resource.\n *\n * PS: This method should be called during application initialization to build permission validators.\n *\n * @see {@link https://www.arkosjs.com/docs/advanced-guide/fine-grained-access-control}\n *\n * @param action - The action to check permission for (e.g., 'View', 'Create', 'Delete')\n * @param resource - The resource being accessed, must be in kebabCase (e.g., 'user', 'cart-item', 'order')\n * @param accessControl - Access control rules (required for static authentication mode), and it is automatically loaded for known modules such as all prisma models, auth and file-upload.\n * @returns A function that takes a user object and returns a boolean indicating permission status\n *\n * @example\n * ```typescript\n * const hasViewProductPermission = await authService.permission('View', 'product');\n *\n * // Later in handler:\n * const canAccess = await hasViewProductPermission(user);\n * if (canAccess) {\n * // User has permission\n * }\n * ```\n */\n permission(\n action: string,\n resource: string,\n accessControl?: AccessControlConfig\n ) {\n // Check if called during request handling (deep call stack indicates handler execution)\n const stack = new Error().stack;\n\n if (stack?.includes(\"node_modules/express/lib/router/index.js\"))\n throw new Error(\n \"authService.permission() should be called during application initialization level.\"\n );\n\n authActionService.add(action, resource, accessControl);\n\n return async (user: User | undefined): Promise<boolean> => {\n // getArkosConfig must not be called the same time as arkos.init()\n const configs = getArkosConfig();\n\n if (!isUsingAuthentication())\n throw Error(\n \"Validation Error: Trying to use authService.permission without setting up authentication.\"\n );\n\n if (!isAuthenticationEnabled()) return false;\n if (!user) throw loginRequiredError;\n if (user?.isSuperUser) return true;\n\n if (configs?.authentication?.mode === \"dynamic\") {\n return await this.checkDynamicAccessControl(user?.id, action, resource);\n } else if (configs?.authentication?.mode === \"static\") {\n return (\n !!accessControl &&\n this.checkStaticAccessControl(user as any, action, accessControl)\n );\n }\n return false;\n };\n }\n}\n\n/**\n * Handles various authentication-related tasks such as JWT signing, password hashing, and verifying user credentials.\n */\nconst authService = new AuthService();\n\nexport default authService;\n"]}
1
+ {"version":3,"file":"auth.service.js","sourceRoot":"","sources":["../../../../src/modules/auth/auth.service.ts"],"names":[],"mappings":"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","sourcesContent":["import jwt, { SignOptions } from \"jsonwebtoken\";\nimport bcrypt from \"bcryptjs\";\nimport { User } from \"../../types\";\nimport catchAsync from \"../error-handler/utils/catch-async\";\nimport AppError from \"../error-handler/utils/app-error\";\nimport arkosEnv from \"../../utils/arkos-env\";\nimport { getPrismaInstance } from \"../../utils/helpers/prisma.helpers\";\nimport {\n ArkosRequest,\n ArkosResponse,\n ArkosNextFunction,\n ArkosRequestHandler,\n} from \"../../types\";\nimport {\n AuthJwtPayload,\n AccessAction,\n AccessControlConfig,\n AccessControlRules,\n DetailedAccessControlRule,\n} from \"../../types/auth\";\nimport { MsDuration, toMs } from \"./utils/helpers/auth.controller.helpers\";\nimport {\n invaliAuthTokenError,\n loginRequiredError,\n} from \"./utils/auth-error-objects\";\nimport authActionService from \"./utils/services/auth-action.service\";\nimport {\n getArkosConfig,\n isAuthenticationEnabled,\n isUsingAuthentication,\n} from \"../../utils/helpers/arkos-config.helpers\";\nimport { CookieOptions } from \"express\";\nimport { getUserFileExtension } from \"../../utils/helpers/fs.helpers\";\nimport { authenticationDocsLinks } from \"./utils/docs-links\";\nimport authHookManager from \"./utils/auth-hooks-manager\";\nimport { ArkosSocket } from \"../../components/arkos-gateway/types\";\n\n/**\n * Handles various authentication-related tasks such as JWT signing, password hashing, and verifying user credentials.\n */\nexport class AuthService {\n /**\n * Object containing a combination of actions per resource, tracked by each set of calls of `authService.handleAccessControl`, this can be accessed through the `authService` object or through the endpoint\n */\n actionsPerResource: Record<string, Set<string>> = {};\n\n /**\n * Signs a JWT token for the user.\n *\n * @param {number | string} id - The unique identifier of the user to generate the token for.\n * @param {string | number} [expiresIn] - The expiration time for the token. Defaults to environment variable `JWT_EXPIRES_IN`.\n * @param {string} [secret] - The secret key used to sign the token. Defaults to environment variable `JWT_SECRET`.\n * @returns {string} The signed JWT token.\n */\n signJwtToken(\n id: number | string,\n expiresIn?: MsDuration | number,\n secret?: string\n ): string {\n const { authentication: configs } = getArkosConfig();\n\n if (\n process.env.ARKOS_BUILD === \"true\" &&\n !process.env.JWT_SECRET &&\n !configs?.jwt?.secret\n )\n throw new AppError(\n \"Missing JWT secret on production!\",\n 500,\n \"MissingJWTOnProduction\"\n );\n\n secret =\n secret ||\n configs?.jwt?.secret ||\n process.env.JWT_SECRET ||\n arkosEnv.JWT_SECRET;\n\n expiresIn = (expiresIn ||\n configs?.jwt?.expiresIn ||\n process.env.JWT_EXPIRES_IN ||\n arkosEnv.JWT_EXPIRES_IN) as keyof SignOptions[\"expiresIn\"];\n\n return jwt.sign({ id }, secret, {\n expiresIn: expiresIn as MsDuration,\n });\n }\n\n /**\n * Retrieves cookie configuration options for JWT authentication.\n *\n * Merges configuration from multiple sources in order of precedence:\n * 1. Arkos configuration file\n * 2. Environment variables\n * 3. Request properties (for secure flag)\n * 4. Default fallback values\n *\n * @param req - ArkosRequest object used to determine if the connection is secure\n * @returns Cookie options object with expires, httpOnly, secure, and sameSite properties\n *\n * @example\n * ```typescript\n * const cookieOptions = authService.getJwtCookieOptions(req);\n * res.cookie('jwt', token, cookieOptions);\n * ```\n */\n getJwtCookieOptions(req: ArkosRequest) {\n const arkosConfig = getArkosConfig();\n const authConfigs = arkosConfig?.authentication;\n\n if (!req)\n throw new Error(\"Missing req object in order get jwt cookie options\");\n\n const sameSite =\n authConfigs?.jwt?.cookie?.sameSite ||\n (process.env.JWT_COOKIE_SAME_SITE as\n | \"none\"\n | \"lax\"\n | \"strict\"\n | undefined) ||\n \"lax\";\n\n return {\n expires: new Date(\n Date.now() +\n Number(\n toMs(\n authConfigs?.jwt?.expiresIn ||\n (process.env.JWT_EXPIRES_IN as MsDuration) ||\n (arkosEnv.JWT_EXPIRES_IN as MsDuration)\n )\n )\n ),\n httpOnly:\n authConfigs?.jwt?.cookie?.httpOnly ??\n (process.env.JWT_COOKIE_HTTP_ONLY !== undefined\n ? process.env.JWT_COOKIE_HTTP_ONLY === \"true\"\n : undefined) ??\n true,\n secure: (() => {\n if (authConfigs?.jwt?.cookie?.secure !== undefined)\n return authConfigs?.jwt?.cookie?.secure;\n else if (process.env.JWT_COOKIE_SECURE !== undefined)\n return process.env.JWT_COOKIE_SECURE === \"true\";\n else return req.secure || req.headers[\"x-forwarded-proto\"] === \"https\";\n })(),\n sameSite,\n domain: authConfigs?.jwt?.cookie?.domain || process.env.JWT_COOKIE_DOMAIN,\n ...arkosConfig?.authentication?.jwt?.cookie,\n } as CookieOptions;\n }\n\n /**\n * Is used by default internally by Arkos under `ArkosPrismaService` class to check if the password is already hashed.\n *\n * This was just added to prevent unwanted errors when someone just forgets that the `ArkosPrismaService` class will automatically hash the password field using `authService.hashPassword` by default.\n *\n * So now before `ArkosPrismaService` hashes it will test it.\n *\n *\n * @param password The password to be tested if is hashed\n * @returns\n */\n isPasswordHashed(password: string) {\n return !Number.isNaN(bcrypt.getRounds(password) * 1);\n }\n\n /**\n * Compares a candidate password with the stored user password to check if they match.\n *\n * @param {string} candidatePassword - The password provided by the user during login.\n * @param {string} userPassword - The password stored in the database.\n * @returns {Promise<boolean>} Returns true if the passwords match, otherwise false.\n */\n async isCorrectPassword(\n candidatePassword: string,\n userPassword: string\n ): Promise<boolean> {\n return await bcrypt.compare(candidatePassword, userPassword);\n }\n\n /**\n * Hashes a plain text password using bcrypt.\n *\n * @param {string} password - The password to be hashed.\n * @returns {Promise<string>} Returns the hashed password.\n */\n async hashPassword(password: string): Promise<string> {\n return await bcrypt.hash(password, 12);\n }\n\n /**\n * Checks if a user has changed their password after the JWT was issued.\n *\n * @param {User} user - The user object containing the passwordChangedAt field.\n * @param {number} JWTTimestamp - The timestamp when the JWT was issued.\n * @returns {boolean} Returns true if the user changed their password after the JWT was issued, otherwise false.\n */\n userChangedPasswordAfter(user: User, JWTTimestamp: number): boolean {\n if (user.passwordChangedAt) {\n const convertedTimestamp = parseInt(\n String(new Date(user.passwordChangedAt).getTime() / 1000),\n 10\n );\n\n return JWTTimestamp < convertedTimestamp;\n }\n return false;\n }\n\n /**\n * Verifies the authenticity of a JWT token.\n *\n * @param {string} token - The JWT token to verify.\n * @param {string} [secret] - The secret key used to verify the token. Defaults to environment variable `JWT_SECRET`.\n * @returns {Promise<AuthJwtPayload>} Returns the decoded JWT payload if the token is valid.\n * @throws {Error} Throws an error if the token is invalid or expired.\n */\n async verifyJwtToken(\n token: string,\n secret?: string\n ): Promise<AuthJwtPayload> {\n const { authentication: configs } = getArkosConfig();\n\n if (\n process.env.ARKOS_BUILD === \"true\" &&\n !process.env.JWT_SECRET &&\n !configs?.jwt?.secret\n )\n throw new AppError(\n \"Missing JWT secret in production\",\n 500,\n \"MissingJWTSecretInProduction\"\n );\n\n secret =\n secret ||\n configs?.jwt?.secret ||\n process.env.JWT_SECRET ||\n arkosEnv.JWT_SECRET;\n\n try {\n const decoded = (await new Promise((resolve, reject) => {\n jwt.verify(token, secret, (err, decoded) => {\n if (err) reject(err);\n else resolve(decoded as AuthJwtPayload);\n });\n })) as AuthJwtPayload;\n\n if (!decoded?.id) throw invaliAuthTokenError;\n\n return decoded;\n } catch (err) {\n throw invaliAuthTokenError;\n }\n }\n\n private isWildcardAccess(config: AccessControlConfig): config is \"*\" {\n return config === \"*\";\n }\n\n private isRoleList(config: AccessControlConfig): config is string[] {\n return Array.isArray(config);\n }\n\n private isAccessRules(\n config: AccessControlConfig\n ): config is Partial<AccessControlRules> {\n return (\n typeof config === \"object\" && config !== null && !Array.isArray(config)\n );\n }\n\n private normalizeRuleToRoles(\n rule: string[] | DetailedAccessControlRule | \"*\" | undefined\n ): string[] {\n if (!rule) return [];\n if (rule === \"*\") return [\"*\"];\n if (Array.isArray(rule)) return rule;\n return rule.roles === \"*\" ? [\"*\"] : (rule.roles ?? []);\n }\n\n private resolveAuthorizedRoles(\n action: AccessAction,\n accessControl: AccessControlConfig\n ): string[] {\n if (this.isWildcardAccess(accessControl)) return [\"*\"];\n if (this.isRoleList(accessControl)) return accessControl;\n if (this.isAccessRules(accessControl))\n return this.normalizeRuleToRoles(accessControl[action]);\n return [];\n }\n\n /**\n * Checks if a user has permission for a specific action using static access control rules.\n * Validates user roles against predefined access control configuration.\n *\n * @param user - The user object containing role or roles field\n * @param action - The action being performed\n * @param accessControl - Access control configuration (array of roles or object with action-role mappings)\n * @returns True if user has permission, false otherwise\n * @throws Error if user doesn't have role/roles field\n */\n checkStaticAccessControl(\n user: User,\n action: string,\n accessControl: AccessControlConfig\n ) {\n if (!user?.role && !user.roles)\n throw Error(\n \"Validation Error: In order to use static authentication user needs at least role field or roles for multiple roles.\"\n );\n\n let authorizedRoles = this.resolveAuthorizedRoles(action, accessControl);\n\n const userRoles = Array.isArray(user?.roles) ? user.roles : [user.role];\n\n return (\n authorizedRoles?.[0] === \"*\" ||\n !!userRoles.some((role: string) => authorizedRoles.includes(role))\n );\n }\n\n /**\n * Checks if a user has permission for a specific action and resource using dynamic access control.\n * Queries the database to verify user's role permissions.\n *\n * @param userId - The unique identifier of the user\n * @param action - The action being performed\n * @param resource - The resource being accessed\n * @returns Promise resolving to true if user has permission, false otherwise\n */\n async checkDynamicAccessControl(\n userId: string,\n action: string,\n resource: string\n ) {\n const prisma = getPrismaInstance();\n\n const [userPermission, hasRolePermission] = await Promise.all([\n prisma.userPermission\n ? prisma.userPermission.findFirst({\n where: { userId, permission: { resource, action } },\n select: { effect: true },\n })\n : Promise.resolve(null),\n\n prisma.userRole.findFirst({\n where: {\n userId,\n role: {\n permissions: {\n some: { resource, action },\n },\n },\n },\n select: { id: true },\n }),\n ]);\n\n if (userPermission) return userPermission.effect === \"Allow\";\n return !!hasRolePermission;\n }\n\n private extractRequestToken(\n req: ArkosRequest,\n cookie: \"arkos_access_token\" = \"arkos_access_token\"\n ) {\n let token: string | null = null;\n\n if (\n req?.headers?.authorization &&\n req?.headers?.authorization.startsWith(\"Bearer\") &&\n req?.headers?.authorization.split?.(\" \")?.[1]\n )\n token = req?.headers?.authorization.split(\" \")[1];\n\n if (\n !token &&\n req?.cookies?.arkos_access_token !== \"no-token\" &&\n req.cookies\n )\n token = req?.cookies?.[cookie];\n\n return token;\n }\n\n private extractSocketToken(socket: ArkosSocket, key: \"token\" = \"token\") {\n return (\n socket.handshake.auth?.[key] ||\n socket.handshake.headers?.authorization?.replace(\"Bearer \", \"\")\n );\n }\n\n async validateDecodedUser(\n decoded: AuthJwtPayload,\n action: \"logout\" | \"default\" = \"default\"\n ): Promise<User> {\n const prisma = getPrismaInstance();\n const user = await (prisma as any).user.findUnique({\n where: { id: decoded.id },\n });\n\n if (!user)\n throw new AppError(\n \"The user belonging to this token no longer exists\",\n 401,\n \"UserNoLongerExists\"\n );\n\n if (\n action !== \"logout\" &&\n this.userChangedPasswordAfter(user, decoded.iat!)\n )\n throw new AppError(\n \"User recently changed password! Please log in again.\",\n 401,\n \"PasswordChanged\"\n );\n\n return user;\n }\n\n /**\n * Processes the cookies or authoriation token and returns the user.\n *\n * @param ctx | socket\n * @returns {Promise<User | null>} - if authentication is turned off in arkosConfig it returns null\n * @throws {AppError} Throws an error if the token is invalid or the user is not logged in.\n */\n async getAuthenticatedUser(\n ctx: ArkosRequest | ArkosSocket,\n action: \"logout\" | \"default\" = \"default\"\n ): Promise<User | null> {\n if (!isAuthenticationEnabled())\n throw Error(\n `Trying to call authService.getAuthenticatedUser without setting up authentication in arkos.config.${getUserFileExtension()}, see ${authenticationDocsLinks.setup}`\n );\n\n let token: string | null = null;\n\n if (\"headers\" in ctx) token = this.extractRequestToken(ctx);\n else if (\"join\" in ctx) token = this.extractSocketToken(ctx);\n\n if (!token) return null;\n\n const decoded = await this.verifyJwtToken(token);\n ctx.accessToken = token;\n\n return this.validateDecodedUser(decoded, action);\n }\n\n /**\n * Middleware to authenticate the request by extracting and verifying the JWT token and setting `req.user`.\n *\n * Runs `authentication.hooks.authenticate` before/after the authentication logic.\n *\n * Hook execution flow:\n * - `before` hooks run first — call `ctx.skip()` to bypass core logic and jump to `after` hooks,\n * call `ctx.next()` to stop the chain early, or return without calling anything to continue.\n * - Core logic runs — extracts and verifies the JWT token, sets `req.user`.\n * - `after` hooks run — call `ctx.next(err)` to abort or return without calling anything to continue.\n * - `onError` hooks run if core logic throws — call `ctx.skip()` to suppress the error and jump to\n * `after` hooks, or call `ctx.next(err)` to forward it to the global error handler.\n *\n * On custom routes, hooks defined in `arkosConfig` still apply since they are baked into this method.\n *\n * @example\n * ```ts\n * // custom route - hooks still run\n * router.get(\"/custom\", authService.authenticate, handler);\n * ```\n *\n * @example\n * ```ts\n * // skip built-in auth from a before hook\n * before: (ctx) => {\n * ctx.req.user = myCustomAuth(ctx.req);\n * ctx.skip();\n * }\n * ```\n *\n * @see {@link https://www.arkosjs.com/docs/core-concepts/authentication/hooks}\n */\n authenticate = catchAsync(\n async (req: ArkosRequest, _: ArkosResponse, next: ArkosNextFunction) => {\n await authHookManager.runAuthenticate(\n { context: req, done: next },\n async (req): Promise<any> => {\n if (!isAuthenticationEnabled()) return null;\n const user = (await this.getAuthenticatedUser(\n req,\n req.path.includes(\"logout\") ? \"logout\" : \"default\"\n )) as User;\n if (!user) throw loginRequiredError;\n return user;\n }\n );\n }\n );\n\n /**\n * Middleware to authorize the authenticated user for a given action on a resource.\n *\n * Runs `authentication.hooks.authorize` before/after the authorization logic.\n *\n * Hook execution flow:\n * - `before` hooks run first — call `ctx.skip()` to bypass core logic and jump to `after` hooks,\n * call `ctx.next()` to stop the chain early, or return without calling anything to continue.\n * - Core logic runs — checks user role/permissions against the access control rules.\n * - `after` hooks run — call `ctx.next(err)` to abort or return without calling anything to continue.\n * - `onError` hooks run if authorization fails — call `ctx.skip()` to suppress the error and jump to\n * `after` hooks, or call `ctx.next(err)` to forward it to the global error handler.\n *\n * @param resource - The resource being accessed, in kebabCase (e.g. `\"product\"`, `\"cart-item\"`)\n * @param action - The action being performed (e.g. `\"View\"`, `\"Create\"`, `\"Delete\"`)\n * @param rule - Access control rules for this action. Accepts a role list, a wildcard, or a `DetailedAccessControlRule`.\n *\n * @example\n * ```ts\n * router.delete(\"/products/:id\",\n * authService.authenticate,\n * authService.authorize(\"product\", \"Delete\", [\"admin\"]),\n * handler\n * );\n * ```\n *\n * @example\n * ```ts\n * // skip built-in authorization from a before hook\n * before: (ctx) => {\n * ctx.req.user.role = myCustomRoleResolver(ctx.req);\n * ctx.skip();\n * }\n * ```\n *\n * @see {@link https://www.arkosjs.com/docs/core-concepts/authentication/hooks#authorize}\n * @since v1.6.0-beta\n */\n authorize(\n action: AccessAction,\n resource: string,\n rule?: string[] | DetailedAccessControlRule | \"*\"\n ): ArkosRequestHandler {\n const authAction = authActionService.add(action, resource, {\n [action]: rule,\n });\n\n return catchAsync(\n async (req: ArkosRequest, _: ArkosResponse, next: ArkosNextFunction) => {\n await authHookManager.runAuthorize(\n { context: req, done: next },\n authAction\n );\n }\n );\n }\n\n /**\n * Creates a permission checker function for a specific action and resource.\n *\n * PS: This method should be called during application initialization to build permission validators.\n *\n * @see {@link https://www.arkosjs.com/docs/advanced-guide/fine-grained-access-control}\n *\n * @param action - The action to check permission for (e.g., 'View', 'Create', 'Delete')\n * @param resource - The resource being accessed, must be in kebabCase (e.g., 'user', 'cart-item', 'order')\n * @param accessControl - Access control rules (required for static authentication mode), and it is automatically loaded for known modules such as all prisma models, auth and file-upload.\n * @returns A function that takes a user object and returns a boolean indicating permission status\n *\n * @example\n * ```typescript\n * const hasViewProductPermission = await authService.permission('View', 'product');\n *\n * // Later in handler:\n * const canAccess = await hasViewProductPermission(user);\n * if (canAccess) {\n * // User has permission\n * }\n * ```\n */\n permission(\n action: string,\n resource: string,\n accessControl?: AccessControlConfig\n ) {\n // Check if called during request handling (deep call stack indicates handler execution)\n const stack = new Error().stack;\n\n if (stack?.includes(\"node_modules/express/lib/router/index.js\"))\n throw new Error(\n \"authService.permission() should be called during application initialization level.\"\n );\n\n authActionService.add(action, resource, accessControl);\n\n return async (user: User | undefined): Promise<boolean> => {\n // getArkosConfig must not be called the same time as arkos.init()\n const configs = getArkosConfig();\n\n if (!isUsingAuthentication())\n throw Error(\n \"Validation Error: Trying to use authService.permission without setting up authentication.\"\n );\n\n if (!isAuthenticationEnabled()) return false;\n if (!user) throw loginRequiredError;\n if (user?.isSuperUser) return true;\n\n if (configs?.authentication?.mode === \"dynamic\") {\n return await this.checkDynamicAccessControl(user?.id, action, resource);\n } else if (configs?.authentication?.mode === \"static\") {\n return (\n !!accessControl &&\n this.checkStaticAccessControl(user as any, action, accessControl)\n );\n }\n return false;\n };\n }\n}\n\n/**\n * Handles various authentication-related tasks such as JWT signing, password hashing, and verifying user credentials.\n */\nconst authService = new AuthService();\n\nexport default authService;\n"]}
@@ -3,6 +3,7 @@ import { prismaSchemaParser, } from "../../../exports/prisma/index.js";
3
3
  import prismaJsonSchemaGenerator from "../../../utils/prisma/prisma-json-schema-generator.js";
4
4
  import { routeHookReader } from "../../../components/arkos-route-hook/reader.js";
5
5
  class AuthPrismaJsonSchemaGenerator {
6
+ userModel;
6
7
  getUserModel() {
7
8
  if (!this.userModel)
8
9
  this.userModel = prismaSchemaParser.models.find((m) => m.name.toLowerCase() === "user");
@@ -1 +1 @@
1
- {"version":3,"file":"auth-prisma-json-schema-generator.js","sourceRoot":"","sources":["../../../../../src/modules/auth/utils/auth-prisma-json-schema-generator.ts"],"names":[],"mappings":"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","sourcesContent":["import { OpenAPIV3 } from \"openapi-types\";\nimport { getArkosConfig } from \"../../../utils/helpers/arkos-config.helpers\";\nimport {\n JsonSchema,\n JsonSchemaProperty,\n PrismaModel,\n} from \"../../../utils/prisma/types\";\nimport {\n AuthPrismaQueryOptions,\n prismaSchemaParser,\n} from \"../../../exports/prisma\";\nimport prismaJsonSchemaGenerator from \"../../../utils/prisma/prisma-json-schema-generator\";\nimport { routeHookReader } from \"../../../components/arkos-route-hook/reader\";\n\nclass AuthPrismaJsonSchemaGenerator {\n private userModel?: PrismaModel;\n\n private getUserModel() {\n if (!this.userModel)\n this.userModel = prismaSchemaParser.models.find(\n (m) => m.name.toLowerCase() === \"user\"\n );\n\n return this.userModel!;\n }\n\n private getPrismaArgs(endpoint: keyof AuthPrismaQueryOptions<any>) {\n return routeHookReader.getPrismaArgs(\"auth\", endpoint) || {};\n }\n\n generateGetMeResponse(): JsonSchema {\n return prismaJsonSchemaGenerator.generateResponseSchema(\n this.getUserModel(),\n this.getPrismaArgs(\"getMe\")\n );\n }\n\n generateUpdatePasswordSchema(): JsonSchema {\n return {\n type: \"object\",\n properties: {\n currentPassword: { type: \"string\" },\n newPassword: { type: \"string\", minLength: 8 },\n },\n required: [\"currentPassword\", \"newPassword\"],\n };\n }\n\n generateUpdateMeSchema(): JsonSchema {\n const updateSchema = prismaJsonSchemaGenerator.generateUpdateSchema(\n this.getUserModel()\n );\n\n // Remove sensitive fields that users shouldn't update themselves\n const restrictedFields = [\n \"roles\",\n \"role\",\n \"isActive\",\n \"isStaff\",\n \"isSuperUser\",\n \"passwordChangedAt\",\n \"deletedSelfAccountAt\",\n \"password\",\n \"lastLoginAt\",\n ];\n restrictedFields.forEach((field) => {\n delete updateSchema?.properties?.[field];\n });\n\n return updateSchema;\n }\n\n generateSignupSchema(): JsonSchema {\n const singupSchema = prismaJsonSchemaGenerator.generateCreateSchema(\n this.getUserModel()\n );\n\n const restrictedFields = [\n \"roles\",\n \"role\",\n \"isActive\",\n \"isStaff\",\n \"isSuperUser\",\n \"passwordChangedAt\",\n \"deletedSelfAccountAt\",\n \"lastLoginAt\",\n ];\n restrictedFields.forEach((field) => {\n delete singupSchema?.properties?.[field];\n });\n\n return singupSchema;\n }\n\n generateLoginSchema(): JsonSchema {\n const allowedUsernames = getArkosConfig()?.authentication?.login\n ?.allowedUsernames || [\"username\"];\n\n const usernameProperties: Record<string, OpenAPIV3.SchemaObject> = {};\n\n allowedUsernames.forEach((field: string) => {\n const displayName = field.includes(\".\") ? field.split(\".\").pop()! : field;\n usernameProperties[displayName] = {\n type: \"string\",\n description: `Username field: ${field}`,\n };\n });\n\n const baseSchema: JsonSchemaProperty = {\n type: \"object\",\n properties: {\n ...usernameProperties,\n password: {\n type: \"string\",\n minLength: 8,\n },\n },\n required: [\"password\"],\n };\n\n return {\n ...baseSchema,\n ...(allowedUsernames.length > 0 && {\n anyOf: allowedUsernames.map((field: string) => ({\n required: [field.includes(\".\") ? field.split(\".\").pop()! : field],\n })),\n }),\n };\n }\n}\n\nconst authPrismaJsonSchemaGenerator = new AuthPrismaJsonSchemaGenerator();\n\nexport default authPrismaJsonSchemaGenerator;\n"]}
1
+ {"version":3,"file":"auth-prisma-json-schema-generator.js","sourceRoot":"","sources":["../../../../../src/modules/auth/utils/auth-prisma-json-schema-generator.ts"],"names":[],"mappings":"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","sourcesContent":["import { OpenAPIV3 } from \"openapi-types\";\nimport { getArkosConfig } from \"../../../utils/helpers/arkos-config.helpers\";\nimport {\n JsonSchema,\n JsonSchemaProperty,\n PrismaModel,\n} from \"../../../utils/prisma/types\";\nimport {\n AuthPrismaQueryOptions,\n prismaSchemaParser,\n} from \"../../../exports/prisma\";\nimport prismaJsonSchemaGenerator from \"../../../utils/prisma/prisma-json-schema-generator\";\nimport { routeHookReader } from \"../../../components/arkos-route-hook/reader\";\n\nclass AuthPrismaJsonSchemaGenerator {\n private userModel?: PrismaModel;\n\n private getUserModel() {\n if (!this.userModel)\n this.userModel = prismaSchemaParser.models.find(\n (m) => m.name.toLowerCase() === \"user\"\n );\n\n return this.userModel!;\n }\n\n private getPrismaArgs(endpoint: keyof AuthPrismaQueryOptions<any>) {\n return routeHookReader.getPrismaArgs(\"auth\", endpoint) || {};\n }\n\n generateGetMeResponse(): JsonSchema {\n return prismaJsonSchemaGenerator.generateResponseSchema(\n this.getUserModel(),\n this.getPrismaArgs(\"getMe\")\n );\n }\n\n generateUpdatePasswordSchema(): JsonSchema {\n return {\n type: \"object\",\n properties: {\n currentPassword: { type: \"string\" },\n newPassword: { type: \"string\", minLength: 8 },\n },\n required: [\"currentPassword\", \"newPassword\"],\n };\n }\n\n generateUpdateMeSchema(): JsonSchema {\n const updateSchema = prismaJsonSchemaGenerator.generateUpdateSchema(\n this.getUserModel()\n );\n\n // Remove sensitive fields that users shouldn't update themselves\n const restrictedFields = [\n \"roles\",\n \"role\",\n \"isActive\",\n \"isStaff\",\n \"isSuperUser\",\n \"passwordChangedAt\",\n \"deletedSelfAccountAt\",\n \"password\",\n \"lastLoginAt\",\n ];\n restrictedFields.forEach((field) => {\n delete updateSchema?.properties?.[field];\n });\n\n return updateSchema;\n }\n\n generateSignupSchema(): JsonSchema {\n const singupSchema = prismaJsonSchemaGenerator.generateCreateSchema(\n this.getUserModel()\n );\n\n const restrictedFields = [\n \"roles\",\n \"role\",\n \"isActive\",\n \"isStaff\",\n \"isSuperUser\",\n \"passwordChangedAt\",\n \"deletedSelfAccountAt\",\n \"lastLoginAt\",\n ];\n restrictedFields.forEach((field) => {\n delete singupSchema?.properties?.[field];\n });\n\n return singupSchema;\n }\n\n generateLoginSchema(): JsonSchema {\n const allowedUsernames = getArkosConfig()?.authentication?.login\n ?.allowedUsernames || [\"username\"];\n\n const usernameProperties: Record<string, OpenAPIV3.SchemaObject> = {};\n\n allowedUsernames.forEach((field: string) => {\n const displayName = field.includes(\".\") ? field.split(\".\").pop()! : field;\n usernameProperties[displayName] = {\n type: \"string\",\n description: `Username field: ${field}`,\n };\n });\n\n const baseSchema: JsonSchemaProperty = {\n type: \"object\",\n properties: {\n ...usernameProperties,\n password: {\n type: \"string\",\n minLength: 8,\n },\n },\n required: [\"password\"],\n };\n\n return {\n ...baseSchema,\n ...(allowedUsernames.length > 0 && {\n anyOf: allowedUsernames.map((field: string) => ({\n required: [field.includes(\".\") ? field.split(\".\").pop()! : field],\n })),\n }),\n };\n }\n}\n\nconst authPrismaJsonSchemaGenerator = new AuthPrismaJsonSchemaGenerator();\n\nexport default authPrismaJsonSchemaGenerator;\n"]}
@@ -2,18 +2,16 @@ import { kebabCase, sentenceCase } from "../../../../exports/utils/index.js";
2
2
  import { getArkosConfig } from "../../../../utils/helpers/arkos-config.helpers.js";
3
3
  import { capitalize } from "../../../../utils/helpers/text.helpers.js";
4
4
  class AuthActionService {
5
- constructor() {
6
- this.authActions = [
7
- {
8
- roles: [],
9
- action: "View",
10
- resource: "auth-action",
11
- name: "View auth action",
12
- description: "View an auth action",
13
- errorMessage: "You cannot perform view for auth action",
14
- },
15
- ];
16
- }
5
+ authActions = [
6
+ {
7
+ roles: [],
8
+ action: "View",
9
+ resource: "auth-action",
10
+ name: "View auth action",
11
+ description: "View an auth action",
12
+ errorMessage: "You cannot perform view for auth action",
13
+ },
14
+ ];
17
15
  add(action, resource, accessControl) {
18
16
  const transformedAction = this.transformAccessControlToValidAuthAction(action, resource, accessControl);
19
17
  const existingAuthAction = this.getOne(action, resource);
@@ -1 +1 @@
1
- {"version":3,"file":"auth-action.service.js","sourceRoot":"","sources":["../../../../../../src/modules/auth/utils/services/auth-action.service.ts"],"names":[],"mappings":"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","sourcesContent":["import { kebabCase, sentenceCase } from \"../../../../exports/utils\";\nimport {\n AccessControlConfig,\n DetailedAccessControlRule,\n} from \"../../../../types/auth\";\nimport { getArkosConfig } from \"../../../../utils/helpers/arkos-config.helpers\";\nimport { capitalize } from \"../../../../utils/helpers/text.helpers\";\n\nexport interface AuthAction {\n roles?: string[] | \"*\";\n action: string;\n resource: string;\n name?: string;\n description?: string;\n errorMessage?: string;\n}\n\nclass AuthActionService {\n authActions: AuthAction[] = [\n {\n roles: [],\n action: \"View\",\n resource: \"auth-action\",\n name: \"View auth action\",\n description: \"View an auth action\",\n errorMessage: \"You cannot perform view for auth action\",\n },\n ];\n\n add(\n action: string,\n resource: string,\n accessControl?: AccessControlConfig\n ): Required<AuthAction> {\n const transformedAction = this.transformAccessControlToValidAuthAction(\n action,\n resource,\n accessControl\n );\n const existingAuthAction = this.getOne(action, resource);\n\n if (existingAuthAction) {\n const inconsistencies: string[] = [];\n\n const defaultName = `${capitalize(kebabCase(action).replace(/-/g, \" \"))} ${capitalize(kebabCase(resource).replace(/-/g, \" \"))}`;\n const defaultDescription = `${capitalize(kebabCase(action).replace(/-/g, \" \"))} ${capitalize(kebabCase(resource).replace(/-/g, \" \"))}`;\n const defaultErrorMessage = `You cannot perform ${sentenceCase(action).toLowerCase()} for ${sentenceCase(resource).toLowerCase()}`;\n\n const isNonDefault = (\n value: string | undefined,\n defaultValue: string\n ): boolean => {\n return value !== undefined && value !== defaultValue;\n };\n\n if (\n isNonDefault(existingAuthAction.name, defaultName) &&\n isNonDefault(transformedAction.name, defaultName) &&\n existingAuthAction.name !== transformedAction.name\n ) {\n inconsistencies.push(\n ` - name: \"${existingAuthAction.name}\" vs \"${transformedAction.name}\"`\n );\n }\n\n if (\n isNonDefault(existingAuthAction.description, defaultDescription) &&\n isNonDefault(transformedAction.description, defaultDescription) &&\n existingAuthAction.description !== transformedAction.description\n ) {\n inconsistencies.push(\n ` - description: \"${existingAuthAction.description}\" vs \"${transformedAction.description}\"`\n );\n }\n\n if (\n isNonDefault(existingAuthAction.errorMessage, defaultErrorMessage) &&\n isNonDefault(transformedAction.errorMessage, defaultErrorMessage) &&\n existingAuthAction.errorMessage !== transformedAction.errorMessage\n ) {\n inconsistencies.push(\n ` - errorMessage: \"${existingAuthAction.errorMessage}\" vs \"${transformedAction.errorMessage}\"`\n );\n }\n if (inconsistencies.length > 0) {\n throw new Error(\n `Inconsistent metadata for permission \"${action}:${resource}\". ` +\n `The same action+resource combination is being defined with different values:\\n` +\n inconsistencies.join(\"\\n\") +\n `\\n\\nPlease ensure all definitions of \"${action}:${resource}\" have the same name, description, and errorMessage values.`\n );\n }\n\n const mergedRoles =\n existingAuthAction.roles || transformedAction.roles\n ? [\n ...(existingAuthAction.roles || []),\n ...(transformedAction.roles || []),\n ]\n : undefined;\n\n const uniqueRoles = mergedRoles\n ? [...new Set(mergedRoles)].sort()\n : undefined;\n\n const merged: Required<AuthAction> = {\n action: existingAuthAction.action,\n resource: existingAuthAction.resource,\n roles: uniqueRoles,\n name: existingAuthAction.name ?? transformedAction.name,\n description:\n existingAuthAction.description ?? transformedAction.description,\n errorMessage:\n existingAuthAction.errorMessage ?? transformedAction.errorMessage,\n } as any;\n\n this.remove(action, resource);\n this.authActions.push(merged);\n return merged;\n } else {\n if (transformedAction.roles) {\n transformedAction.roles = [...transformedAction.roles].sort();\n }\n this.authActions.push(transformedAction);\n return transformedAction;\n }\n }\n\n remove(action: string, resource: string) {\n this.authActions = this.authActions.filter(\n (authAction) =>\n !(authAction.action === action && authAction.resource === resource)\n );\n }\n\n getAll(): AuthAction[] {\n return this.authActions;\n }\n\n getOne(action: string, resource: string): AuthAction | undefined {\n return this.authActions.find(\n (authAction) =>\n authAction.action === action && authAction.resource === resource\n );\n }\n\n private transformAccessControlToValidAuthAction(\n action: string,\n resource: string,\n accessControl?: AccessControlConfig\n ): Required<AuthAction> {\n const baseAuthAction: Required<AuthAction> = {\n roles:\n (accessControl &&\n (Array.isArray(accessControl)\n ? accessControl\n : typeof accessControl === \"string\"\n ? [accessControl]\n : Array.isArray(accessControl?.[action] || {})\n ? (accessControl[action] as string[])\n : (accessControl[action] as DetailedAccessControlRule)\n ?.roles)) ||\n [],\n action,\n resource,\n name: `${capitalize(kebabCase(action).replace(/-/g, \" \"))} ${capitalize(kebabCase(resource).replace(/-/g, \" \"))}`,\n description: `${capitalize(kebabCase(action).replace(/-/g, \" \"))} ${capitalize(kebabCase(resource).replace(/-/g, \" \"))}`,\n errorMessage: `You cannot perform ${sentenceCase(action).toLowerCase()} for ${sentenceCase(resource).toLowerCase()}`,\n };\n\n const config = getArkosConfig();\n\n if (config?.authentication?.mode === \"dynamic\")\n delete (baseAuthAction as any).roles;\n\n if (!accessControl) return baseAuthAction;\n\n if (Array.isArray(accessControl)) return baseAuthAction;\n\n const actionRule =\n (accessControl as any) !== \"*\"\n ? (accessControl as any)[action]\n : undefined;\n\n if (config?.authentication?.mode !== \"static\")\n delete (baseAuthAction as any).roles;\n\n if (actionRule) {\n if (Array.isArray(actionRule)) {\n return baseAuthAction;\n } else if (typeof actionRule === \"object\") {\n return {\n ...baseAuthAction,\n name: actionRule.name || baseAuthAction.name,\n description: actionRule?.description || baseAuthAction.description,\n errorMessage: actionRule?.errorMessage || baseAuthAction.errorMessage,\n };\n }\n }\n\n return baseAuthAction;\n }\n\n getUniqueActions(): string[] {\n return [\n ...new Set(this.authActions.map((authAction) => authAction.action)),\n ];\n }\n\n getUniqueResources(): string[] {\n return [\n ...new Set(this.authActions.map((authAction) => authAction.resource)),\n ];\n }\n\n getByResource(resource: string): AuthAction[] | undefined {\n return this.authActions.filter(\n (authAction) => authAction.resource === resource\n );\n }\n\n getByAction(action: string): AuthAction[] {\n return this.authActions.filter(\n (authAction) => authAction.action === action\n );\n }\n\n exists(action: string, resource: string): boolean {\n return !!this.getOne(action, resource);\n }\n}\n\nconst authActionService = new AuthActionService();\n\nexport default authActionService;\n"]}
1
+ {"version":3,"file":"auth-action.service.js","sourceRoot":"","sources":["../../../../../../src/modules/auth/utils/services/auth-action.service.ts"],"names":[],"mappings":"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","sourcesContent":["import { kebabCase, sentenceCase } from \"../../../../exports/utils\";\nimport {\n AccessControlConfig,\n DetailedAccessControlRule,\n} from \"../../../../types/auth\";\nimport { getArkosConfig } from \"../../../../utils/helpers/arkos-config.helpers\";\nimport { capitalize } from \"../../../../utils/helpers/text.helpers\";\n\nexport interface AuthAction {\n roles?: string[] | \"*\";\n action: string;\n resource: string;\n name?: string;\n description?: string;\n errorMessage?: string;\n}\n\nclass AuthActionService {\n authActions: AuthAction[] = [\n {\n roles: [],\n action: \"View\",\n resource: \"auth-action\",\n name: \"View auth action\",\n description: \"View an auth action\",\n errorMessage: \"You cannot perform view for auth action\",\n },\n ];\n\n add(\n action: string,\n resource: string,\n accessControl?: AccessControlConfig\n ): Required<AuthAction> {\n const transformedAction = this.transformAccessControlToValidAuthAction(\n action,\n resource,\n accessControl\n );\n const existingAuthAction = this.getOne(action, resource);\n\n if (existingAuthAction) {\n const inconsistencies: string[] = [];\n\n const defaultName = `${capitalize(kebabCase(action).replace(/-/g, \" \"))} ${capitalize(kebabCase(resource).replace(/-/g, \" \"))}`;\n const defaultDescription = `${capitalize(kebabCase(action).replace(/-/g, \" \"))} ${capitalize(kebabCase(resource).replace(/-/g, \" \"))}`;\n const defaultErrorMessage = `You cannot perform ${sentenceCase(action).toLowerCase()} for ${sentenceCase(resource).toLowerCase()}`;\n\n const isNonDefault = (\n value: string | undefined,\n defaultValue: string\n ): boolean => {\n return value !== undefined && value !== defaultValue;\n };\n\n if (\n isNonDefault(existingAuthAction.name, defaultName) &&\n isNonDefault(transformedAction.name, defaultName) &&\n existingAuthAction.name !== transformedAction.name\n ) {\n inconsistencies.push(\n ` - name: \"${existingAuthAction.name}\" vs \"${transformedAction.name}\"`\n );\n }\n\n if (\n isNonDefault(existingAuthAction.description, defaultDescription) &&\n isNonDefault(transformedAction.description, defaultDescription) &&\n existingAuthAction.description !== transformedAction.description\n ) {\n inconsistencies.push(\n ` - description: \"${existingAuthAction.description}\" vs \"${transformedAction.description}\"`\n );\n }\n\n if (\n isNonDefault(existingAuthAction.errorMessage, defaultErrorMessage) &&\n isNonDefault(transformedAction.errorMessage, defaultErrorMessage) &&\n existingAuthAction.errorMessage !== transformedAction.errorMessage\n ) {\n inconsistencies.push(\n ` - errorMessage: \"${existingAuthAction.errorMessage}\" vs \"${transformedAction.errorMessage}\"`\n );\n }\n if (inconsistencies.length > 0) {\n throw new Error(\n `Inconsistent metadata for permission \"${action}:${resource}\". ` +\n `The same action+resource combination is being defined with different values:\\n` +\n inconsistencies.join(\"\\n\") +\n `\\n\\nPlease ensure all definitions of \"${action}:${resource}\" have the same name, description, and errorMessage values.`\n );\n }\n\n const mergedRoles =\n existingAuthAction.roles || transformedAction.roles\n ? [\n ...(existingAuthAction.roles || []),\n ...(transformedAction.roles || []),\n ]\n : undefined;\n\n const uniqueRoles = mergedRoles\n ? [...new Set(mergedRoles)].sort()\n : undefined;\n\n const merged: Required<AuthAction> = {\n action: existingAuthAction.action,\n resource: existingAuthAction.resource,\n roles: uniqueRoles,\n name: existingAuthAction.name ?? transformedAction.name,\n description:\n existingAuthAction.description ?? transformedAction.description,\n errorMessage:\n existingAuthAction.errorMessage ?? transformedAction.errorMessage,\n } as any;\n\n this.remove(action, resource);\n this.authActions.push(merged);\n return merged;\n } else {\n if (transformedAction.roles) {\n transformedAction.roles = [...transformedAction.roles].sort();\n }\n this.authActions.push(transformedAction);\n return transformedAction;\n }\n }\n\n remove(action: string, resource: string) {\n this.authActions = this.authActions.filter(\n (authAction) =>\n !(authAction.action === action && authAction.resource === resource)\n );\n }\n\n getAll(): AuthAction[] {\n return this.authActions;\n }\n\n getOne(action: string, resource: string): AuthAction | undefined {\n return this.authActions.find(\n (authAction) =>\n authAction.action === action && authAction.resource === resource\n );\n }\n\n private transformAccessControlToValidAuthAction(\n action: string,\n resource: string,\n accessControl?: AccessControlConfig\n ): Required<AuthAction> {\n const baseAuthAction: Required<AuthAction> = {\n roles:\n (accessControl &&\n (Array.isArray(accessControl)\n ? accessControl\n : typeof accessControl === \"string\"\n ? [accessControl]\n : Array.isArray(accessControl?.[action] || {})\n ? (accessControl[action] as string[])\n : (accessControl[action] as DetailedAccessControlRule)\n ?.roles)) ||\n [],\n action,\n resource,\n name: `${capitalize(kebabCase(action).replace(/-/g, \" \"))} ${capitalize(kebabCase(resource).replace(/-/g, \" \"))}`,\n description: `${capitalize(kebabCase(action).replace(/-/g, \" \"))} ${capitalize(kebabCase(resource).replace(/-/g, \" \"))}`,\n errorMessage: `You cannot perform ${sentenceCase(action).toLowerCase()} for ${sentenceCase(resource).toLowerCase()}`,\n };\n\n const config = getArkosConfig();\n\n if (config?.authentication?.mode === \"dynamic\")\n delete (baseAuthAction as any).roles;\n\n if (!accessControl) return baseAuthAction;\n\n if (Array.isArray(accessControl)) return baseAuthAction;\n\n const actionRule =\n (accessControl as any) !== \"*\"\n ? (accessControl as any)[action]\n : undefined;\n\n if (config?.authentication?.mode !== \"static\")\n delete (baseAuthAction as any).roles;\n\n if (actionRule) {\n if (Array.isArray(actionRule)) {\n return baseAuthAction;\n } else if (typeof actionRule === \"object\") {\n return {\n ...baseAuthAction,\n name: actionRule.name || baseAuthAction.name,\n description: actionRule?.description || baseAuthAction.description,\n errorMessage: actionRule?.errorMessage || baseAuthAction.errorMessage,\n };\n }\n }\n\n return baseAuthAction;\n }\n\n getUniqueActions(): string[] {\n return [\n ...new Set(this.authActions.map((authAction) => authAction.action)),\n ];\n }\n\n getUniqueResources(): string[] {\n return [\n ...new Set(this.authActions.map((authAction) => authAction.resource)),\n ];\n }\n\n getByResource(resource: string): AuthAction[] | undefined {\n return this.authActions.filter(\n (authAction) => authAction.resource === resource\n );\n }\n\n getByAction(action: string): AuthAction[] {\n return this.authActions.filter(\n (authAction) => authAction.action === action\n );\n }\n\n exists(action: string, resource: string): boolean {\n return !!this.getOne(action, resource);\n }\n}\n\nconst authActionService = new AuthActionService();\n\nexport default authActionService;\n"]}