@dragonmastery/dragoncore-vue 0.0.21 → 0.0.23
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.
- package/dist/{AppLink-CHMMrSFI.js → AppLink-FcNGKgvG.js} +1 -1
- package/dist/{AppLink-CHMMrSFI.js.map → AppLink-FcNGKgvG.js.map} +1 -1
- package/dist/Appearance-Ch4zfWZ3.js +3 -0
- package/dist/{Appearance-DxWTyx1M.js → Appearance-shr0Aql0.js} +1 -1
- package/dist/{Appearance-DxWTyx1M.js.map → Appearance-shr0Aql0.js.map} +1 -1
- package/dist/{ChangePasswordPage--3XwluwE.js → ChangePasswordPage-C633yQiU.js} +2 -2
- package/dist/{ChangePasswordPage--3XwluwE.js.map → ChangePasswordPage-C633yQiU.js.map} +1 -1
- package/dist/ChangePasswordPage-CYuCCosx.js +7 -0
- package/dist/ConfirmDialog-DjthOYU6.js +85 -0
- package/dist/ConfirmDialog-DjthOYU6.js.map +1 -0
- package/dist/ConsentRequired-BPjsZoPY.js +211 -0
- package/dist/ConsentRequired-BPjsZoPY.js.map +1 -0
- package/dist/CreateTeamForm-CeaC41VY.js +142 -0
- package/dist/CreateTeamForm-CeaC41VY.js.map +1 -0
- package/dist/CreateTeamForm-DfgCaUwX.js +12 -0
- package/dist/CreateTeamMemberForm-Bv9gNG4z.js +140 -0
- package/dist/CreateTeamMemberForm-Bv9gNG4z.js.map +1 -0
- package/dist/CreateTeamMemberForm-CnHfpob_.js +12 -0
- package/dist/CreateUserPage-C9uOeYDJ.js +7 -0
- package/dist/{CreateUserPage-DLwXeLAq.js → CreateUserPage-CqKcY7_X.js} +2 -2
- package/dist/{CreateUserPage-DLwXeLAq.js.map → CreateUserPage-CqKcY7_X.js.map} +1 -1
- package/dist/CreditBalanceDashboard-0HiJE_OS.js +13 -0
- package/dist/CreditBalanceDashboard-k_orNn4h.js +28 -0
- package/dist/CreditBalanceDashboard-k_orNn4h.js.map +1 -0
- package/dist/CreditManagement-BVBZQDI4.js +356 -0
- package/dist/CreditManagement-BVBZQDI4.js.map +1 -0
- package/dist/CreditManagement-DXdIN-0d.js +13 -0
- package/dist/CreditTransactionHistory-DSu-6aDi.js +229 -0
- package/dist/CreditTransactionHistory-DSu-6aDi.js.map +1 -0
- package/dist/CustomerCreateSupportTicketForm-BsjX8Pja.js +14 -0
- package/dist/CustomerCreateSupportTicketForm-kf8YIGjx.js +158 -0
- package/dist/CustomerCreateSupportTicketForm-kf8YIGjx.js.map +1 -0
- package/dist/{CustomerSupportTicketDetailPage-BdyaKG1v.js → CustomerSupportTicketDetailPage-C_-YoAaP.js} +12 -9
- package/dist/{CustomerSupportTicketDetailPage-BdyaKG1v.js.map → CustomerSupportTicketDetailPage-C_-YoAaP.js.map} +1 -1
- package/dist/CustomerSupportTicketList-DdACn3ug.js +63 -0
- package/dist/{CustomerSupportTicketParent-HIxwSVdu.js → CustomerSupportTicketParent-BpBuYCrP.js} +4 -4
- package/dist/{CustomerSupportTicketParent-HIxwSVdu.js.map → CustomerSupportTicketParent-BpBuYCrP.js.map} +1 -1
- package/dist/CustomerSupportTicketParent-Djy7pNqO.js +8 -0
- package/dist/CustomerSupportTicketSuccess-DsFzpJFU.js +12 -0
- package/dist/CustomerSupportTicketSuccess-cumNSGdx.js +54 -0
- package/dist/CustomerSupportTicketSuccess-cumNSGdx.js.map +1 -0
- package/dist/EditTeamForm-BE3iX2x3.js +12 -0
- package/dist/EditTeamForm-BxRN338L.js +163 -0
- package/dist/EditTeamForm-BxRN338L.js.map +1 -0
- package/dist/EditTeamMemberForm-D7D1Zddh.js +9 -0
- package/dist/{EditTeamMemberForm-CaS2GLjV.js → EditTeamMemberForm-DfgJr5Cy.js} +7 -72
- package/dist/EditTeamMemberForm-DfgJr5Cy.js.map +1 -0
- package/dist/EditUserPage-C0K7EGjM.js +8 -0
- package/dist/{EditUserPage-DURc5rmi.js → EditUserPage-CI_jtU8P.js} +4 -4
- package/dist/{EditUserPage-DURc5rmi.js.map → EditUserPage-CI_jtU8P.js.map} +1 -1
- package/dist/EnhancedRefreshTokenHandler-C6tZCcfX.js +189 -0
- package/dist/EnhancedRefreshTokenHandler-C6tZCcfX.js.map +1 -0
- package/dist/FieldsetSection-Cd4B8Ad7.js +27 -0
- package/dist/FieldsetSection-Cd4B8Ad7.js.map +1 -0
- package/dist/{ForgotPassword-OjIPi9s9.js → ForgotPassword-Ckb9Z-wb.js} +4 -4
- package/dist/{ForgotPassword-OjIPi9s9.js.map → ForgotPassword-Ckb9Z-wb.js.map} +1 -1
- package/dist/ForgotPassword-tJVSg7PB.js +8 -0
- package/dist/{TimelineSystemEvent-BHzFr46C.js → InlineAttachments-DAn_QknY.js} +60 -661
- package/dist/InlineAttachments-DAn_QknY.js.map +1 -0
- package/dist/{LoginForm-9UFnA-fO.js → LoginForm-CMN2T1fA.js} +5 -5
- package/dist/{LoginForm-9UFnA-fO.js.map → LoginForm-CMN2T1fA.js.map} +1 -1
- package/dist/LoginForm-QFJ8NHww.js +8 -0
- package/dist/{Logout-YgTgOFUH.js → Logout-CFLYHlLr.js} +5 -5
- package/dist/{Logout-YgTgOFUH.js.map → Logout-CFLYHlLr.js.map} +1 -1
- package/dist/Logout-CjDBff3W.js +8 -0
- package/dist/MfaSetup-BZcoxJx-.js +9 -0
- package/dist/{MfaSetup-RtFMY_dj.js → MfaSetup-XqoAwBXx.js} +5 -5
- package/dist/{MfaSetup-RtFMY_dj.js.map → MfaSetup-XqoAwBXx.js.map} +1 -1
- package/dist/{MfaVerify-Cvhe8bEM.js → MfaVerify-C-A75TFZ.js} +6 -6
- package/dist/{MfaVerify-Cvhe8bEM.js.map → MfaVerify-C-A75TFZ.js.map} +1 -1
- package/dist/MfaVerify-Dy2aV5Gk.js +9 -0
- package/dist/{RecordVersionViewer-BWZ78vvE.js → RecordVersionViewer-D2j10HdK.js} +1 -1
- package/dist/{RecordVersionViewer-BWZ78vvE.js.map → RecordVersionViewer-D2j10HdK.js.map} +1 -1
- package/dist/{ResetPassword-BE4mXK9q.js → ResetPassword-Cd-Yxp8E.js} +4 -4
- package/dist/{ResetPassword-BE4mXK9q.js.map → ResetPassword-Cd-Yxp8E.js.map} +1 -1
- package/dist/ResetPassword-D6to3G6a.js +8 -0
- package/dist/{SavedFiltersPage-DQt6uc8m.js → SavedFiltersPage-DM5DvAFa.js} +62 -34
- package/dist/{SavedFiltersPage-DQt6uc8m.js.map → SavedFiltersPage-DM5DvAFa.js.map} +1 -1
- package/dist/{Signup-9TjMMnU4.js → Signup-2pqvJiVt.js} +57 -57
- package/dist/Signup-2pqvJiVt.js.map +1 -0
- package/dist/Signup-XdImA1os.js +9 -0
- package/dist/{SignupConsentFlow-QUZGKjdB.js → SignupConsentFlow-X3kXuviv.js} +106 -70
- package/dist/SignupConsentFlow-X3kXuviv.js.map +1 -0
- package/dist/{SignupRequirementsPage-DfbYmpQD.js → SignupRequirementsPage-Cf-ElkEq.js} +9 -8
- package/dist/{SignupRequirementsPage-DfbYmpQD.js.map → SignupRequirementsPage-Cf-ElkEq.js.map} +1 -1
- package/dist/StaffCreateSupportTicketForm-BlUP2XXy.js +14 -0
- package/dist/StaffCreateSupportTicketForm-D2nn4rTU.js +255 -0
- package/dist/StaffCreateSupportTicketForm-D2nn4rTU.js.map +1 -0
- package/dist/{StaffSupportTicketDetailPage-DQdfh6H1.js → StaffSupportTicketDetailPage-MFtm06BE.js} +14 -11
- package/dist/{StaffSupportTicketDetailPage-DQdfh6H1.js.map → StaffSupportTicketDetailPage-MFtm06BE.js.map} +1 -1
- package/dist/StaffSupportTicketList-LfLx0pYP.js +63 -0
- package/dist/StaffSupportTicketParent-B7mEN1oD.js +8 -0
- package/dist/{StaffSupportTicketParent-CilR4RGM.js → StaffSupportTicketParent-BvPwgOqH.js} +4 -4
- package/dist/{StaffSupportTicketParent-CilR4RGM.js.map → StaffSupportTicketParent-BvPwgOqH.js.map} +1 -1
- package/dist/StaffSupportTicketSuccess-BMCOP3ko.js +12 -0
- package/dist/StaffSupportTicketSuccess-Ca2WrcRg.js +54 -0
- package/dist/StaffSupportTicketSuccess-Ca2WrcRg.js.map +1 -0
- package/dist/{SupportStaffPage-KKugAnFm.js → SupportStaffPage-B69-kuvg.js} +8 -7
- package/dist/{SupportStaffPage-KKugAnFm.js.map → SupportStaffPage-B69-kuvg.js.map} +1 -1
- package/dist/{SupportTicketDevLifecycleBadge-EMrQHfyG.js → SupportTicketDevLifecycleBadge-BoAjMb08.js} +1 -1
- package/dist/{SupportTicketDevLifecycleBadge-EMrQHfyG.js.map → SupportTicketDevLifecycleBadge-BoAjMb08.js.map} +1 -1
- package/dist/{SupportTicketMaintenancePage-smItdkrD.js → SupportTicketMaintenancePage-Bptja-xb.js} +5 -4
- package/dist/{SupportTicketMaintenancePage-smItdkrD.js.map → SupportTicketMaintenancePage-Bptja-xb.js.map} +1 -1
- package/dist/TeamAttachmentsTab-Dk3LxX3n.js +63 -0
- package/dist/TeamHistoryTab-CRONdHcL.js +6 -0
- package/dist/{TeamHistoryTab-D5biUPmq.js → TeamHistoryTab-DM8KBEG1.js} +7 -19
- package/dist/TeamHistoryTab-DM8KBEG1.js.map +1 -0
- package/dist/TeamList-DYm_vQ2z.js +8 -0
- package/dist/TeamList-qdwlMuJv.js +141 -0
- package/dist/TeamList-qdwlMuJv.js.map +1 -0
- package/dist/TeamMemberList-4LRLT_7Z.js +7 -0
- package/dist/TeamMemberList-DyI1U1t_.js +166 -0
- package/dist/TeamMemberList-DyI1U1t_.js.map +1 -0
- package/dist/TeamMemberParent-B63pRfI6.js +10 -0
- package/dist/TeamMemberParent-D9Fxu7GD.js +83 -0
- package/dist/TeamMemberParent-D9Fxu7GD.js.map +1 -0
- package/dist/TeamMembersTab-BGcdyEE8.js +3 -0
- package/dist/{TeamMembersTab-4gmnP9sD.js → TeamMembersTab-BigqpBDH.js} +1 -1
- package/dist/{TeamMembersTab-4gmnP9sD.js.map → TeamMembersTab-BigqpBDH.js.map} +1 -1
- package/dist/{TeamNotesTab-BzGZZ1h8.js → TeamNotesTab-BgxleidZ.js} +6 -5
- package/dist/{TeamNotesTab-BzGZZ1h8.js.map → TeamNotesTab-BgxleidZ.js.map} +1 -1
- package/dist/TeamNotesTab-o7glfjoY.js +8 -0
- package/dist/TeamParent-BwXqA3rj.js +83 -0
- package/dist/TeamParent-BwXqA3rj.js.map +1 -0
- package/dist/TeamParent-CFOmyKPz.js +11 -0
- package/dist/{TimelineNoteInput-0p-M4Qie.js → TimelineNoteInput-DXaodm43.js} +3 -2
- package/dist/{TimelineNoteInput-0p-M4Qie.js.map → TimelineNoteInput-DXaodm43.js.map} +1 -1
- package/dist/TimelineSystemEvent-zCMUx5Zz.js +525 -0
- package/dist/TimelineSystemEvent-zCMUx5Zz.js.map +1 -0
- package/dist/UserListPage-Bmwg0an5.js +5 -0
- package/dist/{UserListPage-DUE5gJTo.js → UserListPage-DtA8tLff.js} +4 -3
- package/dist/{UserListPage-DUE5gJTo.js.map → UserListPage-DtA8tLff.js.map} +1 -1
- package/dist/UserProfilePage-DRbCAr9H.js +8 -0
- package/dist/{UserProfilePage-C3b93Keh.js → UserProfilePage-g4-VEDXo.js} +4 -4
- package/dist/{UserProfilePage-C3b93Keh.js.map → UserProfilePage-g4-VEDXo.js.map} +1 -1
- package/dist/{VerifyEmail-DlOmWGG-.js → VerifyEmail-CM5ehFB8.js} +7 -7
- package/dist/{VerifyEmail-DlOmWGG-.js.map → VerifyEmail-CM5ehFB8.js.map} +1 -1
- package/dist/VerifyEmail-DMHczC9f.js +10 -0
- package/dist/ViewTeam-CXyABxE6.js +8 -0
- package/dist/ViewTeam-DSbKV60o.js +220 -0
- package/dist/ViewTeam-DSbKV60o.js.map +1 -0
- package/dist/ViewTeamMember-BB0nvPOe.js +167 -0
- package/dist/ViewTeamMember-BB0nvPOe.js.map +1 -0
- package/dist/ViewTeamMember-jrOnBaDh.js +7 -0
- package/dist/ZiniaContainer-CjVhCnGB.js +18 -0
- package/dist/ZiniaContainer-CjVhCnGB.js.map +1 -0
- package/dist/{convertToLocalDateTime-CFhtN6PI.js → convertToLocalDateTime-BF25N4xd.js} +1 -2
- package/dist/convertToLocalDateTime-BF25N4xd.js.map +1 -0
- package/dist/customerSupportTicketRoutes-C7OxGAGl.js +142 -0
- package/dist/customerSupportTicketRoutes-C7OxGAGl.js.map +1 -0
- package/dist/{displayIdFormatter-Dz900Awr.js → displayIdFormatter-B-_WQHOr.js} +1 -1
- package/dist/{displayIdFormatter-Dz900Awr.js.map → displayIdFormatter-B-_WQHOr.js.map} +1 -1
- package/dist/{extractRpcErrorMessage-Di8E8-Wh.js → extractRpcErrorMessage-diUBl6Ij.js} +1 -1
- package/dist/{extractRpcErrorMessage-Di8E8-Wh.js.map → extractRpcErrorMessage-diUBl6Ij.js.map} +1 -1
- package/dist/index.d.ts +793 -834
- package/dist/index.js +66 -38
- package/dist/{mfaSchema-BnRWf0ma.js → mfaSchema-Ukqzdyck.js} +1 -1
- package/dist/{mfaSchema-BnRWf0ma.js.map → mfaSchema-Ukqzdyck.js.map} +1 -1
- package/dist/saved_filter-CfzH0BzK.js +1210 -0
- package/dist/saved_filter-CfzH0BzK.js.map +1 -0
- package/dist/signupConsentStorage-DS9vCUuC.js +27 -0
- package/dist/signupConsentStorage-DS9vCUuC.js.map +1 -0
- package/dist/{src-CEBiyg_f.css → src-C6ZmNSSU.css} +1 -1
- package/dist/{src-CEBiyg_f.css.map → src-C6ZmNSSU.css.map} +1 -1
- package/dist/src-DVe_0RO9.js +4654 -0
- package/dist/src-DVe_0RO9.js.map +1 -0
- package/dist/staffSupportTicketRoutes-CWutoQWp.js +135 -0
- package/dist/staffSupportTicketRoutes-CWutoQWp.js.map +1 -0
- package/dist/teamMemberMetadata-CQnbVepq.js +49 -0
- package/dist/teamMemberMetadata-CQnbVepq.js.map +1 -0
- package/dist/teamMetadata-DlvwO5V0.js +53 -0
- package/dist/teamMetadata-DlvwO5V0.js.map +1 -0
- package/dist/teamRoutes-KFgnsdDP.js +192 -0
- package/dist/teamRoutes-KFgnsdDP.js.map +1 -0
- package/dist/team_memberRoutes-Cjpw_ql6.js +84 -0
- package/dist/team_memberRoutes-Cjpw_ql6.js.map +1 -0
- package/dist/{useBreadcrumbs-qB6ghsAf.js → useBreadcrumbs-DIqU5AAp.js} +1 -1
- package/dist/{useBreadcrumbs-qB6ghsAf.js.map → useBreadcrumbs-DIqU5AAp.js.map} +1 -1
- package/dist/{useEmailVerificationChannel-BNi926Ho.js → useEmailVerificationChannel-B51z65PN.js} +3 -3
- package/dist/{useEmailVerificationChannel-BNi926Ho.js.map → useEmailVerificationChannel-B51z65PN.js.map} +1 -1
- package/dist/{useMutation-BTsyHKyn.js → useMutation-BLNuJoYl.js} +6 -3
- package/dist/useMutation-BLNuJoYl.js.map +1 -0
- package/dist/{useQuery-BggIE52P.js → useQuery-BzUGEOj0.js} +4 -3
- package/dist/{useQuery-BggIE52P.js.map → useQuery-BzUGEOj0.js.map} +1 -1
- package/dist/{useQueryCache-Bjm-S8v5.js → useQueryCache-alzaRWEb.js} +2 -2
- package/dist/{useQueryCache-Bjm-S8v5.js.map → useQueryCache-alzaRWEb.js.map} +1 -1
- package/dist/{useReturnUrl-qFeazn-G.js → useReturnUrl-B5V3SJf5.js} +1 -1
- package/dist/{useReturnUrl-qFeazn-G.js.map → useReturnUrl-B5V3SJf5.js.map} +1 -1
- package/dist/{useRpcAuth-rmHf7bYx.js → useRpcAuth-CJtq1dqM.js} +25 -194
- package/dist/useRpcAuth-CJtq1dqM.js.map +1 -0
- package/dist/userAuthorized-C09FHWGL.js +185 -0
- package/dist/userAuthorized-C09FHWGL.js.map +1 -0
- package/package.json +3 -3
- package/dist/Appearance-D5pwxuf4.js +0 -3
- package/dist/ChangePasswordPage-CpDPmEml.js +0 -6
- package/dist/ConsentRequired-C4IRMA0c.js +0 -213
- package/dist/ConsentRequired-C4IRMA0c.js.map +0 -1
- package/dist/CreateTeamForm-B4cIuYAf.js +0 -35
- package/dist/CreateTeamMemberForm-Chrw1y00.js +0 -35
- package/dist/CreateUserPage-WruMs7WP.js +0 -6
- package/dist/CreditBalanceDashboard-CkcsrZ_e.js +0 -35
- package/dist/CreditManagement-Ddvu9dMw.js +0 -35
- package/dist/CustomerCreateSupportTicketForm-BKperKGS.js +0 -35
- package/dist/CustomerSupportTicketList-DcbrjDa9.js +0 -35
- package/dist/CustomerSupportTicketParent-BeNzUwuP.js +0 -7
- package/dist/CustomerSupportTicketSuccess-CC967u3y.js +0 -35
- package/dist/EditTeamForm-B5Tee5wL.js +0 -35
- package/dist/EditTeamMemberForm-CaS2GLjV.js.map +0 -1
- package/dist/EditTeamMemberForm-OtcS8QWt.js +0 -6
- package/dist/EditUserPage-T4DQlKhf.js +0 -7
- package/dist/ForgotPassword-CUifhmqP.js +0 -7
- package/dist/LoginForm-Bg7GoZEA.js +0 -7
- package/dist/Logout-Bs92csWH.js +0 -7
- package/dist/MfaSetup-BACX5XP-.js +0 -8
- package/dist/MfaVerify-ak4iSdQ2.js +0 -8
- package/dist/ResetPassword-pY1uhTdl.js +0 -7
- package/dist/Signup-9TjMMnU4.js.map +0 -1
- package/dist/Signup-Bq-G3D-s.js +0 -9
- package/dist/SignupConsentFlow-QUZGKjdB.js.map +0 -1
- package/dist/StaffCreateSupportTicketForm-D0ZuisDk.js +0 -35
- package/dist/StaffSupportTicketList-CiqC05XB.js +0 -35
- package/dist/StaffSupportTicketParent-DkV329NI.js +0 -7
- package/dist/StaffSupportTicketSuccess-CUYnimaI.js +0 -35
- package/dist/TeamAttachmentsTab-DUtCD1Yi.js +0 -35
- package/dist/TeamHistoryTab-BsUoH4VK.js +0 -4
- package/dist/TeamHistoryTab-D5biUPmq.js.map +0 -1
- package/dist/TeamList-BkPIqZ8V.js +0 -35
- package/dist/TeamMemberList-1mxUGCNa.js +0 -35
- package/dist/TeamMemberParent-DzeBIElY.js +0 -35
- package/dist/TeamMembersTab-CBB2Yl_I.js +0 -3
- package/dist/TeamNotesTab-ClHl2nXd.js +0 -7
- package/dist/TeamParent-DJa9UZTP.js +0 -35
- package/dist/TimelineSystemEvent-BHzFr46C.js.map +0 -1
- package/dist/UserListPage-BTLE4J0s.js +0 -4
- package/dist/UserProfilePage-CVTORtSx.js +0 -7
- package/dist/VerifyEmail-DCP4DWIw.js +0 -9
- package/dist/ViewTeam-DVfnLMhV.js +0 -35
- package/dist/ViewTeamMember-L4v3gCIn.js +0 -35
- package/dist/convertToLocalDateTime-CFhtN6PI.js.map +0 -1
- package/dist/src-QZJyMfGX.js +0 -8951
- package/dist/src-QZJyMfGX.js.map +0 -1
- package/dist/useMutation-BTsyHKyn.js.map +0 -1
- package/dist/useRpcAuth-rmHf7bYx.js.map +0 -1
- package/dist/useSignupPendingData-BWHwUHhL.js +0 -47
- package/dist/useSignupPendingData-BWHwUHhL.js.map +0 -1
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
import { d as useEnv, n as createAppBatch, o as useUserSessionStore, u as logger } from "./useRpcAuth-CJtq1dqM.js";
|
|
2
|
+
|
|
3
|
+
//#region src/middleware/userAuthorized.ts
|
|
4
|
+
/**
|
|
5
|
+
* Creates a navigation guard that checks both authentication and authorization
|
|
6
|
+
* based on allowed user types.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* // Only staff and super_admin can access
|
|
10
|
+
* const staffOnly = createUserAuthorizedGuard({
|
|
11
|
+
* allowedUserTypes: ['staff', 'super_admin'],
|
|
12
|
+
* redirectTo: { name: 'Home' }
|
|
13
|
+
* });
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* // All authenticated users can access
|
|
17
|
+
* const authenticated = createUserAuthorizedGuard({
|
|
18
|
+
* allowedUserTypes: ['consumer', 'lead', 'staff', 'super_admin'],
|
|
19
|
+
* redirectTo: { name: 'Home' }
|
|
20
|
+
* });
|
|
21
|
+
*/
|
|
22
|
+
function createUserAuthorizedGuard(options) {
|
|
23
|
+
const { allowedUserTypes, redirectTo = { name: "Home" }, loginPath = "/auth/login", requireAuth = true } = options;
|
|
24
|
+
return async (to, _from, next) => {
|
|
25
|
+
const userSession = useUserSessionStore();
|
|
26
|
+
const env = useEnv();
|
|
27
|
+
if (requireAuth) if (!!userSession.accessToken) {
|
|
28
|
+
const { accessTokenExpired, refreshTokenExpired } = userSession.isTokenExpired();
|
|
29
|
+
if (!accessTokenExpired) {} else if (refreshTokenExpired) {
|
|
30
|
+
logger.warn("[UserAuthorized] Refresh token expired, redirecting to login");
|
|
31
|
+
userSession.clearSession();
|
|
32
|
+
const returnUrl = to.fullPath;
|
|
33
|
+
next({
|
|
34
|
+
path: loginPath,
|
|
35
|
+
query: { returnUrl }
|
|
36
|
+
});
|
|
37
|
+
return;
|
|
38
|
+
} else {
|
|
39
|
+
logger.debug("[UserAuthorized] Access token expired, attempting refresh");
|
|
40
|
+
if (!await userSession.refreshToken()) {
|
|
41
|
+
logger.error("[UserAuthorized] Token refresh failed, redirecting to login");
|
|
42
|
+
userSession.clearSession();
|
|
43
|
+
const returnUrl = to.fullPath;
|
|
44
|
+
next({
|
|
45
|
+
path: loginPath,
|
|
46
|
+
query: { returnUrl }
|
|
47
|
+
});
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
} else {
|
|
52
|
+
logger.debug("[UserAuthorized] No access token, attempting refresh token flow");
|
|
53
|
+
if (!await userSession.refreshToken()) {
|
|
54
|
+
logger.debug("[UserAuthorized] No valid session found, redirecting to login");
|
|
55
|
+
userSession.clearSession();
|
|
56
|
+
const returnUrl = to.fullPath;
|
|
57
|
+
next({
|
|
58
|
+
path: loginPath,
|
|
59
|
+
query: { returnUrl }
|
|
60
|
+
});
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
if (to.path !== "/auth/consent-required") try {
|
|
65
|
+
const pending = await createAppBatch().users.getPendingConsents();
|
|
66
|
+
if (pending && pending.length > 0) {
|
|
67
|
+
logger.debug("[UserAuthorized] Pending consents found, redirecting to consent-required");
|
|
68
|
+
next({
|
|
69
|
+
path: "/auth/consent-required",
|
|
70
|
+
query: {
|
|
71
|
+
returnUrl: to.fullPath,
|
|
72
|
+
...to.query
|
|
73
|
+
}
|
|
74
|
+
});
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
} catch (err) {
|
|
78
|
+
logger.warn("[UserAuthorized] Failed to check pending consents, continuing", { err });
|
|
79
|
+
}
|
|
80
|
+
if (!to.path.startsWith("/auth/") && env.emailVerificationMode === "strict") {
|
|
81
|
+
if (!(userSession.currentSession?.user?.email_verified ?? true)) {
|
|
82
|
+
logger.debug("[UserAuthorized] Strict mode: unverified user, redirecting to verify-email");
|
|
83
|
+
next({
|
|
84
|
+
path: "/auth/verify-email",
|
|
85
|
+
query: { returnUrl: to.fullPath }
|
|
86
|
+
});
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
const userType = userSession.currentSession?.user.user_type;
|
|
91
|
+
if (!userType) {
|
|
92
|
+
logger.warn("[UserAuthorized] No user type found, redirecting");
|
|
93
|
+
next(redirectTo);
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
if (allowedUserTypes.includes(userType)) {
|
|
97
|
+
logger.debug(`[UserAuthorized] User type '${userType}' is authorized`);
|
|
98
|
+
next();
|
|
99
|
+
} else {
|
|
100
|
+
logger.warn(`[UserAuthorized] User type '${userType}' is not authorized. Allowed: ${allowedUserTypes.join(", ")}`);
|
|
101
|
+
next(redirectTo);
|
|
102
|
+
}
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Pre-built guard: Staff and super admin only
|
|
107
|
+
* Redirects non-staff users to the provided redirect path
|
|
108
|
+
*/
|
|
109
|
+
function createStaffOnlyGuard(options) {
|
|
110
|
+
return createUserAuthorizedGuard({
|
|
111
|
+
allowedUserTypes: ["staff", "super_admin"],
|
|
112
|
+
redirectTo: options?.redirectTo ?? { name: "Home" },
|
|
113
|
+
loginPath: options?.loginPath
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Pre-built guard: Super admin only
|
|
118
|
+
* Redirects non-super-admin users to the provided redirect path
|
|
119
|
+
*/
|
|
120
|
+
function createSuperAdminOnlyGuard(options) {
|
|
121
|
+
return createUserAuthorizedGuard({
|
|
122
|
+
allowedUserTypes: ["super_admin"],
|
|
123
|
+
redirectTo: options?.redirectTo ?? "/notfound",
|
|
124
|
+
loginPath: options?.loginPath
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Pre-built guard: All authenticated users
|
|
129
|
+
* Any logged-in user can access (consumer, lead, staff, or super_admin)
|
|
130
|
+
*/
|
|
131
|
+
function createAuthenticatedGuard(options) {
|
|
132
|
+
return createUserAuthorizedGuard({
|
|
133
|
+
allowedUserTypes: [
|
|
134
|
+
"consumer",
|
|
135
|
+
"lead",
|
|
136
|
+
"staff",
|
|
137
|
+
"super_admin"
|
|
138
|
+
],
|
|
139
|
+
redirectTo: options?.redirectTo ?? { name: "Home" },
|
|
140
|
+
loginPath: options?.loginPath
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Pre-built guard: Lead, staff, and super admin
|
|
145
|
+
* Consumers are not allowed
|
|
146
|
+
*/
|
|
147
|
+
function createLeadOrStaffOnlyGuard(options) {
|
|
148
|
+
return createUserAuthorizedGuard({
|
|
149
|
+
allowedUserTypes: [
|
|
150
|
+
"lead",
|
|
151
|
+
"staff",
|
|
152
|
+
"super_admin"
|
|
153
|
+
],
|
|
154
|
+
redirectTo: options?.redirectTo ?? { name: "Home" },
|
|
155
|
+
loginPath: options?.loginPath
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Pre-configured guards with sensible defaults
|
|
160
|
+
* Apps can use these directly or override with create*Guard functions
|
|
161
|
+
*/
|
|
162
|
+
/**
|
|
163
|
+
* Pre-configured: All authenticated users
|
|
164
|
+
* Default redirect: Home, Default login: /auth/login
|
|
165
|
+
*/
|
|
166
|
+
const userAuthenticated = createAuthenticatedGuard();
|
|
167
|
+
/**
|
|
168
|
+
* Pre-configured: Staff and super admin only
|
|
169
|
+
* Default redirect: Home, Default login: /auth/login
|
|
170
|
+
*/
|
|
171
|
+
const staffOnly = createStaffOnlyGuard();
|
|
172
|
+
/**
|
|
173
|
+
* Pre-configured: Super admin only
|
|
174
|
+
* Default redirect: /notfound, Default login: /auth/login
|
|
175
|
+
*/
|
|
176
|
+
const userIsSuperAdmin = createSuperAdminOnlyGuard();
|
|
177
|
+
/**
|
|
178
|
+
* Pre-configured: Lead, staff, and super admin
|
|
179
|
+
* Default redirect: Home, Default login: /auth/login
|
|
180
|
+
*/
|
|
181
|
+
const leadOrStaffOnly = createLeadOrStaffOnlyGuard();
|
|
182
|
+
|
|
183
|
+
//#endregion
|
|
184
|
+
export { createUserAuthorizedGuard as a, userAuthenticated as c, createSuperAdminOnlyGuard as i, userIsSuperAdmin as l, createLeadOrStaffOnlyGuard as n, leadOrStaffOnly as o, createStaffOnlyGuard as r, staffOnly as s, createAuthenticatedGuard as t };
|
|
185
|
+
//# sourceMappingURL=userAuthorized-C09FHWGL.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"userAuthorized-C09FHWGL.js","names":[],"sources":["../src/middleware/userAuthorized.ts"],"sourcesContent":["import type { UserTypeValues } from '@dragonmastery/dragoncore-shared';\nimport type { NavigationGuard, RouteLocationRaw } from 'vue-router';\nimport { createAppBatch } from '../composables/useRpcAuth';\nimport { useEnv } from '../composables/useEnv';\nimport { useUserSessionStore } from '../composables/useUserSessionStore';\nimport { logger } from '../utils/logger';\n\nexport interface UserAuthorizedOptions {\n /**\n * List of user types allowed to access this route\n * Same pattern as `visible_to` in route meta\n */\n allowedUserTypes: UserTypeValues[];\n\n /**\n * Where to redirect if user is not authorized\n * Can be a route name, path, or route object\n */\n redirectTo?: RouteLocationRaw;\n\n /**\n * Login path for redirecting unauthenticated users\n * Only used if requireAuth is true\n */\n loginPath?: string;\n\n /**\n * Whether to also check authentication (token refresh, etc.)\n * Default: true\n */\n requireAuth?: boolean;\n}\n\n/**\n * Creates a navigation guard that checks both authentication and authorization\n * based on allowed user types.\n *\n * @example\n * // Only staff and super_admin can access\n * const staffOnly = createUserAuthorizedGuard({\n * allowedUserTypes: ['staff', 'super_admin'],\n * redirectTo: { name: 'Home' }\n * });\n *\n * @example\n * // All authenticated users can access\n * const authenticated = createUserAuthorizedGuard({\n * allowedUserTypes: ['consumer', 'lead', 'staff', 'super_admin'],\n * redirectTo: { name: 'Home' }\n * });\n */\nexport function createUserAuthorizedGuard(options: UserAuthorizedOptions): NavigationGuard {\n const {\n allowedUserTypes,\n redirectTo = { name: 'Home' },\n loginPath = '/auth/login',\n requireAuth = true,\n } = options;\n\n return async (to, _from, next) => {\n const userSession = useUserSessionStore();\n const env = useEnv();\n\n // Step 1: Check authentication if required\n if (requireAuth) {\n const hasAccessToken = !!userSession.accessToken;\n\n if (hasAccessToken) {\n const { accessTokenExpired, refreshTokenExpired } = userSession.isTokenExpired();\n\n if (!accessTokenExpired) {\n // Token is valid, proceed to authorization check\n } else if (refreshTokenExpired) {\n // Refresh token expired, redirect to login\n logger.warn('[UserAuthorized] Refresh token expired, redirecting to login');\n userSession.clearSession();\n const returnUrl = to.fullPath;\n next({\n path: loginPath,\n query: { returnUrl },\n });\n return;\n } else {\n // Access token expired, try refresh\n logger.debug('[UserAuthorized] Access token expired, attempting refresh');\n const refreshSuccessful = await userSession.refreshToken();\n\n if (!refreshSuccessful) {\n logger.error('[UserAuthorized] Token refresh failed, redirecting to login');\n userSession.clearSession();\n const returnUrl = to.fullPath;\n next({\n path: loginPath,\n query: { returnUrl },\n });\n return;\n }\n }\n } else {\n // No access token, try refresh token flow\n logger.debug('[UserAuthorized] No access token, attempting refresh token flow');\n const refreshSuccessful = await userSession.refreshToken();\n\n if (!refreshSuccessful) {\n logger.debug('[UserAuthorized] No valid session found, redirecting to login');\n userSession.clearSession();\n const returnUrl = to.fullPath;\n next({\n path: loginPath,\n query: { returnUrl },\n });\n return;\n }\n }\n }\n\n // Step 2: Check consent status\n // Call getPendingConsents for fresh data - backend returns [] when CONSENT_FEATURE_ENABLED is false\n if (to.path !== '/auth/consent-required') {\n try {\n const batch = createAppBatch();\n const pending = await batch.users.getPendingConsents();\n if (pending && pending.length > 0) {\n logger.debug('[UserAuthorized] Pending consents found, redirecting to consent-required');\n next({\n path: '/auth/consent-required',\n query: { returnUrl: to.fullPath, ...to.query },\n });\n return;\n }\n } catch (err) {\n logger.warn('[UserAuthorized] Failed to check pending consents, continuing', { err });\n // On auth/network error, let user proceed; they may hit CONSENT_REQUIRED on next API call\n }\n }\n\n // Step 2.5: In strict mode, block unverified users from app entirely\n if (\n !to.path.startsWith('/auth/') &&\n env.emailVerificationMode === 'strict'\n ) {\n const emailVerified = userSession.currentSession?.user?.email_verified ?? true;\n if (!emailVerified) {\n logger.debug('[UserAuthorized] Strict mode: unverified user, redirecting to verify-email');\n next({ path: '/auth/verify-email', query: { returnUrl: to.fullPath } });\n return;\n }\n }\n\n // Step 3: Check authorization (user type)\n const userType = userSession.currentSession?.user.user_type;\n\n if (!userType) {\n logger.warn('[UserAuthorized] No user type found, redirecting');\n next(redirectTo);\n return;\n }\n\n if (allowedUserTypes.includes(userType)) {\n logger.debug(`[UserAuthorized] User type '${userType}' is authorized`);\n next();\n } else {\n logger.warn(\n `[UserAuthorized] User type '${userType}' is not authorized. Allowed: ${allowedUserTypes.join(', ')}`,\n );\n next(redirectTo);\n }\n };\n}\n\n/**\n * Pre-built guard: Staff and super admin only\n * Redirects non-staff users to the provided redirect path\n */\nexport function createStaffOnlyGuard(options?: {\n redirectTo?: RouteLocationRaw;\n loginPath?: string;\n}): NavigationGuard {\n return createUserAuthorizedGuard({\n allowedUserTypes: ['staff', 'super_admin'],\n redirectTo: options?.redirectTo ?? { name: 'Home' },\n loginPath: options?.loginPath,\n });\n}\n\n/**\n * Pre-built guard: Super admin only\n * Redirects non-super-admin users to the provided redirect path\n */\nexport function createSuperAdminOnlyGuard(options?: {\n redirectTo?: RouteLocationRaw;\n loginPath?: string;\n}): NavigationGuard {\n return createUserAuthorizedGuard({\n allowedUserTypes: ['super_admin'],\n redirectTo: options?.redirectTo ?? '/notfound',\n loginPath: options?.loginPath,\n });\n}\n\n/**\n * Pre-built guard: All authenticated users\n * Any logged-in user can access (consumer, lead, staff, or super_admin)\n */\nexport function createAuthenticatedGuard(options?: {\n redirectTo?: RouteLocationRaw;\n loginPath?: string;\n}): NavigationGuard {\n return createUserAuthorizedGuard({\n allowedUserTypes: ['consumer', 'lead', 'staff', 'super_admin'],\n redirectTo: options?.redirectTo ?? { name: 'Home' },\n loginPath: options?.loginPath,\n });\n}\n\n/**\n * Pre-built guard: Lead, staff, and super admin\n * Consumers are not allowed\n */\nexport function createLeadOrStaffOnlyGuard(options?: {\n redirectTo?: RouteLocationRaw;\n loginPath?: string;\n}): NavigationGuard {\n return createUserAuthorizedGuard({\n allowedUserTypes: ['lead', 'staff', 'super_admin'],\n redirectTo: options?.redirectTo ?? { name: 'Home' },\n loginPath: options?.loginPath,\n });\n}\n\n/**\n * Pre-configured guards with sensible defaults\n * Apps can use these directly or override with create*Guard functions\n */\n\n/**\n * Pre-configured: All authenticated users\n * Default redirect: Home, Default login: /auth/login\n */\nexport const userAuthenticated = createAuthenticatedGuard();\n\n/**\n * Pre-configured: Staff and super admin only\n * Default redirect: Home, Default login: /auth/login\n */\nexport const staffOnly = createStaffOnlyGuard();\n\n/**\n * Pre-configured: Super admin only\n * Default redirect: /notfound, Default login: /auth/login\n */\nexport const userIsSuperAdmin = createSuperAdminOnlyGuard();\n\n/**\n * Pre-configured: Lead, staff, and super admin\n * Default redirect: Home, Default login: /auth/login\n */\nexport const leadOrStaffOnly = createLeadOrStaffOnlyGuard();\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dragonmastery/dragoncore-vue",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.23",
|
|
4
4
|
"description": "Vue 3 components and composables for dragoncore",
|
|
5
5
|
"author": "DragonMastery",
|
|
6
6
|
"license": "SEE LICENSE IN LICENSE",
|
|
@@ -34,14 +34,14 @@
|
|
|
34
34
|
"npm:publish": "bun run ../publish.ts"
|
|
35
35
|
},
|
|
36
36
|
"dependencies": {
|
|
37
|
-
"capnweb": "0.
|
|
37
|
+
"capnweb": "0.6.0",
|
|
38
38
|
"dompurify": "^3.3.1",
|
|
39
39
|
"jwt-decode": "4.0.0",
|
|
40
40
|
"marked": "^17.0.3",
|
|
41
41
|
"vue3-toastify": "0.2.8"
|
|
42
42
|
},
|
|
43
43
|
"peerDependencies": {
|
|
44
|
-
"@dragonmastery/dragoncore-shared": "^0.0.
|
|
44
|
+
"@dragonmastery/dragoncore-shared": "^0.0.23",
|
|
45
45
|
"@dragonmastery/zinia-forms-core": ">=0.5.11",
|
|
46
46
|
"@vueuse/core": ">=14.0.0",
|
|
47
47
|
"pinia": ">=3.0.0",
|
|
@@ -1,213 +0,0 @@
|
|
|
1
|
-
import { l as useUserSessionStore } from "./useRpcAuth-rmHf7bYx.js";
|
|
2
|
-
import "./useQueryCache-Bjm-S8v5.js";
|
|
3
|
-
import { t as useMutation } from "./useMutation-BTsyHKyn.js";
|
|
4
|
-
import { t as useQuery } from "./useQuery-BggIE52P.js";
|
|
5
|
-
import { Fragment, createBlock, createCommentVNode, createElementBlock, createElementVNode, createVNode, defineComponent, nextTick, openBlock, reactive, ref, renderList, renderSlot, toDisplayString, unref, watch, withCtx } from "vue";
|
|
6
|
-
import { useRouter } from "vue-router";
|
|
7
|
-
import { toast } from "vue3-toastify";
|
|
8
|
-
import { recordConsentsSchema } from "@dragonmastery/dragoncore-shared";
|
|
9
|
-
import { useForm, withMetadata } from "@dragonmastery/zinia-forms-core";
|
|
10
|
-
import DOMPurify from "dompurify";
|
|
11
|
-
import { marked } from "marked";
|
|
12
|
-
|
|
13
|
-
//#region src/slices/auth/shared/ConsentTermsSection.vue
|
|
14
|
-
const _hoisted_1$1 = { class: "mb-6" };
|
|
15
|
-
const _hoisted_2$1 = { class: "font-semibold mb-2" };
|
|
16
|
-
const _hoisted_3$1 = {
|
|
17
|
-
key: 0,
|
|
18
|
-
class: "text-sm text-base-content/70 mb-2"
|
|
19
|
-
};
|
|
20
|
-
const _hoisted_4$1 = ["data-consent-type"];
|
|
21
|
-
const _hoisted_5 = ["innerHTML"];
|
|
22
|
-
const _hoisted_6 = { class: "mb-3" };
|
|
23
|
-
const _hoisted_7 = ["href"];
|
|
24
|
-
const _sfc_main$1 = /* @__PURE__ */ defineComponent({
|
|
25
|
-
__name: "ConsentTermsSection",
|
|
26
|
-
props: {
|
|
27
|
-
config: {},
|
|
28
|
-
checkboxDisabled: { type: Boolean }
|
|
29
|
-
},
|
|
30
|
-
emits: ["scrolledToBottom"],
|
|
31
|
-
setup(__props, { emit: __emit }) {
|
|
32
|
-
const emit = __emit;
|
|
33
|
-
const scrollEl = ref(null);
|
|
34
|
-
function setScrollRef(el) {
|
|
35
|
-
scrollEl.value = el instanceof HTMLElement ? el : null;
|
|
36
|
-
}
|
|
37
|
-
/** Renders markdown content as sanitized HTML */
|
|
38
|
-
function renderMarkdown(content) {
|
|
39
|
-
const html = marked.parse(content);
|
|
40
|
-
return DOMPurify.sanitize(html, {
|
|
41
|
-
ALLOWED_TAGS: [
|
|
42
|
-
"p",
|
|
43
|
-
"br",
|
|
44
|
-
"strong",
|
|
45
|
-
"em",
|
|
46
|
-
"u",
|
|
47
|
-
"a",
|
|
48
|
-
"ul",
|
|
49
|
-
"ol",
|
|
50
|
-
"li",
|
|
51
|
-
"h1",
|
|
52
|
-
"h2",
|
|
53
|
-
"h3",
|
|
54
|
-
"h4",
|
|
55
|
-
"blockquote",
|
|
56
|
-
"code",
|
|
57
|
-
"pre",
|
|
58
|
-
"hr"
|
|
59
|
-
],
|
|
60
|
-
ALLOWED_ATTR: [
|
|
61
|
-
"href",
|
|
62
|
-
"target",
|
|
63
|
-
"rel"
|
|
64
|
-
]
|
|
65
|
-
});
|
|
66
|
-
}
|
|
67
|
-
function checkScrolledToBottom() {
|
|
68
|
-
const el = scrollEl.value;
|
|
69
|
-
if (!el) return;
|
|
70
|
-
const { scrollTop, scrollHeight, clientHeight } = el;
|
|
71
|
-
if (scrollHeight - scrollTop - clientHeight < 10) emit("scrolledToBottom");
|
|
72
|
-
}
|
|
73
|
-
function onScroll() {
|
|
74
|
-
checkScrolledToBottom();
|
|
75
|
-
}
|
|
76
|
-
nextTick(checkScrolledToBottom);
|
|
77
|
-
return (_ctx, _cache) => {
|
|
78
|
-
return openBlock(), createElementBlock("div", _hoisted_1$1, [
|
|
79
|
-
createElementVNode("div", _hoisted_2$1, toDisplayString(__props.config.label), 1),
|
|
80
|
-
__props.config.content ? (openBlock(), createElementBlock("p", _hoisted_3$1, " Please read the full document before accepting. Scroll to the bottom when you've finished reading. ")) : createCommentVNode("v-if", true),
|
|
81
|
-
createCommentVNode(" Scrollable terms box when content is provided (supports Markdown) "),
|
|
82
|
-
__props.config.content ? (openBlock(), createElementBlock("div", {
|
|
83
|
-
key: 1,
|
|
84
|
-
ref: (el) => setScrollRef(el),
|
|
85
|
-
class: "border border-base-300 rounded-lg px-3 py-4 sm:p-4 bg-base-100 overflow-y-auto overflow-x-hidden mb-3 min-h-80 max-h-[min(32rem,70vh)] w-full min-w-0",
|
|
86
|
-
"data-consent-type": __props.config.type,
|
|
87
|
-
onScroll
|
|
88
|
-
}, [createElementVNode("div", {
|
|
89
|
-
class: "prose prose-sm prose-max-w-none max-w-full min-w-0 text-sm prose-headings:font-semibold prose-p:my-2",
|
|
90
|
-
innerHTML: renderMarkdown(__props.config.content)
|
|
91
|
-
}, null, 8, _hoisted_5)], 40, _hoisted_4$1)) : (openBlock(), createElementBlock(Fragment, { key: 2 }, [createCommentVNode(" Link-only fallback when no content "), createElementVNode("div", _hoisted_6, [__props.config.url ? (openBlock(), createElementBlock("a", {
|
|
92
|
-
key: 0,
|
|
93
|
-
href: __props.config.url,
|
|
94
|
-
target: "_blank",
|
|
95
|
-
rel: "noopener noreferrer",
|
|
96
|
-
class: "link link-accent"
|
|
97
|
-
}, " View " + toDisplayString(__props.config.label), 9, _hoisted_7)) : createCommentVNode("v-if", true)])], 2112)),
|
|
98
|
-
renderSlot(_ctx.$slots, "checkbox", {
|
|
99
|
-
label: __props.config.content ? `I have read and accept the ${__props.config.label}` : `I accept the ${__props.config.label}`,
|
|
100
|
-
disabled: __props.checkboxDisabled
|
|
101
|
-
})
|
|
102
|
-
]);
|
|
103
|
-
};
|
|
104
|
-
}
|
|
105
|
-
});
|
|
106
|
-
var ConsentTermsSection_default = _sfc_main$1;
|
|
107
|
-
|
|
108
|
-
//#endregion
|
|
109
|
-
//#region src/slices/auth/features/consent_required/ConsentRequired.vue
|
|
110
|
-
const _hoisted_1 = { class: "w-full max-w-md mx-auto mb-8 sm:mb-10 bg-base-200 px-3 py-4 sm:px-6 sm:py-6 rounded-xl shadow-md container min-w-0" };
|
|
111
|
-
const _hoisted_2 = { class: "flex flex-col gap-5 mt-6" };
|
|
112
|
-
const _hoisted_3 = ["disabled"];
|
|
113
|
-
const _hoisted_4 = {
|
|
114
|
-
key: 1,
|
|
115
|
-
class: "text-center"
|
|
116
|
-
};
|
|
117
|
-
const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
118
|
-
__name: "ConsentRequired",
|
|
119
|
-
setup(__props) {
|
|
120
|
-
const { ziniaGeneric, ZiniaForm, ZiniaSubmitButton } = useForm(withMetadata(recordConsentsSchema, "recordConsents", {}), {
|
|
121
|
-
storeName: "consent-required-form",
|
|
122
|
-
persistToLocalStorage: false,
|
|
123
|
-
renderStyle: "daisy_ui"
|
|
124
|
-
});
|
|
125
|
-
const sessionStore = useUserSessionStore();
|
|
126
|
-
const router = useRouter();
|
|
127
|
-
const { data: pendingConsents, loading } = useQuery((api) => api.users.getPendingConsents(), { skipAuthCheck: false });
|
|
128
|
-
const hasScrolledToBottom = reactive({});
|
|
129
|
-
watch(() => pendingConsents.value, (consents) => {
|
|
130
|
-
if (!consents) return;
|
|
131
|
-
for (const c of consents) if (c.content) hasScrolledToBottom[c.type] = false;
|
|
132
|
-
else hasScrolledToBottom[c.type] = true;
|
|
133
|
-
}, { immediate: true });
|
|
134
|
-
watch([pendingConsents, loading], ([consents, isLoading]) => {
|
|
135
|
-
if (!isLoading && Array.isArray(consents) && consents.length === 0) router.push("/");
|
|
136
|
-
}, { immediate: true });
|
|
137
|
-
const declining = ref(false);
|
|
138
|
-
const { mutate: recordConsentsMutate } = useMutation((api, input) => api.users.recordConsents(input), { skipAuthCheck: false });
|
|
139
|
-
const handleSubmit = async (data) => {
|
|
140
|
-
await recordConsentsMutate(data);
|
|
141
|
-
return data;
|
|
142
|
-
};
|
|
143
|
-
const handleSuccess = async () => {
|
|
144
|
-
await sessionStore.refreshToken();
|
|
145
|
-
toast.success("Consents recorded. You can now continue.");
|
|
146
|
-
window.scrollTo(0, 0);
|
|
147
|
-
await router.push("/");
|
|
148
|
-
};
|
|
149
|
-
const handleError = (error) => {
|
|
150
|
-
toast.error(error instanceof Error ? error.message : "Failed to record consents");
|
|
151
|
-
};
|
|
152
|
-
const handleDecline = async () => {
|
|
153
|
-
declining.value = true;
|
|
154
|
-
try {
|
|
155
|
-
sessionStore.clearSession();
|
|
156
|
-
toast.info("You have declined. You have been logged out.");
|
|
157
|
-
await router.push("/auth/login");
|
|
158
|
-
} finally {
|
|
159
|
-
declining.value = false;
|
|
160
|
-
}
|
|
161
|
-
};
|
|
162
|
-
return (_ctx, _cache) => {
|
|
163
|
-
return openBlock(), createElementBlock("div", _hoisted_1, [
|
|
164
|
-
_cache[1] || (_cache[1] = createElementVNode("h1", { class: "text-2xl font-bold mb-6 text-center" }, "Additional consent required", -1)),
|
|
165
|
-
_cache[2] || (_cache[2] = createElementVNode("p", { class: "text-base-content/80 mb-6" }, " We've updated our terms. Please review the following and scroll to the bottom of each section before you can accept. If you decline, you will not have access to the application and will be logged out. ", -1)),
|
|
166
|
-
(unref(pendingConsents) ?? []).length > 0 ? (openBlock(), createBlock(unref(ZiniaForm), {
|
|
167
|
-
key: 0,
|
|
168
|
-
onHandleSubmit: handleSubmit,
|
|
169
|
-
onSuccess: handleSuccess,
|
|
170
|
-
onError: handleError
|
|
171
|
-
}, {
|
|
172
|
-
default: withCtx(() => [(openBlock(true), createElementBlock(Fragment, null, renderList(unref(pendingConsents) ?? [], (config) => {
|
|
173
|
-
return openBlock(), createBlock(ConsentTermsSection_default, {
|
|
174
|
-
key: config.type,
|
|
175
|
-
config,
|
|
176
|
-
"checkbox-disabled": config.content ? !hasScrolledToBottom[config.type] : false,
|
|
177
|
-
onScrolledToBottom: ($event) => hasScrolledToBottom[config.type] = true
|
|
178
|
-
}, {
|
|
179
|
-
checkbox: withCtx(({ label, disabled }) => [createVNode(unref(ziniaGeneric).CheckboxField, {
|
|
180
|
-
name: `acceptances.${config.type}`,
|
|
181
|
-
label,
|
|
182
|
-
disabled
|
|
183
|
-
}, null, 8, [
|
|
184
|
-
"name",
|
|
185
|
-
"label",
|
|
186
|
-
"disabled"
|
|
187
|
-
])]),
|
|
188
|
-
_: 2
|
|
189
|
-
}, 1032, [
|
|
190
|
-
"config",
|
|
191
|
-
"checkbox-disabled",
|
|
192
|
-
"onScrolledToBottom"
|
|
193
|
-
]);
|
|
194
|
-
}), 128)), createElementVNode("div", _hoisted_2, [createVNode(unref(ZiniaSubmitButton), {
|
|
195
|
-
submitText: "Accept and continue",
|
|
196
|
-
submittingText: "Saving..."
|
|
197
|
-
}), createElementVNode("button", {
|
|
198
|
-
type: "button",
|
|
199
|
-
class: "btn btn-outline btn-sm btn-error",
|
|
200
|
-
disabled: declining.value,
|
|
201
|
-
onClick: handleDecline
|
|
202
|
-
}, toDisplayString(declining.value ? "Logging out..." : "Decline and log out"), 9, _hoisted_3)])]),
|
|
203
|
-
_: 1
|
|
204
|
-
})) : (openBlock(), createElementBlock("div", _hoisted_4, [..._cache[0] || (_cache[0] = [createElementVNode("p", { class: "text-base-content/80 mb-4" }, "Loading...", -1)])]))
|
|
205
|
-
]);
|
|
206
|
-
};
|
|
207
|
-
}
|
|
208
|
-
});
|
|
209
|
-
var ConsentRequired_default = _sfc_main;
|
|
210
|
-
|
|
211
|
-
//#endregion
|
|
212
|
-
export { ConsentRequired_default as default };
|
|
213
|
-
//# sourceMappingURL=ConsentRequired-C4IRMA0c.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ConsentRequired-C4IRMA0c.js","names":[],"sources":["../src/slices/auth/shared/ConsentTermsSection.vue","../src/slices/auth/features/consent_required/ConsentRequired.vue"],"sourcesContent":["<template>\n <div class=\"mb-6\">\n <div class=\"font-semibold mb-2\">{{ config.label }}</div>\n\n <p v-if=\"config.content\" class=\"text-sm text-base-content/70 mb-2\">\n Please read the full document before accepting. Scroll to the bottom when you've finished reading.\n </p>\n\n <!-- Scrollable terms box when content is provided (supports Markdown) -->\n <div\n v-if=\"config.content\"\n :ref=\"(el) => setScrollRef(el)\"\n class=\"border border-base-300 rounded-lg px-3 py-4 sm:p-4 bg-base-100 overflow-y-auto overflow-x-hidden mb-3 min-h-80 max-h-[min(32rem,70vh)] w-full min-w-0\"\n :data-consent-type=\"config.type\"\n @scroll=\"onScroll\"\n >\n <div\n class=\"prose prose-sm prose-max-w-none max-w-full min-w-0 text-sm prose-headings:font-semibold prose-p:my-2\"\n v-html=\"renderMarkdown(config.content)\"\n />\n </div>\n\n <!-- Link-only fallback when no content -->\n <div v-else class=\"mb-3\">\n <a\n v-if=\"config.url\"\n :href=\"config.url\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n class=\"link link-accent\"\n >\n View {{ config.label }}\n </a>\n </div>\n\n <slot\n name=\"checkbox\"\n :label=\"config.content ? `I have read and accept the ${config.label}` : `I accept the ${config.label}`\"\n :disabled=\"checkboxDisabled\"\n />\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport type { SignupConsentConfigDto } from '@dragonmastery/dragoncore-shared';\nimport DOMPurify from 'dompurify';\nimport { marked } from 'marked';\nimport { nextTick, ref } from 'vue';\n\ndefineProps<{\n config: SignupConsentConfigDto;\n checkboxDisabled: boolean;\n}>();\n\nconst emit = defineEmits<{\n scrolledToBottom: [];\n}>();\n\nconst scrollEl = ref<HTMLElement | null>(null);\n\nfunction setScrollRef(el: unknown) {\n scrollEl.value = el instanceof HTMLElement ? el : null;\n}\n\n/** Renders markdown content as sanitized HTML */\nfunction renderMarkdown(content: string): string {\n const html = marked.parse(content) as string;\n return DOMPurify.sanitize(html, {\n ALLOWED_TAGS: ['p', 'br', 'strong', 'em', 'u', 'a', 'ul', 'ol', 'li', 'h1', 'h2', 'h3', 'h4', 'blockquote', 'code', 'pre', 'hr'],\n ALLOWED_ATTR: ['href', 'target', 'rel'],\n });\n}\n\nfunction checkScrolledToBottom() {\n const el = scrollEl.value;\n if (!el) return;\n const { scrollTop, scrollHeight, clientHeight } = el;\n const atBottom = scrollHeight - scrollTop - clientHeight < 10;\n if (atBottom) {\n emit('scrolledToBottom');\n }\n}\n\nfunction onScroll() {\n checkScrolledToBottom();\n}\n\n// When content is short and doesn't need scrolling\nnextTick(checkScrolledToBottom);\n</script>\n","<template>\n <div class=\"w-full max-w-md mx-auto mb-8 sm:mb-10 bg-base-200 px-3 py-4 sm:px-6 sm:py-6 rounded-xl shadow-md container min-w-0\">\n <h1 class=\"text-2xl font-bold mb-6 text-center\">Additional consent required</h1>\n <p class=\"text-base-content/80 mb-6\">\n We've updated our terms. Please review the following and scroll to the bottom of each section\n before you can accept. If you decline, you will not have access to the application and will be logged out.\n </p>\n\n <ZiniaForm\n v-if=\"(pendingConsents ?? []).length > 0\"\n @handle-submit=\"handleSubmit\"\n @success=\"handleSuccess\"\n @error=\"handleError\"\n >\n <ConsentTermsSection\n v-for=\"config in (pendingConsents ?? [])\"\n :key=\"config.type\"\n :config=\"config\"\n :checkbox-disabled=\"config.content ? !hasScrolledToBottom[config.type] : false\"\n @scrolled-to-bottom=\"hasScrolledToBottom[config.type] = true\"\n >\n <template #checkbox=\"{ label, disabled }\">\n <ziniaGeneric.CheckboxField\n :name=\"`acceptances.${config.type}`\"\n :label=\"label\"\n :disabled=\"disabled\"\n />\n </template>\n </ConsentTermsSection>\n\n <div class=\"flex flex-col gap-5 mt-6\">\n <ZiniaSubmitButton submitText=\"Accept and continue\" submittingText=\"Saving...\" />\n <button\n type=\"button\"\n class=\"btn btn-outline btn-sm btn-error\"\n :disabled=\"declining\"\n @click=\"handleDecline\"\n >\n {{ declining ? 'Logging out...' : 'Decline and log out' }}\n </button>\n </div>\n </ZiniaForm>\n\n <div v-else class=\"text-center\">\n <p class=\"text-base-content/80 mb-4\">Loading...</p>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport type { RecordConsentsInputDto } from '@dragonmastery/dragoncore-shared';\nimport { recordConsentsSchema } from '@dragonmastery/dragoncore-shared';\nimport { withMetadata } from '@dragonmastery/zinia-forms-core';\nimport { useForm } from '@dragonmastery/zinia-forms-core';\nimport ConsentTermsSection from '../../shared/ConsentTermsSection.vue';\nimport { reactive, ref, watch } from 'vue';\nimport { useRouter } from 'vue-router';\nimport { toast } from 'vue3-toastify';\nimport { useMutation } from '../../../../composables/useMutation';\nimport { useQuery } from '../../../../composables/useQuery';\nimport { useUserSessionStore } from '../../../../composables/useUserSessionStore';\n\nconst recordConsentsSchemaWithMetadata = withMetadata(recordConsentsSchema, 'recordConsents', {});\n\nconst { ziniaGeneric, ZiniaForm, ZiniaSubmitButton } = useForm(recordConsentsSchemaWithMetadata, {\n storeName: 'consent-required-form',\n persistToLocalStorage: false,\n renderStyle: 'daisy_ui',\n});\n\nconst sessionStore = useUserSessionStore();\nconst router = useRouter();\n\nconst { data: pendingConsents, loading } = useQuery(\n (api) => api.users.getPendingConsents(),\n { skipAuthCheck: false },\n);\n\n// Scroll-to-bottom tracking: consent type -> whether user has scrolled to bottom\nconst hasScrolledToBottom = reactive<Record<string, boolean>>({});\n// Initialize scroll state when consents load; ConsentTermsSection handles \"content fits\" via its own nextTick\nwatch(\n () => pendingConsents.value,\n (consents) => {\n if (!consents) return;\n for (const c of consents) {\n if (c.content) {\n hasScrolledToBottom[c.type] = false;\n } else {\n hasScrolledToBottom[c.type] = true;\n }\n }\n },\n { immediate: true },\n);\n\n// If no pending consents (e.g. already completed or consent disabled), redirect home\nwatch(\n [pendingConsents, loading],\n ([consents, isLoading]) => {\n if (!isLoading && Array.isArray(consents) && consents.length === 0) {\n router.push('/');\n }\n },\n { immediate: true },\n);\n\nconst declining = ref(false);\n\nconst { mutate: recordConsentsMutate } = useMutation(\n (api, input: RecordConsentsInputDto) => api.users.recordConsents(input),\n { skipAuthCheck: false },\n);\n\nconst handleSubmit = async (data: RecordConsentsInputDto) => {\n await recordConsentsMutate(data);\n return data;\n};\n\nconst handleSuccess = async () => {\n await sessionStore.refreshToken();\n toast.success('Consents recorded. You can now continue.');\n window.scrollTo(0, 0);\n await router.push('/');\n};\n\nconst handleError = (error: unknown) => {\n toast.error(error instanceof Error ? error.message : 'Failed to record consents');\n};\n\nconst handleDecline = async () => {\n declining.value = true;\n try {\n sessionStore.clearSession();\n toast.info('You have declined. You have been logged out.');\n await router.push('/auth/login');\n } finally {\n declining.value = false;\n }\n};\n</script>\n"],"mappings":"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"}
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
import "./useRpcAuth-rmHf7bYx.js";
|
|
2
|
-
import "./useQueryCache-Bjm-S8v5.js";
|
|
3
|
-
import "./useMutation-BTsyHKyn.js";
|
|
4
|
-
import "./useQuery-BggIE52P.js";
|
|
5
|
-
import { mt as CreateTeamForm_default } from "./src-QZJyMfGX.js";
|
|
6
|
-
import "./AppLink-CHMMrSFI.js";
|
|
7
|
-
import "./TimelineSystemEvent-BHzFr46C.js";
|
|
8
|
-
import "./TeamMembersTab-4gmnP9sD.js";
|
|
9
|
-
import "./Appearance-DxWTyx1M.js";
|
|
10
|
-
import "./useSignupPendingData-BWHwUHhL.js";
|
|
11
|
-
import "./useBreadcrumbs-qB6ghsAf.js";
|
|
12
|
-
import "./EditTeamMemberForm-CaS2GLjV.js";
|
|
13
|
-
import "./RecordVersionViewer-BWZ78vvE.js";
|
|
14
|
-
import "./TeamHistoryTab-D5biUPmq.js";
|
|
15
|
-
import "./UserProfilePage-C3b93Keh.js";
|
|
16
|
-
import "./ChangePasswordPage--3XwluwE.js";
|
|
17
|
-
import "./TeamNotesTab-BzGZZ1h8.js";
|
|
18
|
-
import "./CustomerSupportTicketParent-HIxwSVdu.js";
|
|
19
|
-
import "./SupportTicketDevLifecycleBadge-EMrQHfyG.js";
|
|
20
|
-
import "./StaffSupportTicketParent-CilR4RGM.js";
|
|
21
|
-
import "./LoginForm-9UFnA-fO.js";
|
|
22
|
-
import "./useEmailVerificationChannel-BNi926Ho.js";
|
|
23
|
-
import "./Signup-9TjMMnU4.js";
|
|
24
|
-
import "./ForgotPassword-OjIPi9s9.js";
|
|
25
|
-
import "./ResetPassword-BE4mXK9q.js";
|
|
26
|
-
import "./Logout-YgTgOFUH.js";
|
|
27
|
-
import "./mfaSchema-BnRWf0ma.js";
|
|
28
|
-
import "./MfaSetup-RtFMY_dj.js";
|
|
29
|
-
import "./MfaVerify-Cvhe8bEM.js";
|
|
30
|
-
import "./VerifyEmail-DlOmWGG-.js";
|
|
31
|
-
import "./UserListPage-DUE5gJTo.js";
|
|
32
|
-
import "./CreateUserPage-DLwXeLAq.js";
|
|
33
|
-
import "./EditUserPage-DURc5rmi.js";
|
|
34
|
-
|
|
35
|
-
export { CreateTeamForm_default as default };
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
import "./useRpcAuth-rmHf7bYx.js";
|
|
2
|
-
import "./useQueryCache-Bjm-S8v5.js";
|
|
3
|
-
import "./useMutation-BTsyHKyn.js";
|
|
4
|
-
import "./useQuery-BggIE52P.js";
|
|
5
|
-
import { ot as CreateTeamMemberForm_default } from "./src-QZJyMfGX.js";
|
|
6
|
-
import "./AppLink-CHMMrSFI.js";
|
|
7
|
-
import "./TimelineSystemEvent-BHzFr46C.js";
|
|
8
|
-
import "./TeamMembersTab-4gmnP9sD.js";
|
|
9
|
-
import "./Appearance-DxWTyx1M.js";
|
|
10
|
-
import "./useSignupPendingData-BWHwUHhL.js";
|
|
11
|
-
import "./useBreadcrumbs-qB6ghsAf.js";
|
|
12
|
-
import "./EditTeamMemberForm-CaS2GLjV.js";
|
|
13
|
-
import "./RecordVersionViewer-BWZ78vvE.js";
|
|
14
|
-
import "./TeamHistoryTab-D5biUPmq.js";
|
|
15
|
-
import "./UserProfilePage-C3b93Keh.js";
|
|
16
|
-
import "./ChangePasswordPage--3XwluwE.js";
|
|
17
|
-
import "./TeamNotesTab-BzGZZ1h8.js";
|
|
18
|
-
import "./CustomerSupportTicketParent-HIxwSVdu.js";
|
|
19
|
-
import "./SupportTicketDevLifecycleBadge-EMrQHfyG.js";
|
|
20
|
-
import "./StaffSupportTicketParent-CilR4RGM.js";
|
|
21
|
-
import "./LoginForm-9UFnA-fO.js";
|
|
22
|
-
import "./useEmailVerificationChannel-BNi926Ho.js";
|
|
23
|
-
import "./Signup-9TjMMnU4.js";
|
|
24
|
-
import "./ForgotPassword-OjIPi9s9.js";
|
|
25
|
-
import "./ResetPassword-BE4mXK9q.js";
|
|
26
|
-
import "./Logout-YgTgOFUH.js";
|
|
27
|
-
import "./mfaSchema-BnRWf0ma.js";
|
|
28
|
-
import "./MfaSetup-RtFMY_dj.js";
|
|
29
|
-
import "./MfaVerify-Cvhe8bEM.js";
|
|
30
|
-
import "./VerifyEmail-DlOmWGG-.js";
|
|
31
|
-
import "./UserListPage-DUE5gJTo.js";
|
|
32
|
-
import "./CreateUserPage-DLwXeLAq.js";
|
|
33
|
-
import "./EditUserPage-DURc5rmi.js";
|
|
34
|
-
|
|
35
|
-
export { CreateTeamMemberForm_default as default };
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
import "./useRpcAuth-rmHf7bYx.js";
|
|
2
|
-
import "./useQueryCache-Bjm-S8v5.js";
|
|
3
|
-
import "./useMutation-BTsyHKyn.js";
|
|
4
|
-
import "./useQuery-BggIE52P.js";
|
|
5
|
-
import { s as CreditBalanceDashboard_default } from "./src-QZJyMfGX.js";
|
|
6
|
-
import "./AppLink-CHMMrSFI.js";
|
|
7
|
-
import "./TimelineSystemEvent-BHzFr46C.js";
|
|
8
|
-
import "./TeamMembersTab-4gmnP9sD.js";
|
|
9
|
-
import "./Appearance-DxWTyx1M.js";
|
|
10
|
-
import "./useSignupPendingData-BWHwUHhL.js";
|
|
11
|
-
import "./useBreadcrumbs-qB6ghsAf.js";
|
|
12
|
-
import "./EditTeamMemberForm-CaS2GLjV.js";
|
|
13
|
-
import "./RecordVersionViewer-BWZ78vvE.js";
|
|
14
|
-
import "./TeamHistoryTab-D5biUPmq.js";
|
|
15
|
-
import "./UserProfilePage-C3b93Keh.js";
|
|
16
|
-
import "./ChangePasswordPage--3XwluwE.js";
|
|
17
|
-
import "./TeamNotesTab-BzGZZ1h8.js";
|
|
18
|
-
import "./CustomerSupportTicketParent-HIxwSVdu.js";
|
|
19
|
-
import "./SupportTicketDevLifecycleBadge-EMrQHfyG.js";
|
|
20
|
-
import "./StaffSupportTicketParent-CilR4RGM.js";
|
|
21
|
-
import "./LoginForm-9UFnA-fO.js";
|
|
22
|
-
import "./useEmailVerificationChannel-BNi926Ho.js";
|
|
23
|
-
import "./Signup-9TjMMnU4.js";
|
|
24
|
-
import "./ForgotPassword-OjIPi9s9.js";
|
|
25
|
-
import "./ResetPassword-BE4mXK9q.js";
|
|
26
|
-
import "./Logout-YgTgOFUH.js";
|
|
27
|
-
import "./mfaSchema-BnRWf0ma.js";
|
|
28
|
-
import "./MfaSetup-RtFMY_dj.js";
|
|
29
|
-
import "./MfaVerify-Cvhe8bEM.js";
|
|
30
|
-
import "./VerifyEmail-DlOmWGG-.js";
|
|
31
|
-
import "./UserListPage-DUE5gJTo.js";
|
|
32
|
-
import "./CreateUserPage-DLwXeLAq.js";
|
|
33
|
-
import "./EditUserPage-DURc5rmi.js";
|
|
34
|
-
|
|
35
|
-
export { CreditBalanceDashboard_default as default };
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
import "./useRpcAuth-rmHf7bYx.js";
|
|
2
|
-
import "./useQueryCache-Bjm-S8v5.js";
|
|
3
|
-
import "./useMutation-BTsyHKyn.js";
|
|
4
|
-
import "./useQuery-BggIE52P.js";
|
|
5
|
-
import { t as CreditManagement_default } from "./src-QZJyMfGX.js";
|
|
6
|
-
import "./AppLink-CHMMrSFI.js";
|
|
7
|
-
import "./TimelineSystemEvent-BHzFr46C.js";
|
|
8
|
-
import "./TeamMembersTab-4gmnP9sD.js";
|
|
9
|
-
import "./Appearance-DxWTyx1M.js";
|
|
10
|
-
import "./useSignupPendingData-BWHwUHhL.js";
|
|
11
|
-
import "./useBreadcrumbs-qB6ghsAf.js";
|
|
12
|
-
import "./EditTeamMemberForm-CaS2GLjV.js";
|
|
13
|
-
import "./RecordVersionViewer-BWZ78vvE.js";
|
|
14
|
-
import "./TeamHistoryTab-D5biUPmq.js";
|
|
15
|
-
import "./UserProfilePage-C3b93Keh.js";
|
|
16
|
-
import "./ChangePasswordPage--3XwluwE.js";
|
|
17
|
-
import "./TeamNotesTab-BzGZZ1h8.js";
|
|
18
|
-
import "./CustomerSupportTicketParent-HIxwSVdu.js";
|
|
19
|
-
import "./SupportTicketDevLifecycleBadge-EMrQHfyG.js";
|
|
20
|
-
import "./StaffSupportTicketParent-CilR4RGM.js";
|
|
21
|
-
import "./LoginForm-9UFnA-fO.js";
|
|
22
|
-
import "./useEmailVerificationChannel-BNi926Ho.js";
|
|
23
|
-
import "./Signup-9TjMMnU4.js";
|
|
24
|
-
import "./ForgotPassword-OjIPi9s9.js";
|
|
25
|
-
import "./ResetPassword-BE4mXK9q.js";
|
|
26
|
-
import "./Logout-YgTgOFUH.js";
|
|
27
|
-
import "./mfaSchema-BnRWf0ma.js";
|
|
28
|
-
import "./MfaSetup-RtFMY_dj.js";
|
|
29
|
-
import "./MfaVerify-Cvhe8bEM.js";
|
|
30
|
-
import "./VerifyEmail-DlOmWGG-.js";
|
|
31
|
-
import "./UserListPage-DUE5gJTo.js";
|
|
32
|
-
import "./CreateUserPage-DLwXeLAq.js";
|
|
33
|
-
import "./EditUserPage-DURc5rmi.js";
|
|
34
|
-
|
|
35
|
-
export { CreditManagement_default as default };
|