@dragonmastery/dragoncore-vue 0.0.19 → 0.0.20

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 (177) hide show
  1. package/dist/AppLink-CHMMrSFI.js +54 -0
  2. package/dist/AppLink-CHMMrSFI.js.map +1 -0
  3. package/dist/Appearance-D5pwxuf4.js +3 -0
  4. package/dist/{Appearance-BfPdKMXw.js → Appearance-DxWTyx1M.js} +1 -1
  5. package/dist/{Appearance-BfPdKMXw.js.map → Appearance-DxWTyx1M.js.map} +1 -1
  6. package/dist/{ChangePasswordPage-DXzU3NI9.js → ChangePasswordPage-DBXchGfn.js} +2 -2
  7. package/dist/{ChangePasswordPage-DXzU3NI9.js.map → ChangePasswordPage-DBXchGfn.js.map} +1 -1
  8. package/dist/ChangePasswordPage-Re323roR.js +6 -0
  9. package/dist/ConsentRequired-qMNT-U2T.js +204 -0
  10. package/dist/ConsentRequired-qMNT-U2T.js.map +1 -0
  11. package/dist/CreateTeamForm-DXN1hoJh.js +34 -0
  12. package/dist/CreateTeamMemberForm-CLHT1HN_.js +34 -0
  13. package/dist/{CreateUserPage-bwR6fq5C.js → CreateUserPage-B0iHLsm5.js} +2 -2
  14. package/dist/{CreateUserPage-bwR6fq5C.js.map → CreateUserPage-B0iHLsm5.js.map} +1 -1
  15. package/dist/CreateUserPage-C8107z_O.js +6 -0
  16. package/dist/CreditBalanceDashboard-D7MFKfh6.js +34 -0
  17. package/dist/CreditManagement-A8hVPoSp.js +34 -0
  18. package/dist/CustomerCreateSupportTicketForm-B8JQNC1I.js +34 -0
  19. package/dist/{CustomerSupportTicketDetailPage-D_1t2EpN.js → CustomerSupportTicketDetailPage-DyJTKtLU.js} +9 -9
  20. package/dist/{CustomerSupportTicketDetailPage-D_1t2EpN.js.map → CustomerSupportTicketDetailPage-DyJTKtLU.js.map} +1 -1
  21. package/dist/CustomerSupportTicketList-DR-UfcGr.js +34 -0
  22. package/dist/CustomerSupportTicketParent-C-KzT4qQ.js +7 -0
  23. package/dist/{CustomerSupportTicketParent-B09_iFpJ.js → CustomerSupportTicketParent-CldxkQ75.js} +4 -4
  24. package/dist/{CustomerSupportTicketParent-B09_iFpJ.js.map → CustomerSupportTicketParent-CldxkQ75.js.map} +1 -1
  25. package/dist/CustomerSupportTicketSuccess-SBdIcS-_.js +34 -0
  26. package/dist/EditTeamForm-BDQkhBbx.js +34 -0
  27. package/dist/EditTeamMemberForm-CBxFLoIy.js +6 -0
  28. package/dist/{EditTeamMemberForm-DJW7yRQW.js → EditTeamMemberForm-CiNb4nNG.js} +2 -2
  29. package/dist/{EditTeamMemberForm-DJW7yRQW.js.map → EditTeamMemberForm-CiNb4nNG.js.map} +1 -1
  30. package/dist/EditUserPage-BWKrAKZZ.js +7 -0
  31. package/dist/{EditUserPage-aDygGmfD.js → EditUserPage-DpV3dm-c.js} +4 -4
  32. package/dist/{EditUserPage-aDygGmfD.js.map → EditUserPage-DpV3dm-c.js.map} +1 -1
  33. package/dist/ForgotPassword-D3OQqbrD.js +7 -0
  34. package/dist/{ForgotPassword-CJjzm9GK.js → ForgotPassword-roKwDfce.js} +4 -3
  35. package/dist/{ForgotPassword-CJjzm9GK.js.map → ForgotPassword-roKwDfce.js.map} +1 -1
  36. package/dist/{LoginForm-IEP-hEh0.js → LoginForm-BGDymDnO.js} +5 -4
  37. package/dist/{LoginForm-IEP-hEh0.js.map → LoginForm-BGDymDnO.js.map} +1 -1
  38. package/dist/LoginForm-C97dUsU3.js +7 -0
  39. package/dist/{Logout-Cm9kEzgH.js → Logout-Cbw1SacV.js} +5 -4
  40. package/dist/{Logout-Cm9kEzgH.js.map → Logout-Cbw1SacV.js.map} +1 -1
  41. package/dist/Logout-DY3iorah.js +7 -0
  42. package/dist/{MfaSetup-Ch0w-gTN.js → MfaSetup-CwYXnvgW.js} +5 -4
  43. package/dist/{MfaSetup-Ch0w-gTN.js.map → MfaSetup-CwYXnvgW.js.map} +1 -1
  44. package/dist/MfaSetup-DAQV8MhP.js +8 -0
  45. package/dist/{MfaVerify-BwzjVrTj.js → MfaVerify-CIlen2i5.js} +6 -5
  46. package/dist/{MfaVerify-BwzjVrTj.js.map → MfaVerify-CIlen2i5.js.map} +1 -1
  47. package/dist/MfaVerify-D-_oX6gL.js +8 -0
  48. package/dist/RecordVersionViewer-BWZ78vvE.js +490 -0
  49. package/dist/RecordVersionViewer-BWZ78vvE.js.map +1 -0
  50. package/dist/{ResetPassword-DuLuXaNp.js → ResetPassword-BgKyXQ4q.js} +4 -3
  51. package/dist/{ResetPassword-DuLuXaNp.js.map → ResetPassword-BgKyXQ4q.js.map} +1 -1
  52. package/dist/ResetPassword-CkPqUFbq.js +7 -0
  53. package/dist/{SavedFiltersPage-CawED9Oz.js → SavedFiltersPage-BlzfWkaj.js} +32 -30
  54. package/dist/{SavedFiltersPage-CawED9Oz.js.map → SavedFiltersPage-BlzfWkaj.js.map} +1 -1
  55. package/dist/Signup-C2FshPnc.js +8 -0
  56. package/dist/Signup-qBqsSYVz.js +213 -0
  57. package/dist/Signup-qBqsSYVz.js.map +1 -0
  58. package/dist/SignupConsentFlow-DG2IGikE.js +243 -0
  59. package/dist/SignupConsentFlow-DG2IGikE.js.map +1 -0
  60. package/dist/SignupRequirementsPage-DnLpQfB8.js +360 -0
  61. package/dist/SignupRequirementsPage-DnLpQfB8.js.map +1 -0
  62. package/dist/StaffCreateSupportTicketForm-BrGB7tqD.js +34 -0
  63. package/dist/{StaffSupportTicketDetailPage-DZZN3jmt.js → StaffSupportTicketDetailPage-D0SjH36N.js} +11 -11
  64. package/dist/{StaffSupportTicketDetailPage-DZZN3jmt.js.map → StaffSupportTicketDetailPage-D0SjH36N.js.map} +1 -1
  65. package/dist/StaffSupportTicketList-HA4NlkKE.js +34 -0
  66. package/dist/StaffSupportTicketParent-BTbpNdfc.js +7 -0
  67. package/dist/{StaffSupportTicketParent-BYxQPuhI.js → StaffSupportTicketParent-Dk6RFRMt.js} +4 -4
  68. package/dist/{StaffSupportTicketParent-BYxQPuhI.js.map → StaffSupportTicketParent-Dk6RFRMt.js.map} +1 -1
  69. package/dist/StaffSupportTicketSuccess-CTeMG_iK.js +34 -0
  70. package/dist/{SupportStaffPage-B05UR5LK.js → SupportStaffPage-DFcgP8iE.js} +7 -7
  71. package/dist/{SupportStaffPage-B05UR5LK.js.map → SupportStaffPage-DFcgP8iE.js.map} +1 -1
  72. package/dist/{SupportTicketDevLifecycleBadge-Ba-Rm6QW.js → SupportTicketDevLifecycleBadge-EMrQHfyG.js} +1 -1
  73. package/dist/{SupportTicketDevLifecycleBadge-Ba-Rm6QW.js.map → SupportTicketDevLifecycleBadge-EMrQHfyG.js.map} +1 -1
  74. package/dist/{SupportTicketMaintenancePage-BoZpjcAF.js → SupportTicketMaintenancePage-BCW0eZxV.js} +4 -4
  75. package/dist/{SupportTicketMaintenancePage-BoZpjcAF.js.map → SupportTicketMaintenancePage-BCW0eZxV.js.map} +1 -1
  76. package/dist/TeamAttachmentsTab-IaRtuF55.js +34 -0
  77. package/dist/TeamHistoryTab-DWcVhkwC.js +4 -0
  78. package/dist/{TeamHistoryTab-BrC6FFIw.js → TeamHistoryTab-PVS8A-6K.js} +3 -3
  79. package/dist/{TeamHistoryTab-BrC6FFIw.js.map → TeamHistoryTab-PVS8A-6K.js.map} +1 -1
  80. package/dist/TeamList-BNo_ime8.js +34 -0
  81. package/dist/TeamMemberList-DJKYxfsx.js +34 -0
  82. package/dist/TeamMemberParent-Bk6dqXsh.js +34 -0
  83. package/dist/{TeamNotesTab-B2eETkAz.js → TeamNotesTab-D7ELC1EW.js} +5 -5
  84. package/dist/{TeamNotesTab-B2eETkAz.js.map → TeamNotesTab-D7ELC1EW.js.map} +1 -1
  85. package/dist/TeamNotesTab-JRWYpqRJ.js +7 -0
  86. package/dist/TeamParent-TSWT_0bK.js +34 -0
  87. package/dist/{TimelineNoteInput-C0a0WRQC.js → TimelineNoteInput-D-NjzUiF.js} +2 -2
  88. package/dist/{TimelineNoteInput-C0a0WRQC.js.map → TimelineNoteInput-D-NjzUiF.js.map} +1 -1
  89. package/dist/{TimelineSystemEvent-Dj2TMOF6.js → TimelineSystemEvent-Cc6HMeO3.js} +4 -4
  90. package/dist/{TimelineSystemEvent-Dj2TMOF6.js.map → TimelineSystemEvent-Cc6HMeO3.js.map} +1 -1
  91. package/dist/UserListPage-BjHbDpvC.js +4 -0
  92. package/dist/{UserListPage-QSdxrJT6.js → UserListPage-DdJFeLP1.js} +3 -3
  93. package/dist/{UserListPage-QSdxrJT6.js.map → UserListPage-DdJFeLP1.js.map} +1 -1
  94. package/dist/{UserProfilePage-X4z2lG-J.js → UserProfilePage-BhCxv0N9.js} +4 -4
  95. package/dist/{UserProfilePage-X4z2lG-J.js.map → UserProfilePage-BhCxv0N9.js.map} +1 -1
  96. package/dist/UserProfilePage-BxIMig4s.js +7 -0
  97. package/dist/VerifyEmail-BYSYk5ef.js +7 -0
  98. package/dist/{VerifyEmail-8bsvoDdM.js → VerifyEmail-DXYcjCX4.js} +5 -4
  99. package/dist/{VerifyEmail-8bsvoDdM.js.map → VerifyEmail-DXYcjCX4.js.map} +1 -1
  100. package/dist/{VerifyEmailRequired-CN1FU1AE.js → VerifyEmailRequired-DeMYFS0I.js} +23 -8
  101. package/dist/VerifyEmailRequired-DeMYFS0I.js.map +1 -0
  102. package/dist/ViewTeam-DIxy437n.js +34 -0
  103. package/dist/ViewTeamMember-DIaIqfbX.js +34 -0
  104. package/dist/{convertToLocalDateTime-DOSGtMn8.js → convertToLocalDateTime-CFhtN6PI.js} +12 -2
  105. package/dist/convertToLocalDateTime-CFhtN6PI.js.map +1 -0
  106. package/dist/{displayIdFormatter-B1ZKgofu.js → displayIdFormatter-Dz900Awr.js} +1 -1
  107. package/dist/{displayIdFormatter-B1ZKgofu.js.map → displayIdFormatter-Dz900Awr.js.map} +1 -1
  108. package/dist/{extractRpcErrorMessage-C_UbKgHL.js → extractRpcErrorMessage-Di8E8-Wh.js} +1 -1
  109. package/dist/{extractRpcErrorMessage-C_UbKgHL.js.map → extractRpcErrorMessage-Di8E8-Wh.js.map} +1 -1
  110. package/dist/index.d.ts +755 -708
  111. package/dist/index.js +36 -33
  112. package/dist/{mfaSchema-nfNCcEhM.js → mfaSchema-s-T8m-7-.js} +1 -1
  113. package/dist/{mfaSchema-nfNCcEhM.js.map → mfaSchema-s-T8m-7-.js.map} +1 -1
  114. package/dist/{src-CkgUIye9.js → src--FuqlDhU.js} +397 -802
  115. package/dist/src--FuqlDhU.js.map +1 -0
  116. package/dist/{useBreadcrumbs-DmgSucoe.js → useBreadcrumbs-qB6ghsAf.js} +1 -1
  117. package/dist/{useBreadcrumbs-DmgSucoe.js.map → useBreadcrumbs-qB6ghsAf.js.map} +1 -1
  118. package/dist/{useMutation-DbzXtqf1.js → useMutation-Dhx2gMgS.js} +3 -3
  119. package/dist/{useMutation-DbzXtqf1.js.map → useMutation-Dhx2gMgS.js.map} +1 -1
  120. package/dist/{useQuery-BKb5JXVS.js → useQuery-DxmMxM8z.js} +5 -5
  121. package/dist/useQuery-DxmMxM8z.js.map +1 -0
  122. package/dist/{useQueryCache-CHG4-HGF.js → useQueryCache-CJKZquh6.js} +2 -2
  123. package/dist/{useQueryCache-CHG4-HGF.js.map → useQueryCache-CJKZquh6.js.map} +1 -1
  124. package/dist/{useReturnUrl-Da8PpLb9.js → useReturnUrl-qFeazn-G.js} +2 -54
  125. package/dist/useReturnUrl-qFeazn-G.js.map +1 -0
  126. package/dist/{useRpcAuth-8Byr6SSI.js → useRpcAuth-Bse-lggK.js} +3 -2
  127. package/dist/useRpcAuth-Bse-lggK.js.map +1 -0
  128. package/dist/useSignupPendingData-BWHwUHhL.js +47 -0
  129. package/dist/useSignupPendingData-BWHwUHhL.js.map +1 -0
  130. package/package.json +5 -2
  131. package/src/daisyui.css +1 -0
  132. package/dist/Appearance-C3WguxT-.js +0 -3
  133. package/dist/ChangePasswordPage-BuVNYC_G.js +0 -6
  134. package/dist/CreateTeamForm-BuMrZ169.js +0 -32
  135. package/dist/CreateTeamMemberForm-D0xqR9me.js +0 -32
  136. package/dist/CreateUserPage-BWIvFF-4.js +0 -6
  137. package/dist/CreditBalanceDashboard-BR-er7gs.js +0 -32
  138. package/dist/CreditManagement-CyjrE1ep.js +0 -32
  139. package/dist/CustomerCreateSupportTicketForm-C9-CLRRQ.js +0 -32
  140. package/dist/CustomerSupportTicketList-B0dC7lgD.js +0 -32
  141. package/dist/CustomerSupportTicketParent-D0wLnKXf.js +0 -7
  142. package/dist/CustomerSupportTicketSuccess-BvuBglg8.js +0 -32
  143. package/dist/EditTeamForm-BJlOKEkI.js +0 -32
  144. package/dist/EditTeamMemberForm-CbDvTLXI.js +0 -6
  145. package/dist/EditUserPage-CsHl1h_g.js +0 -7
  146. package/dist/ForgotPassword-DJjmzU_m.js +0 -7
  147. package/dist/LoginForm-BeiI_y3E.js +0 -7
  148. package/dist/Logout-DmZTNQDP.js +0 -7
  149. package/dist/MfaSetup-BwkenBRD.js +0 -8
  150. package/dist/MfaVerify-BaUROEol.js +0 -8
  151. package/dist/ResetPassword-DEFj1pgV.js +0 -7
  152. package/dist/Signup-C94alv87.js +0 -166
  153. package/dist/Signup-C94alv87.js.map +0 -1
  154. package/dist/Signup-CFUbdrYs.js +0 -7
  155. package/dist/StaffCreateSupportTicketForm-AxprwWRv.js +0 -32
  156. package/dist/StaffSupportTicketList-DYKysNs3.js +0 -32
  157. package/dist/StaffSupportTicketParent-CT8oYFd6.js +0 -7
  158. package/dist/StaffSupportTicketSuccess-zWEagE4E.js +0 -32
  159. package/dist/TeamAttachmentsTab-BFRMbPlZ.js +0 -32
  160. package/dist/TeamHistoryTab-CYrt5KnE.js +0 -4
  161. package/dist/TeamList-CF5BQhfx.js +0 -32
  162. package/dist/TeamMemberList-Dfi2iKOH.js +0 -32
  163. package/dist/TeamMemberParent-DXcumR-Q.js +0 -32
  164. package/dist/TeamNotesTab-Bv_HPC6f.js +0 -7
  165. package/dist/TeamParent-DLoNn-mW.js +0 -32
  166. package/dist/UserListPage-CBwfXo15.js +0 -4
  167. package/dist/UserProfilePage-cTrZuwOT.js +0 -7
  168. package/dist/VerifyEmail-Cpc0umIu.js +0 -7
  169. package/dist/VerifyEmailRequired-CN1FU1AE.js.map +0 -1
  170. package/dist/ViewTeam-DpjnoTwo.js +0 -32
  171. package/dist/ViewTeamMember-CRb2oBHG.js +0 -32
  172. package/dist/convertToLocalDateTime-DOSGtMn8.js.map +0 -1
  173. package/dist/src-CkgUIye9.js.map +0 -1
  174. package/dist/useQuery-BKb5JXVS.js.map +0 -1
  175. package/dist/useReturnUrl-Da8PpLb9.js.map +0 -1
  176. package/dist/useRpcAuth-8Byr6SSI.js.map +0 -1
  177. /package/dist/{TeamMembersTab-DTJxmb-M.js → TeamMembersTab-CBB2Yl_I.js} +0 -0
@@ -1,6 +1,7 @@
1
- import { l as useUserSessionStore, m as useEnv } from "./useRpcAuth-8Byr6SSI.js";
2
- import { t as useMutation } from "./useMutation-DbzXtqf1.js";
3
- import { o as withReturnUrl, r as getValidReturnUrl, s as AppLink_default } from "./useReturnUrl-Da8PpLb9.js";
1
+ import { l as useUserSessionStore, m as useEnv } from "./useRpcAuth-Bse-lggK.js";
2
+ import { t as useMutation } from "./useMutation-Dhx2gMgS.js";
3
+ import { t as AppLink_default } from "./AppLink-CHMMrSFI.js";
4
+ import { o as withReturnUrl, r as getValidReturnUrl } from "./useReturnUrl-qFeazn-G.js";
4
5
  import { computed, createCommentVNode, createElementBlock, createElementVNode, createTextVNode, createVNode, defineComponent, openBlock, unref, withCtx } from "vue";
5
6
  import { useRoute, useRouter } from "vue-router";
6
7
  import { toast } from "vue3-toastify";
@@ -112,4 +113,4 @@ var LoginForm_default = _sfc_main;
112
113
 
113
114
  //#endregion
114
115
  export { loginSchemaWithMetadata as n, LoginForm_default as t };
115
- //# sourceMappingURL=LoginForm-IEP-hEh0.js.map
116
+ //# sourceMappingURL=LoginForm-BGDymDnO.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"LoginForm-IEP-hEh0.js","names":[],"sources":["../src/slices/auth/features/login/loginSchema.ts","../src/slices/auth/features/login/LoginForm.vue"],"sourcesContent":["import { withMetadata } from '@dragonmastery/zinia-forms-core';\nimport { loginSchema } from '@dragonmastery/dragoncore-shared';\nimport { z } from 'zod';\n\n// Define the login form type\nexport type LoginForm = z.infer<typeof loginSchema>;\n\n// Enhance the schema with metadata\nexport const loginSchemaWithMetadata = withMetadata(loginSchema, 'loginSchema', {\n email: {\n inputType: 'email',\n placeholder: 'you@example.com',\n helpText: 'Enter the email address you used to register',\n autocomplete: 'username',\n className: 'login-field',\n autofocus: true,\n },\n\n password: {\n inputType: 'password',\n placeholder: '••••••••',\n helpText: 'Must be at least 8 characters',\n autocomplete: 'current-password',\n className: 'login-field',\n },\n});\n","<template>\n <div class=\"max-w-md mx-auto bg-base-200 p-6 rounded-xl shadow-md container\">\n <h1 class=\"text-2xl font-bold mb-6 text-center\">Login</h1>\n\n <ZiniaForm @handle-submit=\"handleSubmit\" @success=\"handleSuccess\" @error=\"handleError\">\n <zinia.EmailField />\n <zinia.PasswordField />\n\n <ZiniaSubmitButton submitText=\"Login\" submittingText=\"Logging in...\" />\n\n <div class=\"mt-2\">\n <AppLink :to=\"forgotPasswordLink\" class=\"link-accent link\">\n Forgot your password?\n </AppLink>\n </div>\n <div v-if=\"allowUserSignup\" class=\"text-center mt-2\">\n <p>\n Don't have an account?\n <AppLink class=\"link-accent link\" :to=\"signupLink\">Sign up</AppLink>\n </p>\n </div>\n </ZiniaForm>\n\n <!-- Divider between login form and social buttons -->\n <!-- <div class=\"divider my-6\">OR</div> -->\n\n <!-- Social Login Buttons Component -->\n <!-- <SocialLoginButtons @login=\"socialLogin\" /> -->\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport AppLink from '../../../../components/AppLink.vue';\nimport { useMutation } from '../../../../composables/useMutation';\nimport { useEnv } from '../../../../composables/useEnv';\nimport { useUserSessionStore } from '../../../../composables/useUserSessionStore';\nimport { getValidReturnUrl, withReturnUrl } from '../../../../utils/useReturnUrl';\nimport { useForm } from '@dragonmastery/zinia-forms-core';\nimport { computed } from 'vue';\nimport { useRoute, useRouter } from 'vue-router';\nimport { toast } from 'vue3-toastify';\nimport { z } from 'zod';\nimport { loginSchemaWithMetadata } from './loginSchema';\n\nconst { allowUserSignup } = useEnv();\nconst route = useRoute();\nconst returnUrl = computed(() => route.query.returnUrl as string | undefined);\nconst forgotPasswordLink = computed(() => withReturnUrl('/auth/forgot-password', returnUrl.value));\nconst signupLink = computed(() => withReturnUrl('/auth/signup', returnUrl.value));\n\n// Create a type-safe form using our schema with metadata\nconst { form, zinia, ZiniaForm, ZiniaSubmitButton } = useForm(loginSchemaWithMetadata, {\n storeName: 'login-form',\n persistToLocalStorage: false,\n renderStyle: 'daisy_ui',\n});\n\nconst sessionStore = useUserSessionStore();\nconst router = useRouter();\nconst { mutate: loginMutate } = useMutation(\n (api, input: z.infer<typeof loginSchemaWithMetadata>) => api.userSessions.login(input),\n { credentials: 'include' }, // Include credentials to allow cookies\n);\n\n// Handle form submission\nconst handleSubmit = async (data: z.infer<typeof loginSchemaWithMetadata>) => {\n const loginData = await loginMutate(data);\n if (!loginData) throw new Error('Login failed');\n const { access_token, user_details_token } = loginData;\n if (!access_token || !user_details_token) throw new Error('Invalid login response');\n\n return loginData;\n};\n\n// Handle success\nconst handleSuccess = async (data: { access_token: string; user_details_token: string }) => {\n sessionStore.setSession(data.user_details_token);\n sessionStore.setAccessToken(data.access_token);\n\n form.reset();\n\n const targetPath = getValidReturnUrl(router.currentRoute.value, '/');\n await router.push(targetPath);\n toast.success('You are now logged in!');\n};\n\n// Handle error\nconst handleError = (error: unknown) => {\n toast.error(error instanceof Error ? error.message : 'Login failed');\n};\n</script>\n"],"mappings":";;;;;;;;;;AAQA,MAAa,0BAA0B,aAAa,aAAa,eAAe;CAC9E,OAAO;EACL,WAAW;EACX,aAAa;EACb,UAAU;EACV,cAAc;EACd,WAAW;EACX,WAAW;EACZ;CAED,UAAU;EACR,WAAW;EACX,aAAa;EACb,UAAU;EACV,cAAc;EACd,WAAW;EACZ;CACF,CAAC;;;;;;;;;;;;;ECmBF,MAAM,EAAE,oBAAoB,QAAQ;EACpC,MAAM,QAAQ,UAAU;EACxB,MAAM,YAAY,eAAe,MAAM,MAAM,UAAgC;EAC7E,MAAM,qBAAqB,eAAe,cAAc,yBAAyB,UAAU,MAAM,CAAC;EAClG,MAAM,aAAa,eAAe,cAAc,gBAAgB,UAAU,MAAM,CAAC;EAGjF,MAAM,EAAE,MAAM,OAAO,WAAW,sBAAsB,QAAQ,yBAAyB;GACrF,WAAW;GACX,uBAAuB;GACvB,aAAa;GACd,CAAC;EAEF,MAAM,eAAe,qBAAqB;EAC1C,MAAM,SAAS,WAAW;EAC1B,MAAM,EAAE,QAAQ,gBAAgB,aAC7B,KAAK,UAAmD,IAAI,aAAa,MAAM,MAAM,EACtF,EAAE,aAAa,WAAW,CAC3B;EAGD,MAAM,eAAe,OAAO,SAAkD;GAC5E,MAAM,YAAY,MAAM,YAAY,KAAK;AACzC,OAAI,CAAC,UAAW,OAAM,IAAI,MAAM,eAAe;GAC/C,MAAM,EAAE,cAAc,uBAAuB;AAC7C,OAAI,CAAC,gBAAgB,CAAC,mBAAoB,OAAM,IAAI,MAAM,yBAAyB;AAEnF,UAAO;;EAIT,MAAM,gBAAgB,OAAO,SAA+D;AAC1F,gBAAa,WAAW,KAAK,mBAAmB;AAChD,gBAAa,eAAe,KAAK,aAAa;AAE9C,QAAK,OAAO;GAEZ,MAAM,aAAa,kBAAkB,OAAO,aAAa,OAAO,IAAI;AACpE,SAAM,OAAO,KAAK,WAAW;AAC7B,SAAM,QAAQ,yBAAyB;;EAIzC,MAAM,eAAe,UAAmB;AACtC,SAAM,MAAM,iBAAiB,QAAQ,MAAM,UAAU,eAAe;;;uBAvFpE,mBA2BM,OA3BN,YA2BM;8BA1BJ,mBAA0D,MAAA,EAAtD,OAAM,uCAAqC,EAAC,SAAK,GAAA;IAErD,YAiBY,MAAA,UAAA,EAAA;KAjBA,gBAAe;KAAe,WAAS;KAAgB,SAAO;;4BACpD;MAApB,YAAoB,MAAA,MAAA,CAAA,WAAA;MACpB,YAAuB,MAAA,MAAA,CAAA,cAAA;MAEvB,YAAuE,MAAA,kBAAA,EAAA;OAApD,YAAW;OAAQ,gBAAe;;MAErD,mBAIM,OAJN,YAIM,CAHJ,YAEU,iBAAA;OAFA,IAAI,mBAAA;OAAoB,OAAM;;8BAExC,CAAA,GAAA,OAAA,OAAA,OAAA,KAAA,CAAA,gBAF2D,2BAE3D,GAAA,CAAA,EAAA,CAAA;;;MAES,MAAA,gBAAe,IAAA,WAAA,EAA1B,mBAKM,OALN,YAKM,CAJJ,mBAGI,KAAA,MAAA,CAAA,OAAA,OAAA,OAAA,KAAA,gBAHD,4BAED,GAAA,GAAA,YAAoE,iBAAA;OAA3D,OAAM;OAAoB,IAAI,WAAA;;8BAAmB,CAAA,GAAA,OAAA,OAAA,OAAA,KAAA,CAAA,gBAAP,WAAO,GAAA,CAAA,EAAA,CAAA;;;;;;IAKhE,mBAAA,kDAAsD;IACtD,mBAAA,yCAA2C;IAE3C,mBAAA,mCAAuC;IACvC,mBAAA,kDAAoD"}
1
+ {"version":3,"file":"LoginForm-BGDymDnO.js","names":[],"sources":["../src/slices/auth/features/login/loginSchema.ts","../src/slices/auth/features/login/LoginForm.vue"],"sourcesContent":["import { withMetadata } from '@dragonmastery/zinia-forms-core';\nimport { loginSchema } from '@dragonmastery/dragoncore-shared';\nimport { z } from 'zod';\n\n// Define the login form type\nexport type LoginForm = z.infer<typeof loginSchema>;\n\n// Enhance the schema with metadata\nexport const loginSchemaWithMetadata = withMetadata(loginSchema, 'loginSchema', {\n email: {\n inputType: 'email',\n placeholder: 'you@example.com',\n helpText: 'Enter the email address you used to register',\n autocomplete: 'username',\n className: 'login-field',\n autofocus: true,\n },\n\n password: {\n inputType: 'password',\n placeholder: '••••••••',\n helpText: 'Must be at least 8 characters',\n autocomplete: 'current-password',\n className: 'login-field',\n },\n});\n","<template>\n <div class=\"max-w-md mx-auto bg-base-200 p-6 rounded-xl shadow-md container\">\n <h1 class=\"text-2xl font-bold mb-6 text-center\">Login</h1>\n\n <ZiniaForm @handle-submit=\"handleSubmit\" @success=\"handleSuccess\" @error=\"handleError\">\n <zinia.EmailField />\n <zinia.PasswordField />\n\n <ZiniaSubmitButton submitText=\"Login\" submittingText=\"Logging in...\" />\n\n <div class=\"mt-2\">\n <AppLink :to=\"forgotPasswordLink\" class=\"link-accent link\">\n Forgot your password?\n </AppLink>\n </div>\n <div v-if=\"allowUserSignup\" class=\"text-center mt-2\">\n <p>\n Don't have an account?\n <AppLink class=\"link-accent link\" :to=\"signupLink\">Sign up</AppLink>\n </p>\n </div>\n </ZiniaForm>\n\n <!-- Divider between login form and social buttons -->\n <!-- <div class=\"divider my-6\">OR</div> -->\n\n <!-- Social Login Buttons Component -->\n <!-- <SocialLoginButtons @login=\"socialLogin\" /> -->\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport AppLink from '../../../../components/AppLink.vue';\nimport { useMutation } from '../../../../composables/useMutation';\nimport { useEnv } from '../../../../composables/useEnv';\nimport { useUserSessionStore } from '../../../../composables/useUserSessionStore';\nimport { getValidReturnUrl, withReturnUrl } from '../../../../utils/useReturnUrl';\nimport { useForm } from '@dragonmastery/zinia-forms-core';\nimport { computed } from 'vue';\nimport { useRoute, useRouter } from 'vue-router';\nimport { toast } from 'vue3-toastify';\nimport { z } from 'zod';\nimport { loginSchemaWithMetadata } from './loginSchema';\n\nconst { allowUserSignup } = useEnv();\nconst route = useRoute();\nconst returnUrl = computed(() => route.query.returnUrl as string | undefined);\nconst forgotPasswordLink = computed(() => withReturnUrl('/auth/forgot-password', returnUrl.value));\nconst signupLink = computed(() => withReturnUrl('/auth/signup', returnUrl.value));\n\n// Create a type-safe form using our schema with metadata\nconst { form, zinia, ZiniaForm, ZiniaSubmitButton } = useForm(loginSchemaWithMetadata, {\n storeName: 'login-form',\n persistToLocalStorage: false,\n renderStyle: 'daisy_ui',\n});\n\nconst sessionStore = useUserSessionStore();\nconst router = useRouter();\nconst { mutate: loginMutate } = useMutation(\n (api, input: z.infer<typeof loginSchemaWithMetadata>) => api.userSessions.login(input),\n { credentials: 'include' }, // Include credentials to allow cookies\n);\n\n// Handle form submission\nconst handleSubmit = async (data: z.infer<typeof loginSchemaWithMetadata>) => {\n const loginData = await loginMutate(data);\n if (!loginData) throw new Error('Login failed');\n const { access_token, user_details_token } = loginData;\n if (!access_token || !user_details_token) throw new Error('Invalid login response');\n\n return loginData;\n};\n\n// Handle success\nconst handleSuccess = async (data: { access_token: string; user_details_token: string }) => {\n sessionStore.setSession(data.user_details_token);\n sessionStore.setAccessToken(data.access_token);\n\n form.reset();\n\n const targetPath = getValidReturnUrl(router.currentRoute.value, '/');\n await router.push(targetPath);\n toast.success('You are now logged in!');\n};\n\n// Handle error\nconst handleError = (error: unknown) => {\n toast.error(error instanceof Error ? error.message : 'Login failed');\n};\n</script>\n"],"mappings":";;;;;;;;;;;AAQA,MAAa,0BAA0B,aAAa,aAAa,eAAe;CAC9E,OAAO;EACL,WAAW;EACX,aAAa;EACb,UAAU;EACV,cAAc;EACd,WAAW;EACX,WAAW;EACZ;CAED,UAAU;EACR,WAAW;EACX,aAAa;EACb,UAAU;EACV,cAAc;EACd,WAAW;EACZ;CACF,CAAC;;;;;;;;;;;;;ECmBF,MAAM,EAAE,oBAAoB,QAAQ;EACpC,MAAM,QAAQ,UAAU;EACxB,MAAM,YAAY,eAAe,MAAM,MAAM,UAAgC;EAC7E,MAAM,qBAAqB,eAAe,cAAc,yBAAyB,UAAU,MAAM,CAAC;EAClG,MAAM,aAAa,eAAe,cAAc,gBAAgB,UAAU,MAAM,CAAC;EAGjF,MAAM,EAAE,MAAM,OAAO,WAAW,sBAAsB,QAAQ,yBAAyB;GACrF,WAAW;GACX,uBAAuB;GACvB,aAAa;GACd,CAAC;EAEF,MAAM,eAAe,qBAAqB;EAC1C,MAAM,SAAS,WAAW;EAC1B,MAAM,EAAE,QAAQ,gBAAgB,aAC7B,KAAK,UAAmD,IAAI,aAAa,MAAM,MAAM,EACtF,EAAE,aAAa,WAAW,CAC3B;EAGD,MAAM,eAAe,OAAO,SAAkD;GAC5E,MAAM,YAAY,MAAM,YAAY,KAAK;AACzC,OAAI,CAAC,UAAW,OAAM,IAAI,MAAM,eAAe;GAC/C,MAAM,EAAE,cAAc,uBAAuB;AAC7C,OAAI,CAAC,gBAAgB,CAAC,mBAAoB,OAAM,IAAI,MAAM,yBAAyB;AAEnF,UAAO;;EAIT,MAAM,gBAAgB,OAAO,SAA+D;AAC1F,gBAAa,WAAW,KAAK,mBAAmB;AAChD,gBAAa,eAAe,KAAK,aAAa;AAE9C,QAAK,OAAO;GAEZ,MAAM,aAAa,kBAAkB,OAAO,aAAa,OAAO,IAAI;AACpE,SAAM,OAAO,KAAK,WAAW;AAC7B,SAAM,QAAQ,yBAAyB;;EAIzC,MAAM,eAAe,UAAmB;AACtC,SAAM,MAAM,iBAAiB,QAAQ,MAAM,UAAU,eAAe;;;uBAvFpE,mBA2BM,OA3BN,YA2BM;8BA1BJ,mBAA0D,MAAA,EAAtD,OAAM,uCAAqC,EAAC,SAAK,GAAA;IAErD,YAiBY,MAAA,UAAA,EAAA;KAjBA,gBAAe;KAAe,WAAS;KAAgB,SAAO;;4BACpD;MAApB,YAAoB,MAAA,MAAA,CAAA,WAAA;MACpB,YAAuB,MAAA,MAAA,CAAA,cAAA;MAEvB,YAAuE,MAAA,kBAAA,EAAA;OAApD,YAAW;OAAQ,gBAAe;;MAErD,mBAIM,OAJN,YAIM,CAHJ,YAEU,iBAAA;OAFA,IAAI,mBAAA;OAAoB,OAAM;;8BAExC,CAAA,GAAA,OAAA,OAAA,OAAA,KAAA,CAAA,gBAF2D,2BAE3D,GAAA,CAAA,EAAA,CAAA;;;MAES,MAAA,gBAAe,IAAA,WAAA,EAA1B,mBAKM,OALN,YAKM,CAJJ,mBAGI,KAAA,MAAA,CAAA,OAAA,OAAA,OAAA,KAAA,gBAHD,4BAED,GAAA,GAAA,YAAoE,iBAAA;OAA3D,OAAM;OAAoB,IAAI,WAAA;;8BAAmB,CAAA,GAAA,OAAA,OAAA,OAAA,KAAA,CAAA,gBAAP,WAAO,GAAA,CAAA,EAAA,CAAA;;;;;;IAKhE,mBAAA,kDAAsD;IACtD,mBAAA,yCAA2C;IAE3C,mBAAA,mCAAuC;IACvC,mBAAA,kDAAoD"}
@@ -0,0 +1,7 @@
1
+ import "./useRpcAuth-Bse-lggK.js";
2
+ import "./useQueryCache-CJKZquh6.js";
3
+ import "./useMutation-Dhx2gMgS.js";
4
+ import "./AppLink-CHMMrSFI.js";
5
+ import { t as LoginForm_default } from "./LoginForm-BGDymDnO.js";
6
+
7
+ export { LoginForm_default as default };
@@ -1,6 +1,7 @@
1
- import { l as useUserSessionStore } from "./useRpcAuth-8Byr6SSI.js";
2
- import { t as useMutation } from "./useMutation-DbzXtqf1.js";
3
- import { r as getValidReturnUrl, s as AppLink_default } from "./useReturnUrl-Da8PpLb9.js";
1
+ import { l as useUserSessionStore } from "./useRpcAuth-Bse-lggK.js";
2
+ import { t as useMutation } from "./useMutation-Dhx2gMgS.js";
3
+ import { t as AppLink_default } from "./AppLink-CHMMrSFI.js";
4
+ import { r as getValidReturnUrl } from "./useReturnUrl-qFeazn-G.js";
4
5
  import { computed, createElementBlock, createElementVNode, createTextVNode, createVNode, defineComponent, onMounted, openBlock, ref, toDisplayString, withCtx } from "vue";
5
6
  import { useRoute, useRouter } from "vue-router";
6
7
  import { toast } from "vue3-toastify";
@@ -67,4 +68,4 @@ var Logout_default = _sfc_main;
67
68
 
68
69
  //#endregion
69
70
  export { Logout_default as t };
70
- //# sourceMappingURL=Logout-Cm9kEzgH.js.map
71
+ //# sourceMappingURL=Logout-Cbw1SacV.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Logout-Cm9kEzgH.js","names":["error: unknown"],"sources":["../src/slices/auth/features/Logout.vue"],"sourcesContent":["<template>\n <div class=\"min-h-screen flex items-center justify-center bg-base-100\">\n <div class=\"max-w-md mx-auto bg-base-200 p-8 rounded-xl shadow-md text-center\">\n <div v-if=\"status === 'loading'\" class=\"space-y-4\">\n <div class=\"flex justify-center\">\n <span class=\"loading loading-spinner loading-lg text-primary\"></span>\n </div>\n <h2 class=\"text-2xl font-bold mb-2\">Logging out...</h2>\n <p class=\"text-base-content/70\">Please wait while we securely log you out</p>\n </div>\n <div v-else class=\"space-y-4\">\n <h2 class=\"text-2xl font-bold mb-2\">\n {{ status === 'success' ? 'Logged out' : 'Logout failed' }}\n </h2>\n <p class=\"text-base-content/70\">\n {{ status === 'success'\n ? 'Redirecting you...'\n : 'Redirecting you to login...' }}\n </p>\n <p class=\"text-sm text-base-content/60\">\n If you aren't redirected automatically,\n <AppLink :to=\"redirectTo\" class=\"link link-primary\">click here</AppLink>.\n </p>\n </div>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport AppLink from '../../../components/AppLink.vue';\nimport { useMutation } from '../../../composables/useMutation';\nimport { useUserSessionStore } from '../../../composables/useUserSessionStore';\nimport { getValidReturnUrl } from '../../../utils/useReturnUrl';\nimport { onMounted, computed, ref } from 'vue';\nimport { useRoute, useRouter } from 'vue-router';\nimport { toast } from 'vue3-toastify';\n\nconst sessionStore = useUserSessionStore();\nconst route = useRoute();\nconst router = useRouter();\nconst status = ref<'loading' | 'success' | 'error'>('loading');\n\nconst redirectTo = computed(() =>\n getValidReturnUrl(route, '/auth/login'),\n);\n\nconst { mutate: logoutMutate } = useMutation(\n (api) => api.userSessions.logout(),\n { credentials: 'include' }, // Include credentials to allow cookies\n);\n\nonMounted(async () => {\n try {\n await logoutMutate(undefined);\n sessionStore.clearSession();\n status.value = 'success';\n setTimeout(() => router.push(redirectTo.value), 1000);\n } catch (error: unknown) {\n status.value = 'error';\n toast.error(error instanceof Error ? error.message : 'Failed to logout', {\n autoClose: 2000,\n });\n setTimeout(() => router.push(redirectTo.value), 2000);\n }\n});\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;EAqCA,MAAM,eAAe,qBAAqB;EAC1C,MAAM,QAAQ,UAAU;EACxB,MAAM,SAAS,WAAW;EAC1B,MAAM,SAAS,IAAqC,UAAU;EAE9D,MAAM,aAAa,eACjB,kBAAkB,OAAO,cAAc,CACxC;EAED,MAAM,EAAE,QAAQ,iBAAiB,aAC9B,QAAQ,IAAI,aAAa,QAAQ,EAClC,EAAE,aAAa,WAAW,CAC3B;AAED,YAAU,YAAY;AACpB,OAAI;AACF,UAAM,aAAa,OAAU;AAC7B,iBAAa,cAAc;AAC3B,WAAO,QAAQ;AACf,qBAAiB,OAAO,KAAK,WAAW,MAAM,EAAE,IAAK;YAC9CA,OAAgB;AACvB,WAAO,QAAQ;AACf,UAAM,MAAM,iBAAiB,QAAQ,MAAM,UAAU,oBAAoB,EACvE,WAAW,KACZ,CAAC;AACF,qBAAiB,OAAO,KAAK,WAAW,MAAM,EAAE,IAAK;;IAEvD;;uBA/DA,mBAwBM,OAxBN,YAwBM,CAvBJ,mBAsBM,OAtBN,YAsBM,CArBO,OAAA,UAAM,aAAA,WAAA,EAAjB,mBAMM,OANN,YAMM,CAAA,GAAA,OAAA,OAAA,OAAA,KAAA;IALJ,mBAEM,OAAA,EAFD,OAAM,uBAAqB,EAAA,CAC9B,mBAAqE,QAAA,EAA/D,OAAM,mDAAiD,CAAA,CAAA;IAE/D,mBAAuD,MAAA,EAAnD,OAAM,2BAAyB,EAAC,kBAAc,GAAA;IAClD,mBAA6E,KAAA,EAA1E,OAAM,wBAAsB,EAAC,6CAAyC,GAAA;yBAE3E,mBAaM,OAbN,YAaM;IAZJ,mBAEK,MAFL,YAEK,gBADA,OAAA,UAAM,YAAA,eAAA,gBAAA,EAAA,EAAA;IAEX,mBAII,KAJJ,YAII,gBAHC,OAAA,UAAM,YAAA,uBAAA,8BAAA;IAIX,mBAGI,KAHJ,YAGI;+CAHoC,6CAEtC,GAAA;KAAA,YAAwE,iBAAA;MAA9D,IAAI,WAAA;MAAY,OAAM;;6BAA8B,CAAA,GAAA,OAAA,OAAA,OAAA,KAAA,CAAA,gBAAV,cAAU,GAAA,CAAA,EAAA,CAAA;;;+CAAU,MAC1E,GAAA"}
1
+ {"version":3,"file":"Logout-Cbw1SacV.js","names":["error: unknown"],"sources":["../src/slices/auth/features/Logout.vue"],"sourcesContent":["<template>\n <div class=\"min-h-screen flex items-center justify-center bg-base-100\">\n <div class=\"max-w-md mx-auto bg-base-200 p-8 rounded-xl shadow-md text-center\">\n <div v-if=\"status === 'loading'\" class=\"space-y-4\">\n <div class=\"flex justify-center\">\n <span class=\"loading loading-spinner loading-lg text-primary\"></span>\n </div>\n <h2 class=\"text-2xl font-bold mb-2\">Logging out...</h2>\n <p class=\"text-base-content/70\">Please wait while we securely log you out</p>\n </div>\n <div v-else class=\"space-y-4\">\n <h2 class=\"text-2xl font-bold mb-2\">\n {{ status === 'success' ? 'Logged out' : 'Logout failed' }}\n </h2>\n <p class=\"text-base-content/70\">\n {{ status === 'success'\n ? 'Redirecting you...'\n : 'Redirecting you to login...' }}\n </p>\n <p class=\"text-sm text-base-content/60\">\n If you aren't redirected automatically,\n <AppLink :to=\"redirectTo\" class=\"link link-primary\">click here</AppLink>.\n </p>\n </div>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport AppLink from '../../../components/AppLink.vue';\nimport { useMutation } from '../../../composables/useMutation';\nimport { useUserSessionStore } from '../../../composables/useUserSessionStore';\nimport { getValidReturnUrl } from '../../../utils/useReturnUrl';\nimport { onMounted, computed, ref } from 'vue';\nimport { useRoute, useRouter } from 'vue-router';\nimport { toast } from 'vue3-toastify';\n\nconst sessionStore = useUserSessionStore();\nconst route = useRoute();\nconst router = useRouter();\nconst status = ref<'loading' | 'success' | 'error'>('loading');\n\nconst redirectTo = computed(() =>\n getValidReturnUrl(route, '/auth/login'),\n);\n\nconst { mutate: logoutMutate } = useMutation(\n (api) => api.userSessions.logout(),\n { credentials: 'include' }, // Include credentials to allow cookies\n);\n\nonMounted(async () => {\n try {\n await logoutMutate(undefined);\n sessionStore.clearSession();\n status.value = 'success';\n setTimeout(() => router.push(redirectTo.value), 1000);\n } catch (error: unknown) {\n status.value = 'error';\n toast.error(error instanceof Error ? error.message : 'Failed to logout', {\n autoClose: 2000,\n });\n setTimeout(() => router.push(redirectTo.value), 2000);\n }\n});\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;EAqCA,MAAM,eAAe,qBAAqB;EAC1C,MAAM,QAAQ,UAAU;EACxB,MAAM,SAAS,WAAW;EAC1B,MAAM,SAAS,IAAqC,UAAU;EAE9D,MAAM,aAAa,eACjB,kBAAkB,OAAO,cAAc,CACxC;EAED,MAAM,EAAE,QAAQ,iBAAiB,aAC9B,QAAQ,IAAI,aAAa,QAAQ,EAClC,EAAE,aAAa,WAAW,CAC3B;AAED,YAAU,YAAY;AACpB,OAAI;AACF,UAAM,aAAa,OAAU;AAC7B,iBAAa,cAAc;AAC3B,WAAO,QAAQ;AACf,qBAAiB,OAAO,KAAK,WAAW,MAAM,EAAE,IAAK;YAC9CA,OAAgB;AACvB,WAAO,QAAQ;AACf,UAAM,MAAM,iBAAiB,QAAQ,MAAM,UAAU,oBAAoB,EACvE,WAAW,KACZ,CAAC;AACF,qBAAiB,OAAO,KAAK,WAAW,MAAM,EAAE,IAAK;;IAEvD;;uBA/DA,mBAwBM,OAxBN,YAwBM,CAvBJ,mBAsBM,OAtBN,YAsBM,CArBO,OAAA,UAAM,aAAA,WAAA,EAAjB,mBAMM,OANN,YAMM,CAAA,GAAA,OAAA,OAAA,OAAA,KAAA;IALJ,mBAEM,OAAA,EAFD,OAAM,uBAAqB,EAAA,CAC9B,mBAAqE,QAAA,EAA/D,OAAM,mDAAiD,CAAA,CAAA;IAE/D,mBAAuD,MAAA,EAAnD,OAAM,2BAAyB,EAAC,kBAAc,GAAA;IAClD,mBAA6E,KAAA,EAA1E,OAAM,wBAAsB,EAAC,6CAAyC,GAAA;yBAE3E,mBAaM,OAbN,YAaM;IAZJ,mBAEK,MAFL,YAEK,gBADA,OAAA,UAAM,YAAA,eAAA,gBAAA,EAAA,EAAA;IAEX,mBAII,KAJJ,YAII,gBAHC,OAAA,UAAM,YAAA,uBAAA,8BAAA;IAIX,mBAGI,KAHJ,YAGI;+CAHoC,6CAEtC,GAAA;KAAA,YAAwE,iBAAA;MAA9D,IAAI,WAAA;MAAY,OAAM;;6BAA8B,CAAA,GAAA,OAAA,OAAA,OAAA,KAAA,CAAA,gBAAV,cAAU,GAAA,CAAA,EAAA,CAAA;;;+CAAU,MAC1E,GAAA"}
@@ -0,0 +1,7 @@
1
+ import "./useRpcAuth-Bse-lggK.js";
2
+ import "./useQueryCache-CJKZquh6.js";
3
+ import "./useMutation-Dhx2gMgS.js";
4
+ import "./AppLink-CHMMrSFI.js";
5
+ import { t as Logout_default } from "./Logout-Cbw1SacV.js";
6
+
7
+ export { Logout_default as default };
@@ -1,6 +1,7 @@
1
- import { t as useMutation } from "./useMutation-DbzXtqf1.js";
2
- import { o as withReturnUrl, r as getValidReturnUrl, s as AppLink_default } from "./useReturnUrl-Da8PpLb9.js";
3
- import { t as mfaSetupConfirmSchemaWithMetadata } from "./mfaSchema-nfNCcEhM.js";
1
+ import { t as useMutation } from "./useMutation-Dhx2gMgS.js";
2
+ import { t as AppLink_default } from "./AppLink-CHMMrSFI.js";
3
+ import { o as withReturnUrl, r as getValidReturnUrl } from "./useReturnUrl-qFeazn-G.js";
4
+ import { t as mfaSetupConfirmSchemaWithMetadata } from "./mfaSchema-s-T8m-7-.js";
4
5
  import { computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, createTextVNode, createVNode, defineComponent, openBlock, ref, toDisplayString, unref, withCtx } from "vue";
5
6
  import { useRoute, useRouter } from "vue-router";
6
7
  import { toast } from "vue3-toastify";
@@ -109,4 +110,4 @@ var MfaSetup_default = _sfc_main;
109
110
 
110
111
  //#endregion
111
112
  export { MfaSetup_default as t };
112
- //# sourceMappingURL=MfaSetup-Ch0w-gTN.js.map
113
+ //# sourceMappingURL=MfaSetup-CwYXnvgW.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"MfaSetup-Ch0w-gTN.js","names":[],"sources":["../src/slices/auth/features/mfa/MfaSetup.vue"],"sourcesContent":["<template>\n <div class=\"max-w-md mx-auto bg-base-200 p-6 rounded-xl shadow-md container\">\n <h1 class=\"text-2xl font-bold mb-6 text-center\">Set Up Two-Factor Authentication</h1>\n\n <div v-if=\"!setupData\" class=\"space-y-4\">\n <p class=\"text-base-content/80\">\n Add an extra layer of security to your account by enabling two-factor authentication (2FA).\n </p>\n <button\n type=\"button\"\n class=\"btn btn-primary w-full\"\n :disabled=\"loading\"\n @click=\"startSetup\"\n >\n {{ loading ? 'Starting...' : 'Begin Setup' }}\n </button>\n </div>\n\n <ZiniaForm\n v-else\n @handle-submit=\"handleConfirm\"\n @success=\"handleSuccess\"\n @error=\"handleError\"\n >\n <div class=\"space-y-4 mb-4\">\n <p class=\"text-sm text-base-content/80\">\n Scan this QR code with your authenticator app (Google Authenticator, Authy, etc.):\n </p>\n <div v-if=\"setupData.qrCodeUrl\" class=\"flex justify-center\">\n <img\n :src=\"setupData.qrCodeUrl\"\n alt=\"MFA QR Code\"\n class=\"w-48 h-48 border rounded-lg\"\n />\n </div>\n <p class=\"text-sm text-base-content/80\">\n Or enter this secret manually: <code class=\"bg-base-300 px-2 py-1 rounded text-sm break-all\">{{ setupData.secret }}</code>\n </p>\n </div>\n <zinia.CodeField />\n <ZiniaSubmitButton submitText=\"Verify & Enable\" submittingText=\"Verifying...\" />\n\n <div class=\"text-center mt-2\">\n <AppLink class=\"link-accent link\" :to=\"loginLink\">Back to Login</AppLink>\n </div>\n </ZiniaForm>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport AppLink from '../../../../components/AppLink.vue';\nimport { useMutation } from '../../../../composables/useMutation';\nimport { useForm } from '@dragonmastery/zinia-forms-core';\nimport { getValidReturnUrl, withReturnUrl } from '../../../../utils/useReturnUrl';\nimport { computed, ref } from 'vue';\nimport { useRoute, useRouter } from 'vue-router';\nimport { toast } from 'vue3-toastify';\nimport { z } from 'zod';\nimport type { DragoncoreApi, MfaApi } from '@dragonmastery/dragoncore-shared';\nimport { mfaSetupConfirmSchemaWithMetadata } from './mfaSchema';\n\nconst router = useRouter();\nconst route = useRoute();\nconst returnUrl = computed(() => route.query.returnUrl as string | undefined);\nconst loginLink = computed(() => withReturnUrl('/auth/login', returnUrl.value));\nconst setupData = ref<{ secret: string; qrCodeUrl: string } | null>(null);\n\nconst { form, zinia, ZiniaForm, ZiniaSubmitButton } = useForm(\n mfaSetupConfirmSchemaWithMetadata,\n {\n storeName: 'mfa-setup-form',\n persistToLocalStorage: false,\n renderStyle: 'daisy_ui',\n },\n);\n\nconst { mutate: startSetupMutate, loading } = useMutation(\n (api, _input?: unknown) => {\n const mfa = (api as DragoncoreApi).mfa;\n if (!mfa) throw new Error('MFA is not configured for this application');\n return (mfa as MfaApi).startSetup();\n },\n { skipAuthCheck: false },\n);\n\nconst { mutate: confirmSetupMutate } = useMutation(\n (api, code: string) => {\n const mfa = (api as DragoncoreApi).mfa;\n if (!mfa) throw new Error('MFA is not configured for this application');\n return (mfa as MfaApi).confirmSetup(code);\n },\n { skipAuthCheck: false },\n);\n\nconst startSetup = async () => {\n const result = await startSetupMutate(undefined);\n if (result) setupData.value = result;\n};\n\nconst handleConfirm = async (data: z.infer<typeof mfaSetupConfirmSchemaWithMetadata>) => {\n const result = await confirmSetupMutate(data.code);\n if (!result?.ok) throw new Error('MFA setup verification failed');\n return result;\n};\n\nconst handleSuccess = async (data: { ok: boolean; recoveryCodes?: string[] }) => {\n form.reset();\n setupData.value = null;\n if (data.recoveryCodes?.length) {\n toast.success(\n 'MFA enabled! Save your recovery codes in a safe place. You will need them if you lose access to your authenticator.',\n );\n } else {\n toast.success('Two-factor authentication has been enabled.');\n }\n const targetPath = getValidReturnUrl(route, '/');\n await router.push(targetPath);\n};\n\nconst handleError = (error: Error) => {\n toast.error(error.message || 'MFA setup failed');\n};\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;EA6DA,MAAM,SAAS,WAAW;EAC1B,MAAM,QAAQ,UAAU;EACxB,MAAM,YAAY,eAAe,MAAM,MAAM,UAAgC;EAC7E,MAAM,YAAY,eAAe,cAAc,eAAe,UAAU,MAAM,CAAC;EAC/E,MAAM,YAAY,IAAkD,KAAK;EAEzE,MAAM,EAAE,MAAM,OAAO,WAAW,sBAAsB,QACpD,mCACA;GACE,WAAW;GACX,uBAAuB;GACvB,aAAa;GACd,CACF;EAED,MAAM,EAAE,QAAQ,kBAAkB,YAAY,aAC3C,KAAK,WAAqB;GACzB,MAAM,MAAO,IAAsB;AACnC,OAAI,CAAC,IAAK,OAAM,IAAI,MAAM,6CAA6C;AACvE,UAAQ,IAAe,YAAY;KAErC,EAAE,eAAe,OAAO,CACzB;EAED,MAAM,EAAE,QAAQ,uBAAuB,aACpC,KAAK,SAAiB;GACrB,MAAM,MAAO,IAAsB;AACnC,OAAI,CAAC,IAAK,OAAM,IAAI,MAAM,6CAA6C;AACvE,UAAQ,IAAe,aAAa,KAAK;KAE3C,EAAE,eAAe,OAAO,CACzB;EAED,MAAM,aAAa,YAAY;GAC7B,MAAM,SAAS,MAAM,iBAAiB,OAAU;AAChD,OAAI,OAAQ,WAAU,QAAQ;;EAGhC,MAAM,gBAAgB,OAAO,SAA4D;GACvF,MAAM,SAAS,MAAM,mBAAmB,KAAK,KAAK;AAClD,OAAI,CAAC,QAAQ,GAAI,OAAM,IAAI,MAAM,gCAAgC;AACjE,UAAO;;EAGT,MAAM,gBAAgB,OAAO,SAAoD;AAC/E,QAAK,OAAO;AACZ,aAAU,QAAQ;AAClB,OAAI,KAAK,eAAe,OACtB,OAAM,QACJ,sHACD;OAED,OAAM,QAAQ,8CAA8C;GAE9D,MAAM,aAAa,kBAAkB,OAAO,IAAI;AAChD,SAAM,OAAO,KAAK,WAAW;;EAG/B,MAAM,eAAe,UAAiB;AACpC,SAAM,MAAM,MAAM,WAAW,mBAAmB;;;uBAvHhD,mBA6CM,OA7CN,YA6CM,CAAA,OAAA,OAAA,OAAA,KA5CJ,mBAAqF,MAAA,EAAjF,OAAM,uCAAqC,EAAC,oCAAgC,GAAA,GAAA,CAEpE,UAAA,SAAA,WAAA,EAAZ,mBAYM,OAZN,YAYM,CAAA,OAAA,OAAA,OAAA,KAXJ,mBAEI,KAAA,EAFD,OAAM,wBAAsB,EAAC,iGAEhC,GAAA,GACA,mBAOS,UAAA;IANP,MAAK;IACL,OAAM;IACL,UAAU,MAAA,QAAO;IACjB,SAAO;sBAEL,MAAA,QAAO,GAAA,gBAAA,cAAA,EAAA,GAAA,WAAA,CAAA,CAAA,KAAA,WAAA,EAId,YA2BY,MAAA,UAAA,EAAA;;IAzBT,gBAAe;IACf,WAAS;IACT,SAAO;;2BAgBF;KAdN,mBAcM,OAdN,YAcM;gCAbJ,mBAEI,KAAA,EAFD,OAAM,gCAA8B,EAAC,wFAExC,GAAA;MACW,UAAA,MAAU,aAAA,WAAA,EAArB,mBAMM,OANN,YAMM,CALJ,mBAIE,OAAA;OAHC,KAAK,UAAA,MAAU;OAChB,KAAI;OACJ,OAAM;;MAGV,mBAEI,KAFJ,YAEI,CAAA,OAAA,OAAA,OAAA,KAAA,gBAFoC,oCACP,GAAA,GAAA,mBAA2F,QAA3F,YAA2F,gBAA1B,UAAA,MAAU,OAAM,EAAA,EAAA,CAAA,CAAA;;KAGpH,YAAmB,MAAA,MAAA,CAAA,UAAA;KACnB,YAAgF,MAAA,kBAAA,EAAA;MAA7D,YAAW;MAAkB,gBAAe;;KAE/D,mBAEM,OAFN,YAEM,CADJ,YAAyE,iBAAA;MAAhE,OAAM;MAAoB,IAAI,UAAA;;6BAAwB,CAAA,GAAA,OAAA,OAAA,OAAA,KAAA,CAAA,gBAAb,iBAAa,GAAA,CAAA,EAAA,CAAA"}
1
+ {"version":3,"file":"MfaSetup-CwYXnvgW.js","names":[],"sources":["../src/slices/auth/features/mfa/MfaSetup.vue"],"sourcesContent":["<template>\n <div class=\"max-w-md mx-auto bg-base-200 p-6 rounded-xl shadow-md container\">\n <h1 class=\"text-2xl font-bold mb-6 text-center\">Set Up Two-Factor Authentication</h1>\n\n <div v-if=\"!setupData\" class=\"space-y-4\">\n <p class=\"text-base-content/80\">\n Add an extra layer of security to your account by enabling two-factor authentication (2FA).\n </p>\n <button\n type=\"button\"\n class=\"btn btn-primary w-full\"\n :disabled=\"loading\"\n @click=\"startSetup\"\n >\n {{ loading ? 'Starting...' : 'Begin Setup' }}\n </button>\n </div>\n\n <ZiniaForm\n v-else\n @handle-submit=\"handleConfirm\"\n @success=\"handleSuccess\"\n @error=\"handleError\"\n >\n <div class=\"space-y-4 mb-4\">\n <p class=\"text-sm text-base-content/80\">\n Scan this QR code with your authenticator app (Google Authenticator, Authy, etc.):\n </p>\n <div v-if=\"setupData.qrCodeUrl\" class=\"flex justify-center\">\n <img\n :src=\"setupData.qrCodeUrl\"\n alt=\"MFA QR Code\"\n class=\"w-48 h-48 border rounded-lg\"\n />\n </div>\n <p class=\"text-sm text-base-content/80\">\n Or enter this secret manually: <code class=\"bg-base-300 px-2 py-1 rounded text-sm break-all\">{{ setupData.secret }}</code>\n </p>\n </div>\n <zinia.CodeField />\n <ZiniaSubmitButton submitText=\"Verify & Enable\" submittingText=\"Verifying...\" />\n\n <div class=\"text-center mt-2\">\n <AppLink class=\"link-accent link\" :to=\"loginLink\">Back to Login</AppLink>\n </div>\n </ZiniaForm>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport AppLink from '../../../../components/AppLink.vue';\nimport { useMutation } from '../../../../composables/useMutation';\nimport { useForm } from '@dragonmastery/zinia-forms-core';\nimport { getValidReturnUrl, withReturnUrl } from '../../../../utils/useReturnUrl';\nimport { computed, ref } from 'vue';\nimport { useRoute, useRouter } from 'vue-router';\nimport { toast } from 'vue3-toastify';\nimport { z } from 'zod';\nimport type { DragoncoreApi, MfaApi } from '@dragonmastery/dragoncore-shared';\nimport { mfaSetupConfirmSchemaWithMetadata } from './mfaSchema';\n\nconst router = useRouter();\nconst route = useRoute();\nconst returnUrl = computed(() => route.query.returnUrl as string | undefined);\nconst loginLink = computed(() => withReturnUrl('/auth/login', returnUrl.value));\nconst setupData = ref<{ secret: string; qrCodeUrl: string } | null>(null);\n\nconst { form, zinia, ZiniaForm, ZiniaSubmitButton } = useForm(\n mfaSetupConfirmSchemaWithMetadata,\n {\n storeName: 'mfa-setup-form',\n persistToLocalStorage: false,\n renderStyle: 'daisy_ui',\n },\n);\n\nconst { mutate: startSetupMutate, loading } = useMutation(\n (api, _input?: unknown) => {\n const mfa = (api as DragoncoreApi).mfa;\n if (!mfa) throw new Error('MFA is not configured for this application');\n return (mfa as MfaApi).startSetup();\n },\n { skipAuthCheck: false },\n);\n\nconst { mutate: confirmSetupMutate } = useMutation(\n (api, code: string) => {\n const mfa = (api as DragoncoreApi).mfa;\n if (!mfa) throw new Error('MFA is not configured for this application');\n return (mfa as MfaApi).confirmSetup(code);\n },\n { skipAuthCheck: false },\n);\n\nconst startSetup = async () => {\n const result = await startSetupMutate(undefined);\n if (result) setupData.value = result;\n};\n\nconst handleConfirm = async (data: z.infer<typeof mfaSetupConfirmSchemaWithMetadata>) => {\n const result = await confirmSetupMutate(data.code);\n if (!result?.ok) throw new Error('MFA setup verification failed');\n return result;\n};\n\nconst handleSuccess = async (data: { ok: boolean; recoveryCodes?: string[] }) => {\n form.reset();\n setupData.value = null;\n if (data.recoveryCodes?.length) {\n toast.success(\n 'MFA enabled! Save your recovery codes in a safe place. You will need them if you lose access to your authenticator.',\n );\n } else {\n toast.success('Two-factor authentication has been enabled.');\n }\n const targetPath = getValidReturnUrl(route, '/');\n await router.push(targetPath);\n};\n\nconst handleError = (error: Error) => {\n toast.error(error.message || 'MFA setup failed');\n};\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;EA6DA,MAAM,SAAS,WAAW;EAC1B,MAAM,QAAQ,UAAU;EACxB,MAAM,YAAY,eAAe,MAAM,MAAM,UAAgC;EAC7E,MAAM,YAAY,eAAe,cAAc,eAAe,UAAU,MAAM,CAAC;EAC/E,MAAM,YAAY,IAAkD,KAAK;EAEzE,MAAM,EAAE,MAAM,OAAO,WAAW,sBAAsB,QACpD,mCACA;GACE,WAAW;GACX,uBAAuB;GACvB,aAAa;GACd,CACF;EAED,MAAM,EAAE,QAAQ,kBAAkB,YAAY,aAC3C,KAAK,WAAqB;GACzB,MAAM,MAAO,IAAsB;AACnC,OAAI,CAAC,IAAK,OAAM,IAAI,MAAM,6CAA6C;AACvE,UAAQ,IAAe,YAAY;KAErC,EAAE,eAAe,OAAO,CACzB;EAED,MAAM,EAAE,QAAQ,uBAAuB,aACpC,KAAK,SAAiB;GACrB,MAAM,MAAO,IAAsB;AACnC,OAAI,CAAC,IAAK,OAAM,IAAI,MAAM,6CAA6C;AACvE,UAAQ,IAAe,aAAa,KAAK;KAE3C,EAAE,eAAe,OAAO,CACzB;EAED,MAAM,aAAa,YAAY;GAC7B,MAAM,SAAS,MAAM,iBAAiB,OAAU;AAChD,OAAI,OAAQ,WAAU,QAAQ;;EAGhC,MAAM,gBAAgB,OAAO,SAA4D;GACvF,MAAM,SAAS,MAAM,mBAAmB,KAAK,KAAK;AAClD,OAAI,CAAC,QAAQ,GAAI,OAAM,IAAI,MAAM,gCAAgC;AACjE,UAAO;;EAGT,MAAM,gBAAgB,OAAO,SAAoD;AAC/E,QAAK,OAAO;AACZ,aAAU,QAAQ;AAClB,OAAI,KAAK,eAAe,OACtB,OAAM,QACJ,sHACD;OAED,OAAM,QAAQ,8CAA8C;GAE9D,MAAM,aAAa,kBAAkB,OAAO,IAAI;AAChD,SAAM,OAAO,KAAK,WAAW;;EAG/B,MAAM,eAAe,UAAiB;AACpC,SAAM,MAAM,MAAM,WAAW,mBAAmB;;;uBAvHhD,mBA6CM,OA7CN,YA6CM,CAAA,OAAA,OAAA,OAAA,KA5CJ,mBAAqF,MAAA,EAAjF,OAAM,uCAAqC,EAAC,oCAAgC,GAAA,GAAA,CAEpE,UAAA,SAAA,WAAA,EAAZ,mBAYM,OAZN,YAYM,CAAA,OAAA,OAAA,OAAA,KAXJ,mBAEI,KAAA,EAFD,OAAM,wBAAsB,EAAC,iGAEhC,GAAA,GACA,mBAOS,UAAA;IANP,MAAK;IACL,OAAM;IACL,UAAU,MAAA,QAAO;IACjB,SAAO;sBAEL,MAAA,QAAO,GAAA,gBAAA,cAAA,EAAA,GAAA,WAAA,CAAA,CAAA,KAAA,WAAA,EAId,YA2BY,MAAA,UAAA,EAAA;;IAzBT,gBAAe;IACf,WAAS;IACT,SAAO;;2BAgBF;KAdN,mBAcM,OAdN,YAcM;gCAbJ,mBAEI,KAAA,EAFD,OAAM,gCAA8B,EAAC,wFAExC,GAAA;MACW,UAAA,MAAU,aAAA,WAAA,EAArB,mBAMM,OANN,YAMM,CALJ,mBAIE,OAAA;OAHC,KAAK,UAAA,MAAU;OAChB,KAAI;OACJ,OAAM;;MAGV,mBAEI,KAFJ,YAEI,CAAA,OAAA,OAAA,OAAA,KAAA,gBAFoC,oCACP,GAAA,GAAA,mBAA2F,QAA3F,YAA2F,gBAA1B,UAAA,MAAU,OAAM,EAAA,EAAA,CAAA,CAAA;;KAGpH,YAAmB,MAAA,MAAA,CAAA,UAAA;KACnB,YAAgF,MAAA,kBAAA,EAAA;MAA7D,YAAW;MAAkB,gBAAe;;KAE/D,mBAEM,OAFN,YAEM,CADJ,YAAyE,iBAAA;MAAhE,OAAM;MAAoB,IAAI,UAAA;;6BAAwB,CAAA,GAAA,OAAA,OAAA,OAAA,KAAA,CAAA,gBAAb,iBAAa,GAAA,CAAA,EAAA,CAAA"}
@@ -0,0 +1,8 @@
1
+ import "./useRpcAuth-Bse-lggK.js";
2
+ import "./useQueryCache-CJKZquh6.js";
3
+ import "./useMutation-Dhx2gMgS.js";
4
+ import "./AppLink-CHMMrSFI.js";
5
+ import "./mfaSchema-s-T8m-7-.js";
6
+ import { t as MfaSetup_default } from "./MfaSetup-CwYXnvgW.js";
7
+
8
+ export { MfaSetup_default as default };
@@ -1,7 +1,8 @@
1
- import { l as useUserSessionStore } from "./useRpcAuth-8Byr6SSI.js";
2
- import { t as useMutation } from "./useMutation-DbzXtqf1.js";
3
- import { o as withReturnUrl, r as getValidReturnUrl, s as AppLink_default } from "./useReturnUrl-Da8PpLb9.js";
4
- import { n as mfaVerifySchemaWithMetadata } from "./mfaSchema-nfNCcEhM.js";
1
+ import { l as useUserSessionStore } from "./useRpcAuth-Bse-lggK.js";
2
+ import { t as useMutation } from "./useMutation-Dhx2gMgS.js";
3
+ import { t as AppLink_default } from "./AppLink-CHMMrSFI.js";
4
+ import { o as withReturnUrl, r as getValidReturnUrl } from "./useReturnUrl-qFeazn-G.js";
5
+ import { n as mfaVerifySchemaWithMetadata } from "./mfaSchema-s-T8m-7-.js";
5
6
  import { computed, createElementBlock, createElementVNode, createTextVNode, createVNode, defineComponent, openBlock, unref, withCtx } from "vue";
6
7
  import { useRoute, useRouter } from "vue-router";
7
8
  import { toast } from "vue3-toastify";
@@ -82,4 +83,4 @@ var MfaVerify_default = _sfc_main;
82
83
 
83
84
  //#endregion
84
85
  export { MfaVerify_default as t };
85
- //# sourceMappingURL=MfaVerify-BwzjVrTj.js.map
86
+ //# sourceMappingURL=MfaVerify-CIlen2i5.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"MfaVerify-BwzjVrTj.js","names":[],"sources":["../src/slices/auth/features/mfa/MfaVerify.vue"],"sourcesContent":["<template>\n <div class=\"max-w-md mx-auto bg-base-200 p-6 rounded-xl shadow-md container\">\n <h1 class=\"text-2xl font-bold mb-6 text-center\">Two-Factor Authentication</h1>\n\n <p class=\"text-base-content/80 mb-4\">\n Enter the 6-digit code from your authenticator app to complete sign in.\n </p>\n\n <ZiniaForm @handle-submit=\"handleSubmit\" @success=\"handleSuccess\" @error=\"handleError\">\n <zinia.CodeField />\n <ZiniaSubmitButton submitText=\"Verify\" submittingText=\"Verifying...\" />\n\n <div class=\"text-center mt-2\">\n <AppLink class=\"link-accent link\" :to=\"loginLink\">Back to Login</AppLink>\n </div>\n </ZiniaForm>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport AppLink from '../../../../components/AppLink.vue';\nimport { useMutation } from '../../../../composables/useMutation';\nimport { useUserSessionStore } from '../../../../composables/useUserSessionStore';\nimport { getValidReturnUrl, withReturnUrl } from '../../../../utils/useReturnUrl';\nimport { useForm } from '@dragonmastery/zinia-forms-core';\nimport { computed } from 'vue';\nimport { useRoute, useRouter } from 'vue-router';\nimport { toast } from 'vue3-toastify';\nimport type { DragoncoreApi } from '@dragonmastery/dragoncore-shared';\nimport type { MfaApi } from '@dragonmastery/dragoncore-shared';\nimport { z } from 'zod';\nimport { mfaVerifySchemaWithMetadata } from './mfaSchema';\n\nconst router = useRouter();\nconst route = useRoute();\nconst sessionStore = useUserSessionStore();\n\nconst returnUrl = computed(() => route.query.returnUrl as string | undefined);\nconst loginLink = computed(() => withReturnUrl('/auth/login', returnUrl.value));\nconst mfaSessionId = route.query.mfaSessionId as string;\n\nconst { form, zinia, ZiniaForm, ZiniaSubmitButton } = useForm(mfaVerifySchemaWithMetadata, {\n storeName: 'mfa-verify-form',\n persistToLocalStorage: false,\n renderStyle: 'daisy_ui',\n});\n\nconst { mutate: verifyMutate } = useMutation(\n (api, input: { mfaSessionId: string; code: string }) => {\n const mfa = (api as DragoncoreApi).mfa;\n if (!mfa) throw new Error('MFA is not configured for this application');\n return (mfa as MfaApi).verify(input.mfaSessionId, input.code);\n },\n { credentials: 'include' },\n);\n\nconst handleSubmit = async (data: z.infer<typeof mfaVerifySchemaWithMetadata>) => {\n if (!mfaSessionId) throw new Error('Invalid MFA session. Please try logging in again.');\n const result = await verifyMutate({ mfaSessionId, code: data.code });\n if (!result?.access_token || !result?.user_details_token) throw new Error('Verification failed');\n return result;\n};\n\nconst handleSuccess = async (data: { access_token: string; user_details_token: string }) => {\n sessionStore.setSession(data.user_details_token);\n sessionStore.setAccessToken(data.access_token);\n form.reset();\n\n const targetPath = getValidReturnUrl(route, '/');\n await router.push(targetPath);\n toast.success('You are now logged in!');\n};\n\nconst handleError = (error: Error) => {\n toast.error(error.message || 'Verification failed');\n};\n</script>\n"],"mappings":";;;;;;;;;;;;;;;EAiCA,MAAM,SAAS,WAAW;EAC1B,MAAM,QAAQ,UAAU;EACxB,MAAM,eAAe,qBAAqB;EAE1C,MAAM,YAAY,eAAe,MAAM,MAAM,UAAgC;EAC7E,MAAM,YAAY,eAAe,cAAc,eAAe,UAAU,MAAM,CAAC;EAC/E,MAAM,eAAe,MAAM,MAAM;EAEjC,MAAM,EAAE,MAAM,OAAO,WAAW,sBAAsB,QAAQ,6BAA6B;GACzF,WAAW;GACX,uBAAuB;GACvB,aAAa;GACd,CAAC;EAEF,MAAM,EAAE,QAAQ,iBAAiB,aAC9B,KAAK,UAAkD;GACtD,MAAM,MAAO,IAAsB;AACnC,OAAI,CAAC,IAAK,OAAM,IAAI,MAAM,6CAA6C;AACvE,UAAQ,IAAe,OAAO,MAAM,cAAc,MAAM,KAAK;KAE/D,EAAE,aAAa,WAAW,CAC3B;EAED,MAAM,eAAe,OAAO,SAAsD;AAChF,OAAI,CAAC,aAAc,OAAM,IAAI,MAAM,oDAAoD;GACvF,MAAM,SAAS,MAAM,aAAa;IAAE;IAAc,MAAM,KAAK;IAAM,CAAC;AACpE,OAAI,CAAC,QAAQ,gBAAgB,CAAC,QAAQ,mBAAoB,OAAM,IAAI,MAAM,sBAAsB;AAChG,UAAO;;EAGT,MAAM,gBAAgB,OAAO,SAA+D;AAC1F,gBAAa,WAAW,KAAK,mBAAmB;AAChD,gBAAa,eAAe,KAAK,aAAa;AAC9C,QAAK,OAAO;GAEZ,MAAM,aAAa,kBAAkB,OAAO,IAAI;AAChD,SAAM,OAAO,KAAK,WAAW;AAC7B,SAAM,QAAQ,yBAAyB;;EAGzC,MAAM,eAAe,UAAiB;AACpC,SAAM,MAAM,MAAM,WAAW,sBAAsB;;;uBAzEnD,mBAeM,OAfN,YAeM;8BAdJ,mBAA8E,MAAA,EAA1E,OAAM,uCAAqC,EAAC,6BAAyB,GAAA;8BAEzE,mBAEI,KAAA,EAFD,OAAM,6BAA2B,EAAC,6EAErC,GAAA;IAEA,YAOY,MAAA,UAAA,EAAA;KAPA,gBAAe;KAAe,WAAS;KAAgB,SAAO;;4BACrD;MAAnB,YAAmB,MAAA,MAAA,CAAA,UAAA;MACnB,YAAuE,MAAA,kBAAA,EAAA;OAApD,YAAW;OAAS,gBAAe;;MAEtD,mBAEM,OAFN,YAEM,CADJ,YAAyE,iBAAA;OAAhE,OAAM;OAAoB,IAAI,UAAA;;8BAAwB,CAAA,GAAA,OAAA,OAAA,OAAA,KAAA,CAAA,gBAAb,iBAAa,GAAA,CAAA,EAAA,CAAA"}
1
+ {"version":3,"file":"MfaVerify-CIlen2i5.js","names":[],"sources":["../src/slices/auth/features/mfa/MfaVerify.vue"],"sourcesContent":["<template>\n <div class=\"max-w-md mx-auto bg-base-200 p-6 rounded-xl shadow-md container\">\n <h1 class=\"text-2xl font-bold mb-6 text-center\">Two-Factor Authentication</h1>\n\n <p class=\"text-base-content/80 mb-4\">\n Enter the 6-digit code from your authenticator app to complete sign in.\n </p>\n\n <ZiniaForm @handle-submit=\"handleSubmit\" @success=\"handleSuccess\" @error=\"handleError\">\n <zinia.CodeField />\n <ZiniaSubmitButton submitText=\"Verify\" submittingText=\"Verifying...\" />\n\n <div class=\"text-center mt-2\">\n <AppLink class=\"link-accent link\" :to=\"loginLink\">Back to Login</AppLink>\n </div>\n </ZiniaForm>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport AppLink from '../../../../components/AppLink.vue';\nimport { useMutation } from '../../../../composables/useMutation';\nimport { useUserSessionStore } from '../../../../composables/useUserSessionStore';\nimport { getValidReturnUrl, withReturnUrl } from '../../../../utils/useReturnUrl';\nimport { useForm } from '@dragonmastery/zinia-forms-core';\nimport { computed } from 'vue';\nimport { useRoute, useRouter } from 'vue-router';\nimport { toast } from 'vue3-toastify';\nimport type { DragoncoreApi } from '@dragonmastery/dragoncore-shared';\nimport type { MfaApi } from '@dragonmastery/dragoncore-shared';\nimport { z } from 'zod';\nimport { mfaVerifySchemaWithMetadata } from './mfaSchema';\n\nconst router = useRouter();\nconst route = useRoute();\nconst sessionStore = useUserSessionStore();\n\nconst returnUrl = computed(() => route.query.returnUrl as string | undefined);\nconst loginLink = computed(() => withReturnUrl('/auth/login', returnUrl.value));\nconst mfaSessionId = route.query.mfaSessionId as string;\n\nconst { form, zinia, ZiniaForm, ZiniaSubmitButton } = useForm(mfaVerifySchemaWithMetadata, {\n storeName: 'mfa-verify-form',\n persistToLocalStorage: false,\n renderStyle: 'daisy_ui',\n});\n\nconst { mutate: verifyMutate } = useMutation(\n (api, input: { mfaSessionId: string; code: string }) => {\n const mfa = (api as DragoncoreApi).mfa;\n if (!mfa) throw new Error('MFA is not configured for this application');\n return (mfa as MfaApi).verify(input.mfaSessionId, input.code);\n },\n { credentials: 'include' },\n);\n\nconst handleSubmit = async (data: z.infer<typeof mfaVerifySchemaWithMetadata>) => {\n if (!mfaSessionId) throw new Error('Invalid MFA session. Please try logging in again.');\n const result = await verifyMutate({ mfaSessionId, code: data.code });\n if (!result?.access_token || !result?.user_details_token) throw new Error('Verification failed');\n return result;\n};\n\nconst handleSuccess = async (data: { access_token: string; user_details_token: string }) => {\n sessionStore.setSession(data.user_details_token);\n sessionStore.setAccessToken(data.access_token);\n form.reset();\n\n const targetPath = getValidReturnUrl(route, '/');\n await router.push(targetPath);\n toast.success('You are now logged in!');\n};\n\nconst handleError = (error: Error) => {\n toast.error(error.message || 'Verification failed');\n};\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;EAiCA,MAAM,SAAS,WAAW;EAC1B,MAAM,QAAQ,UAAU;EACxB,MAAM,eAAe,qBAAqB;EAE1C,MAAM,YAAY,eAAe,MAAM,MAAM,UAAgC;EAC7E,MAAM,YAAY,eAAe,cAAc,eAAe,UAAU,MAAM,CAAC;EAC/E,MAAM,eAAe,MAAM,MAAM;EAEjC,MAAM,EAAE,MAAM,OAAO,WAAW,sBAAsB,QAAQ,6BAA6B;GACzF,WAAW;GACX,uBAAuB;GACvB,aAAa;GACd,CAAC;EAEF,MAAM,EAAE,QAAQ,iBAAiB,aAC9B,KAAK,UAAkD;GACtD,MAAM,MAAO,IAAsB;AACnC,OAAI,CAAC,IAAK,OAAM,IAAI,MAAM,6CAA6C;AACvE,UAAQ,IAAe,OAAO,MAAM,cAAc,MAAM,KAAK;KAE/D,EAAE,aAAa,WAAW,CAC3B;EAED,MAAM,eAAe,OAAO,SAAsD;AAChF,OAAI,CAAC,aAAc,OAAM,IAAI,MAAM,oDAAoD;GACvF,MAAM,SAAS,MAAM,aAAa;IAAE;IAAc,MAAM,KAAK;IAAM,CAAC;AACpE,OAAI,CAAC,QAAQ,gBAAgB,CAAC,QAAQ,mBAAoB,OAAM,IAAI,MAAM,sBAAsB;AAChG,UAAO;;EAGT,MAAM,gBAAgB,OAAO,SAA+D;AAC1F,gBAAa,WAAW,KAAK,mBAAmB;AAChD,gBAAa,eAAe,KAAK,aAAa;AAC9C,QAAK,OAAO;GAEZ,MAAM,aAAa,kBAAkB,OAAO,IAAI;AAChD,SAAM,OAAO,KAAK,WAAW;AAC7B,SAAM,QAAQ,yBAAyB;;EAGzC,MAAM,eAAe,UAAiB;AACpC,SAAM,MAAM,MAAM,WAAW,sBAAsB;;;uBAzEnD,mBAeM,OAfN,YAeM;8BAdJ,mBAA8E,MAAA,EAA1E,OAAM,uCAAqC,EAAC,6BAAyB,GAAA;8BAEzE,mBAEI,KAAA,EAFD,OAAM,6BAA2B,EAAC,6EAErC,GAAA;IAEA,YAOY,MAAA,UAAA,EAAA;KAPA,gBAAe;KAAe,WAAS;KAAgB,SAAO;;4BACrD;MAAnB,YAAmB,MAAA,MAAA,CAAA,UAAA;MACnB,YAAuE,MAAA,kBAAA,EAAA;OAApD,YAAW;OAAS,gBAAe;;MAEtD,mBAEM,OAFN,YAEM,CADJ,YAAyE,iBAAA;OAAhE,OAAM;OAAoB,IAAI,UAAA;;8BAAwB,CAAA,GAAA,OAAA,OAAA,OAAA,KAAA,CAAA,gBAAb,iBAAa,GAAA,CAAA,EAAA,CAAA"}
@@ -0,0 +1,8 @@
1
+ import "./useRpcAuth-Bse-lggK.js";
2
+ import "./useQueryCache-CJKZquh6.js";
3
+ import "./useMutation-Dhx2gMgS.js";
4
+ import "./AppLink-CHMMrSFI.js";
5
+ import "./mfaSchema-s-T8m-7-.js";
6
+ import { t as MfaVerify_default } from "./MfaVerify-CIlen2i5.js";
7
+
8
+ export { MfaVerify_default as default };