@ackplus/nest-auth 0.1.51 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (505) hide show
  1. package/README.md +6 -513
  2. package/eslint.config.mjs +59 -0
  3. package/jest.config.ts +10 -0
  4. package/package.json +14 -44
  5. package/project.json +86 -0
  6. package/src/index.ts +30 -0
  7. package/src/lib/admin-console/admin-console.module.ts +62 -0
  8. package/src/lib/admin-console/controllers/admin-auth.controller.ts +339 -0
  9. package/src/lib/admin-console/controllers/admin-console.controller.ts +82 -0
  10. package/src/lib/admin-console/controllers/admin-permissions.controller.ts +180 -0
  11. package/src/lib/admin-console/controllers/admin-roles.controller.ts +89 -0
  12. package/src/lib/admin-console/controllers/admin-tenants.controller.ts +68 -0
  13. package/src/lib/admin-console/controllers/admin-users.controller.ts +379 -0
  14. package/src/lib/admin-console/decorators/current-admin.decorator.ts +9 -0
  15. package/src/lib/admin-console/dto/admin-permission.dto.ts +106 -0
  16. package/src/lib/admin-console/dto/admin-role.dto.ts +45 -0
  17. package/src/lib/admin-console/dto/admin-tenant.dto.ts +43 -0
  18. package/src/lib/admin-console/dto/admin-user.dto.ts +87 -0
  19. package/src/lib/admin-console/dto/create-dashboard-admin.dto.ts +34 -0
  20. package/src/lib/admin-console/dto/login.dto.ts +10 -0
  21. package/src/lib/admin-console/dto/reset-password.dto.ts +21 -0
  22. package/src/lib/admin-console/dto/setup-admin.dto.ts +23 -0
  23. package/src/lib/admin-console/dto/signup.dto.ts +51 -0
  24. package/src/lib/admin-console/entities/admin-user.entity.ts +74 -0
  25. package/src/lib/admin-console/guards/admin-session.guard.ts +47 -0
  26. package/src/lib/admin-console/services/admin-auth.service.ts +82 -0
  27. package/src/lib/admin-console/services/admin-console-config.service.ts +62 -0
  28. package/src/lib/admin-console/services/admin-session.service.ts +106 -0
  29. package/src/lib/admin-console/services/admin-user.service.ts +96 -0
  30. package/src/lib/admin-console/static/index.html +771 -0
  31. package/src/lib/auth/auth.module.ts +58 -0
  32. package/src/lib/auth/controllers/auth.controller.ts +393 -0
  33. package/src/lib/auth/controllers/mfa.controller.ts +200 -0
  34. package/src/lib/auth/dto/credentials/email-credentials.dto.ts +24 -0
  35. package/src/lib/auth/dto/credentials/phone-credentials.dto.ts +24 -0
  36. package/src/lib/auth/dto/credentials/social-credentials.dto.ts +15 -0
  37. package/src/lib/auth/dto/index.ts +1 -0
  38. package/src/lib/auth/dto/requests/change-password.request.dto.ts +34 -0
  39. package/src/lib/auth/dto/requests/forgot-password.request.dto.ts +30 -0
  40. package/src/lib/auth/dto/requests/initialize-admin.request.dto.ts +51 -0
  41. package/src/lib/auth/dto/requests/login.request.dto.ts +65 -0
  42. package/src/lib/auth/dto/requests/refresh-token.request.dto.ts +12 -0
  43. package/src/lib/auth/dto/requests/reset-password-with-token.request.dto.ts +22 -0
  44. package/src/lib/auth/dto/requests/reset-password.request.dto.ts +50 -0
  45. package/src/lib/auth/dto/requests/send-email-verification.request.dto.ts +12 -0
  46. package/src/lib/auth/dto/requests/send-mfa-code.request.dto.ts +19 -0
  47. package/src/lib/auth/dto/requests/signup.request.dto.ts +42 -0
  48. package/src/lib/auth/dto/requests/toggle-mfa.request.dto.ts +12 -0
  49. package/src/lib/auth/dto/requests/verify-2fa.request.dto.ts +24 -0
  50. package/src/lib/auth/dto/requests/verify-email.request.dto.ts +22 -0
  51. package/src/lib/auth/dto/requests/verify-forgot-password-otp-request-dto.ts +41 -0
  52. package/src/lib/auth/dto/requests/verify-totp-setup.request.dto.ts +22 -0
  53. package/src/lib/auth/dto/responses/auth-cookie.response.dto.ts +58 -0
  54. package/src/lib/auth/dto/responses/auth-success.response.dto.ts +58 -0
  55. package/src/lib/auth/dto/responses/auth.response.dto.ts +99 -0
  56. package/src/lib/auth/dto/responses/client-config.response.dto.ts +153 -0
  57. package/src/lib/auth/dto/responses/initialize-admin.response.dto.ts +22 -0
  58. package/src/lib/auth/dto/responses/mfa-code-response.dto.ts +27 -0
  59. package/src/lib/auth/dto/responses/mfa-status.response.dto.ts +89 -0
  60. package/src/lib/auth/dto/responses/verify-otp.response.dto.ts +9 -0
  61. package/src/lib/auth/entities/mfa-secret.entity.ts +33 -0
  62. package/src/lib/auth/entities/otp.entity.ts +33 -0
  63. package/src/lib/auth/events/{logged-out-all.event.d.ts → logged-out-all.event.ts} +6 -3
  64. package/src/lib/auth/events/{logged-out.event.d.ts → logged-out.event.ts} +5 -3
  65. package/src/lib/auth/events/{password-reset-requested.event.d.ts → password-reset-requested.event.ts} +6 -3
  66. package/src/lib/auth/events/{password-reset.event.d.ts → password-reset.event.ts} +6 -3
  67. package/src/lib/auth/events/{user-2fa-verified.event.d.ts → user-2fa-verified.event.ts} +6 -3
  68. package/src/lib/auth/events/{user-logged-in.event.d.ts → user-logged-in.event.ts} +7 -3
  69. package/src/lib/auth/events/{user-refresh-token.event.d.ts → user-refresh-token.event.ts} +6 -3
  70. package/src/lib/auth/events/{user-registered.event.d.ts → user-registered.event.ts} +7 -3
  71. package/src/lib/auth/guards/auth.guard.ts +386 -0
  72. package/src/lib/auth/{index.d.ts → index.ts} +28 -1
  73. package/src/lib/auth/interceptors/refresh-token.interceptor.ts +117 -0
  74. package/src/lib/auth/services/auth.service.ts +947 -0
  75. package/src/lib/auth/services/client-config.service.ts +157 -0
  76. package/src/lib/auth/services/cookie.service.ts +43 -0
  77. package/src/lib/auth/services/mfa.service.ts +391 -0
  78. package/src/lib/auth.constants.ts +63 -0
  79. package/src/lib/core/core.module.ts +50 -0
  80. package/src/lib/core/decorators/auth.decorator.ts +38 -0
  81. package/src/lib/core/decorators/permissions.decorator.ts +17 -0
  82. package/src/lib/core/decorators/public.decorator.ts +33 -0
  83. package/src/lib/core/decorators/role.decorator.ts +12 -0
  84. package/src/lib/core/decorators/skip-mfa.decorator.ts +4 -0
  85. package/src/lib/core/dto/message.response.dto.ts +6 -0
  86. package/src/lib/core/{entities.d.ts → entities.ts} +18 -1
  87. package/src/lib/core/{index.d.ts → index.ts} +17 -0
  88. package/src/lib/core/interfaces/auth-module-options.interface.ts +211 -0
  89. package/src/lib/core/interfaces/mfa-options.interface.ts +46 -0
  90. package/src/lib/core/interfaces/otp.interface.ts +6 -0
  91. package/src/lib/core/interfaces/session-options.interface.ts +19 -0
  92. package/src/lib/core/interfaces/{token-payload.interface.d.ts → token-payload.interface.ts} +4 -1
  93. package/src/lib/core/providers/apple-auth.provider.ts +61 -0
  94. package/src/lib/core/providers/base-auth.provider.ts +74 -0
  95. package/src/lib/core/providers/email-auth.provider.ts +71 -0
  96. package/src/lib/core/providers/facebook-auth.provider.ts +55 -0
  97. package/src/lib/core/providers/github-auth.provider.ts +79 -0
  98. package/src/lib/core/providers/google-auth.provider.ts +61 -0
  99. package/src/lib/core/providers/jwt-auth.provider.ts +50 -0
  100. package/src/lib/core/providers/phone-auth.provider.ts +45 -0
  101. package/src/lib/core/services/auth-config.service.ts +184 -0
  102. package/src/lib/core/services/auth-provider-registry.service.ts +93 -0
  103. package/src/lib/core/services/{debug-logger.service.js → debug-logger.service.ts} +92 -59
  104. package/src/lib/core/services/initialization.service.ts +29 -0
  105. package/src/lib/core/services/jwt.service.ts +137 -0
  106. package/src/lib/nest-auth.module.ts +152 -0
  107. package/src/lib/permission/entities/permission.entity.ts +56 -0
  108. package/src/lib/permission/index.ts +4 -0
  109. package/src/lib/permission/permission.module.ts +14 -0
  110. package/src/lib/permission/services/permission.service.ts +233 -0
  111. package/src/lib/request-context/index.ts +2 -0
  112. package/src/lib/request-context/request-context.middleware.ts +13 -0
  113. package/src/lib/request-context/{request-context.js → request-context.ts} +51 -27
  114. package/src/lib/role/entities/role.entity.ts +103 -0
  115. package/src/lib/role/{index.d.ts → index.ts} +2 -0
  116. package/src/lib/role/role.module.ts +15 -0
  117. package/src/lib/role/services/{role.service.js → role.service.ts} +117 -52
  118. package/src/lib/session/entities/session.entity.ts +54 -0
  119. package/src/lib/session/index.ts +20 -0
  120. package/src/lib/session/interfaces/session-repository.interface.ts +58 -0
  121. package/src/lib/session/repositories/base-session.repository.ts +74 -0
  122. package/src/lib/session/repositories/memory-session.repository.ts +153 -0
  123. package/src/lib/session/repositories/redis-session.repository.ts +171 -0
  124. package/src/lib/session/repositories/typeorm-session.repository.ts +86 -0
  125. package/src/lib/session/services/session-manager.service.ts +261 -0
  126. package/src/lib/session/session.module.ts +102 -0
  127. package/src/lib/session/utils/session.util.ts +166 -0
  128. package/src/lib/tenant/entities/tenant.entity.ts +40 -0
  129. package/src/lib/tenant/events/tenant-created.event.ts +9 -0
  130. package/src/lib/tenant/events/tenant-deleted.event.ts +11 -0
  131. package/src/lib/tenant/events/{tenant-updated.event.d.ts → tenant-updated.event.ts} +6 -3
  132. package/src/lib/tenant/index.ts +9 -0
  133. package/src/lib/tenant/services/tenant.service.ts +336 -0
  134. package/src/lib/tenant/tenant.module.ts +19 -0
  135. package/src/lib/types/express.d.ts +14 -0
  136. package/src/lib/user/dto/requests/update-user.dto.ts +15 -0
  137. package/src/lib/user/entities/access-key.entity.ts +53 -0
  138. package/src/lib/user/entities/identity.entity.ts +31 -0
  139. package/src/lib/user/entities/user.entity.ts +212 -0
  140. package/src/lib/user/events/{user-created.event.d.ts → user-created.event.ts} +4 -3
  141. package/src/lib/user/events/{user-deleted.event.d.ts → user-deleted.event.ts} +6 -3
  142. package/src/lib/user/events/{user-updated.event.d.ts → user-updated.event.ts} +6 -3
  143. package/src/lib/user/index.ts +11 -0
  144. package/src/lib/user/services/access-key.service.ts +145 -0
  145. package/src/lib/user/services/{user.service.js → user.service.ts} +199 -95
  146. package/src/lib/user/user.module.ts +26 -0
  147. package/src/lib/utils/database.utils.ts +6 -0
  148. package/src/lib/utils/date.util.ts +106 -0
  149. package/src/lib/utils/device.util.ts +111 -0
  150. package/src/lib/utils/index.ts +6 -0
  151. package/src/lib/utils/otp.ts +3 -0
  152. package/src/lib/utils/security.util.ts +27 -0
  153. package/src/lib/utils/slug.util.ts +58 -0
  154. package/src/types/ms.d.ts +1 -0
  155. package/test/access-key.service.spec.ts +204 -0
  156. package/test/auth.service.spec.ts +541 -0
  157. package/test/mfa.service.spec.ts +359 -0
  158. package/test/role.service.spec.ts +418 -0
  159. package/test/tenant.service.spec.ts +218 -0
  160. package/test/test.setup.ts +66 -0
  161. package/test/user.service.spec.ts +374 -0
  162. package/tsconfig.json +17 -0
  163. package/tsconfig.lib.json +15 -0
  164. package/tsconfig.spec.json +15 -0
  165. package/tsconfig.tsbuildinfo +1 -1
  166. package/ui/.env +1 -0
  167. package/ui/.env.example +1 -0
  168. package/ui/.eslintignore +7 -0
  169. package/ui/README.md +288 -0
  170. package/ui/index.html +17 -0
  171. package/ui/package.json +34 -0
  172. package/ui/postcss.config.js +6 -0
  173. package/ui/src/App.tsx +245 -0
  174. package/ui/src/components/AuthGuard.tsx +59 -0
  175. package/ui/src/components/AuthProvider.tsx +76 -0
  176. package/ui/src/components/Button.tsx +37 -0
  177. package/ui/src/components/Card.tsx +37 -0
  178. package/ui/src/components/ErrorMessage.tsx +15 -0
  179. package/ui/src/components/FormDialog.tsx +61 -0
  180. package/ui/src/components/FormFooter.tsx +37 -0
  181. package/ui/src/components/Layout.tsx +112 -0
  182. package/ui/src/components/LoadingMessage.tsx +11 -0
  183. package/ui/src/components/Modal.tsx +97 -0
  184. package/ui/src/components/MultiSelect.tsx +145 -0
  185. package/ui/src/components/PageHeader.tsx +42 -0
  186. package/ui/src/components/PanelHeader.tsx +28 -0
  187. package/ui/src/components/PermissionInput.tsx +473 -0
  188. package/ui/src/components/SearchInput.tsx +69 -0
  189. package/ui/src/components/Select.tsx +51 -0
  190. package/ui/src/components/SwaggerUIWrapper.tsx +316 -0
  191. package/ui/src/components/Table.tsx +207 -0
  192. package/ui/src/components/Tag.tsx +9 -0
  193. package/ui/src/components/TagsInput.tsx +96 -0
  194. package/ui/src/components/admin/AdminForm.tsx +170 -0
  195. package/ui/src/components/admin/CreateAdminDialog.tsx +38 -0
  196. package/ui/src/components/auth/LoginFooter.tsx +17 -0
  197. package/ui/src/components/auth/LoginHeader.tsx +14 -0
  198. package/ui/src/components/auth/components/CodeBlock.tsx +43 -0
  199. package/ui/src/components/auth/components/CreateAccountCodeExamples.tsx +60 -0
  200. package/ui/src/components/auth/components/PasswordRequirements.tsx +16 -0
  201. package/ui/src/components/auth/components/PasswordStrengthIndicator.tsx +48 -0
  202. package/ui/src/components/auth/components/ResetPasswordCodeExamples.tsx +76 -0
  203. package/ui/src/components/auth/components/Tabs.tsx +32 -0
  204. package/ui/src/components/auth/dialogs/CreateAccountDialog.tsx +79 -0
  205. package/ui/src/components/auth/dialogs/ForgotPasswordDialog.tsx +79 -0
  206. package/ui/src/components/auth/forms/CreateAccountForm.tsx +226 -0
  207. package/ui/src/components/auth/forms/LoginForm.tsx +149 -0
  208. package/ui/src/components/auth/forms/ResetPasswordForm.tsx +202 -0
  209. package/ui/src/components/auth/types.ts +17 -0
  210. package/ui/src/components/auth/utils/security.ts +82 -0
  211. package/ui/src/components/auth/utils/utils.ts +25 -0
  212. package/ui/src/components/form/EmailField.tsx +25 -0
  213. package/ui/src/components/form/FormField.tsx +102 -0
  214. package/ui/src/components/form/FormMultiSelect.tsx +46 -0
  215. package/ui/src/components/form/FormSelect.tsx +60 -0
  216. package/ui/src/components/form/FormTagsInput.tsx +42 -0
  217. package/ui/src/components/form/FormTextarea.tsx +42 -0
  218. package/ui/src/components/form/PasswordField.tsx +93 -0
  219. package/ui/src/components/form/SecretKeyField.tsx +49 -0
  220. package/ui/src/components/permission/CreatePermissionDialog.tsx +44 -0
  221. package/ui/src/components/permission/EditPermissionDialog.tsx +55 -0
  222. package/ui/src/components/permission/PermissionForm.tsx +251 -0
  223. package/ui/src/components/role/CreateRoleDialog.tsx +45 -0
  224. package/ui/src/components/role/EditRoleDialog.tsx +55 -0
  225. package/ui/src/components/role/RoleDialog.tsx +252 -0
  226. package/ui/src/components/role/RoleForm.tsx +246 -0
  227. package/ui/src/components/tenant/CreateTenantDialog.tsx +41 -0
  228. package/ui/src/components/tenant/EditTenantDialog.tsx +52 -0
  229. package/ui/src/components/tenant/TenantForm.tsx +160 -0
  230. package/ui/src/components/user/CreateUserDialog.tsx +45 -0
  231. package/ui/src/components/user/UserDetailModal.tsx +815 -0
  232. package/ui/src/components/user/UserForm.tsx +191 -0
  233. package/ui/src/data/nest-auth.json +1687 -0
  234. package/ui/src/hooks/useApi.ts +69 -0
  235. package/ui/src/hooks/useAuth.ts +100 -0
  236. package/ui/src/hooks/useConfirm.tsx +105 -0
  237. package/ui/src/hooks/useFormFooter.tsx +42 -0
  238. package/ui/src/hooks/usePagination.ts +69 -0
  239. package/ui/src/index.css +59 -0
  240. package/ui/src/main.tsx +13 -0
  241. package/ui/src/pages/AdminsPage.tsx +178 -0
  242. package/ui/src/pages/ApiPage.tsx +89 -0
  243. package/ui/src/pages/DashboardPage.tsx +281 -0
  244. package/ui/src/pages/LoginPage.tsx +39 -0
  245. package/ui/src/pages/PermissionsPage.tsx +376 -0
  246. package/ui/src/pages/RolesPage.tsx +274 -0
  247. package/ui/src/pages/TenantsPage.tsx +221 -0
  248. package/ui/src/pages/UsersPage.tsx +387 -0
  249. package/ui/src/services/api.ts +115 -0
  250. package/ui/src/types/index.ts +136 -0
  251. package/ui/src/vite-env.d.ts +9 -0
  252. package/ui/tailwind.config.js +45 -0
  253. package/ui/tsconfig.json +24 -0
  254. package/ui/tsconfig.node.json +10 -0
  255. package/ui/vite.config.ts +37 -0
  256. package/ui/yarn.lock +3137 -0
  257. package/src/index.d.ts +0 -11
  258. package/src/index.js +0 -18
  259. package/src/index.js.map +0 -1
  260. package/src/lib/auth/auth.module.d.ts +0 -2
  261. package/src/lib/auth/auth.module.js +0 -54
  262. package/src/lib/auth/auth.module.js.map +0 -1
  263. package/src/lib/auth/controllers/auth.controller.d.ts +0 -29
  264. package/src/lib/auth/controllers/auth.controller.js +0 -206
  265. package/src/lib/auth/controllers/auth.controller.js.map +0 -1
  266. package/src/lib/auth/controllers/mfa.controller.d.ts +0 -23
  267. package/src/lib/auth/controllers/mfa.controller.js +0 -131
  268. package/src/lib/auth/controllers/mfa.controller.js.map +0 -1
  269. package/src/lib/auth/dto/index.d.ts +0 -0
  270. package/src/lib/auth/dto/index.js +0 -1
  271. package/src/lib/auth/dto/index.js.map +0 -1
  272. package/src/lib/auth/dto/requests/forgot-password.request.dto.d.ts +0 -5
  273. package/src/lib/auth/dto/requests/forgot-password.request.dto.js +0 -30
  274. package/src/lib/auth/dto/requests/forgot-password.request.dto.js.map +0 -1
  275. package/src/lib/auth/dto/requests/login.request.dto.d.ts +0 -6
  276. package/src/lib/auth/dto/requests/login.request.dto.js +0 -38
  277. package/src/lib/auth/dto/requests/login.request.dto.js.map +0 -1
  278. package/src/lib/auth/dto/requests/refresh-token.request.dto.d.ts +0 -3
  279. package/src/lib/auth/dto/requests/refresh-token.request.dto.js +0 -15
  280. package/src/lib/auth/dto/requests/refresh-token.request.dto.js.map +0 -1
  281. package/src/lib/auth/dto/requests/reset-password.request.dto.d.ts +0 -7
  282. package/src/lib/auth/dto/requests/reset-password.request.dto.js +0 -42
  283. package/src/lib/auth/dto/requests/reset-password.request.dto.js.map +0 -1
  284. package/src/lib/auth/dto/requests/send-mfa-code.request.dto.d.ts +0 -4
  285. package/src/lib/auth/dto/requests/send-mfa-code.request.dto.js +0 -16
  286. package/src/lib/auth/dto/requests/send-mfa-code.request.dto.js.map +0 -1
  287. package/src/lib/auth/dto/requests/signup.request.dto.d.ts +0 -7
  288. package/src/lib/auth/dto/requests/signup.request.dto.js +0 -37
  289. package/src/lib/auth/dto/requests/signup.request.dto.js.map +0 -1
  290. package/src/lib/auth/dto/requests/social-login.request.dto.d.ts +0 -3
  291. package/src/lib/auth/dto/requests/social-login.request.dto.js +0 -16
  292. package/src/lib/auth/dto/requests/social-login.request.dto.js.map +0 -1
  293. package/src/lib/auth/dto/requests/verify-2fa.request.dto.d.ts +0 -5
  294. package/src/lib/auth/dto/requests/verify-2fa.request.dto.js +0 -21
  295. package/src/lib/auth/dto/requests/verify-2fa.request.dto.js.map +0 -1
  296. package/src/lib/auth/dto/requests/verify-forgot-password-otp-request-dto.d.ts +0 -6
  297. package/src/lib/auth/dto/requests/verify-forgot-password-otp-request-dto.js +0 -35
  298. package/src/lib/auth/dto/requests/verify-forgot-password-otp-request-dto.js.map +0 -1
  299. package/src/lib/auth/dto/requests/verify-totp-setup.request.dto.d.ts +0 -4
  300. package/src/lib/auth/dto/requests/verify-totp-setup.request.dto.js +0 -20
  301. package/src/lib/auth/dto/requests/verify-totp-setup.request.dto.js.map +0 -1
  302. package/src/lib/auth/dto/responses/auth.response.dto.d.ts +0 -16
  303. package/src/lib/auth/dto/responses/auth.response.dto.js +0 -50
  304. package/src/lib/auth/dto/responses/auth.response.dto.js.map +0 -1
  305. package/src/lib/auth/entities/mfa-secret.entity.d.ts +0 -12
  306. package/src/lib/auth/entities/mfa-secret.entity.js +0 -50
  307. package/src/lib/auth/entities/mfa-secret.entity.js.map +0 -1
  308. package/src/lib/auth/entities/otp.entity.d.ts +0 -13
  309. package/src/lib/auth/entities/otp.entity.js +0 -50
  310. package/src/lib/auth/entities/otp.entity.js.map +0 -1
  311. package/src/lib/auth/events/logged-out-all.event.js +0 -10
  312. package/src/lib/auth/events/logged-out-all.event.js.map +0 -1
  313. package/src/lib/auth/events/logged-out.event.js +0 -10
  314. package/src/lib/auth/events/logged-out.event.js.map +0 -1
  315. package/src/lib/auth/events/password-reset-requested.event.js +0 -10
  316. package/src/lib/auth/events/password-reset-requested.event.js.map +0 -1
  317. package/src/lib/auth/events/password-reset.event.js +0 -10
  318. package/src/lib/auth/events/password-reset.event.js.map +0 -1
  319. package/src/lib/auth/events/user-2fa-verified.event.js +0 -10
  320. package/src/lib/auth/events/user-2fa-verified.event.js.map +0 -1
  321. package/src/lib/auth/events/user-logged-in.event.js +0 -10
  322. package/src/lib/auth/events/user-logged-in.event.js.map +0 -1
  323. package/src/lib/auth/events/user-refresh-token.event.js +0 -10
  324. package/src/lib/auth/events/user-refresh-token.event.js.map +0 -1
  325. package/src/lib/auth/events/user-registered.event.js +0 -10
  326. package/src/lib/auth/events/user-registered.event.js.map +0 -1
  327. package/src/lib/auth/guards/auth.guard.d.ts +0 -28
  328. package/src/lib/auth/guards/auth.guard.js +0 -304
  329. package/src/lib/auth/guards/auth.guard.js.map +0 -1
  330. package/src/lib/auth/index.js +0 -31
  331. package/src/lib/auth/index.js.map +0 -1
  332. package/src/lib/auth/services/auth.service.d.ts +0 -53
  333. package/src/lib/auth/services/auth.service.js +0 -522
  334. package/src/lib/auth/services/auth.service.js.map +0 -1
  335. package/src/lib/auth/services/cookie.service.d.ts +0 -9
  336. package/src/lib/auth/services/cookie.service.js +0 -43
  337. package/src/lib/auth/services/cookie.service.js.map +0 -1
  338. package/src/lib/auth/services/mfa.service.d.ts +0 -38
  339. package/src/lib/auth/services/mfa.service.js +0 -254
  340. package/src/lib/auth/services/mfa.service.js.map +0 -1
  341. package/src/lib/auth.constants.d.ts +0 -39
  342. package/src/lib/auth.constants.js +0 -43
  343. package/src/lib/auth.constants.js.map +0 -1
  344. package/src/lib/core/core.module.d.ts +0 -2
  345. package/src/lib/core/core.module.js +0 -53
  346. package/src/lib/core/core.module.js.map +0 -1
  347. package/src/lib/core/decorators/auth.decorator.d.ts +0 -1
  348. package/src/lib/core/decorators/auth.decorator.js +0 -8
  349. package/src/lib/core/decorators/auth.decorator.js.map +0 -1
  350. package/src/lib/core/decorators/permissions.decorator.d.ts +0 -2
  351. package/src/lib/core/decorators/permissions.decorator.js +0 -14
  352. package/src/lib/core/decorators/permissions.decorator.js.map +0 -1
  353. package/src/lib/core/decorators/role.decorator.d.ts +0 -3
  354. package/src/lib/core/decorators/role.decorator.js +0 -14
  355. package/src/lib/core/decorators/role.decorator.js.map +0 -1
  356. package/src/lib/core/decorators/skip-mfa.decorator.d.ts +0 -2
  357. package/src/lib/core/decorators/skip-mfa.decorator.js +0 -8
  358. package/src/lib/core/decorators/skip-mfa.decorator.js.map +0 -1
  359. package/src/lib/core/dto/message.response.dto.d.ts +0 -3
  360. package/src/lib/core/dto/message.response.dto.js +0 -13
  361. package/src/lib/core/dto/message.response.dto.js.map +0 -1
  362. package/src/lib/core/entities.js +0 -31
  363. package/src/lib/core/entities.js.map +0 -1
  364. package/src/lib/core/index.js +0 -27
  365. package/src/lib/core/index.js.map +0 -1
  366. package/src/lib/core/interfaces/auth-module-options.interface.d.ts +0 -62
  367. package/src/lib/core/interfaces/auth-module-options.interface.js +0 -3
  368. package/src/lib/core/interfaces/auth-module-options.interface.js.map +0 -1
  369. package/src/lib/core/interfaces/mfa-options.interface.d.ts +0 -25
  370. package/src/lib/core/interfaces/mfa-options.interface.js +0 -10
  371. package/src/lib/core/interfaces/mfa-options.interface.js.map +0 -1
  372. package/src/lib/core/interfaces/otp.interface.d.ts +0 -5
  373. package/src/lib/core/interfaces/otp.interface.js +0 -10
  374. package/src/lib/core/interfaces/otp.interface.js.map +0 -1
  375. package/src/lib/core/interfaces/session-options.interface.d.ts +0 -12
  376. package/src/lib/core/interfaces/session-options.interface.js +0 -9
  377. package/src/lib/core/interfaces/session-options.interface.js.map +0 -1
  378. package/src/lib/core/interfaces/token-payload.interface.js +0 -3
  379. package/src/lib/core/interfaces/token-payload.interface.js.map +0 -1
  380. package/src/lib/core/providers/apple-auth.provider.d.ts +0 -18
  381. package/src/lib/core/providers/apple-auth.provider.js +0 -57
  382. package/src/lib/core/providers/apple-auth.provider.js.map +0 -1
  383. package/src/lib/core/providers/base-auth.provider.d.ts +0 -26
  384. package/src/lib/core/providers/base-auth.provider.js +0 -43
  385. package/src/lib/core/providers/base-auth.provider.js.map +0 -1
  386. package/src/lib/core/providers/email-auth.provider.d.ts +0 -17
  387. package/src/lib/core/providers/email-auth.provider.js +0 -40
  388. package/src/lib/core/providers/email-auth.provider.js.map +0 -1
  389. package/src/lib/core/providers/facebook-auth.provider.d.ts +0 -18
  390. package/src/lib/core/providers/facebook-auth.provider.js +0 -56
  391. package/src/lib/core/providers/facebook-auth.provider.js.map +0 -1
  392. package/src/lib/core/providers/google-auth.provider.d.ts +0 -21
  393. package/src/lib/core/providers/google-auth.provider.js +0 -58
  394. package/src/lib/core/providers/google-auth.provider.js.map +0 -1
  395. package/src/lib/core/providers/jwt-auth.provider.d.ts +0 -33
  396. package/src/lib/core/providers/jwt-auth.provider.js +0 -50
  397. package/src/lib/core/providers/jwt-auth.provider.js.map +0 -1
  398. package/src/lib/core/providers/phone-auth.provider.d.ts +0 -18
  399. package/src/lib/core/providers/phone-auth.provider.js +0 -43
  400. package/src/lib/core/providers/phone-auth.provider.js.map +0 -1
  401. package/src/lib/core/services/auth-config.service.d.ts +0 -12
  402. package/src/lib/core/services/auth-config.service.js +0 -79
  403. package/src/lib/core/services/auth-config.service.js.map +0 -1
  404. package/src/lib/core/services/auth-provider-registry.service.d.ts +0 -24
  405. package/src/lib/core/services/auth-provider-registry.service.js +0 -71
  406. package/src/lib/core/services/auth-provider-registry.service.js.map +0 -1
  407. package/src/lib/core/services/debug-logger.service.d.ts +0 -38
  408. package/src/lib/core/services/debug-logger.service.js.map +0 -1
  409. package/src/lib/core/services/initialization.service.d.ts +0 -10
  410. package/src/lib/core/services/initialization.service.js +0 -34
  411. package/src/lib/core/services/initialization.service.js.map +0 -1
  412. package/src/lib/core/services/jwt.service.d.ts +0 -14
  413. package/src/lib/core/services/jwt.service.js +0 -92
  414. package/src/lib/core/services/jwt.service.js.map +0 -1
  415. package/src/lib/nest-auth.module.d.ts +0 -11
  416. package/src/lib/nest-auth.module.js +0 -177
  417. package/src/lib/nest-auth.module.js.map +0 -1
  418. package/src/lib/request-context/request-context.d.ts +0 -22
  419. package/src/lib/request-context/request-context.js.map +0 -1
  420. package/src/lib/request-context/request-context.middleware.d.ts +0 -4
  421. package/src/lib/request-context/request-context.middleware.js +0 -16
  422. package/src/lib/request-context/request-context.middleware.js.map +0 -1
  423. package/src/lib/role/entities/role.entity.d.ts +0 -20
  424. package/src/lib/role/entities/role.entity.js +0 -110
  425. package/src/lib/role/entities/role.entity.js.map +0 -1
  426. package/src/lib/role/index.js +0 -5
  427. package/src/lib/role/index.js.map +0 -1
  428. package/src/lib/role/role.module.d.ts +0 -2
  429. package/src/lib/role/role.module.js +0 -23
  430. package/src/lib/role/role.module.js.map +0 -1
  431. package/src/lib/role/services/role.service.d.ts +0 -20
  432. package/src/lib/role/services/role.service.js.map +0 -1
  433. package/src/lib/session/entities/session.entity.d.ts +0 -16
  434. package/src/lib/session/entities/session.entity.js +0 -63
  435. package/src/lib/session/entities/session.entity.js.map +0 -1
  436. package/src/lib/session/index.d.ts +0 -3
  437. package/src/lib/session/index.js +0 -7
  438. package/src/lib/session/index.js.map +0 -1
  439. package/src/lib/session/services/base-session.service.d.ts +0 -23
  440. package/src/lib/session/services/base-session.service.js +0 -64
  441. package/src/lib/session/services/base-session.service.js.map +0 -1
  442. package/src/lib/session/services/database-session.service.d.ts +0 -17
  443. package/src/lib/session/services/database-session.service.js +0 -51
  444. package/src/lib/session/services/database-session.service.js.map +0 -1
  445. package/src/lib/session/services/redis-session.service.d.ts +0 -20
  446. package/src/lib/session/services/redis-session.service.js +0 -117
  447. package/src/lib/session/services/redis-session.service.js.map +0 -1
  448. package/src/lib/session/session.module.d.ts +0 -2
  449. package/src/lib/session/session.module.js +0 -33
  450. package/src/lib/session/session.module.js.map +0 -1
  451. package/src/lib/tenant/entities/tenant.entity.d.ts +0 -10
  452. package/src/lib/tenant/entities/tenant.entity.js +0 -44
  453. package/src/lib/tenant/entities/tenant.entity.js.map +0 -1
  454. package/src/lib/tenant/events/tenant-created.event.d.ts +0 -8
  455. package/src/lib/tenant/events/tenant-created.event.js +0 -10
  456. package/src/lib/tenant/events/tenant-created.event.js.map +0 -1
  457. package/src/lib/tenant/events/tenant-deleted.event.d.ts +0 -8
  458. package/src/lib/tenant/events/tenant-deleted.event.js +0 -10
  459. package/src/lib/tenant/events/tenant-deleted.event.js.map +0 -1
  460. package/src/lib/tenant/events/tenant-updated.event.js +0 -10
  461. package/src/lib/tenant/events/tenant-updated.event.js.map +0 -1
  462. package/src/lib/tenant/index.d.ts +0 -1
  463. package/src/lib/tenant/index.js +0 -5
  464. package/src/lib/tenant/index.js.map +0 -1
  465. package/src/lib/tenant/services/tenant.service.d.ts +0 -26
  466. package/src/lib/tenant/services/tenant.service.js +0 -200
  467. package/src/lib/tenant/services/tenant.service.js.map +0 -1
  468. package/src/lib/tenant/tenant.module.d.ts +0 -2
  469. package/src/lib/tenant/tenant.module.js +0 -27
  470. package/src/lib/tenant/tenant.module.js.map +0 -1
  471. package/src/lib/user/dto/requests/update-user.dto.d.ts +0 -5
  472. package/src/lib/user/dto/requests/update-user.dto.js +0 -24
  473. package/src/lib/user/dto/requests/update-user.dto.js.map +0 -1
  474. package/src/lib/user/entities/access-key.entity.d.ts +0 -16
  475. package/src/lib/user/entities/access-key.entity.js +0 -63
  476. package/src/lib/user/entities/access-key.entity.js.map +0 -1
  477. package/src/lib/user/entities/identity.entity.d.ts +0 -12
  478. package/src/lib/user/entities/identity.entity.js +0 -47
  479. package/src/lib/user/entities/identity.entity.js.map +0 -1
  480. package/src/lib/user/entities/user.entity.d.ts +0 -39
  481. package/src/lib/user/entities/user.entity.js +0 -201
  482. package/src/lib/user/entities/user.entity.js.map +0 -1
  483. package/src/lib/user/events/user-created.event.js +0 -10
  484. package/src/lib/user/events/user-created.event.js.map +0 -1
  485. package/src/lib/user/events/user-deleted.event.js +0 -10
  486. package/src/lib/user/events/user-deleted.event.js.map +0 -1
  487. package/src/lib/user/events/user-updated.event.js +0 -10
  488. package/src/lib/user/events/user-updated.event.js.map +0 -1
  489. package/src/lib/user/index.d.ts +0 -3
  490. package/src/lib/user/index.js +0 -7
  491. package/src/lib/user/index.js.map +0 -1
  492. package/src/lib/user/services/access-key.service.d.ts +0 -19
  493. package/src/lib/user/services/access-key.service.js +0 -119
  494. package/src/lib/user/services/access-key.service.js.map +0 -1
  495. package/src/lib/user/services/user.service.d.ts +0 -24
  496. package/src/lib/user/services/user.service.js.map +0 -1
  497. package/src/lib/user/user.module.d.ts +0 -2
  498. package/src/lib/user/user.module.js +0 -34
  499. package/src/lib/user/user.module.js.map +0 -1
  500. package/src/lib/utils/database.utils.d.ts +0 -2
  501. package/src/lib/utils/database.utils.js +0 -8
  502. package/src/lib/utils/database.utils.js.map +0 -1
  503. package/src/lib/utils/otp.d.ts +0 -1
  504. package/src/lib/utils/otp.js +0 -7
  505. package/src/lib/utils/otp.js.map +0 -1
@@ -0,0 +1,50 @@
1
+ import { Module } from '@nestjs/common';
2
+ import { TypeOrmModule } from '@nestjs/typeorm';
3
+ import { AuthProviderRegistryService } from './services/auth-provider-registry.service';
4
+ import { AppleAuthProvider } from './providers/apple-auth.provider';
5
+ import { JwtAuthProvider } from './providers/jwt-auth.provider';
6
+ import { EmailAuthProvider } from './providers/email-auth.provider';
7
+ import { FacebookAuthProvider } from './providers/facebook-auth.provider';
8
+ import { GoogleAuthProvider } from './providers/google-auth.provider';
9
+ import { GitHubAuthProvider } from './providers/github-auth.provider';
10
+ import { PhoneAuthProvider } from './providers/phone-auth.provider';
11
+ import { JwtService } from './services/jwt.service';
12
+ import { AuthConfigService } from './services/auth-config.service';
13
+ import { InitializationService } from './services/initialization.service';
14
+ import { DebugLoggerService } from './services/debug-logger.service';
15
+ import { TenantModule } from '../tenant/tenant.module';
16
+ import { NestAuthUser } from '../user/entities/user.entity';
17
+ import { NestAuthIdentity } from '../user/entities/identity.entity';
18
+
19
+ /**
20
+ * CoreModule provides core authentication services and providers.
21
+ * Imports TypeOrmModule.forFeature to provide DataSource for auth providers.
22
+ */
23
+ @Module({
24
+ imports: [
25
+ TypeOrmModule.forFeature([NestAuthUser, NestAuthIdentity]),
26
+ TenantModule
27
+ ],
28
+ providers: [
29
+ AuthConfigService,
30
+ DebugLoggerService,
31
+ JwtService,
32
+ AuthProviderRegistryService,
33
+ EmailAuthProvider,
34
+ PhoneAuthProvider,
35
+ JwtAuthProvider,
36
+ GoogleAuthProvider,
37
+ FacebookAuthProvider,
38
+ AppleAuthProvider,
39
+ GitHubAuthProvider,
40
+ InitializationService,
41
+ ],
42
+ exports: [
43
+ JwtService,
44
+ AuthProviderRegistryService,
45
+ AuthConfigService,
46
+ DebugLoggerService,
47
+ InitializationService,
48
+ ],
49
+ })
50
+ export class CoreModule { }
@@ -0,0 +1,38 @@
1
+ import { UseGuards, applyDecorators, SetMetadata } from '@nestjs/common';
2
+ import { NestAuthAuthGuard, OPTIONAL_AUTH_KEY } from '../../auth/guards/auth.guard';
3
+
4
+ /**
5
+ * Flexible Authentication Decorator
6
+ *
7
+ * This decorator applies the NestAuthAuthGuard with configurable authentication mode:
8
+ *
9
+ * @param optional - If true, authentication becomes optional (no errors thrown for missing/invalid tokens)
10
+ *
11
+ * @example Required Authentication (default behavior):
12
+ * ```typescript
13
+ * @Get('protected')
14
+ * @Auth() // or @Auth(false)
15
+ * async getProtectedData(@Request() req) {
16
+ * const user = req.user; // Will always exist or request fails
17
+ * return this.getProtectedData(user.id);
18
+ * }
19
+ * ```
20
+ *
21
+ * @example Optional Authentication:
22
+ * ```typescript
23
+ * @Get('posts')
24
+ * @Auth(true) // Optional authentication
25
+ * async getPosts(@Request() req) {
26
+ * const user = req.user; // Will be null if not authenticated
27
+ * if (user) {
28
+ * return this.getPersonalizedPosts(user.id);
29
+ * } else {
30
+ * return this.getPublicPosts();
31
+ * }
32
+ * }
33
+ * ```
34
+ */
35
+ export const Auth = (optional: boolean = false) => applyDecorators(
36
+ SetMetadata(OPTIONAL_AUTH_KEY, optional),
37
+ UseGuards(NestAuthAuthGuard)
38
+ );
@@ -0,0 +1,17 @@
1
+ import { SetMetadata } from '@nestjs/common';
2
+
3
+ export const PERMISSIONS_KEY = 'nest_auth_permissions';
4
+
5
+ /**
6
+ * Decorator to specify required permissions for a route
7
+ * @param permissions - Array of permission strings or single permission string
8
+ * @returns Decorator function
9
+ */
10
+ export function NestAuthPermissions(permissions: string[] | string) {
11
+ return (target: any, key?: string, descriptor?: PropertyDescriptor) => {
12
+ if (descriptor) {
13
+ Reflect.defineMetadata(PERMISSIONS_KEY, permissions, descriptor.value);
14
+ }
15
+ return descriptor;
16
+ };
17
+ }
@@ -0,0 +1,33 @@
1
+ import { SetMetadata } from '@nestjs/common';
2
+
3
+ /**
4
+ * Key for public route metadata
5
+ * Used to mark routes that should skip authentication when global guard is enabled
6
+ */
7
+ export const IS_PUBLIC_KEY = 'isPublic';
8
+
9
+ /**
10
+ * @Public decorator
11
+ *
12
+ * Use this decorator to skip authentication on specific routes when enableGlobalGuard is true.
13
+ *
14
+ * @example
15
+ * ```typescript
16
+ * @Controller('users')
17
+ * export class UsersController {
18
+ * // This route is public - no authentication required
19
+ * @Public()
20
+ * @Get('info')
21
+ * getPublicInfo() {
22
+ * return { info: 'public data' };
23
+ * }
24
+ *
25
+ * // This route requires authentication (protected by global guard)
26
+ * @Get('profile')
27
+ * getProfile(@Request() req) {
28
+ * return req.user;
29
+ * }
30
+ * }
31
+ * ```
32
+ */
33
+ export const Public = () => SetMetadata(IS_PUBLIC_KEY, true);
@@ -0,0 +1,12 @@
1
+
2
+ export const ROLES_KEY = 'nest_auth_roles';
3
+ export const GUARD_KEY = 'nest_auth_guard';
4
+
5
+
6
+ export function NestAuthRoles(roles: string[] | string, guard?: string) {
7
+ return (target: any, key: string, descriptor: PropertyDescriptor) => {
8
+ Reflect.defineMetadata(ROLES_KEY, roles, descriptor.value);
9
+ Reflect.defineMetadata(GUARD_KEY, guard, descriptor.value);
10
+ return descriptor;
11
+ };
12
+ }
@@ -0,0 +1,4 @@
1
+ import { SetMetadata } from '@nestjs/common';
2
+
3
+ export const SKIP_MFA_KEY = 'skipMfa';
4
+ export const SkipMfa = () => SetMetadata(SKIP_MFA_KEY, true);
@@ -0,0 +1,6 @@
1
+ import { ApiProperty } from '@nestjs/swagger';
2
+
3
+ export class MessageResponseDto {
4
+ @ApiProperty({ description: 'Response message' })
5
+ message: string;
6
+ }
@@ -6,6 +6,9 @@ import { NestAuthRole } from '../role/entities/role.entity';
6
6
  import { NestAuthMFASecret } from '../auth/entities/mfa-secret.entity';
7
7
  import { NestAuthOTP } from '../auth/entities/otp.entity';
8
8
  import { NestAuthSession } from '../session/entities/session.entity';
9
+ import { NestAuthPermission } from '../permission/entities/permission.entity';
10
+ import { AdminUser as NestAuthAdminUser } from '../admin-console/entities/admin-user.entity';
11
+
9
12
  export * from '../user/entities/user.entity';
10
13
  export * from '../user/entities/identity.entity';
11
14
  export * from '../user/entities/access-key.entity';
@@ -14,4 +17,18 @@ export * from '../role/entities/role.entity';
14
17
  export * from '../auth/entities/mfa-secret.entity';
15
18
  export * from '../auth/entities/otp.entity';
16
19
  export * from '../session/entities/session.entity';
17
- export declare const NestAuthEntities: (typeof NestAuthTenant | typeof NestAuthIdentity | typeof NestAuthUser | typeof NestAuthSession | typeof NestAuthOTP | typeof NestAuthMFASecret | typeof NestAuthRole | typeof NestAuthAccessKey)[];
20
+ export * from '../permission/entities/permission.entity';
21
+ export { AdminUser as NestAuthAdminUser } from '../admin-console/entities/admin-user.entity';
22
+
23
+ export const NestAuthEntities = [
24
+ NestAuthUser,
25
+ NestAuthIdentity,
26
+ NestAuthRole,
27
+ NestAuthTenant,
28
+ NestAuthMFASecret,
29
+ NestAuthSession,
30
+ NestAuthOTP,
31
+ NestAuthAccessKey,
32
+ NestAuthPermission,
33
+ NestAuthAdminUser,
34
+ ];
@@ -1,23 +1,40 @@
1
+ // Decorators
1
2
  export * from './decorators/role.decorator';
2
3
  export * from './decorators/permissions.decorator';
3
4
  export * from './decorators/skip-mfa.decorator';
4
5
  export * from './decorators/auth.decorator';
6
+
7
+ // Interfaces
5
8
  export * from './interfaces/auth-module-options.interface';
6
9
  export * from './interfaces/mfa-options.interface';
7
10
  export * from './interfaces/session-options.interface';
8
11
  export * from './interfaces/token-payload.interface';
12
+
13
+ // Entities
9
14
  export * from './entities';
15
+
16
+ // DTOs
10
17
  export * from './dto/message.response.dto';
18
+
19
+
20
+ // Interface
11
21
  export * from './interfaces/auth-module-options.interface';
12
22
  export * from './interfaces/mfa-options.interface';
13
23
  export * from './interfaces/session-options.interface';
14
24
  export * from './interfaces/token-payload.interface';
15
25
  export * from './interfaces/otp.interface';
26
+
27
+ // Providers
28
+ export * from './providers/base-auth.provider';
16
29
  export * from './providers/email-auth.provider';
17
30
  export * from './providers/phone-auth.provider';
18
31
  export * from './providers/jwt-auth.provider';
19
32
  export * from './providers/google-auth.provider';
20
33
  export * from './providers/facebook-auth.provider';
21
34
  export * from './providers/apple-auth.provider';
35
+ export * from './providers/github-auth.provider';
36
+
37
+
38
+ // Services
22
39
  export * from './services/auth-provider-registry.service';
23
40
  export * from './services/jwt.service';
@@ -0,0 +1,211 @@
1
+ import { Type } from '@nestjs/common';
2
+ import { MFAOptions } from './mfa-options.interface';
3
+ import { CookieOptions, SessionOptions } from './session-options.interface';
4
+ import { BaseAuthProvider } from '../providers/base-auth.provider';
5
+ import { DebugLogOptions } from '../services/debug-logger.service';
6
+
7
+ /**
8
+ * Default Tenant Options
9
+ *
10
+ * When configured, a default tenant will be automatically created on module initialization
11
+ * and used for all authentication operations when no tenantId is explicitly provided.
12
+ *
13
+ * This enables single-tenant mode where users don't need to pass tenantId in signup/login requests.
14
+ */
15
+ export interface DefaultTenantOptions {
16
+ /** Name of the default tenant */
17
+ name: string;
18
+
19
+ /**
20
+ * Unique identifier/slug for the tenant
21
+ * Must be lowercase, no spaces, only letters, numbers, hyphens (-) and underscores (_)
22
+ * Examples: 'my-app', 'acme_corp', 'tenant123'
23
+ */
24
+ slug: string;
25
+
26
+ /**
27
+ * @deprecated Use 'slug' instead. Will be removed in v2.0.0
28
+ * Unique domain identifier for the tenant (legacy field)
29
+ */
30
+ domain?: string;
31
+
32
+ /** Optional description */
33
+ description?: string;
34
+
35
+ /** Optional metadata */
36
+ metadata?: Record<string, any>;
37
+ }
38
+
39
+ export interface RegistrationCollectProfileField {
40
+ id: string;
41
+ label: string;
42
+ required: boolean;
43
+ type: 'text' | 'email' | 'phone' | 'select' | 'checkbox' | 'password';
44
+ placeholder?: string;
45
+ options?: Array<{ label: string; value: string }>;
46
+ }
47
+
48
+ export interface AuthModuleOptions {
49
+ isGlobal?: boolean;
50
+ appName: string;
51
+ /**
52
+ * Enable automatic token refresh via global interceptor.
53
+ * When enabled, expired access tokens are automatically refreshed using refresh tokens.
54
+ *
55
+ * Default: true (automatic refresh enabled)
56
+ */
57
+ enableAutoRefresh?: boolean;
58
+ accessTokenType?: 'header' | 'cookie';
59
+ cookieOptions?: CookieOptions;
60
+ jwt: {
61
+ secret: string;
62
+ accessTokenExpiresIn?: number | string; // expressed in seconds or a string describing a time span [zeit/ms](https://github.com/zeit/ms.js). Eg: 60, "2 days", "10h", "7d"
63
+ refreshTokenExpiresIn?: number | string; // expressed in seconds or a string describing a time span [zeit/ms](https://github.com/zeit/ms.js). Eg: 60, "2 days", "10h", "7d"
64
+ };
65
+ google?: {
66
+ clientId: string;
67
+ clientSecret: string;
68
+ redirectUri: string;
69
+ };
70
+ facebook?: {
71
+ appId: string;
72
+ appSecret: string;
73
+ redirectUri: string;
74
+ };
75
+ apple?: {
76
+ clientId: string;
77
+ teamId: string;
78
+ keyId: string;
79
+ privateKey: string;
80
+ privateKeyMethod?: string;
81
+ redirectUri: string;
82
+ };
83
+ github?: {
84
+ clientId: string;
85
+ clientSecret: string;
86
+ redirectUri: string;
87
+ };
88
+ phoneAuth?: {
89
+ enabled: boolean;
90
+ };
91
+ emailAuth?: {
92
+ enabled: boolean;
93
+ };
94
+ /**
95
+ * Registration configuration
96
+ * Controls user registration/signup behavior and profile fields
97
+ */
98
+ registration?: {
99
+ enabled?: boolean;
100
+ requireInvitation?: boolean;
101
+ collectProfileFields?: Array<RegistrationCollectProfileField>;
102
+ };
103
+ /**
104
+ * Client configuration customization
105
+ * Allows extending/modifying the client-config endpoint response
106
+ */
107
+ clientConfig?: {
108
+ /**
109
+ * Factory function to customize the client config response
110
+ * Receives the default config and can modify/return it
111
+ */
112
+ factory?: (defaultConfig: any, context: { configService: any; tenantService: any }) => Promise<any> | any;
113
+ };
114
+ mfa?: MFAOptions;
115
+ session?: SessionOptions;
116
+ customAuthProviders?: BaseAuthProvider[];
117
+ passwordResetOtpExpiresIn?: number | string; // expressed in seconds or a string describing a time span [zeit/ms](https://github.com/zeit/ms.js). Eg: 60, "2 days", "10h", "7d"
118
+ passwordResetTokenExpiresIn?: number | string; // expressed in seconds or a string describing a time span [zeit/ms](https://github.com/zeit/ms.js). Eg: 60, "2 days", "10h", "7d"
119
+ /**
120
+ * Configure a default tenant for single-tenant applications.
121
+ * When set, tenantId becomes optional in all authentication requests.
122
+ * The default tenant is automatically created on module initialization.
123
+ *
124
+ * Example:
125
+ * ```typescript
126
+ * defaultTenant: {
127
+ * name: 'My App',
128
+ * slug: 'my-app' // lowercase, no spaces, only a-z0-9_-
129
+ * }
130
+ * ```
131
+ *
132
+ * Legacy (deprecated):
133
+ * ```typescript
134
+ * defaultTenant: {
135
+ * name: 'My App',
136
+ * domain: 'myapp' // Still supported but use 'slug' instead
137
+ * }
138
+ * ```
139
+ */
140
+ defaultTenant?: DefaultTenantOptions;
141
+ /**
142
+ * Embedded admin console configuration.
143
+ * Provides a password-protected dashboard for managing users, roles, tenants, and system settings.
144
+ *
145
+ * The admin console secretKey is also used for admin signup via the /signup endpoint.
146
+ */
147
+ adminConsole?: AdminConsoleOptions;
148
+ debug?: DebugLogOptions;
149
+ }
150
+
151
+ export interface AdminConsoleOptions {
152
+ /** Enable or disable the embedded admin console (default: true) */
153
+ enabled?: boolean;
154
+ /** Base path where the console is served (default: /auth/admin) */
155
+ basePath?: string;
156
+ /**
157
+ * Nest Auth Admin Console Secret Key used for security operations.
158
+ * This key is used for:
159
+ * - Signing admin dashboard sessions
160
+ * - Admin signup via /signup endpoint
161
+ * - Password reset operations
162
+ *
163
+ * You can set this to any value you prefer:
164
+ * - Hardcode: secretKey: 'your-secret-key-here'
165
+ * - Environment variable: secretKey: process.env.MY_SECRET_KEY (use any variable name)
166
+ */
167
+ secretKey?: string;
168
+ /** Cookie name for admin dashboard sessions (default: nest_auth_admin) */
169
+ sessionCookieName?: string;
170
+ /** Session duration expressed in seconds or ms string (default: 2h) */
171
+ sessionDuration?: string | number;
172
+ /**
173
+ * @deprecated This option is no longer used. Admin users are created directly without role assignment.
174
+ * Role name for super admin created via /initialize endpoint (default: 'super-admin')
175
+ */
176
+ superAdminRole?: string;
177
+ /**
178
+ * @deprecated This option is no longer used. The /signup endpoint is always available when secretKey is configured.
179
+ * Whether the /initialize endpoint is enabled for super admin creation (default: true if secretKey is available)
180
+ */
181
+ initializeEnabled?: boolean;
182
+ /**
183
+ * Cookie options applied to the admin session cookie.
184
+ * httpOnly and sameSite default to true/'lax' respectively.
185
+ */
186
+ cookie?: CookieOptions;
187
+ /**
188
+ * Allow managing other dashboard admins through the console UI (default: true).
189
+ */
190
+ allowAdminManagement?: boolean;
191
+ }
192
+
193
+ export interface AuthModuleAsyncOptions {
194
+ isGlobal?: boolean;
195
+ /**
196
+ * Enable automatic token refresh via global interceptor.
197
+ * When enabled, expired access tokens are automatically refreshed using refresh tokens.
198
+ *
199
+ * Default: true (automatic refresh enabled)
200
+ */
201
+ enableAutoRefresh?: boolean;
202
+ imports?: any[];
203
+ useFactory?: (...args: any[]) => Promise<AuthModuleOptions> | AuthModuleOptions;
204
+ inject?: any[];
205
+ useClass?: Type<AuthModuleOptionsFactory>;
206
+ useExisting?: Type<AuthModuleOptionsFactory>;
207
+ }
208
+
209
+ export interface AuthModuleOptionsFactory {
210
+ createAuthModuleOptions(): Promise<AuthModuleOptions> | AuthModuleOptions;
211
+ }
@@ -0,0 +1,46 @@
1
+
2
+ export interface MFAOptions {
3
+ // Whether MFA is enabled for the application
4
+ enabled?: boolean;
5
+
6
+ // Whether MFA is required for all users
7
+ required?: boolean;
8
+
9
+ // Default enabled MFA methods
10
+ methods?: MFAMethodEnum[];
11
+
12
+ // OTP length
13
+ otpLength?: number;
14
+
15
+ // Default TOTP settings
16
+ totp?: {
17
+ issuer: string;
18
+ period: number;
19
+ };
20
+
21
+ // Default SMS settings
22
+ sms?: {
23
+ provider: string;
24
+ template: string;
25
+ };
26
+
27
+ // Default Email settings
28
+ email?: {
29
+ template: string;
30
+ };
31
+
32
+ // Whether users can enable/disable MFA
33
+ allowUserToggle?: boolean;
34
+
35
+ // Whether users can choose their MFA methods
36
+ allowMethodSelection?: boolean;
37
+
38
+ // OTP expiry time
39
+ otpExpiresIn?: string | number;
40
+ }
41
+
42
+ export enum MFAMethodEnum {
43
+ TOTP = 'totp',
44
+ SMS = 'sms',
45
+ EMAIL = 'email',
46
+ }
@@ -0,0 +1,6 @@
1
+
2
+ export enum OTPTypeEnum {
3
+ PASSWORD_RESET = 'password_reset',
4
+ VERIFICATION = 'verification',
5
+ MFA = 'mfa',
6
+ }
@@ -0,0 +1,19 @@
1
+ import { CookieOptions as ExpressCookieOptions } from 'express';
2
+
3
+ export enum SessionStorageType {
4
+ REDIS = 'redis',
5
+ DATABASE = 'database',
6
+ MEMORY = 'memory'
7
+ }
8
+
9
+ export interface SessionOptions {
10
+ storageType: SessionStorageType;
11
+ redisUrl?: string;
12
+ sessionExpiry?: number | string; // expressed in seconds or a string describing a time span [zeit/ms](https://github.com/zeit/ms.js). Eg: 60, "2 days", "10h", "7d"
13
+ refreshTokenExpiry?: number | string; // expressed in seconds or a string describing a time span [zeit/ms](https://github.com/zeit/ms.js). Eg: 60, "2 days", "10h", "7d"
14
+ maxSessionsPerUser?: number; // Maximum number of active sessions per user (default: 10)
15
+ slidingExpiration?: boolean; // Whether to extend session on activity (default: true)
16
+ }
17
+
18
+
19
+ export type CookieOptions = Omit<ExpressCookieOptions, 'maxAge'>
@@ -1,8 +1,9 @@
1
1
  import { NestAuthRole } from '../../role/entities/role.entity';
2
2
  import { NestAuthUser } from '../../user/entities/user.entity';
3
+
3
4
  export interface JWTTokenPayload {
4
5
  id?: string;
5
- sub?: string;
6
+ sub?: string; // user id
6
7
  email?: string;
7
8
  phone?: string;
8
9
  isVerified?: boolean;
@@ -15,6 +16,7 @@ export interface JWTTokenPayload {
15
16
  exp?: number;
16
17
  iat?: number;
17
18
  }
19
+
18
20
  export interface SessionPayload {
19
21
  id?: string;
20
22
  userId?: string;
@@ -33,6 +35,7 @@ export interface SessionPayload {
33
35
  createdAt?: Date;
34
36
  updatedAt?: Date;
35
37
  }
38
+
36
39
  export interface TokenGenerationResponse {
37
40
  accessToken: string;
38
41
  refreshToken: string;
@@ -0,0 +1,61 @@
1
+ import AppleAuth from 'apple-auth';
2
+ import { Injectable, UnauthorizedException } from '@nestjs/common';
3
+ import { DataSource } from 'typeorm';
4
+ import { BaseAuthProvider } from './base-auth.provider';
5
+ import { APPLE_AUTH_PROVIDER } from '../../auth.constants';
6
+ import { NestAuthUser } from '../../user/entities/user.entity';
7
+ import { NestAuthIdentity } from '../../user/entities/identity.entity';
8
+ import { JwtService } from '../services/jwt.service';
9
+
10
+ @Injectable()
11
+ export class AppleAuthProvider extends BaseAuthProvider {
12
+ providerName = APPLE_AUTH_PROVIDER;
13
+
14
+ private appleAuth: AppleAuth;
15
+
16
+ constructor(
17
+ readonly dataSource: DataSource,
18
+ private readonly jwtService: JwtService,
19
+ ) {
20
+ const userRepository = dataSource.getRepository(NestAuthUser);
21
+ const authIdentityRepository = dataSource.getRepository(NestAuthIdentity);
22
+
23
+ super(userRepository, authIdentityRepository);
24
+
25
+ const appleConfig = this.options.apple;
26
+
27
+ this.enabled = Boolean(this.options.apple);
28
+
29
+ if (this.enabled) {
30
+ this.appleAuth = new AppleAuth(
31
+ {
32
+ scope: 'email name',
33
+ redirect_uri: appleConfig.redirectUri,
34
+ team_id: appleConfig.teamId,
35
+ key_id: appleConfig.keyId,
36
+ client_id: appleConfig.clientId,
37
+ },
38
+ appleConfig.privateKey,
39
+ appleConfig.privateKeyMethod || 'text',
40
+ );
41
+ }
42
+ }
43
+
44
+ async validate(credentials: { accessToken: string }) {
45
+ try {
46
+ const response = await this.appleAuth.accessToken(credentials.accessToken);
47
+ const user = this.jwtService.decodeToken(response.id_token);
48
+ return {
49
+ userId: user.id,
50
+ email: user.email || '',
51
+ metadata: user,
52
+ };
53
+ } catch (error) {
54
+ throw new UnauthorizedException('Invalid Apple token');
55
+ }
56
+ }
57
+
58
+ getRequiredFields(): string[] {
59
+ return ['accessToken'];
60
+ }
61
+ }