@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,1687 @@
1
+ {
2
+ "openapi": "3.0.0",
3
+ "paths": {
4
+ "/auth/signup": {
5
+ "post": {
6
+ "description": "Register a new user. Response format depends on accessTokenType configuration:\n- Header mode (default): Returns tokens in response body\n- Cookie mode: Sets tokens in HTTP-only cookies and returns success message",
7
+ "operationId": "AuthController_signup",
8
+ "parameters": [],
9
+ "requestBody": {
10
+ "required": true,
11
+ "content": {
12
+ "application/json": {
13
+ "schema": {
14
+ "$ref": "#/components/schemas/SignupRequestDto"
15
+ }
16
+ }
17
+ }
18
+ },
19
+ "responses": {
20
+ "200": {
21
+ "description": "Header mode: Returns message + tokens in body",
22
+ "content": {
23
+ "application/json": {
24
+ "schema": {
25
+ "$ref": "#/components/schemas/AuthWithTokensResponseDto"
26
+ }
27
+ }
28
+ }
29
+ }
30
+ },
31
+ "summary": "Signup",
32
+ "tags": [
33
+ "Auth"
34
+ ]
35
+ }
36
+ },
37
+ "/auth/login": {
38
+ "post": {
39
+ "description": "Authenticate user. Response format depends on accessTokenType configuration:\n- Header mode (default): Returns tokens in response body\n- Cookie mode: Sets tokens in HTTP-only cookies and returns success message",
40
+ "operationId": "AuthController_login",
41
+ "parameters": [],
42
+ "requestBody": {
43
+ "required": true,
44
+ "content": {
45
+ "application/json": {
46
+ "schema": {
47
+ "$ref": "#/components/schemas/LoginRequestDto"
48
+ }
49
+ }
50
+ }
51
+ },
52
+ "responses": {
53
+ "200": {
54
+ "description": "Header mode: Returns message + tokens in body",
55
+ "content": {
56
+ "application/json": {
57
+ "schema": {
58
+ "$ref": "#/components/schemas/AuthWithTokensResponseDto"
59
+ }
60
+ }
61
+ }
62
+ }
63
+ },
64
+ "summary": "Login",
65
+ "tags": [
66
+ "Auth"
67
+ ]
68
+ }
69
+ },
70
+ "/auth/refresh-token": {
71
+ "post": {
72
+ "description": "Refresh access token. Response format depends on accessTokenType configuration:\n- Header mode (default): Returns new tokens in response body\n- Cookie mode: Sets new tokens in HTTP-only cookies and returns success message",
73
+ "operationId": "AuthController_refreshToken",
74
+ "parameters": [],
75
+ "requestBody": {
76
+ "required": true,
77
+ "content": {
78
+ "application/json": {
79
+ "schema": {
80
+ "$ref": "#/components/schemas/RefreshTokenRequestDto"
81
+ }
82
+ }
83
+ }
84
+ },
85
+ "responses": {
86
+ "200": {
87
+ "description": "Header mode: Returns message + tokens in body",
88
+ "content": {
89
+ "application/json": {
90
+ "schema": {
91
+ "$ref": "#/components/schemas/AuthWithTokensResponseDto"
92
+ }
93
+ }
94
+ }
95
+ }
96
+ },
97
+ "summary": "Refresh Token",
98
+ "tags": [
99
+ "Auth"
100
+ ]
101
+ }
102
+ },
103
+ "/auth/send-2fa-code": {
104
+ "post": {
105
+ "operationId": "AuthController_send2faCode",
106
+ "parameters": [],
107
+ "responses": {
108
+ "200": {
109
+ "description": "",
110
+ "content": {
111
+ "application/json": {
112
+ "schema": {
113
+ "$ref": "#/components/schemas/MessageResponseDto"
114
+ }
115
+ }
116
+ }
117
+ }
118
+ },
119
+ "summary": "Send 2FA Code",
120
+ "tags": [
121
+ "Auth"
122
+ ]
123
+ }
124
+ },
125
+ "/auth/verify-2fa": {
126
+ "post": {
127
+ "description": "Verify two-factor authentication. Response format depends on accessTokenType configuration:\n- Header mode (default): Returns tokens in response body\n- Cookie mode: Sets tokens in HTTP-only cookies and returns success message",
128
+ "operationId": "AuthController_verify2fa",
129
+ "parameters": [],
130
+ "requestBody": {
131
+ "required": true,
132
+ "content": {
133
+ "application/json": {
134
+ "schema": {
135
+ "$ref": "#/components/schemas/Verify2faRequestDto"
136
+ }
137
+ }
138
+ }
139
+ },
140
+ "responses": {
141
+ "200": {
142
+ "description": "Header mode: Returns message + tokens in body",
143
+ "content": {
144
+ "application/json": {
145
+ "schema": {
146
+ "$ref": "#/components/schemas/Verify2faWithTokensResponseDto"
147
+ }
148
+ }
149
+ }
150
+ }
151
+ },
152
+ "summary": "Verify 2FA",
153
+ "tags": [
154
+ "Auth"
155
+ ]
156
+ }
157
+ },
158
+ "/auth/logout": {
159
+ "post": {
160
+ "operationId": "AuthController_logout",
161
+ "parameters": [],
162
+ "responses": {
163
+ "200": {
164
+ "description": "",
165
+ "content": {
166
+ "application/json": {
167
+ "schema": {
168
+ "$ref": "#/components/schemas/MessageResponseDto"
169
+ }
170
+ }
171
+ }
172
+ }
173
+ },
174
+ "summary": "Logout",
175
+ "tags": [
176
+ "Auth"
177
+ ]
178
+ }
179
+ },
180
+ "/auth/logout-all": {
181
+ "post": {
182
+ "operationId": "AuthController_logoutAll",
183
+ "parameters": [],
184
+ "responses": {
185
+ "200": {
186
+ "description": "",
187
+ "content": {
188
+ "application/json": {
189
+ "schema": {
190
+ "$ref": "#/components/schemas/MessageResponseDto"
191
+ }
192
+ }
193
+ }
194
+ }
195
+ },
196
+ "summary": "Logout All",
197
+ "tags": [
198
+ "Auth"
199
+ ]
200
+ }
201
+ },
202
+ "/auth/change-password": {
203
+ "post": {
204
+ "operationId": "AuthController_changePassword",
205
+ "parameters": [],
206
+ "requestBody": {
207
+ "required": true,
208
+ "content": {
209
+ "application/json": {
210
+ "schema": {
211
+ "$ref": "#/components/schemas/ChangePasswordRequestDto"
212
+ }
213
+ }
214
+ }
215
+ },
216
+ "responses": {
217
+ "200": {
218
+ "description": "",
219
+ "content": {
220
+ "application/json": {
221
+ "schema": {
222
+ "$ref": "#/components/schemas/AuthWithTokensResponseDto"
223
+ }
224
+ }
225
+ }
226
+ }
227
+ },
228
+ "summary": "Change Password",
229
+ "tags": [
230
+ "Auth"
231
+ ]
232
+ }
233
+ },
234
+ "/auth/forgot-password": {
235
+ "post": {
236
+ "operationId": "AuthController_forgotPassword",
237
+ "parameters": [],
238
+ "requestBody": {
239
+ "required": true,
240
+ "content": {
241
+ "application/json": {
242
+ "schema": {
243
+ "$ref": "#/components/schemas/ForgotPasswordRequestDto"
244
+ }
245
+ }
246
+ }
247
+ },
248
+ "responses": {
249
+ "200": {
250
+ "description": "",
251
+ "content": {
252
+ "application/json": {
253
+ "schema": {
254
+ "$ref": "#/components/schemas/MessageResponseDto"
255
+ }
256
+ }
257
+ }
258
+ }
259
+ },
260
+ "summary": "Forgot Password",
261
+ "tags": [
262
+ "Auth"
263
+ ]
264
+ }
265
+ },
266
+ "/auth/verify-forgot-password-otp": {
267
+ "post": {
268
+ "operationId": "AuthController_verifyForgotPasswordOtp",
269
+ "parameters": [],
270
+ "requestBody": {
271
+ "required": true,
272
+ "content": {
273
+ "application/json": {
274
+ "schema": {
275
+ "$ref": "#/components/schemas/VerifyForgotPasswordOtpRequestDto"
276
+ }
277
+ }
278
+ }
279
+ },
280
+ "responses": {
281
+ "200": {
282
+ "description": "",
283
+ "content": {
284
+ "application/json": {
285
+ "schema": {
286
+ "$ref": "#/components/schemas/VerifyOtpResponseDto"
287
+ }
288
+ }
289
+ }
290
+ }
291
+ },
292
+ "summary": "Verify Forgot Password OTP and get reset token",
293
+ "tags": [
294
+ "Auth"
295
+ ]
296
+ }
297
+ },
298
+ "/auth/reset-password": {
299
+ "post": {
300
+ "operationId": "AuthController_resetPassword",
301
+ "parameters": [],
302
+ "requestBody": {
303
+ "required": true,
304
+ "content": {
305
+ "application/json": {
306
+ "schema": {
307
+ "$ref": "#/components/schemas/ResetPasswordRequestDto"
308
+ }
309
+ }
310
+ }
311
+ },
312
+ "responses": {
313
+ "200": {
314
+ "description": "",
315
+ "content": {
316
+ "application/json": {
317
+ "schema": {
318
+ "$ref": "#/components/schemas/MessageResponseDto"
319
+ }
320
+ }
321
+ }
322
+ }
323
+ },
324
+ "summary": "Reset Password (Legacy - using OTP)",
325
+ "tags": [
326
+ "Auth"
327
+ ]
328
+ }
329
+ },
330
+ "/auth/reset-password-with-token": {
331
+ "post": {
332
+ "operationId": "AuthController_resetPasswordWithToken",
333
+ "parameters": [],
334
+ "requestBody": {
335
+ "required": true,
336
+ "content": {
337
+ "application/json": {
338
+ "schema": {
339
+ "$ref": "#/components/schemas/ResetPasswordWithTokenRequestDto"
340
+ }
341
+ }
342
+ }
343
+ },
344
+ "responses": {
345
+ "200": {
346
+ "description": "",
347
+ "content": {
348
+ "application/json": {
349
+ "schema": {
350
+ "$ref": "#/components/schemas/MessageResponseDto"
351
+ }
352
+ }
353
+ }
354
+ }
355
+ },
356
+ "summary": "Reset Password with Token",
357
+ "tags": [
358
+ "Auth"
359
+ ]
360
+ }
361
+ },
362
+ "/auth/user": {
363
+ "get": {
364
+ "operationId": "AuthController_getUser",
365
+ "parameters": [],
366
+ "responses": {
367
+ "200": {
368
+ "description": "",
369
+ "content": {
370
+ "application/json": {
371
+ "schema": {
372
+ "$ref": "#/components/schemas/UserResponseDto"
373
+ }
374
+ }
375
+ }
376
+ }
377
+ },
378
+ "summary": "Get Logged In User",
379
+ "tags": [
380
+ "Auth"
381
+ ]
382
+ }
383
+ },
384
+ "/auth/send-email-verification": {
385
+ "post": {
386
+ "operationId": "AuthController_sendEmailVerification",
387
+ "parameters": [],
388
+ "requestBody": {
389
+ "required": true,
390
+ "content": {
391
+ "application/json": {
392
+ "schema": {
393
+ "$ref": "#/components/schemas/SendEmailVerificationRequestDto"
394
+ }
395
+ }
396
+ }
397
+ },
398
+ "responses": {
399
+ "200": {
400
+ "description": "",
401
+ "content": {
402
+ "application/json": {
403
+ "schema": {
404
+ "$ref": "#/components/schemas/MessageResponseDto"
405
+ }
406
+ }
407
+ }
408
+ }
409
+ },
410
+ "summary": "Send Email Verification",
411
+ "tags": [
412
+ "Auth"
413
+ ]
414
+ }
415
+ },
416
+ "/auth/verify-email": {
417
+ "post": {
418
+ "operationId": "AuthController_verifyEmail",
419
+ "parameters": [],
420
+ "requestBody": {
421
+ "required": true,
422
+ "content": {
423
+ "application/json": {
424
+ "schema": {
425
+ "$ref": "#/components/schemas/VerifyEmailRequestDto"
426
+ }
427
+ }
428
+ }
429
+ },
430
+ "responses": {
431
+ "200": {
432
+ "description": "",
433
+ "content": {
434
+ "application/json": {
435
+ "schema": {
436
+ "$ref": "#/components/schemas/MessageResponseDto"
437
+ }
438
+ }
439
+ }
440
+ }
441
+ },
442
+ "summary": "Verify Email",
443
+ "tags": [
444
+ "Auth"
445
+ ]
446
+ }
447
+ },
448
+ "/auth/client-config": {
449
+ "get": {
450
+ "description": "Returns backend configuration for frontend clients. Includes enabled auth methods, registration settings, MFA options, tenant configuration, and SSO providers. Can be customized via clientConfig.factory in AuthModuleOptions.",
451
+ "operationId": "AuthController_getClientConfig",
452
+ "parameters": [],
453
+ "responses": {
454
+ "200": {
455
+ "description": "",
456
+ "content": {
457
+ "application/json": {
458
+ "schema": {
459
+ "$ref": "#/components/schemas/ClientConfigResponseDto"
460
+ }
461
+ }
462
+ }
463
+ }
464
+ },
465
+ "summary": "Get Client Configuration",
466
+ "tags": [
467
+ "Auth"
468
+ ]
469
+ }
470
+ },
471
+ "/auth/callback/{provider}": {
472
+ "get": {
473
+ "description": "OAuth callback endpoint for SSO providers. Exchanges authorization code for access token and returns raw SSO user info. Returns HTML page that posts SSO data to parent window and auto-closes.",
474
+ "operationId": "AuthController_ssoCallback",
475
+ "parameters": [
476
+ {
477
+ "name": "provider",
478
+ "required": true,
479
+ "in": "path",
480
+ "schema": {
481
+ "type": "string"
482
+ }
483
+ }
484
+ ],
485
+ "responses": {
486
+ "200": {
487
+ "description": ""
488
+ }
489
+ },
490
+ "summary": "SSO Callback",
491
+ "tags": [
492
+ "Auth"
493
+ ]
494
+ }
495
+ },
496
+ "/auth/mfa/status": {
497
+ "get": {
498
+ "operationId": "MfaController_getStatus",
499
+ "parameters": [],
500
+ "responses": {
501
+ "200": {
502
+ "description": "",
503
+ "content": {
504
+ "application/json": {
505
+ "schema": {
506
+ "$ref": "#/components/schemas/MfaStatusResponseDto"
507
+ }
508
+ }
509
+ }
510
+ }
511
+ },
512
+ "summary": "Get MFA status for the current user",
513
+ "tags": [
514
+ "Mfa"
515
+ ]
516
+ }
517
+ },
518
+ "/auth/mfa/toggle": {
519
+ "post": {
520
+ "operationId": "MfaController_toggleMfa",
521
+ "parameters": [],
522
+ "requestBody": {
523
+ "required": true,
524
+ "content": {
525
+ "application/json": {
526
+ "schema": {
527
+ "$ref": "#/components/schemas/ToggleMfaRequestDto"
528
+ }
529
+ }
530
+ }
531
+ },
532
+ "responses": {
533
+ "200": {
534
+ "description": "",
535
+ "content": {
536
+ "application/json": {
537
+ "schema": {
538
+ "$ref": "#/components/schemas/MessageResponseDto"
539
+ }
540
+ }
541
+ }
542
+ }
543
+ },
544
+ "summary": "Enable or disable MFA for the current user",
545
+ "tags": [
546
+ "Mfa"
547
+ ]
548
+ }
549
+ },
550
+ "/auth/mfa/devices": {
551
+ "get": {
552
+ "operationId": "MfaController_listDevices",
553
+ "parameters": [],
554
+ "responses": {
555
+ "200": {
556
+ "description": "",
557
+ "content": {
558
+ "application/json": {
559
+ "schema": {
560
+ "type": "array",
561
+ "items": {
562
+ "$ref": "#/components/schemas/MfaDeviceDto"
563
+ }
564
+ }
565
+ }
566
+ }
567
+ }
568
+ },
569
+ "summary": "List registered MFA devices",
570
+ "tags": [
571
+ "Mfa"
572
+ ]
573
+ }
574
+ },
575
+ "/auth/mfa/devices/{deviceId}": {
576
+ "delete": {
577
+ "operationId": "MfaController_removeDevice",
578
+ "parameters": [
579
+ {
580
+ "name": "deviceId",
581
+ "required": true,
582
+ "in": "path",
583
+ "schema": {
584
+ "type": "string"
585
+ }
586
+ }
587
+ ],
588
+ "responses": {
589
+ "200": {
590
+ "description": "",
591
+ "content": {
592
+ "application/json": {
593
+ "schema": {
594
+ "$ref": "#/components/schemas/MessageResponseDto"
595
+ }
596
+ }
597
+ }
598
+ }
599
+ },
600
+ "summary": "Remove a registered MFA device",
601
+ "tags": [
602
+ "Mfa"
603
+ ]
604
+ }
605
+ },
606
+ "/auth/mfa/send-mfa-code": {
607
+ "post": {
608
+ "operationId": "MfaController_sendMfaCode",
609
+ "parameters": [],
610
+ "requestBody": {
611
+ "required": true,
612
+ "content": {
613
+ "application/json": {
614
+ "schema": {
615
+ "$ref": "#/components/schemas/SendMfaCodeRequestDto"
616
+ }
617
+ }
618
+ }
619
+ },
620
+ "responses": {
621
+ "200": {
622
+ "description": "",
623
+ "content": {
624
+ "application/json": {
625
+ "schema": {
626
+ "$ref": "#/components/schemas/MessageResponseDto"
627
+ }
628
+ }
629
+ }
630
+ }
631
+ },
632
+ "summary": "Send MFA Code",
633
+ "tags": [
634
+ "Mfa"
635
+ ]
636
+ }
637
+ },
638
+ "/auth/mfa/setup-totp": {
639
+ "post": {
640
+ "operationId": "MfaController_setupTotp",
641
+ "parameters": [],
642
+ "responses": {
643
+ "200": {
644
+ "description": "",
645
+ "content": {
646
+ "application/json": {
647
+ "schema": {
648
+ "$ref": "#/components/schemas/MessageResponseDto"
649
+ }
650
+ }
651
+ }
652
+ }
653
+ },
654
+ "summary": "Setup TOTP Device",
655
+ "tags": [
656
+ "Mfa"
657
+ ]
658
+ }
659
+ },
660
+ "/auth/mfa/verify-totp-setup": {
661
+ "post": {
662
+ "operationId": "MfaController_verifyTotpSetup",
663
+ "parameters": [],
664
+ "requestBody": {
665
+ "required": true,
666
+ "content": {
667
+ "application/json": {
668
+ "schema": {
669
+ "$ref": "#/components/schemas/VerifyTotpSetupRequestDto"
670
+ }
671
+ }
672
+ }
673
+ },
674
+ "responses": {
675
+ "200": {
676
+ "description": "",
677
+ "content": {
678
+ "application/json": {
679
+ "schema": {
680
+ "$ref": "#/components/schemas/MessageResponseDto"
681
+ }
682
+ }
683
+ }
684
+ }
685
+ },
686
+ "summary": "Verify TOTP Setup",
687
+ "tags": [
688
+ "Mfa"
689
+ ]
690
+ }
691
+ },
692
+ "/auth/mfa/generate-recovery-code": {
693
+ "post": {
694
+ "operationId": "MfaController_generateRecoveryCodes",
695
+ "parameters": [],
696
+ "responses": {
697
+ "200": {
698
+ "description": "",
699
+ "content": {
700
+ "application/json": {
701
+ "schema": {
702
+ "$ref": "#/components/schemas/MessageResponseDto"
703
+ }
704
+ }
705
+ }
706
+ }
707
+ },
708
+ "summary": "Generate Recovery Codes",
709
+ "tags": [
710
+ "Mfa"
711
+ ]
712
+ }
713
+ },
714
+ "/auth/mfa/reset-totp": {
715
+ "post": {
716
+ "operationId": "MfaController_resetTotp",
717
+ "parameters": [],
718
+ "responses": {
719
+ "200": {
720
+ "description": "",
721
+ "content": {
722
+ "application/json": {
723
+ "schema": {
724
+ "$ref": "#/components/schemas/MessageResponseDto"
725
+ }
726
+ }
727
+ }
728
+ }
729
+ },
730
+ "summary": "Reset TOTP Device",
731
+ "tags": [
732
+ "Mfa"
733
+ ]
734
+ }
735
+ }
736
+ },
737
+ "info": {
738
+ "title": "@ackplus/nest-auth API",
739
+ "description": "OpenAPI specification generated from the Nest Auth module",
740
+ "version": "0.0.1",
741
+ "contact": {}
742
+ },
743
+ "tags": [],
744
+ "servers": [],
745
+ "components": {
746
+ "securitySchemes": {
747
+ "bearer": {
748
+ "scheme": "bearer",
749
+ "bearerFormat": "JWT",
750
+ "type": "http"
751
+ }
752
+ },
753
+ "schemas": {
754
+ "SignupRequestDto": {
755
+ "type": "object",
756
+ "properties": {
757
+ "email": {
758
+ "type": "string",
759
+ "description": "User email address (required if phone not provided)",
760
+ "example": "user@example.com"
761
+ },
762
+ "phone": {
763
+ "type": "string",
764
+ "description": "User phone number (required if email not provided)",
765
+ "example": "+1234567890"
766
+ },
767
+ "password": {
768
+ "type": "string",
769
+ "description": "User password",
770
+ "example": "SecurePass123!",
771
+ "minLength": 8
772
+ },
773
+ "tenantId": {
774
+ "type": "string",
775
+ "description": "Tenant ID for multi-tenant applications",
776
+ "example": "123e4567-e89b-12d3-a456-426614174000"
777
+ }
778
+ },
779
+ "required": [
780
+ "password"
781
+ ]
782
+ },
783
+ "UserResponseDto": {
784
+ "type": "object",
785
+ "properties": {
786
+ "id": {
787
+ "type": "string",
788
+ "description": "User unique identifier",
789
+ "example": "123e4567-e89b-12d3-a456-426614174000"
790
+ },
791
+ "email": {
792
+ "type": "string",
793
+ "description": "User email address",
794
+ "example": "user@example.com"
795
+ },
796
+ "phone": {
797
+ "type": "string",
798
+ "description": "User phone number",
799
+ "example": "+1234567890"
800
+ },
801
+ "isVerified": {
802
+ "type": "boolean",
803
+ "description": "Email verification status",
804
+ "example": true
805
+ },
806
+ "metadata": {
807
+ "type": "object",
808
+ "description": "Additional user metadata",
809
+ "example": {
810
+ "firstName": "John",
811
+ "lastName": "Doe"
812
+ }
813
+ }
814
+ },
815
+ "required": [
816
+ "id",
817
+ "isVerified"
818
+ ]
819
+ },
820
+ "AuthWithTokensResponseDto": {
821
+ "type": "object",
822
+ "properties": {
823
+ "accessToken": {
824
+ "type": "string",
825
+ "description": "JWT access token (short-lived)",
826
+ "example": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiIxMjMiLCJpYXQiOjE2OTk5OTk5OTksImV4cCI6MTY5OTk5OTk5OX0.xyz"
827
+ },
828
+ "refreshToken": {
829
+ "type": "string",
830
+ "description": "JWT refresh token (long-lived)",
831
+ "example": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiIxMjMiLCJ0eXBlIjoicmVmcmVzaCIsImlhdCI6MTY5OTk5OTk5OX0.abc"
832
+ },
833
+ "message": {
834
+ "type": "string",
835
+ "description": "Success message (added by controller based on configuration)",
836
+ "example": "Login successful"
837
+ },
838
+ "isRequiresMfa": {
839
+ "type": "boolean",
840
+ "description": "Whether multi-factor authentication is required",
841
+ "example": false
842
+ },
843
+ "user": {
844
+ "description": "User information",
845
+ "allOf": [
846
+ {
847
+ "$ref": "#/components/schemas/UserResponseDto"
848
+ }
849
+ ]
850
+ }
851
+ },
852
+ "required": [
853
+ "accessToken",
854
+ "refreshToken",
855
+ "isRequiresMfa"
856
+ ]
857
+ },
858
+ "EmailCredentialsDto": {
859
+ "type": "object",
860
+ "properties": {
861
+ "email": {
862
+ "type": "string",
863
+ "description": "User email address",
864
+ "example": "user@example.com"
865
+ },
866
+ "password": {
867
+ "type": "string",
868
+ "description": "User password",
869
+ "example": "SecurePass123!",
870
+ "minLength": 8
871
+ }
872
+ },
873
+ "required": [
874
+ "email",
875
+ "password"
876
+ ]
877
+ },
878
+ "PhoneCredentialsDto": {
879
+ "type": "object",
880
+ "properties": {
881
+ "phone": {
882
+ "type": "string",
883
+ "description": "User phone number",
884
+ "example": "+1234567890"
885
+ },
886
+ "password": {
887
+ "type": "string",
888
+ "description": "User password",
889
+ "example": "SecurePass123!",
890
+ "minLength": 8
891
+ }
892
+ },
893
+ "required": [
894
+ "phone",
895
+ "password"
896
+ ]
897
+ },
898
+ "SocialCredentialsDto": {
899
+ "type": "object",
900
+ "properties": {
901
+ "accessToken": {
902
+ "type": "string",
903
+ "description": "OAuth token or ID token from social provider",
904
+ "example": "ya29.a0AfH6SMBx1234567890abcdefghijklmnop"
905
+ }
906
+ },
907
+ "required": [
908
+ "accessToken"
909
+ ]
910
+ },
911
+ "LoginRequestDto": {
912
+ "type": "object",
913
+ "properties": {
914
+ "providerName": {
915
+ "type": "string",
916
+ "description": "Authentication provider name",
917
+ "example": "email",
918
+ "enum": [
919
+ "email",
920
+ "phone",
921
+ "google",
922
+ "facebook",
923
+ "apple",
924
+ "github"
925
+ ],
926
+ "default": "email"
927
+ },
928
+ "credentials": {
929
+ "description": "Login credentials - type varies by provider",
930
+ "examples": {
931
+ "emailLogin": {
932
+ "summary": "Email Login",
933
+ "value": {
934
+ "email": "user@example.com",
935
+ "password": "SecurePass123!"
936
+ }
937
+ },
938
+ "phoneLogin": {
939
+ "summary": "Phone Login",
940
+ "value": {
941
+ "phone": "+1234567890",
942
+ "password": "SecurePass123!"
943
+ }
944
+ },
945
+ "socialLogin": {
946
+ "summary": "Social Login (Google/Facebook/etc)",
947
+ "value": {
948
+ "token": "ya29.a0AfH6SMBx..."
949
+ }
950
+ }
951
+ },
952
+ "oneOf": [
953
+ {
954
+ "$ref": "#/components/schemas/EmailCredentialsDto"
955
+ },
956
+ {
957
+ "$ref": "#/components/schemas/PhoneCredentialsDto"
958
+ },
959
+ {
960
+ "$ref": "#/components/schemas/SocialCredentialsDto"
961
+ }
962
+ ]
963
+ },
964
+ "tenantId": {
965
+ "type": "string",
966
+ "description": "Tenant ID for multi-tenant applications",
967
+ "example": "123e4567-e89b-12d3-a456-426614174000"
968
+ },
969
+ "createUserIfNotExists": {
970
+ "type": "boolean",
971
+ "description": "Auto-create user if not exists (for social auth)",
972
+ "default": false
973
+ }
974
+ }
975
+ },
976
+ "RefreshTokenRequestDto": {
977
+ "type": "object",
978
+ "properties": {
979
+ "refreshToken": {
980
+ "type": "string",
981
+ "description": "Refresh token to obtain new access token",
982
+ "example": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiIxMjMiLCJ0eXBlIjoicmVmcmVzaCJ9.abc123"
983
+ }
984
+ },
985
+ "required": [
986
+ "refreshToken"
987
+ ]
988
+ },
989
+ "MessageResponseDto": {
990
+ "type": "object",
991
+ "properties": {
992
+ "message": {
993
+ "type": "string",
994
+ "description": "Response message"
995
+ }
996
+ },
997
+ "required": [
998
+ "message"
999
+ ]
1000
+ },
1001
+ "MFAMethodEnum": {
1002
+ "type": "string",
1003
+ "enum": [
1004
+ "totp",
1005
+ "sms",
1006
+ "email"
1007
+ ],
1008
+ "description": "MFA method used"
1009
+ },
1010
+ "Verify2faRequestDto": {
1011
+ "type": "object",
1012
+ "properties": {
1013
+ "method": {
1014
+ "description": "MFA method used",
1015
+ "example": "totp",
1016
+ "allOf": [
1017
+ {
1018
+ "$ref": "#/components/schemas/MFAMethodEnum"
1019
+ }
1020
+ ]
1021
+ },
1022
+ "otp": {
1023
+ "type": "string",
1024
+ "description": "One-time password code",
1025
+ "example": "123456",
1026
+ "minLength": 6,
1027
+ "maxLength": 8
1028
+ }
1029
+ },
1030
+ "required": [
1031
+ "method",
1032
+ "otp"
1033
+ ]
1034
+ },
1035
+ "Verify2faWithTokensResponseDto": {
1036
+ "type": "object",
1037
+ "properties": {
1038
+ "accessToken": {
1039
+ "type": "string",
1040
+ "description": "JWT access token (short-lived)",
1041
+ "example": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiIxMjMiLCJpYXQiOjE2OTk5OTk5OTksImV4cCI6MTY5OTk5OTk5OX0.xyz"
1042
+ },
1043
+ "refreshToken": {
1044
+ "type": "string",
1045
+ "description": "JWT refresh token (long-lived)",
1046
+ "example": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiIxMjMiLCJ0eXBlIjoicmVmcmVzaCIsImlhdCI6MTY5OTk5OTk5OX0.abc"
1047
+ },
1048
+ "message": {
1049
+ "type": "string",
1050
+ "description": "Verification success message (added by controller)",
1051
+ "example": "2FA verification successful"
1052
+ }
1053
+ },
1054
+ "required": [
1055
+ "accessToken",
1056
+ "refreshToken"
1057
+ ]
1058
+ },
1059
+ "ChangePasswordRequestDto": {
1060
+ "type": "object",
1061
+ "properties": {
1062
+ "currentPassword": {
1063
+ "type": "string",
1064
+ "description": "Current password",
1065
+ "example": "DemoOwner1!",
1066
+ "minLength": 8
1067
+ },
1068
+ "newPassword": {
1069
+ "type": "string",
1070
+ "description": "New password",
1071
+ "example": "DemoOwner1!New",
1072
+ "minLength": 8
1073
+ }
1074
+ },
1075
+ "required": [
1076
+ "currentPassword",
1077
+ "newPassword"
1078
+ ]
1079
+ },
1080
+ "ForgotPasswordRequestDto": {
1081
+ "type": "object",
1082
+ "properties": {
1083
+ "email": {
1084
+ "type": "string",
1085
+ "description": "User email address (required if phone not provided)",
1086
+ "example": "user@example.com"
1087
+ },
1088
+ "phone": {
1089
+ "type": "string",
1090
+ "description": "User phone number (required if email not provided)",
1091
+ "example": "+1234567890"
1092
+ },
1093
+ "tenantId": {
1094
+ "type": "string",
1095
+ "description": "Tenant ID for multi-tenant applications",
1096
+ "example": "123e4567-e89b-12d3-a456-426614174000"
1097
+ }
1098
+ }
1099
+ },
1100
+ "VerifyForgotPasswordOtpRequestDto": {
1101
+ "type": "object",
1102
+ "properties": {
1103
+ "email": {
1104
+ "type": "string",
1105
+ "description": "User email address (required if phone not provided)",
1106
+ "example": "user@example.com"
1107
+ },
1108
+ "phone": {
1109
+ "type": "string",
1110
+ "description": "User phone number (required if email not provided)",
1111
+ "example": "+1234567890"
1112
+ },
1113
+ "otp": {
1114
+ "type": "string",
1115
+ "description": "One-time password code received via email or SMS",
1116
+ "example": "123456",
1117
+ "minLength": 6,
1118
+ "maxLength": 8
1119
+ },
1120
+ "tenantId": {
1121
+ "type": "string",
1122
+ "description": "Tenant ID for multi-tenant applications",
1123
+ "example": "123e4567-e89b-12d3-a456-426614174000"
1124
+ }
1125
+ },
1126
+ "required": [
1127
+ "otp"
1128
+ ]
1129
+ },
1130
+ "VerifyOtpResponseDto": {
1131
+ "type": "object",
1132
+ "properties": {
1133
+ "message": {
1134
+ "type": "string",
1135
+ "description": "Success message"
1136
+ },
1137
+ "resetToken": {
1138
+ "type": "string",
1139
+ "description": "Password reset token - use this to reset password"
1140
+ }
1141
+ },
1142
+ "required": [
1143
+ "message"
1144
+ ]
1145
+ },
1146
+ "ResetPasswordRequestDto": {
1147
+ "type": "object",
1148
+ "properties": {
1149
+ "email": {
1150
+ "type": "string",
1151
+ "description": "User email address (required if phone not provided)",
1152
+ "example": "user@example.com"
1153
+ },
1154
+ "phone": {
1155
+ "type": "string",
1156
+ "description": "User phone number (required if email not provided)",
1157
+ "example": "+1234567890"
1158
+ },
1159
+ "otp": {
1160
+ "type": "string",
1161
+ "description": "One-time password (OTP) received via email or SMS",
1162
+ "example": "123456",
1163
+ "minLength": 6,
1164
+ "maxLength": 8
1165
+ },
1166
+ "newPassword": {
1167
+ "type": "string",
1168
+ "description": "New password",
1169
+ "example": "NewSecurePass123!",
1170
+ "minLength": 8
1171
+ },
1172
+ "tenantId": {
1173
+ "type": "string",
1174
+ "description": "Tenant ID for multi-tenant applications",
1175
+ "example": "123e4567-e89b-12d3-a456-426614174000"
1176
+ }
1177
+ },
1178
+ "required": [
1179
+ "otp",
1180
+ "newPassword"
1181
+ ]
1182
+ },
1183
+ "ResetPasswordWithTokenRequestDto": {
1184
+ "type": "object",
1185
+ "properties": {
1186
+ "token": {
1187
+ "type": "string",
1188
+ "description": "Password reset token (JWT) received after OTP verification",
1189
+ "example": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0eXBlIjoicGFzc3dvcmQtcmVzZXQifQ.xyz"
1190
+ },
1191
+ "newPassword": {
1192
+ "type": "string",
1193
+ "description": "New password",
1194
+ "example": "NewSecurePass123!",
1195
+ "minLength": 8
1196
+ }
1197
+ },
1198
+ "required": [
1199
+ "token",
1200
+ "newPassword"
1201
+ ]
1202
+ },
1203
+ "SendEmailVerificationRequestDto": {
1204
+ "type": "object",
1205
+ "properties": {
1206
+ "tenantId": {
1207
+ "type": "string",
1208
+ "description": "Tenant ID for multi-tenant applications",
1209
+ "example": "123e4567-e89b-12d3-a456-426614174000"
1210
+ }
1211
+ }
1212
+ },
1213
+ "VerifyEmailRequestDto": {
1214
+ "type": "object",
1215
+ "properties": {
1216
+ "otp": {
1217
+ "type": "string",
1218
+ "description": "One-time password code received via email",
1219
+ "example": "123456",
1220
+ "minLength": 6,
1221
+ "maxLength": 8
1222
+ },
1223
+ "tenantId": {
1224
+ "type": "string",
1225
+ "description": "Tenant ID for multi-tenant applications",
1226
+ "example": "123e4567-e89b-12d3-a456-426614174000"
1227
+ }
1228
+ },
1229
+ "required": [
1230
+ "otp"
1231
+ ]
1232
+ },
1233
+ "EmailAuthConfigDto": {
1234
+ "type": "object",
1235
+ "properties": {
1236
+ "enabled": {
1237
+ "type": "boolean",
1238
+ "example": true
1239
+ }
1240
+ },
1241
+ "required": [
1242
+ "enabled"
1243
+ ]
1244
+ },
1245
+ "PhoneAuthConfigDto": {
1246
+ "type": "object",
1247
+ "properties": {
1248
+ "enabled": {
1249
+ "type": "boolean",
1250
+ "example": false
1251
+ }
1252
+ },
1253
+ "required": [
1254
+ "enabled"
1255
+ ]
1256
+ },
1257
+ "RegistrationConfigDto": {
1258
+ "type": "object",
1259
+ "properties": {
1260
+ "enabled": {
1261
+ "type": "boolean",
1262
+ "example": true,
1263
+ "description": "Whether user registration is enabled"
1264
+ },
1265
+ "requireInvitation": {
1266
+ "type": "boolean",
1267
+ "example": false,
1268
+ "description": "Whether registration requires an invitation"
1269
+ },
1270
+ "collectProfileFields": {
1271
+ "type": "array",
1272
+ "description": "Additional profile fields to collect during registration",
1273
+ "items": {
1274
+ "type": "object",
1275
+ "properties": {
1276
+ "id": {
1277
+ "type": "string"
1278
+ },
1279
+ "label": {
1280
+ "type": "string"
1281
+ },
1282
+ "required": {
1283
+ "type": "boolean"
1284
+ },
1285
+ "type": {
1286
+ "type": "string",
1287
+ "enum": [
1288
+ "text",
1289
+ "email",
1290
+ "phone",
1291
+ "select",
1292
+ "checkbox",
1293
+ "password"
1294
+ ]
1295
+ },
1296
+ "placeholder": {
1297
+ "type": "string"
1298
+ },
1299
+ "options": {
1300
+ "type": "array",
1301
+ "items": {
1302
+ "type": "object",
1303
+ "properties": {
1304
+ "label": {
1305
+ "type": "string"
1306
+ },
1307
+ "value": {
1308
+ "type": "string"
1309
+ }
1310
+ }
1311
+ }
1312
+ }
1313
+ }
1314
+ }
1315
+ }
1316
+ },
1317
+ "required": [
1318
+ "enabled"
1319
+ ]
1320
+ },
1321
+ "MfaConfigDto": {
1322
+ "type": "object",
1323
+ "properties": {
1324
+ "enabled": {
1325
+ "type": "boolean",
1326
+ "example": true
1327
+ },
1328
+ "methods": {
1329
+ "example": [
1330
+ "email",
1331
+ "totp"
1332
+ ],
1333
+ "type": "array",
1334
+ "items": {
1335
+ "type": "array"
1336
+ }
1337
+ },
1338
+ "allowUserToggle": {
1339
+ "type": "boolean",
1340
+ "example": true
1341
+ },
1342
+ "allowMethodSelection": {
1343
+ "type": "boolean",
1344
+ "example": true
1345
+ }
1346
+ },
1347
+ "required": [
1348
+ "enabled"
1349
+ ]
1350
+ },
1351
+ "TenantOptionDto": {
1352
+ "type": "object",
1353
+ "properties": {
1354
+ "id": {
1355
+ "type": "string"
1356
+ },
1357
+ "name": {
1358
+ "type": "string"
1359
+ },
1360
+ "slug": {
1361
+ "type": "string"
1362
+ },
1363
+ "isActive": {
1364
+ "type": "boolean"
1365
+ },
1366
+ "metadata": {
1367
+ "type": "object"
1368
+ }
1369
+ },
1370
+ "required": [
1371
+ "id",
1372
+ "name",
1373
+ "slug",
1374
+ "isActive"
1375
+ ]
1376
+ },
1377
+ "TenantsConfigDto": {
1378
+ "type": "object",
1379
+ "properties": {
1380
+ "mode": {
1381
+ "type": "string",
1382
+ "example": "single",
1383
+ "enum": [
1384
+ "single",
1385
+ "multi"
1386
+ ]
1387
+ },
1388
+ "defaultTenantId": {
1389
+ "type": "string",
1390
+ "nullable": true
1391
+ },
1392
+ "options": {
1393
+ "type": "array",
1394
+ "items": {
1395
+ "$ref": "#/components/schemas/TenantOptionDto"
1396
+ }
1397
+ }
1398
+ },
1399
+ "required": [
1400
+ "mode"
1401
+ ]
1402
+ },
1403
+ "SsoProviderConfigDto": {
1404
+ "type": "object",
1405
+ "properties": {
1406
+ "id": {
1407
+ "type": "string"
1408
+ },
1409
+ "name": {
1410
+ "type": "string"
1411
+ },
1412
+ "logoUrl": {
1413
+ "type": "string"
1414
+ },
1415
+ "authorizationUrl": {
1416
+ "type": "string"
1417
+ },
1418
+ "clientId": {
1419
+ "type": "string"
1420
+ },
1421
+ "hint": {
1422
+ "type": "string"
1423
+ }
1424
+ },
1425
+ "required": [
1426
+ "id",
1427
+ "name"
1428
+ ]
1429
+ },
1430
+ "SsoConfigDto": {
1431
+ "type": "object",
1432
+ "properties": {
1433
+ "enabled": {
1434
+ "type": "boolean",
1435
+ "example": false
1436
+ },
1437
+ "providers": {
1438
+ "type": "array",
1439
+ "items": {
1440
+ "$ref": "#/components/schemas/SsoProviderConfigDto"
1441
+ }
1442
+ }
1443
+ },
1444
+ "required": [
1445
+ "enabled"
1446
+ ]
1447
+ },
1448
+ "UiConfigDto": {
1449
+ "type": "object",
1450
+ "properties": {
1451
+ "brandName": {
1452
+ "type": "string"
1453
+ },
1454
+ "brandColor": {
1455
+ "type": "string"
1456
+ },
1457
+ "logoUrl": {
1458
+ "type": "string"
1459
+ },
1460
+ "backgroundImageUrl": {
1461
+ "type": "string"
1462
+ }
1463
+ }
1464
+ },
1465
+ "ClientConfigResponseDto": {
1466
+ "type": "object",
1467
+ "properties": {
1468
+ "emailAuth": {
1469
+ "$ref": "#/components/schemas/EmailAuthConfigDto"
1470
+ },
1471
+ "phoneAuth": {
1472
+ "$ref": "#/components/schemas/PhoneAuthConfigDto"
1473
+ },
1474
+ "registration": {
1475
+ "$ref": "#/components/schemas/RegistrationConfigDto"
1476
+ },
1477
+ "mfa": {
1478
+ "$ref": "#/components/schemas/MfaConfigDto"
1479
+ },
1480
+ "tenants": {
1481
+ "$ref": "#/components/schemas/TenantsConfigDto"
1482
+ },
1483
+ "sso": {
1484
+ "$ref": "#/components/schemas/SsoConfigDto"
1485
+ },
1486
+ "ui": {
1487
+ "$ref": "#/components/schemas/UiConfigDto"
1488
+ }
1489
+ },
1490
+ "required": [
1491
+ "emailAuth",
1492
+ "phoneAuth",
1493
+ "registration",
1494
+ "mfa",
1495
+ "tenants",
1496
+ "sso"
1497
+ ]
1498
+ },
1499
+ "MfaDeviceDto": {
1500
+ "type": "object",
1501
+ "properties": {
1502
+ "id": {
1503
+ "type": "string",
1504
+ "description": "Unique identifier of the MFA device",
1505
+ "example": "4b3c9c9c-9a9d-4d1e-8d9f-123456789abc"
1506
+ },
1507
+ "deviceName": {
1508
+ "type": "string",
1509
+ "description": "Friendly name of the registered device",
1510
+ "example": "Work laptop"
1511
+ },
1512
+ "method": {
1513
+ "type": "string",
1514
+ "description": "MFA method this device supports",
1515
+ "enum": [
1516
+ "totp",
1517
+ "sms",
1518
+ "email"
1519
+ ],
1520
+ "example": "totp"
1521
+ },
1522
+ "lastUsedAt": {
1523
+ "format": "date-time",
1524
+ "type": "string",
1525
+ "description": "Timestamp of when the device was last used",
1526
+ "example": "2024-05-20T12:34:56.000Z"
1527
+ },
1528
+ "verified": {
1529
+ "type": "boolean",
1530
+ "description": "Whether the device setup has been verified",
1531
+ "example": true
1532
+ },
1533
+ "createdAt": {
1534
+ "format": "date-time",
1535
+ "type": "string",
1536
+ "description": "Timestamp of when the device was registered",
1537
+ "example": "2024-05-18T10:15:00.000Z"
1538
+ }
1539
+ },
1540
+ "required": [
1541
+ "id",
1542
+ "deviceName",
1543
+ "method",
1544
+ "verified"
1545
+ ]
1546
+ },
1547
+ "MfaStatusResponseDto": {
1548
+ "type": "object",
1549
+ "properties": {
1550
+ "isEnabled": {
1551
+ "type": "boolean",
1552
+ "description": "Whether MFA is currently enabled for the user",
1553
+ "example": true
1554
+ },
1555
+ "enabledMethods": {
1556
+ "type": "array",
1557
+ "description": "MFA methods currently active for the user",
1558
+ "example": [
1559
+ "email",
1560
+ "totp"
1561
+ ],
1562
+ "items": {
1563
+ "type": "string",
1564
+ "enum": [
1565
+ "totp",
1566
+ "sms",
1567
+ "email"
1568
+ ]
1569
+ }
1570
+ },
1571
+ "availableMethods": {
1572
+ "type": "array",
1573
+ "description": "All MFA methods available to the user based on backend configuration",
1574
+ "example": [
1575
+ "email",
1576
+ "totp"
1577
+ ],
1578
+ "items": {
1579
+ "type": "string",
1580
+ "enum": [
1581
+ "totp",
1582
+ "sms",
1583
+ "email"
1584
+ ]
1585
+ }
1586
+ },
1587
+ "allowUserToggle": {
1588
+ "type": "boolean",
1589
+ "description": "Indicates if MFA toggling is allowed for the user",
1590
+ "example": true
1591
+ },
1592
+ "allowMethodSelection": {
1593
+ "type": "boolean",
1594
+ "description": "Indicates if users can choose their preferred MFA method",
1595
+ "example": true
1596
+ },
1597
+ "totpDevices": {
1598
+ "description": "Registered TOTP devices for the user",
1599
+ "type": "array",
1600
+ "items": {
1601
+ "$ref": "#/components/schemas/MfaDeviceDto"
1602
+ }
1603
+ },
1604
+ "hasRecoveryCode": {
1605
+ "type": "boolean",
1606
+ "description": "Whether a recovery code has been generated for the user",
1607
+ "example": false
1608
+ }
1609
+ },
1610
+ "required": [
1611
+ "isEnabled",
1612
+ "enabledMethods",
1613
+ "availableMethods",
1614
+ "allowUserToggle",
1615
+ "allowMethodSelection",
1616
+ "totpDevices",
1617
+ "hasRecoveryCode"
1618
+ ]
1619
+ },
1620
+ "ToggleMfaRequestDto": {
1621
+ "type": "object",
1622
+ "properties": {
1623
+ "enabled": {
1624
+ "type": "boolean",
1625
+ "description": "Whether MFA should be enabled for the current user",
1626
+ "example": true
1627
+ }
1628
+ },
1629
+ "required": [
1630
+ "enabled"
1631
+ ]
1632
+ },
1633
+ "SendMfaCodeRequestDto": {
1634
+ "type": "object",
1635
+ "properties": {
1636
+ "method": {
1637
+ "description": "MFA delivery method",
1638
+ "example": "email",
1639
+ "examples": {
1640
+ "email": {
1641
+ "value": "email",
1642
+ "description": "Send OTP via email"
1643
+ },
1644
+ "sms": {
1645
+ "value": "sms",
1646
+ "description": "Send OTP via SMS"
1647
+ },
1648
+ "totp": {
1649
+ "value": "totp",
1650
+ "description": "Use authenticator app (TOTP)"
1651
+ }
1652
+ },
1653
+ "allOf": [
1654
+ {
1655
+ "$ref": "#/components/schemas/MFAMethodEnum"
1656
+ }
1657
+ ]
1658
+ }
1659
+ },
1660
+ "required": [
1661
+ "method"
1662
+ ]
1663
+ },
1664
+ "VerifyTotpSetupRequestDto": {
1665
+ "type": "object",
1666
+ "properties": {
1667
+ "otp": {
1668
+ "type": "string",
1669
+ "description": "The TOTP code from authenticator app",
1670
+ "example": "123456",
1671
+ "minLength": 6,
1672
+ "maxLength": 6
1673
+ },
1674
+ "secret": {
1675
+ "type": "string",
1676
+ "description": "Secret key from TOTP setup",
1677
+ "example": "JBSWY3DPEHPK3PXP"
1678
+ }
1679
+ },
1680
+ "required": [
1681
+ "otp",
1682
+ "secret"
1683
+ ]
1684
+ }
1685
+ }
1686
+ }
1687
+ }