@dragonmastery/dragoncore-vue 0.0.31 → 0.0.32
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/{ChangePasswordPage-Dy8lFUcI.js → ChangePasswordPage-CR91NZP4.js} +2 -2
- package/dist/{ChangePasswordPage-Dy8lFUcI.js.map → ChangePasswordPage-CR91NZP4.js.map} +1 -1
- package/dist/ChangePasswordPage-qLd6YZVO.js +7 -0
- package/dist/{ConsentRequired-Bhkxu0rv.js → ConsentRequired-DtUwfpk0.js} +36 -27
- package/dist/ConsentRequired-DtUwfpk0.js.map +1 -0
- package/dist/CreateTeamForm-BK8PJeXz.js +12 -0
- package/dist/{CreateTeamForm-bpLbK18g.js → CreateTeamForm-BQewI0Gn.js} +3 -3
- package/dist/{CreateTeamForm-bpLbK18g.js.map → CreateTeamForm-BQewI0Gn.js.map} +1 -1
- package/dist/{CreateTeamMemberForm-DeUyXnVa.js → CreateTeamMemberForm-B3jxlAsC.js} +4 -4
- package/dist/{CreateTeamMemberForm-DeUyXnVa.js.map → CreateTeamMemberForm-B3jxlAsC.js.map} +1 -1
- package/dist/CreateTeamMemberForm-BYsZNxTq.js +12 -0
- package/dist/{CreateUserPage-CqKcY7_X.js → CreateUserPage-BcCIat_l.js} +2 -2
- package/dist/{CreateUserPage-CqKcY7_X.js.map → CreateUserPage-BcCIat_l.js.map} +1 -1
- package/dist/CreateUserPage-D0oMJnGd.js +7 -0
- package/dist/CreditBalanceDashboard-C2QnVfjU.js +13 -0
- package/dist/{CreditBalanceDashboard-BEsOr0Rw.js → CreditBalanceDashboard-CRHrhlSZ.js} +2 -2
- package/dist/{CreditBalanceDashboard-BEsOr0Rw.js.map → CreditBalanceDashboard-CRHrhlSZ.js.map} +1 -1
- package/dist/{CreditManagement-DiVSMbWZ.js → CreditManagement-7xiygPYj.js} +3 -3
- package/dist/{CreditManagement-DiVSMbWZ.js.map → CreditManagement-7xiygPYj.js.map} +1 -1
- package/dist/CreditManagement-CAaf_rVj.js +13 -0
- package/dist/{CreditTransactionHistory-mcacl2xG.js → CreditTransactionHistory-CP7ufh7Z.js} +5 -5
- package/dist/{CreditTransactionHistory-mcacl2xG.js.map → CreditTransactionHistory-CP7ufh7Z.js.map} +1 -1
- package/dist/CustomerCreateSupportTicketForm-C3DSzhJR.js +14 -0
- package/dist/{CustomerCreateSupportTicketForm-IefplMnK.js → CustomerCreateSupportTicketForm-Cd3ijzWy.js} +4 -4
- package/dist/{CustomerCreateSupportTicketForm-IefplMnK.js.map → CustomerCreateSupportTicketForm-Cd3ijzWy.js.map} +1 -1
- package/dist/{CustomerSupportTicketDetailPage-Dengb4Zx.js → CustomerSupportTicketDetailPage-DwpkxpYV.js} +8 -8
- package/dist/{CustomerSupportTicketDetailPage-Dengb4Zx.js.map → CustomerSupportTicketDetailPage-DwpkxpYV.js.map} +1 -1
- package/dist/CustomerSupportTicketList-BrTX8SUV.js +64 -0
- package/dist/CustomerSupportTicketParent-C0uMeN09.js +8 -0
- package/dist/{CustomerSupportTicketParent-rl4Ym8oa.js → CustomerSupportTicketParent-D9FuZjPz.js} +2 -2
- package/dist/{CustomerSupportTicketParent-rl4Ym8oa.js.map → CustomerSupportTicketParent-D9FuZjPz.js.map} +1 -1
- package/dist/CustomerSupportTicketSuccess-BLSMAjQN.js +12 -0
- package/dist/{CustomerSupportTicketSuccess-RQskseXP.js → CustomerSupportTicketSuccess-k3DX9NhV.js} +2 -2
- package/dist/{CustomerSupportTicketSuccess-RQskseXP.js.map → CustomerSupportTicketSuccess-k3DX9NhV.js.map} +1 -1
- package/dist/{DefaultReferralTeamPage-Be7-RI3s.js → DefaultReferralTeamPage-fS1SlVow.js} +6 -6
- package/dist/{DefaultReferralTeamPage-Be7-RI3s.js.map → DefaultReferralTeamPage-fS1SlVow.js.map} +1 -1
- package/dist/{EditTeamForm-RBO99ocN.js → EditTeamForm-CETmPEZ7.js} +3 -3
- package/dist/{EditTeamForm-RBO99ocN.js.map → EditTeamForm-CETmPEZ7.js.map} +1 -1
- package/dist/EditTeamForm-DiZXp6vh.js +12 -0
- package/dist/EditTeamMemberForm-BKbWq88S.js +9 -0
- package/dist/{EditTeamMemberForm-D9cofrUM.js → EditTeamMemberForm-D6vf9hp-.js} +2 -2
- package/dist/{EditTeamMemberForm-D9cofrUM.js.map → EditTeamMemberForm-D6vf9hp-.js.map} +1 -1
- package/dist/EditUserPage-DCdj6EYd.js +8 -0
- package/dist/{EditUserPage-DGuV8pzp.js → EditUserPage-Dy61CCle.js} +3 -3
- package/dist/{EditUserPage-DGuV8pzp.js.map → EditUserPage-Dy61CCle.js.map} +1 -1
- package/dist/{EnhancedRefreshTokenHandler-C6tZCcfX.js → EnhancedRefreshTokenHandler-s8wUXtB5.js} +2 -2
- package/dist/{EnhancedRefreshTokenHandler-C6tZCcfX.js.map → EnhancedRefreshTokenHandler-s8wUXtB5.js.map} +1 -1
- package/dist/{ForgotPassword-DZ-d8rWX.js → ForgotPassword-BykH9B9R.js} +2 -2
- package/dist/{ForgotPassword-DZ-d8rWX.js.map → ForgotPassword-BykH9B9R.js.map} +1 -1
- package/dist/ForgotPassword-Xb1yVZ6C.js +8 -0
- package/dist/{InlineAttachments-DAn_QknY.js → InlineAttachments-Ywf9r3jd.js} +4 -4
- package/dist/{InlineAttachments-DAn_QknY.js.map → InlineAttachments-Ywf9r3jd.js.map} +1 -1
- package/dist/LoginForm-B5wYdKhY.js +8 -0
- package/dist/{LoginForm-DEgTB9RF.js → LoginForm-CjF4NSgM.js} +3 -3
- package/dist/{LoginForm-DEgTB9RF.js.map → LoginForm-CjF4NSgM.js.map} +1 -1
- package/dist/{Logout-Bb2xe5BM.js → Logout-DmpC8Rwh.js} +3 -3
- package/dist/{Logout-Bb2xe5BM.js.map → Logout-DmpC8Rwh.js.map} +1 -1
- package/dist/Logout-qyH2t-1a.js +8 -0
- package/dist/{MfaSetup-m080C6iX.js → MfaSetup-DCLKIMaS.js} +2 -2
- package/dist/{MfaSetup-m080C6iX.js.map → MfaSetup-DCLKIMaS.js.map} +1 -1
- package/dist/MfaSetup-DMLXL9fk.js +9 -0
- package/dist/MfaVerify-C4xGQZlQ.js +9 -0
- package/dist/{MfaVerify-D8Ch-8hN.js → MfaVerify-Dm2Yc0Da.js} +3 -3
- package/dist/{MfaVerify-D8Ch-8hN.js.map → MfaVerify-Dm2Yc0Da.js.map} +1 -1
- package/dist/{ResetPassword-DflPd8Qg.js → ResetPassword-iVcY7eBY.js} +2 -2
- package/dist/{ResetPassword-DflPd8Qg.js.map → ResetPassword-iVcY7eBY.js.map} +1 -1
- package/dist/ResetPassword-ulR2HviU.js +8 -0
- package/dist/{SavedFiltersPage-ey8wOr0T.js → SavedFiltersPage-CTLpYU2c.js} +50 -50
- package/dist/{SavedFiltersPage-ey8wOr0T.js.map → SavedFiltersPage-CTLpYU2c.js.map} +1 -1
- package/dist/Signup-D4xILUym.js +10 -0
- package/dist/{Signup-KuiKHB4h.js → Signup-D6vnyS4w.js} +28 -28
- package/dist/Signup-D6vnyS4w.js.map +1 -0
- package/dist/{SignupRequirementsPage-CwnsnQKb.js → SignupRequirementsPage-BnOkXd7w.js} +6 -6
- package/dist/{SignupRequirementsPage-CwnsnQKb.js.map → SignupRequirementsPage-BnOkXd7w.js.map} +1 -1
- package/dist/StaffCreateSupportTicketForm-BnpxlQaG.js +14 -0
- package/dist/{StaffCreateSupportTicketForm-75Bo0jdz.js → StaffCreateSupportTicketForm-gPZizMKW.js} +6 -6
- package/dist/{StaffCreateSupportTicketForm-75Bo0jdz.js.map → StaffCreateSupportTicketForm-gPZizMKW.js.map} +1 -1
- package/dist/{StaffSupportTicketDetailPage-6VyPNdw7.js → StaffSupportTicketDetailPage-DUqLTHVT.js} +8 -8
- package/dist/{StaffSupportTicketDetailPage-6VyPNdw7.js.map → StaffSupportTicketDetailPage-DUqLTHVT.js.map} +1 -1
- package/dist/StaffSupportTicketList-Qp0vQw8X.js +64 -0
- package/dist/{StaffSupportTicketParent-DPvdLUii.js → StaffSupportTicketParent-CZllER18.js} +2 -2
- package/dist/{StaffSupportTicketParent-DPvdLUii.js.map → StaffSupportTicketParent-CZllER18.js.map} +1 -1
- package/dist/StaffSupportTicketParent-D4FKQAmp.js +8 -0
- package/dist/StaffSupportTicketSuccess-BvwrpoAb.js +12 -0
- package/dist/{StaffSupportTicketSuccess-BYoBXx1i.js → StaffSupportTicketSuccess-C9vqsC51.js} +2 -2
- package/dist/{StaffSupportTicketSuccess-BYoBXx1i.js.map → StaffSupportTicketSuccess-C9vqsC51.js.map} +1 -1
- package/dist/{SupportStaffPage-CLxWU628.js → SupportStaffPage--vinFIlV.js} +6 -6
- package/dist/{SupportStaffPage-CLxWU628.js.map → SupportStaffPage--vinFIlV.js.map} +1 -1
- package/dist/{SupportTicketMaintenancePage-B07avInx.js → SupportTicketMaintenancePage-C-BWD49g.js} +5 -5
- package/dist/{SupportTicketMaintenancePage-B07avInx.js.map → SupportTicketMaintenancePage-C-BWD49g.js.map} +1 -1
- package/dist/TeamAttachmentsTab-CnAvlIbn.js +64 -0
- package/dist/{TeamHistoryTab-CxzA4u_G.js → TeamHistoryTab-5kNQ_XAq.js} +3 -3
- package/dist/{TeamHistoryTab-CxzA4u_G.js.map → TeamHistoryTab-5kNQ_XAq.js.map} +1 -1
- package/dist/TeamHistoryTab-CBWeRKXM.js +6 -0
- package/dist/{TeamList-DXQj_Omo.js → TeamList-C0Mbkbja.js} +4 -4
- package/dist/{TeamList-DXQj_Omo.js.map → TeamList-C0Mbkbja.js.map} +1 -1
- package/dist/TeamList-Fb6EfybL.js +8 -0
- package/dist/{TeamMemberList-BYUANoBg.js → TeamMemberList-DyfXcR6F.js} +4 -4
- package/dist/{TeamMemberList-BYUANoBg.js.map → TeamMemberList-DyfXcR6F.js.map} +1 -1
- package/dist/TeamMemberList-X2hzYZFT.js +7 -0
- package/dist/{TeamMemberParent-DmYcHU3n.js → TeamMemberParent-2zISixbT.js} +3 -3
- package/dist/{TeamMemberParent-DmYcHU3n.js.map → TeamMemberParent-2zISixbT.js.map} +1 -1
- package/dist/TeamMemberParent-DKxE1ziP.js +10 -0
- package/dist/{TeamNotesTab-Cego-QT3.js → TeamNotesTab-BREl3Vr0.js} +5 -5
- package/dist/{TeamNotesTab-Cego-QT3.js.map → TeamNotesTab-BREl3Vr0.js.map} +1 -1
- package/dist/TeamNotesTab-DxMN3WZo.js +8 -0
- package/dist/{TeamParent-6JhqsYaO.js → TeamParent-COSOJ-ZZ.js} +3 -3
- package/dist/{TeamParent-6JhqsYaO.js.map → TeamParent-COSOJ-ZZ.js.map} +1 -1
- package/dist/TeamParent-XgBD3twV.js +11 -0
- package/dist/{TimelineNoteInput-P3ycD18j.js → TimelineNoteInput-CrivEMUP.js} +2 -2
- package/dist/{TimelineNoteInput-P3ycD18j.js.map → TimelineNoteInput-CrivEMUP.js.map} +1 -1
- package/dist/{UserListPage-DelzxCID.js → UserListPage-CCl0K7Gk.js} +3 -3
- package/dist/{UserListPage-DelzxCID.js.map → UserListPage-CCl0K7Gk.js.map} +1 -1
- package/dist/UserListPage-CYkvaHwL.js +5 -0
- package/dist/UserProfilePage-BMmz7SGl.js +8 -0
- package/dist/{UserProfilePage-BYitd7QV.js → UserProfilePage-D7FNmca1.js} +4 -4
- package/dist/{UserProfilePage-BYitd7QV.js.map → UserProfilePage-D7FNmca1.js.map} +1 -1
- package/dist/{VerifyEmail-Cy2s4yP0.js → VerifyEmail-KCti4rzf.js} +5 -5
- package/dist/{VerifyEmail-Cy2s4yP0.js.map → VerifyEmail-KCti4rzf.js.map} +1 -1
- package/dist/VerifyEmail-Xd31Com7.js +10 -0
- package/dist/ViewTeam-BXSq4M0V.js +8 -0
- package/dist/{ViewTeam-ByZdYEJG.js → ViewTeam-DGaNNd8N.js} +2 -2
- package/dist/{ViewTeam-ByZdYEJG.js.map → ViewTeam-DGaNNd8N.js.map} +1 -1
- package/dist/{ViewTeamMember-DqWZ3F_h.js → ViewTeamMember-Dsl2GKI1.js} +2 -2
- package/dist/{ViewTeamMember-DqWZ3F_h.js.map → ViewTeamMember-Dsl2GKI1.js.map} +1 -1
- package/dist/ViewTeamMember-bmry5QZ0.js +7 -0
- package/dist/{customerSupportTicketRoutes-DvfXGaSC.js → customerSupportTicketRoutes-BjqjQc9A.js} +8 -8
- package/dist/{customerSupportTicketRoutes-DvfXGaSC.js.map → customerSupportTicketRoutes-BjqjQc9A.js.map} +1 -1
- package/dist/index.d.ts +1015 -980
- package/dist/index.js +50 -50
- package/dist/{saved_filter-erjEgsdK.js → saved_filter-DXWnU4Zb.js} +5 -5
- package/dist/{saved_filter-erjEgsdK.js.map → saved_filter-DXWnU4Zb.js.map} +1 -1
- package/dist/{src-DSF_hIBe.js → src-B7oHTH_y.js} +215 -163
- package/dist/src-B7oHTH_y.js.map +1 -0
- package/dist/{staffSupportTicketRoutes-73ceKhL-.js → staffSupportTicketRoutes-CeuduGmG.js} +8 -8
- package/dist/{staffSupportTicketRoutes-73ceKhL-.js.map → staffSupportTicketRoutes-CeuduGmG.js.map} +1 -1
- package/dist/{teamRoutes-CSBq1DNq.js → teamRoutes-A7plQKi0.js} +11 -11
- package/dist/{teamRoutes-CSBq1DNq.js.map → teamRoutes-A7plQKi0.js.map} +1 -1
- package/dist/{team_memberRoutes-BgjY9Kwq.js → team_memberRoutes-mO1f-Y4o.js} +7 -7
- package/dist/{team_memberRoutes-BgjY9Kwq.js.map → team_memberRoutes-mO1f-Y4o.js.map} +1 -1
- package/dist/useAuthFlowNextStep-zlvxflBZ.js +64 -0
- package/dist/useAuthFlowNextStep-zlvxflBZ.js.map +1 -0
- package/dist/{useEmailVerificationChannel-C76Gnyi1.js → useEmailVerificationChannel-DYiMSAES.js} +2 -2
- package/dist/{useEmailVerificationChannel-C76Gnyi1.js.map → useEmailVerificationChannel-DYiMSAES.js.map} +1 -1
- package/dist/{useMutation-BLNuJoYl.js → useMutation-BXSu7_-s.js} +6 -4
- package/dist/useMutation-BXSu7_-s.js.map +1 -0
- package/dist/{useQuery-BzUGEOj0.js → useQuery-DownvLRA.js} +4 -4
- package/dist/{useQuery-BzUGEOj0.js.map → useQuery-DownvLRA.js.map} +1 -1
- package/dist/{useQueryCache-alzaRWEb.js → useQueryCache-CUTrwJWX.js} +2 -2
- package/dist/{useQueryCache-alzaRWEb.js.map → useQueryCache-CUTrwJWX.js.map} +1 -1
- package/dist/{useRpcAuth-CJtq1dqM.js → useRpcAuth-BFdprNWb.js} +5 -7
- package/dist/useRpcAuth-BFdprNWb.js.map +1 -0
- package/dist/{userAuthorized-3RiCDXxr.js → userAuthorized-qmzUYDa-.js} +2 -2
- package/dist/{userAuthorized-3RiCDXxr.js.map → userAuthorized-qmzUYDa-.js.map} +1 -1
- package/package.json +2 -2
- package/dist/ChangePasswordPage-D1LGJ02W.js +0 -7
- package/dist/ConsentRequired-Bhkxu0rv.js.map +0 -1
- package/dist/CreateTeamForm-BHgTTHAk.js +0 -12
- package/dist/CreateTeamMemberForm-CayF2tIJ.js +0 -12
- package/dist/CreateUserPage-C9uOeYDJ.js +0 -7
- package/dist/CreditBalanceDashboard-DZQqekKa.js +0 -13
- package/dist/CreditManagement-ByFH6IHV.js +0 -13
- package/dist/CustomerCreateSupportTicketForm-CroUyX15.js +0 -14
- package/dist/CustomerSupportTicketList-CpOaBgNr.js +0 -64
- package/dist/CustomerSupportTicketParent-D3Gj4Hel.js +0 -8
- package/dist/CustomerSupportTicketSuccess-BPUwEn4h.js +0 -12
- package/dist/EditTeamForm-KX2cNn24.js +0 -12
- package/dist/EditTeamMemberForm-Bh6zVNyJ.js +0 -9
- package/dist/EditUserPage-AcRFhChk.js +0 -8
- package/dist/ExternalLinkIcon-BKVV5Gjm.js +0 -34
- package/dist/ExternalLinkIcon-BKVV5Gjm.js.map +0 -1
- package/dist/ForgotPassword-LnjRUIY7.js +0 -8
- package/dist/LoginForm-D-gfB2hS.js +0 -8
- package/dist/Logout-Ctq-a1GS.js +0 -8
- package/dist/MfaSetup-6E6apXWC.js +0 -9
- package/dist/MfaVerify-C95WB9v2.js +0 -9
- package/dist/ResetPassword-9DFz-Qt3.js +0 -8
- package/dist/Signup-C052ykf5.js +0 -9
- package/dist/Signup-KuiKHB4h.js.map +0 -1
- package/dist/StaffCreateSupportTicketForm-DYEddYii.js +0 -14
- package/dist/StaffSupportTicketList-CxV6u2gF.js +0 -64
- package/dist/StaffSupportTicketParent-Dyybqx74.js +0 -8
- package/dist/StaffSupportTicketSuccess-FfnJXc_k.js +0 -12
- package/dist/TeamAttachmentsTab-D0DOmdnr.js +0 -64
- package/dist/TeamHistoryTab-wRpRizDE.js +0 -6
- package/dist/TeamList-hmP44hfw.js +0 -8
- package/dist/TeamMemberList-B16SuLwM.js +0 -7
- package/dist/TeamMemberParent-BJl8nBmP.js +0 -10
- package/dist/TeamNotesTab-BQN9niw-.js +0 -8
- package/dist/TeamParent-BI9ItLoY.js +0 -11
- package/dist/UserListPage-9jhUu3TH.js +0 -5
- package/dist/UserProfilePage-Dmxp7oqP.js +0 -8
- package/dist/VerifyEmail-DBKMZJMx.js +0 -10
- package/dist/ViewTeam-DEOe7wqT.js +0 -8
- package/dist/ViewTeamMember-B5U8kZBw.js +0 -7
- package/dist/src-DSF_hIBe.js.map +0 -1
- package/dist/useMutation-BLNuJoYl.js.map +0 -1
- package/dist/useRpcAuth-CJtq1dqM.js.map +0 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { o as createLastUsedPresetGuard } from "./saved_filter-
|
|
2
|
-
import { c as userAuthenticated, s as staffOnly } from "./userAuthorized-
|
|
1
|
+
import { o as createLastUsedPresetGuard } from "./saved_filter-DXWnU4Zb.js";
|
|
2
|
+
import { c as userAuthenticated, s as staffOnly } from "./userAuthorized-qmzUYDa-.js";
|
|
3
3
|
|
|
4
4
|
//#region src/slices/support_ticket/staff/staffSupportTicketRoutes.ts
|
|
5
5
|
const staffListPresetGuard = createLastUsedPresetGuard("support_ticket_staff", "StaffSupportTicketList");
|
|
@@ -60,7 +60,7 @@ const staffSupportTicketRoutes = [{
|
|
|
60
60
|
{
|
|
61
61
|
path: staffSupportPaths.staff_list.path,
|
|
62
62
|
name: staffSupportPaths.staff_list.name,
|
|
63
|
-
component: () => import("./StaffSupportTicketList-
|
|
63
|
+
component: () => import("./StaffSupportTicketList-Qp0vQw8X.js"),
|
|
64
64
|
beforeEnter: (to) => staffListPresetGuard(to),
|
|
65
65
|
meta: {
|
|
66
66
|
title: "Manage Support",
|
|
@@ -74,7 +74,7 @@ const staffSupportTicketRoutes = [{
|
|
|
74
74
|
{
|
|
75
75
|
path: staffSupportPaths.staff_create.path,
|
|
76
76
|
name: staffSupportPaths.staff_create.name,
|
|
77
|
-
component: () => import("./StaffCreateSupportTicketForm-
|
|
77
|
+
component: () => import("./StaffCreateSupportTicketForm-BnpxlQaG.js"),
|
|
78
78
|
meta: {
|
|
79
79
|
title: "Create Support Ticket",
|
|
80
80
|
description: "Create new support ticket item",
|
|
@@ -90,7 +90,7 @@ const staffSupportTicketRoutes = [{
|
|
|
90
90
|
{
|
|
91
91
|
path: staffSupportPaths.staff_create_success.path,
|
|
92
92
|
name: staffSupportPaths.staff_create_success.name,
|
|
93
|
-
component: () => import("./StaffSupportTicketSuccess-
|
|
93
|
+
component: () => import("./StaffSupportTicketSuccess-BvwrpoAb.js"),
|
|
94
94
|
meta: {
|
|
95
95
|
title: "Support Ticket Created",
|
|
96
96
|
description: "Support ticket created successfully",
|
|
@@ -112,7 +112,7 @@ const staffSupportTicketRoutes = [{
|
|
|
112
112
|
},
|
|
113
113
|
{
|
|
114
114
|
path: staffSupportPaths.staff_edit.path,
|
|
115
|
-
component: () => import("./StaffSupportTicketParent-
|
|
115
|
+
component: () => import("./StaffSupportTicketParent-D4FKQAmp.js"),
|
|
116
116
|
meta: {
|
|
117
117
|
title: "View Support Ticket",
|
|
118
118
|
description: "View support ticket details"
|
|
@@ -120,7 +120,7 @@ const staffSupportTicketRoutes = [{
|
|
|
120
120
|
children: [{
|
|
121
121
|
path: "",
|
|
122
122
|
name: staffSupportPaths.staff_edit.name,
|
|
123
|
-
component: () => import("./StaffSupportTicketDetailPage-
|
|
123
|
+
component: () => import("./StaffSupportTicketDetailPage-DUqLTHVT.js"),
|
|
124
124
|
meta: {
|
|
125
125
|
title: "View Support Ticket",
|
|
126
126
|
description: "View support ticket details"
|
|
@@ -132,4 +132,4 @@ const staffSupportTicketRoutes = [{
|
|
|
132
132
|
|
|
133
133
|
//#endregion
|
|
134
134
|
export { staffSupportTicketRoutes as n, staffSupportPaths as t };
|
|
135
|
-
//# sourceMappingURL=staffSupportTicketRoutes-
|
|
135
|
+
//# sourceMappingURL=staffSupportTicketRoutes-CeuduGmG.js.map
|
package/dist/{staffSupportTicketRoutes-73ceKhL-.js.map → staffSupportTicketRoutes-CeuduGmG.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"staffSupportTicketRoutes-
|
|
1
|
+
{"version":3,"file":"staffSupportTicketRoutes-CeuduGmG.js","names":["staffSupportTicketRoutes: Array<ExtendedRouteRecordRaw>"],"sources":["../src/slices/support_ticket/staff/staffSupportTicketRoutes.ts"],"sourcesContent":["import { createLastUsedPresetGuard } from '../../../slices/saved_filter';\nimport { staffOnly, userAuthenticated } from '../../../middleware/userAuthorized';\nimport type { ExtendedRouteRecordRaw } from '../../../types/ExtendedRoute';\n\nconst staffListPresetGuard = createLastUsedPresetGuard('support_ticket_staff', 'StaffSupportTicketList');\n\nexport const staffSupportPaths = {\n staff_list: {\n path: '',\n full_path: '/staff/support',\n name: 'StaffSupportTicketList',\n },\n staff_create: {\n path: 'create',\n full_path: '/staff/support/create',\n name: 'StaffCreateSupportTicket',\n },\n staff_create_success: {\n path: 'create/success',\n full_path: '/staff/support/create/success',\n name: 'StaffSupportTicketSuccess',\n },\n staff_edit: {\n path: ':id',\n full_path: '/staff/support/:id',\n name: 'StaffEditSupportTicket',\n },\n staff_workflow: {\n path: 'workflow',\n full_path: '/staff/support/:id/workflow',\n name: 'StaffSupportTicketWorkflow',\n },\n staff_customer_notes: {\n path: 'customer-notes',\n full_path: '/staff/support/:id/customer-notes',\n name: 'StaffSupportTicketCustomerNotes',\n },\n staff_internal_notes: {\n path: 'internal-notes',\n full_path: '/staff/support/:id/internal-notes',\n name: 'StaffSupportTicketInternalNotes',\n },\n staff_history: {\n path: 'history',\n full_path: '/staff/support/:id/history',\n name: 'StaffSupportTicketHistory',\n },\n staff_attachments: {\n path: 'attachments',\n full_path: '/staff/support/:id/attachments',\n name: 'StaffSupportTicketAttachments',\n },\n} as const;\n\nexport const staffSupportTicketRoutes: Array<ExtendedRouteRecordRaw> = [\n {\n path: '/staff/support',\n name: 'StaffSupportTicket',\n redirect: { name: staffSupportPaths.staff_list.name },\n beforeEnter: [userAuthenticated, staffOnly],\n meta: {},\n children: [\n {\n path: staffSupportPaths.staff_list.path,\n name: staffSupportPaths.staff_list.name,\n component: () => import('./StaffSupportTicketList.vue'),\n beforeEnter: (to) => staffListPresetGuard(to),\n meta: {\n title: 'Manage Support',\n description: 'Admin support ticket management',\n side_bar: {\n section: ' Staff',\n visible_to: ['staff', 'super_admin'],\n },\n },\n },\n {\n path: staffSupportPaths.staff_create.path,\n name: staffSupportPaths.staff_create.name,\n component: () => import('./StaffCreateSupportTicketForm.vue'),\n meta: {\n title: 'Create Support Ticket',\n description: 'Create new support ticket item',\n breadcrumbs: [\n {\n label: 'Staff Support Ticket',\n to: { name: staffSupportPaths.staff_list.name },\n },\n {\n label: 'Create',\n to: { name: staffSupportPaths.staff_create.name },\n },\n ],\n },\n },\n {\n path: staffSupportPaths.staff_create_success.path,\n name: staffSupportPaths.staff_create_success.name,\n component: () => import('./StaffSupportTicketSuccess.vue'),\n meta: {\n title: 'Support Ticket Created',\n description: 'Support ticket created successfully',\n breadcrumbs: [\n {\n label: 'Staff Support Ticket',\n to: { name: staffSupportPaths.staff_list.name },\n },\n {\n label: 'Create',\n to: { name: staffSupportPaths.staff_create.name },\n },\n {\n label: 'Success',\n to: { name: staffSupportPaths.staff_create_success.name },\n },\n ],\n },\n },\n {\n path: staffSupportPaths.staff_edit.path,\n component: () => import('./StaffSupportTicketParent.vue'),\n meta: {\n title: 'View Support Ticket',\n description: 'View support ticket details',\n },\n children: [\n {\n path: '',\n name: staffSupportPaths.staff_edit.name,\n component: () => import('./StaffSupportTicketDetailPage.vue'),\n meta: {\n title: 'View Support Ticket',\n description: 'View support ticket details',\n },\n },\n ],\n },\n ],\n },\n];\n"],"mappings":";;;;AAIA,MAAM,uBAAuB,0BAA0B,wBAAwB,yBAAyB;AAExG,MAAa,oBAAoB;CAC/B,YAAY;EACV,MAAM;EACN,WAAW;EACX,MAAM;EACP;CACD,cAAc;EACZ,MAAM;EACN,WAAW;EACX,MAAM;EACP;CACD,sBAAsB;EACpB,MAAM;EACN,WAAW;EACX,MAAM;EACP;CACD,YAAY;EACV,MAAM;EACN,WAAW;EACX,MAAM;EACP;CACD,gBAAgB;EACd,MAAM;EACN,WAAW;EACX,MAAM;EACP;CACD,sBAAsB;EACpB,MAAM;EACN,WAAW;EACX,MAAM;EACP;CACD,sBAAsB;EACpB,MAAM;EACN,WAAW;EACX,MAAM;EACP;CACD,eAAe;EACb,MAAM;EACN,WAAW;EACX,MAAM;EACP;CACD,mBAAmB;EACjB,MAAM;EACN,WAAW;EACX,MAAM;EACP;CACF;AAED,MAAaA,2BAA0D,CACrE;CACE,MAAM;CACN,MAAM;CACN,UAAU,EAAE,MAAM,kBAAkB,WAAW,MAAM;CACrD,aAAa,CAAC,mBAAmB,UAAU;CAC3C,MAAM,EAAE;CACR,UAAU;EACR;GACE,MAAM,kBAAkB,WAAW;GACnC,MAAM,kBAAkB,WAAW;GACnC,iBAAiB,OAAO;GACxB,cAAc,OAAO,qBAAqB,GAAG;GAC7C,MAAM;IACJ,OAAO;IACP,aAAa;IACb,UAAU;KACR,SAAS;KACT,YAAY,CAAC,SAAS,cAAc;KACrC;IACF;GACF;EACD;GACE,MAAM,kBAAkB,aAAa;GACrC,MAAM,kBAAkB,aAAa;GACrC,iBAAiB,OAAO;GACxB,MAAM;IACJ,OAAO;IACP,aAAa;IACb,aAAa,CACX;KACE,OAAO;KACP,IAAI,EAAE,MAAM,kBAAkB,WAAW,MAAM;KAChD,EACD;KACE,OAAO;KACP,IAAI,EAAE,MAAM,kBAAkB,aAAa,MAAM;KAClD,CACF;IACF;GACF;EACD;GACE,MAAM,kBAAkB,qBAAqB;GAC7C,MAAM,kBAAkB,qBAAqB;GAC7C,iBAAiB,OAAO;GACxB,MAAM;IACJ,OAAO;IACP,aAAa;IACb,aAAa;KACX;MACE,OAAO;MACP,IAAI,EAAE,MAAM,kBAAkB,WAAW,MAAM;MAChD;KACD;MACE,OAAO;MACP,IAAI,EAAE,MAAM,kBAAkB,aAAa,MAAM;MAClD;KACD;MACE,OAAO;MACP,IAAI,EAAE,MAAM,kBAAkB,qBAAqB,MAAM;MAC1D;KACF;IACF;GACF;EACD;GACE,MAAM,kBAAkB,WAAW;GACnC,iBAAiB,OAAO;GACxB,MAAM;IACJ,OAAO;IACP,aAAa;IACd;GACD,UAAU,CACR;IACE,MAAM;IACN,MAAM,kBAAkB,WAAW;IACnC,iBAAiB,OAAO;IACxB,MAAM;KACJ,OAAO;KACP,aAAa;KACd;IACF,CACF;GACF;EACF;CACF,CACF"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { c as userAuthenticated } from "./userAuthorized-
|
|
2
|
-
import { n as teamMemberRoutes, t as teamMemberPaths } from "./team_memberRoutes-
|
|
1
|
+
import { c as userAuthenticated } from "./userAuthorized-qmzUYDa-.js";
|
|
2
|
+
import { n as teamMemberRoutes, t as teamMemberPaths } from "./team_memberRoutes-mO1f-Y4o.js";
|
|
3
3
|
|
|
4
4
|
//#region src/slices/team/teamRoutes.ts
|
|
5
5
|
const teamPaths = {
|
|
@@ -54,7 +54,7 @@ const teamRoutes = [{
|
|
|
54
54
|
{
|
|
55
55
|
path: teamPaths.list.path,
|
|
56
56
|
name: teamPaths.list.name,
|
|
57
|
-
component: () => import("./TeamList-
|
|
57
|
+
component: () => import("./TeamList-Fb6EfybL.js"),
|
|
58
58
|
meta: {
|
|
59
59
|
title: "Teams",
|
|
60
60
|
description: "Manage teams",
|
|
@@ -72,7 +72,7 @@ const teamRoutes = [{
|
|
|
72
72
|
{
|
|
73
73
|
path: teamPaths.create.path,
|
|
74
74
|
name: teamPaths.create.name,
|
|
75
|
-
component: () => import("./CreateTeamForm-
|
|
75
|
+
component: () => import("./CreateTeamForm-BK8PJeXz.js"),
|
|
76
76
|
meta: {
|
|
77
77
|
title: "Create Team",
|
|
78
78
|
description: "Create new team",
|
|
@@ -87,7 +87,7 @@ const teamRoutes = [{
|
|
|
87
87
|
},
|
|
88
88
|
{
|
|
89
89
|
path: teamPaths.view.path,
|
|
90
|
-
component: () => import("./TeamParent-
|
|
90
|
+
component: () => import("./TeamParent-XgBD3twV.js"),
|
|
91
91
|
meta: { sectionTabs: [
|
|
92
92
|
{
|
|
93
93
|
id: "view",
|
|
@@ -124,7 +124,7 @@ const teamRoutes = [{
|
|
|
124
124
|
{
|
|
125
125
|
path: "",
|
|
126
126
|
name: teamPaths.view.name,
|
|
127
|
-
component: () => import("./ViewTeam-
|
|
127
|
+
component: () => import("./ViewTeam-BXSq4M0V.js"),
|
|
128
128
|
meta: {
|
|
129
129
|
title: "View Team",
|
|
130
130
|
description: "View team details",
|
|
@@ -134,7 +134,7 @@ const teamRoutes = [{
|
|
|
134
134
|
{
|
|
135
135
|
path: teamPaths.edit.path,
|
|
136
136
|
name: teamPaths.edit.name,
|
|
137
|
-
component: () => import("./EditTeamForm-
|
|
137
|
+
component: () => import("./EditTeamForm-DiZXp6vh.js"),
|
|
138
138
|
meta: {
|
|
139
139
|
title: "Edit Team",
|
|
140
140
|
description: "Edit team details",
|
|
@@ -144,7 +144,7 @@ const teamRoutes = [{
|
|
|
144
144
|
{
|
|
145
145
|
path: teamPaths.notes.path,
|
|
146
146
|
name: teamPaths.notes.name,
|
|
147
|
-
component: () => import("./TeamNotesTab-
|
|
147
|
+
component: () => import("./TeamNotesTab-DxMN3WZo.js"),
|
|
148
148
|
meta: {
|
|
149
149
|
title: "Team Notes",
|
|
150
150
|
description: "View and manage notes",
|
|
@@ -154,7 +154,7 @@ const teamRoutes = [{
|
|
|
154
154
|
{
|
|
155
155
|
path: teamPaths.attachments.path,
|
|
156
156
|
name: teamPaths.attachments.name,
|
|
157
|
-
component: () => import("./TeamAttachmentsTab-
|
|
157
|
+
component: () => import("./TeamAttachmentsTab-CnAvlIbn.js"),
|
|
158
158
|
meta: {
|
|
159
159
|
title: "Team Attachments",
|
|
160
160
|
description: "View and manage attachments",
|
|
@@ -164,7 +164,7 @@ const teamRoutes = [{
|
|
|
164
164
|
{
|
|
165
165
|
path: teamPaths.history.path,
|
|
166
166
|
name: teamPaths.history.name,
|
|
167
|
-
component: () => import("./TeamHistoryTab-
|
|
167
|
+
component: () => import("./TeamHistoryTab-CBWeRKXM.js"),
|
|
168
168
|
meta: {
|
|
169
169
|
title: "Team History",
|
|
170
170
|
description: "View audit trail and changes",
|
|
@@ -189,4 +189,4 @@ const teamRoutes = [{
|
|
|
189
189
|
|
|
190
190
|
//#endregion
|
|
191
191
|
export { teamRoutes as n, teamPaths as t };
|
|
192
|
-
//# sourceMappingURL=teamRoutes-
|
|
192
|
+
//# sourceMappingURL=teamRoutes-A7plQKi0.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"teamRoutes-
|
|
1
|
+
{"version":3,"file":"teamRoutes-A7plQKi0.js","names":["teamRoutes: Array<ExtendedRouteRecordRaw>"],"sources":["../src/slices/team/teamRoutes.ts"],"sourcesContent":["import { userAuthenticated } from '../../middleware/userAuthorized';\nimport type { ExtendedRouteRecordRaw } from '../../types/ExtendedRoute';\nimport { teamMemberPaths, teamMemberRoutes } from './team_member/team_memberRoutes';\n\nexport const teamPaths = {\n list: {\n path: '',\n full_path: '/teams',\n name: 'TeamList',\n },\n create: {\n path: 'create',\n full_path: '/teams/create',\n name: 'CreateTeam',\n },\n view: {\n path: ':id',\n full_path: '/teams/:id',\n name: 'ViewTeam',\n },\n edit: {\n path: 'edit',\n full_path: '/teams/:id/edit',\n name: 'EditTeam',\n },\n notes: {\n path: 'notes',\n full_path: '/teams/:id/notes',\n name: 'TeamNotes',\n },\n attachments: {\n path: 'attachments',\n full_path: '/teams/:id/attachments',\n name: 'TeamAttachments',\n },\n history: {\n path: 'history',\n full_path: '/teams/:id/history',\n name: 'TeamHistory',\n },\n members: {\n path: 'members',\n full_path: '/teams/:id/members',\n name: 'TeamMembers',\n },\n} as const;\n\nexport const teamRoutes: Array<ExtendedRouteRecordRaw> = [\n {\n path: '/teams',\n name: 'Team',\n redirect: { name: teamPaths.list.name },\n beforeEnter: [userAuthenticated],\n meta: {},\n children: [\n {\n path: teamPaths.list.path,\n name: teamPaths.list.name,\n component: () => import('./TeamList.vue'),\n meta: {\n title: 'Teams',\n description: 'Manage teams',\n side_bar: {\n section: 'Teams',\n visible_to: ['consumer', 'lead', 'staff', 'super_admin'],\n },\n },\n },\n {\n path: teamPaths.create.path,\n name: teamPaths.create.name,\n component: () => import('./CreateTeamForm.vue'),\n meta: {\n title: 'Create Team',\n description: 'Create new team',\n breadcrumbs: [\n {\n label: 'Teams',\n to: { name: teamPaths.list.name },\n },\n {\n label: 'Create',\n to: { name: teamPaths.create.name },\n },\n ],\n },\n },\n {\n path: teamPaths.view.path,\n component: () => import('./TeamParent.vue'),\n meta: {\n // Define team detail tabs\n sectionTabs: [\n {\n id: 'view',\n label: 'View',\n to: { name: teamPaths.view.name },\n },\n {\n id: 'edit',\n label: 'Edit',\n to: { name: teamPaths.edit.name },\n },\n {\n id: 'notes',\n label: 'Notes',\n to: { name: teamPaths.notes.name },\n },\n {\n id: 'attachments',\n label: 'Attachments',\n to: { name: teamPaths.attachments.name },\n },\n {\n id: 'history',\n label: 'History',\n to: { name: teamPaths.history.name },\n },\n {\n id: 'members',\n label: 'Members',\n to: { name: teamMemberPaths.list.name },\n },\n ],\n },\n children: [\n {\n path: '',\n name: teamPaths.view.name,\n component: () => import('./ViewTeam.vue'),\n meta: {\n title: 'View Team',\n description: 'View team details',\n currentTab: 'view',\n },\n },\n {\n path: teamPaths.edit.path,\n name: teamPaths.edit.name,\n component: () => import('./EditTeamForm.vue'),\n meta: {\n title: 'Edit Team',\n description: 'Edit team details',\n currentTab: 'edit',\n },\n },\n {\n path: teamPaths.notes.path,\n name: teamPaths.notes.name,\n component: () => import('./TeamNotesTab.vue'),\n meta: {\n title: 'Team Notes',\n description: 'View and manage notes',\n currentTab: 'notes',\n },\n },\n {\n path: teamPaths.attachments.path,\n name: teamPaths.attachments.name,\n component: () => import('./TeamAttachmentsTab.vue'),\n meta: {\n title: 'Team Attachments',\n description: 'View and manage attachments',\n currentTab: 'attachments',\n },\n },\n {\n path: teamPaths.history.path,\n name: teamPaths.history.name,\n component: () => import('./TeamHistoryTab.vue'),\n meta: {\n title: 'Team History',\n description: 'View audit trail and changes',\n currentTab: 'history',\n },\n },\n {\n path: teamPaths.members.path,\n name: teamPaths.members.name,\n component: () => import('./TeamMembersTab.vue'),\n meta: {\n title: 'Team Members',\n description: 'View and manage team members',\n currentTab: 'members',\n },\n children: teamMemberRoutes,\n },\n ],\n },\n ],\n },\n];\n"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { c as userAuthenticated } from "./userAuthorized-
|
|
1
|
+
import { c as userAuthenticated } from "./userAuthorized-qmzUYDa-.js";
|
|
2
2
|
|
|
3
3
|
//#region src/slices/team/team_member/team_memberRoutes.ts
|
|
4
4
|
const teamMemberPaths = {
|
|
@@ -27,7 +27,7 @@ const teamMemberRoutes = [
|
|
|
27
27
|
{
|
|
28
28
|
path: teamMemberPaths.list.path,
|
|
29
29
|
name: teamMemberPaths.list.name,
|
|
30
|
-
component: () => import("./TeamMemberList-
|
|
30
|
+
component: () => import("./TeamMemberList-X2hzYZFT.js"),
|
|
31
31
|
beforeEnter: [userAuthenticated],
|
|
32
32
|
meta: {
|
|
33
33
|
title: "Team Members",
|
|
@@ -37,7 +37,7 @@ const teamMemberRoutes = [
|
|
|
37
37
|
{
|
|
38
38
|
path: teamMemberPaths.create.path,
|
|
39
39
|
name: teamMemberPaths.create.name,
|
|
40
|
-
component: () => import("./CreateTeamMemberForm-
|
|
40
|
+
component: () => import("./CreateTeamMemberForm-BYsZNxTq.js"),
|
|
41
41
|
beforeEnter: [userAuthenticated],
|
|
42
42
|
meta: {
|
|
43
43
|
title: "Create Team Member",
|
|
@@ -46,7 +46,7 @@ const teamMemberRoutes = [
|
|
|
46
46
|
},
|
|
47
47
|
{
|
|
48
48
|
path: teamMemberPaths.view.path,
|
|
49
|
-
component: () => import("./TeamMemberParent-
|
|
49
|
+
component: () => import("./TeamMemberParent-DKxE1ziP.js"),
|
|
50
50
|
beforeEnter: [userAuthenticated],
|
|
51
51
|
meta: { sectionTabs: [{
|
|
52
52
|
id: "view",
|
|
@@ -60,7 +60,7 @@ const teamMemberRoutes = [
|
|
|
60
60
|
children: [{
|
|
61
61
|
path: "",
|
|
62
62
|
name: teamMemberPaths.view.name,
|
|
63
|
-
component: () => import("./ViewTeamMember-
|
|
63
|
+
component: () => import("./ViewTeamMember-bmry5QZ0.js"),
|
|
64
64
|
meta: {
|
|
65
65
|
title: "View Team Member",
|
|
66
66
|
description: "View team member details",
|
|
@@ -69,7 +69,7 @@ const teamMemberRoutes = [
|
|
|
69
69
|
}, {
|
|
70
70
|
path: teamMemberPaths.edit.path,
|
|
71
71
|
name: teamMemberPaths.edit.name,
|
|
72
|
-
component: () => import("./EditTeamMemberForm-
|
|
72
|
+
component: () => import("./EditTeamMemberForm-BKbWq88S.js"),
|
|
73
73
|
meta: {
|
|
74
74
|
title: "Edit Team Member",
|
|
75
75
|
description: "Edit team member details",
|
|
@@ -81,4 +81,4 @@ const teamMemberRoutes = [
|
|
|
81
81
|
|
|
82
82
|
//#endregion
|
|
83
83
|
export { teamMemberRoutes as n, teamMemberPaths as t };
|
|
84
|
-
//# sourceMappingURL=team_memberRoutes-
|
|
84
|
+
//# sourceMappingURL=team_memberRoutes-mO1f-Y4o.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"team_memberRoutes-
|
|
1
|
+
{"version":3,"file":"team_memberRoutes-mO1f-Y4o.js","names":["teamMemberRoutes: Array<ExtendedRouteRecordRaw>"],"sources":["../src/slices/team/team_member/team_memberRoutes.ts"],"sourcesContent":["import { userAuthenticated } from '../../../middleware/userAuthorized';\nimport type { ExtendedRouteRecordRaw } from '../../../types/ExtendedRoute';\n\nexport const teamMemberPaths = {\n list: {\n path: '',\n full_path: '/teams/:id/members',\n name: 'TeamMemberList',\n },\n create: {\n path: 'create',\n full_path: '/teams/:id/members/create',\n name: 'CreateTeamMember',\n },\n view: {\n path: ':member_id',\n full_path: '/teams/:id/members/:member_id',\n name: 'ViewTeamMember',\n },\n edit: {\n path: 'edit',\n full_path: '/teams/:id/members/:member_id/edit',\n name: 'EditTeamMember',\n },\n} as const;\n\nexport const teamMemberRoutes: Array<ExtendedRouteRecordRaw> = [\n {\n path: teamMemberPaths.list.path,\n name: teamMemberPaths.list.name,\n component: () => import('./TeamMemberList.vue'),\n beforeEnter: [userAuthenticated],\n meta: {\n title: 'Team Members',\n description: 'View and manage team members',\n // Breadcrumbs managed by TeamMembersTab component\n },\n },\n {\n path: teamMemberPaths.create.path,\n name: teamMemberPaths.create.name,\n component: () => import('./CreateTeamMemberForm.vue'),\n beforeEnter: [userAuthenticated],\n meta: {\n title: 'Create Team Member',\n description: 'Create new team member',\n // Breadcrumbs managed by TeamMembersTab component\n },\n },\n {\n path: teamMemberPaths.view.path,\n component: () => import('./TeamMemberParent.vue'),\n beforeEnter: [userAuthenticated],\n meta: {\n // Define team member detail tabs\n sectionTabs: [\n {\n id: 'view',\n label: 'View',\n to: { name: teamMemberPaths.view.name },\n },\n {\n id: 'edit',\n label: 'Edit',\n to: { name: teamMemberPaths.edit.name },\n },\n ],\n },\n children: [\n {\n path: '',\n name: teamMemberPaths.view.name,\n component: () => import('./ViewTeamMember.vue'),\n meta: {\n title: 'View Team Member',\n description: 'View team member details',\n currentTab: 'view',\n },\n },\n {\n path: teamMemberPaths.edit.path,\n name: teamMemberPaths.edit.name,\n component: () => import('./EditTeamMemberForm.vue'),\n meta: {\n title: 'Edit Team Member',\n description: 'Edit team member details',\n currentTab: 'edit',\n },\n },\n ],\n },\n];\n"],"mappings":";;;AAGA,MAAa,kBAAkB;CAC7B,MAAM;EACJ,MAAM;EACN,WAAW;EACX,MAAM;EACP;CACD,QAAQ;EACN,MAAM;EACN,WAAW;EACX,MAAM;EACP;CACD,MAAM;EACJ,MAAM;EACN,WAAW;EACX,MAAM;EACP;CACD,MAAM;EACJ,MAAM;EACN,WAAW;EACX,MAAM;EACP;CACF;AAED,MAAaA,mBAAkD;CAC7D;EACE,MAAM,gBAAgB,KAAK;EAC3B,MAAM,gBAAgB,KAAK;EAC3B,iBAAiB,OAAO;EACxB,aAAa,CAAC,kBAAkB;EAChC,MAAM;GACJ,OAAO;GACP,aAAa;GAEd;EACF;CACD;EACE,MAAM,gBAAgB,OAAO;EAC7B,MAAM,gBAAgB,OAAO;EAC7B,iBAAiB,OAAO;EACxB,aAAa,CAAC,kBAAkB;EAChC,MAAM;GACJ,OAAO;GACP,aAAa;GAEd;EACF;CACD;EACE,MAAM,gBAAgB,KAAK;EAC3B,iBAAiB,OAAO;EACxB,aAAa,CAAC,kBAAkB;EAChC,MAAM,EAEJ,aAAa,CACX;GACE,IAAI;GACJ,OAAO;GACP,IAAI,EAAE,MAAM,gBAAgB,KAAK,MAAM;GACxC,EACD;GACE,IAAI;GACJ,OAAO;GACP,IAAI,EAAE,MAAM,gBAAgB,KAAK,MAAM;GACxC,CACF,EACF;EACD,UAAU,CACR;GACE,MAAM;GACN,MAAM,gBAAgB,KAAK;GAC3B,iBAAiB,OAAO;GACxB,MAAM;IACJ,OAAO;IACP,aAAa;IACb,YAAY;IACb;GACF,EACD;GACE,MAAM,gBAAgB,KAAK;GAC3B,MAAM,gBAAgB,KAAK;GAC3B,iBAAiB,OAAO;GACxB,MAAM;IACJ,OAAO;IACP,aAAa;IACb,YAAY;IACb;GACF,CACF;EACF;CACF"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { d as useEnv, o as useUserSessionStore } from "./useRpcAuth-BFdprNWb.js";
|
|
2
|
+
import { a as withReturnUrl, r as getValidReturnUrl } from "./useReturnUrl-DnezAxBA.js";
|
|
3
|
+
import { createElementBlock, createElementVNode, defineComponent, normalizeClass, openBlock, unref } from "vue";
|
|
4
|
+
import { useRoute } from "vue-router";
|
|
5
|
+
|
|
6
|
+
//#region src/components/ui/ExternalLinkIcon.vue
|
|
7
|
+
const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
8
|
+
__name: "ExternalLinkIcon",
|
|
9
|
+
props: { size: { default: "default" } },
|
|
10
|
+
setup(__props) {
|
|
11
|
+
const sizeClass = {
|
|
12
|
+
sm: "w-3 h-3",
|
|
13
|
+
default: "w-4 h-4",
|
|
14
|
+
lg: "w-5 h-5"
|
|
15
|
+
}[__props.size];
|
|
16
|
+
return (_ctx, _cache) => {
|
|
17
|
+
return openBlock(), createElementBlock("svg", {
|
|
18
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
19
|
+
fill: "none",
|
|
20
|
+
viewBox: "0 0 24 24",
|
|
21
|
+
"stroke-width": "1.5",
|
|
22
|
+
stroke: "currentColor",
|
|
23
|
+
class: normalizeClass(["shrink-0", unref(sizeClass)]),
|
|
24
|
+
"aria-hidden": "true"
|
|
25
|
+
}, [..._cache[0] || (_cache[0] = [createElementVNode("path", {
|
|
26
|
+
"stroke-linecap": "round",
|
|
27
|
+
"stroke-linejoin": "round",
|
|
28
|
+
d: "M13.5 6H5.25A2.25 2.25 0 0 0 3 8.25v10.5A2.25 2.25 0 0 0 5.25 21h10.5A2.25 2.25 0 0 0 18 18.75V10.5m-10.5 6L21 3m0 0h-5.25M21 3v5.25"
|
|
29
|
+
}, null, -1)])], 2);
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
var ExternalLinkIcon_default = _sfc_main;
|
|
34
|
+
|
|
35
|
+
//#endregion
|
|
36
|
+
//#region src/composables/useAuthFlowNextStep.ts
|
|
37
|
+
/**
|
|
38
|
+
* Centralizes "where to go next" logic for Signup and ConsentRequired.
|
|
39
|
+
* Consents must be completed before email verification.
|
|
40
|
+
*
|
|
41
|
+
* @param userOverride - Optional user data (e.g. from decoded token). When provided,
|
|
42
|
+
* uses this instead of session store. Use from Signup when you have fresh token
|
|
43
|
+
* data before the session store has updated.
|
|
44
|
+
*/
|
|
45
|
+
function useAuthFlowNextStep() {
|
|
46
|
+
const sessionStore = useUserSessionStore();
|
|
47
|
+
const route = useRoute();
|
|
48
|
+
const { emailVerificationMode } = useEnv();
|
|
49
|
+
function getNextStep(userOverride) {
|
|
50
|
+
const user = userOverride ?? sessionStore.currentSession?.user;
|
|
51
|
+
const consentsComplete = user?.consents_complete ?? true;
|
|
52
|
+
const emailVerified = user?.email_verified ?? true;
|
|
53
|
+
const returnUrl = route.query.returnUrl;
|
|
54
|
+
const defaultRedirect = getValidReturnUrl(route, "/");
|
|
55
|
+
if (!consentsComplete) return withReturnUrl("/auth/consent-required", returnUrl);
|
|
56
|
+
if (emailVerificationMode !== "disabled" && !emailVerified) return withReturnUrl("/auth/verify-email", returnUrl);
|
|
57
|
+
return defaultRedirect;
|
|
58
|
+
}
|
|
59
|
+
return { getNextStep };
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
//#endregion
|
|
63
|
+
export { ExternalLinkIcon_default as n, useAuthFlowNextStep as t };
|
|
64
|
+
//# sourceMappingURL=useAuthFlowNextStep-zlvxflBZ.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useAuthFlowNextStep-zlvxflBZ.js","names":[],"sources":["../src/components/ui/ExternalLinkIcon.vue","../src/composables/useAuthFlowNextStep.ts"],"sourcesContent":["<template>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke-width=\"1.5\"\n stroke=\"currentColor\"\n :class=\"['shrink-0', sizeClass]\"\n aria-hidden=\"true\"\n >\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M13.5 6H5.25A2.25 2.25 0 0 0 3 8.25v10.5A2.25 2.25 0 0 0 5.25 21h10.5A2.25 2.25 0 0 0 18 18.75V10.5m-10.5 6L21 3m0 0h-5.25M21 3v5.25\"\n />\n </svg>\n</template>\n\n<script setup lang=\"ts\">\nconst props = withDefaults(\n defineProps<{\n /** Icon size: sm (3), default (4), lg (5) */\n size?: 'sm' | 'default' | 'lg';\n }>(),\n { size: 'default' },\n);\n\nconst sizeClass = {\n sm: 'w-3 h-3',\n default: 'w-4 h-4',\n lg: 'w-5 h-5',\n}[props.size];\n</script>\n","import { useRoute } from 'vue-router';\nimport { useEnv } from './useEnv';\nimport { useUserSessionStore } from './useUserSessionStore';\nimport { getValidReturnUrl, withReturnUrl } from '../utils/useReturnUrl';\n\n/** Minimal user data needed to determine auth flow next step */\nexport interface AuthFlowUser {\n consents_complete?: boolean;\n email_verified?: boolean;\n}\n\n/**\n * Centralizes \"where to go next\" logic for Signup and ConsentRequired.\n * Consents must be completed before email verification.\n *\n * @param userOverride - Optional user data (e.g. from decoded token). When provided,\n * uses this instead of session store. Use from Signup when you have fresh token\n * data before the session store has updated.\n */\nexport function useAuthFlowNextStep() {\n const sessionStore = useUserSessionStore();\n const route = useRoute();\n const { emailVerificationMode } = useEnv();\n\n function getNextStep(userOverride?: AuthFlowUser): string {\n const user = userOverride ?? sessionStore.currentSession?.user;\n const consentsComplete = user?.consents_complete ?? true;\n const emailVerified = user?.email_verified ?? true;\n const returnUrl = route.query.returnUrl as string | undefined;\n const defaultRedirect = getValidReturnUrl(route, '/');\n\n if (!consentsComplete) {\n return withReturnUrl('/auth/consent-required', returnUrl);\n }\n if (emailVerificationMode !== 'disabled' && !emailVerified) {\n return withReturnUrl('/auth/verify-email', returnUrl);\n }\n return defaultRedirect;\n }\n\n return { getNextStep };\n}\n"],"mappings":";;;;;;;;;;EA2BA,MAAM,YAAY;GAChB,IAAI;GACJ,SAAS;GACT,IAAI;GACL,CAZa,QAYN;;uBA9BN,mBAcM,OAAA;IAbJ,OAAM;IACN,MAAK;IACL,SAAQ;IACR,gBAAa;IACb,QAAO;IACN,OAAK,eAAA,CAAA,YAAe,MAAA,UAAS,CAAA,CAAA;IAC9B,eAAY;qCAEZ,mBAIE,QAAA;IAHA,kBAAe;IACf,mBAAgB;IAChB,GAAE;;;;;;;;;;;;;;;;;ACMR,SAAgB,sBAAsB;CACpC,MAAM,eAAe,qBAAqB;CAC1C,MAAM,QAAQ,UAAU;CACxB,MAAM,EAAE,0BAA0B,QAAQ;CAE1C,SAAS,YAAY,cAAqC;EACxD,MAAM,OAAO,gBAAgB,aAAa,gBAAgB;EAC1D,MAAM,mBAAmB,MAAM,qBAAqB;EACpD,MAAM,gBAAgB,MAAM,kBAAkB;EAC9C,MAAM,YAAY,MAAM,MAAM;EAC9B,MAAM,kBAAkB,kBAAkB,OAAO,IAAI;AAErD,MAAI,CAAC,iBACH,QAAO,cAAc,0BAA0B,UAAU;AAE3D,MAAI,0BAA0B,cAAc,CAAC,cAC3C,QAAO,cAAc,sBAAsB,UAAU;AAEvD,SAAO;;AAGT,QAAO,EAAE,aAAa"}
|
package/dist/{useEmailVerificationChannel-C76Gnyi1.js → useEmailVerificationChannel-DYiMSAES.js}
RENAMED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { o as useUserSessionStore } from "./useRpcAuth-
|
|
1
|
+
import { o as useUserSessionStore } from "./useRpcAuth-BFdprNWb.js";
|
|
2
2
|
import { t as getAndClearEmailVerificationReturnUrl } from "./useReturnUrl-DnezAxBA.js";
|
|
3
3
|
import { onUnmounted, watch } from "vue";
|
|
4
4
|
|
|
@@ -34,4 +34,4 @@ function useEmailVerificationChannel(awaitingVerification, onRedirect, getDefaul
|
|
|
34
34
|
|
|
35
35
|
//#endregion
|
|
36
36
|
export { useEmailVerificationChannel as t };
|
|
37
|
-
//# sourceMappingURL=useEmailVerificationChannel-
|
|
37
|
+
//# sourceMappingURL=useEmailVerificationChannel-DYiMSAES.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useEmailVerificationChannel-
|
|
1
|
+
{"version":3,"file":"useEmailVerificationChannel-DYiMSAES.js","names":["authChannel: BroadcastChannel | null"],"sources":["../src/slices/auth/useEmailVerificationChannel.ts"],"sourcesContent":["import { useUserSessionStore } from '../../composables/useUserSessionStore';\nimport { getAndClearEmailVerificationReturnUrl } from '../../utils/useReturnUrl';\nimport { onUnmounted, watch } from 'vue';\nimport type { Ref } from 'vue';\n\nconst AUTH_CHANNEL = 'auth';\n\n/**\n * Listens for cross-tab email verification completion via BroadcastChannel.\n * When the user verifies their email in another tab, refreshes the session so this tab\n * has the updated email_verified state, then redirects to the stored return URL.\n * Call this when the signup form is showing \"awaiting verification\" state.\n */\nexport function useEmailVerificationChannel(\n awaitingVerification: Ref<boolean>,\n onRedirect: (targetUrl: string) => void,\n getDefaultRedirect: () => string,\n) {\n const sessionStore = useUserSessionStore();\n let authChannel: BroadcastChannel | null = null;\n\n watch(\n awaitingVerification,\n (isAwaiting) => {\n authChannel?.close();\n authChannel = null;\n if (!isAwaiting) return;\n authChannel = new BroadcastChannel(AUTH_CHANNEL);\n authChannel.onmessage = (event: MessageEvent<{ type: string }>) => {\n if (event.data?.type === 'email_verified') {\n const targetUrl =\n getAndClearEmailVerificationReturnUrl() ?? getDefaultRedirect();\n // Sync from localStorage so this tab has email_verified: true before redirect.\n // Tab B already wrote the new tokens; we just need to read them.\n sessionStore.syncFromStorage();\n onRedirect(targetUrl);\n }\n };\n },\n { immediate: true },\n );\n\n onUnmounted(() => {\n authChannel?.close();\n authChannel = null;\n });\n}\n"],"mappings":";;;;;AAKA,MAAM,eAAe;;;;;;;AAQrB,SAAgB,4BACd,sBACA,YACA,oBACA;CACA,MAAM,eAAe,qBAAqB;CAC1C,IAAIA,cAAuC;AAE3C,OACE,uBACC,eAAe;AACd,eAAa,OAAO;AACpB,gBAAc;AACd,MAAI,CAAC,WAAY;AACjB,gBAAc,IAAI,iBAAiB,aAAa;AAChD,cAAY,aAAa,UAA0C;AACjE,OAAI,MAAM,MAAM,SAAS,kBAAkB;IACzC,MAAM,YACJ,uCAAuC,IAAI,oBAAoB;AAGjE,iBAAa,iBAAiB;AAC9B,eAAW,UAAU;;;IAI3B,EAAE,WAAW,MAAM,CACpB;AAED,mBAAkB;AAChB,eAAa,OAAO;AACpB,gBAAc;GACd"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { r as executeWithAuth } from "./useRpcAuth-
|
|
2
|
-
import { r as getRefreshTokenHandler } from "./EnhancedRefreshTokenHandler-
|
|
3
|
-
import { t as queryCache } from "./useQueryCache-
|
|
1
|
+
import { r as executeWithAuth } from "./useRpcAuth-BFdprNWb.js";
|
|
2
|
+
import { r as getRefreshTokenHandler } from "./EnhancedRefreshTokenHandler-s8wUXtB5.js";
|
|
3
|
+
import { t as queryCache } from "./useQueryCache-CUTrwJWX.js";
|
|
4
4
|
import { shallowRef } from "vue";
|
|
5
5
|
|
|
6
6
|
//#region src/composables/useMutation.ts
|
|
@@ -15,10 +15,12 @@ function useMutation(mutationFn, options) {
|
|
|
15
15
|
try {
|
|
16
16
|
const skipAuthCheck = options?.skipAuthCheck || options?.credentials === "include";
|
|
17
17
|
const authTokenOverride = options?.customAuthToken?.(input);
|
|
18
|
+
const extraHeaders = options?.extraHeaders?.(input);
|
|
18
19
|
const result = await executeWithAuth((batch) => mutationFn(batch, input), {
|
|
19
20
|
credentials: options?.credentials,
|
|
20
21
|
skipAuthCheck,
|
|
21
22
|
authTokenOverride,
|
|
23
|
+
extraHeaders,
|
|
22
24
|
refreshTokenHandler
|
|
23
25
|
});
|
|
24
26
|
data.value = result;
|
|
@@ -50,4 +52,4 @@ function useMutation(mutationFn, options) {
|
|
|
50
52
|
|
|
51
53
|
//#endregion
|
|
52
54
|
export { useMutation as t };
|
|
53
|
-
//# sourceMappingURL=useMutation-
|
|
55
|
+
//# sourceMappingURL=useMutation-BXSu7_-s.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useMutation-BXSu7_-s.js","names":[],"sources":["../src/composables/useMutation.ts"],"sourcesContent":["import type { DragoncoreApi } from '@dragonmastery/dragoncore-shared';\nimport { shallowRef, type ShallowRef } from 'vue';\nimport { getRefreshTokenHandler } from '../utils/EnhancedRefreshTokenHandler';\nimport type { MutationFunction, UseMutationOptions } from './types';\nimport { queryCache } from './useQueryCache';\nimport { executeWithAuth } from './useRpcAuth';\n\nexport interface UseMutationReturn<TInput, TOutput> {\n data: ShallowRef<TOutput | null>;\n loading: ShallowRef<boolean>;\n error: ShallowRef<Error | null>;\n mutate: (input: TInput) => Promise<TOutput>;\n reset: () => void;\n}\n\nexport function useMutation<\n TApi extends Record<string, any> = DragoncoreApi,\n TInput = any,\n TOutput = any,\n>(\n mutationFn: MutationFunction<TApi, TInput, TOutput>,\n options?: UseMutationOptions<TInput, TOutput>,\n): UseMutationReturn<TInput, TOutput> {\n // Get the global refresh token handler - Dragoncore handles this automatically\n const refreshTokenHandler = getRefreshTokenHandler();\n const loading = shallowRef(false);\n const error = shallowRef<Error | null>(null);\n const data = shallowRef<TOutput | null>(null);\n\n const mutate = async (input: TInput): Promise<TOutput> => {\n loading.value = true;\n error.value = null;\n\n try {\n // Skip auth check for public endpoints (signup) or login/logout operations\n const skipAuthCheck = options?.skipAuthCheck || options?.credentials === 'include';\n const authTokenOverride = options?.customAuthToken?.(input);\n const extraHeaders = options?.extraHeaders?.(input);\n const result = await executeWithAuth<TApi, TOutput>(\n (batch) => mutationFn(batch, input),\n {\n credentials: options?.credentials,\n skipAuthCheck,\n authTokenOverride,\n extraHeaders,\n refreshTokenHandler,\n },\n );\n data.value = result;\n\n // Invalidate related queries\n if (options?.invalidate) {\n if (Array.isArray(options.invalidate)) {\n options.invalidate.forEach((key) => queryCache.invalidate(key));\n } else {\n queryCache.invalidate(options.invalidate);\n }\n }\n\n // Call success callback\n if (options?.onSuccess) {\n options.onSuccess(result, input);\n }\n\n return result;\n } catch (e) {\n error.value = e instanceof Error ? e : new Error('Unknown error');\n\n // Call error callback\n if (options?.onError) {\n options.onError(error.value, input);\n }\n\n throw e;\n } finally {\n loading.value = false;\n }\n };\n\n const reset = () => {\n data.value = null;\n error.value = null;\n loading.value = false;\n };\n\n return { mutate, loading, error, data, reset };\n}\n"],"mappings":";;;;;;AAeA,SAAgB,YAKd,YACA,SACoC;CAEpC,MAAM,sBAAsB,wBAAwB;CACpD,MAAM,UAAU,WAAW,MAAM;CACjC,MAAM,QAAQ,WAAyB,KAAK;CAC5C,MAAM,OAAO,WAA2B,KAAK;CAE7C,MAAM,SAAS,OAAO,UAAoC;AACxD,UAAQ,QAAQ;AAChB,QAAM,QAAQ;AAEd,MAAI;GAEF,MAAM,gBAAgB,SAAS,iBAAiB,SAAS,gBAAgB;GACzE,MAAM,oBAAoB,SAAS,kBAAkB,MAAM;GAC3D,MAAM,eAAe,SAAS,eAAe,MAAM;GACnD,MAAM,SAAS,MAAM,iBAClB,UAAU,WAAW,OAAO,MAAM,EACnC;IACE,aAAa,SAAS;IACtB;IACA;IACA;IACA;IACD,CACF;AACD,QAAK,QAAQ;AAGb,OAAI,SAAS,WACX,KAAI,MAAM,QAAQ,QAAQ,WAAW,CACnC,SAAQ,WAAW,SAAS,QAAQ,WAAW,WAAW,IAAI,CAAC;OAE/D,YAAW,WAAW,QAAQ,WAAW;AAK7C,OAAI,SAAS,UACX,SAAQ,UAAU,QAAQ,MAAM;AAGlC,UAAO;WACA,GAAG;AACV,SAAM,QAAQ,aAAa,QAAQ,oBAAI,IAAI,MAAM,gBAAgB;AAGjE,OAAI,SAAS,QACX,SAAQ,QAAQ,MAAM,OAAO,MAAM;AAGrC,SAAM;YACE;AACR,WAAQ,QAAQ;;;CAIpB,MAAM,cAAc;AAClB,OAAK,QAAQ;AACb,QAAM,QAAQ;AACd,UAAQ,QAAQ;;AAGlB,QAAO;EAAE;EAAQ;EAAS;EAAO;EAAM;EAAO"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { l as logIfEnabled, r as executeWithAuth } from "./useRpcAuth-
|
|
2
|
-
import { r as getRefreshTokenHandler } from "./EnhancedRefreshTokenHandler-
|
|
3
|
-
import { t as queryCache } from "./useQueryCache-
|
|
1
|
+
import { l as logIfEnabled, r as executeWithAuth } from "./useRpcAuth-BFdprNWb.js";
|
|
2
|
+
import { r as getRefreshTokenHandler } from "./EnhancedRefreshTokenHandler-s8wUXtB5.js";
|
|
3
|
+
import { t as queryCache } from "./useQueryCache-CUTrwJWX.js";
|
|
4
4
|
import { onMounted, onUnmounted, shallowRef, watch } from "vue";
|
|
5
5
|
|
|
6
6
|
//#region src/composables/useQuery.ts
|
|
@@ -105,4 +105,4 @@ function useQuery(queryFn, options) {
|
|
|
105
105
|
|
|
106
106
|
//#endregion
|
|
107
107
|
export { useQuery as t };
|
|
108
|
-
//# sourceMappingURL=useQuery-
|
|
108
|
+
//# sourceMappingURL=useQuery-DownvLRA.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useQuery-
|
|
1
|
+
{"version":3,"file":"useQuery-DownvLRA.js","names":[],"sources":["../src/composables/useQuery.ts"],"sourcesContent":["import type { DragoncoreApi } from '@dragonmastery/dragoncore-shared';\nimport { onMounted, onUnmounted, shallowRef, type ShallowRef, watch } from 'vue';\nimport { getRefreshTokenHandler } from '../utils/EnhancedRefreshTokenHandler';\nimport { logIfEnabled } from '../utils/logger';\nimport type { QueryFunction, UseQueryOptions } from './types';\nimport { queryCache } from './useQueryCache';\nimport { executeWithAuth } from './useRpcAuth';\n\nexport interface UseQueryReturn<T> {\n data: ShallowRef<T | null>;\n loading: ShallowRef<boolean>;\n error: ShallowRef<Error | null>;\n dataUpdatedAt: ShallowRef<number>;\n execute: () => Promise<void>;\n refetch: () => Promise<void>;\n}\n\nexport function useQuery<TApi extends Record<string, any> = DragoncoreApi, T = any>(\n queryFn: QueryFunction<TApi, T>,\n options?: UseQueryOptions,\n): UseQueryReturn<T> {\n // Get the global refresh token handler - Dragoncore handles this automatically\n const refreshTokenHandler = getRefreshTokenHandler();\n\n const data = shallowRef<T | null>(null);\n const loading = shallowRef(options?.immediate !== false);\n const error = shallowRef<Error | null>(null);\n const dataUpdatedAt = shallowRef<number>(0);\n // Internal flag to prevent duplicate background fetches (not exposed to consumers)\n let isBackgroundFetching = false;\n // Default debug to false if not specified\n const debug = options?.debug ?? false;\n // Default persist to true when cacheKey is provided (localStorage persistence is default)\n // Set persist: false to disable localStorage persistence (in-memory caching still works)\n const persist = options?.persist ?? (options?.cacheKey ? true : false);\n\n const execute = async (skipCache = false) => {\n const isEnabled =\n typeof options?.enabled === 'boolean'\n ? options?.enabled\n : (options?.enabled?.value ?? true);\n\n if (!isEnabled) {\n loading.value = false;\n return;\n }\n\n loading.value = true;\n error.value = null;\n\n // Check cache first (unless explicitly skipping)\n if (options?.cacheKey && !skipCache) {\n const cached = queryCache.get<T>(options.cacheKey, {\n staleTime: options?.staleTime,\n persist: persist,\n debug: debug,\n });\n\n if (cached !== null) {\n logIfEnabled('debug', `[Query] Cache HIT: ${options.cacheKey}`, debug);\n data.value = cached;\n loading.value = false;\n\n // Optionally fetch fresh data in background if refetchOnWindowFocus\n if (options?.refetchOnWindowFocus) {\n executeInBackground();\n }\n return;\n }\n logIfEnabled('debug', `[Query] Cache MISS: ${options.cacheKey}`, debug);\n }\n\n try {\n const result = await executeWithAuth<TApi, T>((batch) => queryFn(batch), {\n credentials: options?.credentials,\n skipAuthCheck: options?.skipAuthCheck ?? false,\n mode: options?.batchMode,\n trackedSegment: options?.trackedSegment, // Pass through the tracked segment\n refreshTokenHandler,\n });\n data.value = result;\n dataUpdatedAt.value = Date.now();\n\n // Cache the result\n if (options?.cacheKey) {\n queryCache.set(options.cacheKey, result, {\n staleTime: options?.staleTime,\n persist: persist,\n debug: options?.debug,\n });\n }\n } catch (e) {\n error.value = e instanceof Error ? e : new Error('Unknown error');\n data.value = null;\n } finally {\n loading.value = false;\n }\n };\n\n const executeInBackground = async () => {\n if (isBackgroundFetching || loading.value) return; // Don't fetch if already fetching\n\n isBackgroundFetching = true;\n try {\n const result = await executeWithAuth<TApi, T>((batch) => queryFn(batch), {\n credentials: options?.credentials,\n skipAuthCheck: options?.skipAuthCheck ?? false,\n mode: options?.batchMode ? 'batch' : 'tracked',\n trackedSegment: options?.trackedSegment, // Pass through the tracked segment\n refreshTokenHandler,\n });\n data.value = result;\n dataUpdatedAt.value = Date.now();\n\n if (options?.cacheKey) {\n queryCache.set(options.cacheKey, result, {\n staleTime: options?.staleTime,\n persist: persist,\n debug: debug,\n });\n }\n } catch (e) {\n // Silent failure for background refetch\n logIfEnabled('error', '[Query] Background refetch failed:', debug, e);\n } finally {\n isBackgroundFetching = false;\n }\n };\n\n // Auto-execute on mount\n if (options?.immediate !== false) {\n onMounted(execute);\n }\n\n // Refetch on window focus\n if (options?.refetchOnWindowFocus) {\n const handleFocus = () => {\n if (data.value !== null) {\n executeInBackground();\n }\n };\n onMounted(() => window.addEventListener('focus', handleFocus));\n onUnmounted(() => window.removeEventListener('focus', handleFocus));\n }\n\n // Watch for changes\n if (options?.watch) {\n const watchTargets = Array.isArray(options.watch) ? options.watch : [options.watch];\n watch(watchTargets, () => execute());\n }\n\n // Watch enabled state\n if (options?.enabled && typeof options?.enabled !== 'boolean') {\n watch(options?.enabled, (isEnabled) => {\n if (isEnabled) execute();\n });\n }\n\n return {\n data,\n loading,\n error,\n dataUpdatedAt,\n execute: () => execute(),\n refetch: () => execute(true), // Skip cache on manual refetch\n };\n}\n"],"mappings":";;;;;;AAiBA,SAAgB,SACd,SACA,SACmB;CAEnB,MAAM,sBAAsB,wBAAwB;CAEpD,MAAM,OAAO,WAAqB,KAAK;CACvC,MAAM,UAAU,WAAW,SAAS,cAAc,MAAM;CACxD,MAAM,QAAQ,WAAyB,KAAK;CAC5C,MAAM,gBAAgB,WAAmB,EAAE;CAE3C,IAAI,uBAAuB;CAE3B,MAAM,QAAQ,SAAS,SAAS;CAGhC,MAAM,UAAU,SAAS,YAAY,SAAS,WAAW,OAAO;CAEhE,MAAM,UAAU,OAAO,YAAY,UAAU;AAM3C,MAAI,EAJF,OAAO,SAAS,YAAY,YACxB,SAAS,UACR,SAAS,SAAS,SAAS,OAElB;AACd,WAAQ,QAAQ;AAChB;;AAGF,UAAQ,QAAQ;AAChB,QAAM,QAAQ;AAGd,MAAI,SAAS,YAAY,CAAC,WAAW;GACnC,MAAM,SAAS,WAAW,IAAO,QAAQ,UAAU;IACjD,WAAW,SAAS;IACX;IACF;IACR,CAAC;AAEF,OAAI,WAAW,MAAM;AACnB,iBAAa,SAAS,sBAAsB,QAAQ,YAAY,MAAM;AACtE,SAAK,QAAQ;AACb,YAAQ,QAAQ;AAGhB,QAAI,SAAS,qBACX,sBAAqB;AAEvB;;AAEF,gBAAa,SAAS,uBAAuB,QAAQ,YAAY,MAAM;;AAGzE,MAAI;GACF,MAAM,SAAS,MAAM,iBAA0B,UAAU,QAAQ,MAAM,EAAE;IACvE,aAAa,SAAS;IACtB,eAAe,SAAS,iBAAiB;IACzC,MAAM,SAAS;IACf,gBAAgB,SAAS;IACzB;IACD,CAAC;AACF,QAAK,QAAQ;AACb,iBAAc,QAAQ,KAAK,KAAK;AAGhC,OAAI,SAAS,SACX,YAAW,IAAI,QAAQ,UAAU,QAAQ;IACvC,WAAW,SAAS;IACX;IACT,OAAO,SAAS;IACjB,CAAC;WAEG,GAAG;AACV,SAAM,QAAQ,aAAa,QAAQ,oBAAI,IAAI,MAAM,gBAAgB;AACjE,QAAK,QAAQ;YACL;AACR,WAAQ,QAAQ;;;CAIpB,MAAM,sBAAsB,YAAY;AACtC,MAAI,wBAAwB,QAAQ,MAAO;AAE3C,yBAAuB;AACvB,MAAI;GACF,MAAM,SAAS,MAAM,iBAA0B,UAAU,QAAQ,MAAM,EAAE;IACvE,aAAa,SAAS;IACtB,eAAe,SAAS,iBAAiB;IACzC,MAAM,SAAS,YAAY,UAAU;IACrC,gBAAgB,SAAS;IACzB;IACD,CAAC;AACF,QAAK,QAAQ;AACb,iBAAc,QAAQ,KAAK,KAAK;AAEhC,OAAI,SAAS,SACX,YAAW,IAAI,QAAQ,UAAU,QAAQ;IACvC,WAAW,SAAS;IACX;IACF;IACR,CAAC;WAEG,GAAG;AAEV,gBAAa,SAAS,sCAAsC,OAAO,EAAE;YAC7D;AACR,0BAAuB;;;AAK3B,KAAI,SAAS,cAAc,MACzB,WAAU,QAAQ;AAIpB,KAAI,SAAS,sBAAsB;EACjC,MAAM,oBAAoB;AACxB,OAAI,KAAK,UAAU,KACjB,sBAAqB;;AAGzB,kBAAgB,OAAO,iBAAiB,SAAS,YAAY,CAAC;AAC9D,oBAAkB,OAAO,oBAAoB,SAAS,YAAY,CAAC;;AAIrE,KAAI,SAAS,MAEX,OADqB,MAAM,QAAQ,QAAQ,MAAM,GAAG,QAAQ,QAAQ,CAAC,QAAQ,MAAM,QACzD,SAAS,CAAC;AAItC,KAAI,SAAS,WAAW,OAAO,SAAS,YAAY,UAClD,OAAM,SAAS,UAAU,cAAc;AACrC,MAAI,UAAW,UAAS;GACxB;AAGJ,QAAO;EACL;EACA;EACA;EACA;EACA,eAAe,SAAS;EACxB,eAAe,QAAQ,KAAK;EAC7B"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { l as logIfEnabled, u as logger } from "./useRpcAuth-
|
|
1
|
+
import { l as logIfEnabled, u as logger } from "./useRpcAuth-BFdprNWb.js";
|
|
2
2
|
|
|
3
3
|
//#region src/composables/useQueryCache.ts
|
|
4
4
|
var QueryCache = class {
|
|
@@ -251,4 +251,4 @@ if (import.meta.env.DEV) {
|
|
|
251
251
|
|
|
252
252
|
//#endregion
|
|
253
253
|
export { queryCache as t };
|
|
254
|
-
//# sourceMappingURL=useQueryCache-
|
|
254
|
+
//# sourceMappingURL=useQueryCache-CUTrwJWX.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useQueryCache-alzaRWEb.js","names":["keysToRemove: string[]","entry: CacheEntry<T>","entries: Record<\n string,\n {\n data: any;\n ageMs: number;\n expiresInMs: number;\n isExpired: boolean;\n source: 'memory' | 'storage';\n }\n >","entries: [string, number][]"],"sources":["../src/composables/useQueryCache.ts"],"sourcesContent":["import { logger, logIfEnabled } from '../utils/logger';\n\ninterface CacheEntry<T> {\n data: T;\n timestamp: number;\n expiresAt: number;\n}\n\ninterface CacheOptions {\n staleTime?: number; // How long data is fresh (ms), default 5 minutes\n persist?: boolean; // Save to localStorage\n debug?: boolean; // Enable/disable debug logging for this cache operation (default: false)\n}\n\nclass QueryCache {\n private memoryCache = new Map<string, CacheEntry<any>>();\n private readonly BUILD_TAG = import.meta.env.VITE_BUILD_TAG || 'dev';\n private readonly STORAGE_PREFIX = `rpc-cache:${this.BUILD_TAG}:`;\n private readonly BUILD_TAG_KEY = 'rpc-cache-build-tag';\n private cleanupTimers = new Map<string, number>();\n\n constructor() {\n // Check if this is a new deployment and clear old cache\n this.handleDeploymentChange();\n\n // Clean up expired localStorage entries on init\n this.cleanExpiredStorage();\n }\n\n /**\n * Detect deployment changes and clear old cache\n */\n private handleDeploymentChange() {\n const lastBuildTag = localStorage.getItem(this.BUILD_TAG_KEY);\n\n // If build tag is missing, clear all cache (first load or manual clear)\n if (!lastBuildTag) {\n // Use global log level for deployment change detection\n logger.debug('[Cache] Build tag missing - clearing all cache');\n this.clearAllStorage();\n }\n // If deployment changed, clear old cache from previous build\n else if (lastBuildTag !== this.BUILD_TAG) {\n // Use global log level for deployment change detection\n logger.debug(`[Cache] New deployment detected: ${lastBuildTag} → ${this.BUILD_TAG}`);\n logger.debug('[Cache] Clearing old cache from previous deployment');\n\n // Clear all old cache entries (from previous build tag)\n this.clearAllOldDeploymentCache(lastBuildTag);\n }\n\n // Store current build tag\n localStorage.setItem(this.BUILD_TAG_KEY, this.BUILD_TAG);\n }\n\n /**\n * Clear cache from previous deployment\n */\n private clearAllOldDeploymentCache(oldBuildTag: string) {\n const oldPrefix = `rpc-cache:${oldBuildTag}:`;\n const keysToRemove: string[] = [];\n\n for (let i = 0; i < localStorage.length; i++) {\n const key = localStorage.key(i);\n if (key?.startsWith(oldPrefix)) {\n keysToRemove.push(key);\n }\n }\n\n keysToRemove.forEach((key) => localStorage.removeItem(key));\n\n if (keysToRemove.length > 0) {\n // Use global log level for deployment change detection\n logger.debug(`[Cache] Removed ${keysToRemove.length} entries from previous deployment`);\n }\n }\n\n /**\n * Get data from cache (memory first, then localStorage if persist enabled)\n */\n get<T>(key: string, options: CacheOptions = {}): T | null {\n const now = Date.now();\n const debug = options.debug ?? false;\n\n // 1. Try memory cache first\n const memoryEntry = this.memoryCache.get(key);\n if (memoryEntry) {\n if (now < memoryEntry.expiresAt) {\n return memoryEntry.data as T;\n }\n // Expired in memory\n this.memoryCache.delete(key);\n }\n\n // 2. Try localStorage if persist is enabled\n if (options.persist) {\n const storageEntry = this.getFromStorage<T>(key, debug);\n if (storageEntry) {\n if (now < storageEntry.expiresAt) {\n // Rehydrate to memory cache\n this.memoryCache.set(key, storageEntry);\n return storageEntry.data;\n }\n // Expired in storage\n this.removeFromStorage(key);\n }\n }\n\n return null;\n }\n\n /**\n * Set data in cache (memory and optionally localStorage)\n */\n set<T>(key: string, data: T, options: CacheOptions = {}) {\n const staleTime = options.staleTime ?? 300000; // Default 5 minutes\n const debug = options.debug ?? false;\n const entry: CacheEntry<T> = {\n data,\n timestamp: Date.now(),\n expiresAt: Date.now() + staleTime,\n };\n\n // 1. Set in memory\n this.memoryCache.set(key, entry);\n\n // 2. Persist to localStorage if enabled\n if (options.persist) {\n this.setInStorage(key, entry, debug);\n }\n\n // 3. Schedule automatic cleanup\n this.scheduleCleanup(key, staleTime);\n }\n\n /**\n * Invalidate cache entries matching a pattern\n */\n invalidate(pattern: string | RegExp, debug: boolean = false) {\n const keysToRemove: string[] = [];\n\n // Find matching keys in memory\n for (const key of this.memoryCache.keys()) {\n if (this.matchesPattern(key, pattern)) {\n keysToRemove.push(key);\n }\n }\n\n // Remove from memory and storage\n keysToRemove.forEach((key) => {\n this.memoryCache.delete(key);\n this.removeFromStorage(key);\n this.cancelCleanup(key);\n });\n\n logIfEnabled(\n 'debug',\n `[Cache] Invalidated ${keysToRemove.length} entries matching:`,\n debug,\n pattern,\n );\n }\n\n /**\n * Clear all cache entries\n */\n clear(debug: boolean = false) {\n // Clear memory\n this.memoryCache.clear();\n\n // Clear all cleanup timers\n for (const timer of this.cleanupTimers.values()) {\n clearTimeout(timer);\n }\n this.cleanupTimers.clear();\n\n // Clear localStorage\n this.clearAllStorage();\n\n logIfEnabled('debug', '[Cache] Cleared all entries', debug);\n }\n\n /**\n * Get cache statistics (for debugging)\n */\n inspect() {\n const entries: Record<\n string,\n {\n data: any;\n ageMs: number;\n expiresInMs: number;\n isExpired: boolean;\n source: 'memory' | 'storage';\n }\n > = {};\n\n const now = Date.now();\n\n // Memory entries\n for (const [key, value] of this.memoryCache.entries()) {\n entries[key] = {\n data: value.data,\n ageMs: now - value.timestamp,\n expiresInMs: value.expiresAt - now,\n isExpired: now > value.expiresAt,\n source: 'memory',\n };\n }\n\n // Storage entries not in memory\n for (let i = 0; i < localStorage.length; i++) {\n const storageKey = localStorage.key(i);\n if (storageKey?.startsWith(this.STORAGE_PREFIX)) {\n const key = storageKey.substring(this.STORAGE_PREFIX.length);\n if (!entries[key]) {\n try {\n const entry = JSON.parse(localStorage.getItem(storageKey)!) as CacheEntry<any>;\n entries[key] = {\n data: entry.data,\n ageMs: now - entry.timestamp,\n expiresInMs: entry.expiresAt - now,\n isExpired: now > entry.expiresAt,\n source: 'storage',\n };\n } catch {\n // Ignore parse errors\n }\n }\n }\n }\n\n return {\n totalEntries: Object.keys(entries).length,\n memoryEntries: Array.from(this.memoryCache.keys()).length,\n storageEntries: this.countStorageEntries(),\n entries,\n };\n }\n\n /**\n * Get size of cache in localStorage (approximate)\n */\n getStorageSize(): number {\n let size = 0;\n for (let i = 0; i < localStorage.length; i++) {\n const key = localStorage.key(i);\n if (key?.startsWith(this.STORAGE_PREFIX)) {\n const value = localStorage.getItem(key);\n if (value) {\n size += key.length + value.length;\n }\n }\n }\n return size;\n }\n\n // Private methods\n\n private getFromStorage<T>(key: string, debug: boolean = false): CacheEntry<T> | null {\n try {\n const stored = localStorage.getItem(this.STORAGE_PREFIX + key);\n if (!stored) return null;\n\n const entry = JSON.parse(stored) as CacheEntry<T>;\n return entry;\n } catch (error) {\n logIfEnabled('error', '[Cache] Error reading from storage:', debug, error);\n return null;\n }\n }\n\n private setInStorage<T>(key: string, entry: CacheEntry<T>, debug: boolean = false) {\n try {\n localStorage.setItem(this.STORAGE_PREFIX + key, JSON.stringify(entry));\n } catch (error) {\n // Handle quota exceeded\n if (error instanceof DOMException && error.name === 'QuotaExceededError') {\n logIfEnabled('warn', '[Cache] Storage quota exceeded, clearing old entries', debug);\n this.clearOldestStorageEntries(debug);\n // Try again\n try {\n localStorage.setItem(this.STORAGE_PREFIX + key, JSON.stringify(entry));\n } catch (retryError) {\n logIfEnabled('error', '[Cache] Still cannot write to storage after cleanup', debug);\n }\n } else {\n logIfEnabled('error', '[Cache] Error writing to storage:', debug, error);\n }\n }\n }\n\n private removeFromStorage(key: string) {\n localStorage.removeItem(this.STORAGE_PREFIX + key);\n }\n\n private clearAllStorage() {\n const keysToRemove: string[] = [];\n for (let i = 0; i < localStorage.length; i++) {\n const key = localStorage.key(i);\n if (key?.startsWith(this.STORAGE_PREFIX)) {\n keysToRemove.push(key);\n }\n }\n keysToRemove.forEach((key) => localStorage.removeItem(key));\n }\n\n private cleanExpiredStorage() {\n const now = Date.now();\n const keysToRemove: string[] = [];\n\n for (let i = 0; i < localStorage.length; i++) {\n const storageKey = localStorage.key(i);\n if (storageKey?.startsWith(this.STORAGE_PREFIX)) {\n try {\n const entry = JSON.parse(localStorage.getItem(storageKey)!) as CacheEntry<any>;\n if (now > entry.expiresAt) {\n keysToRemove.push(storageKey);\n }\n } catch {\n // Remove corrupted entries\n keysToRemove.push(storageKey);\n }\n }\n }\n\n keysToRemove.forEach((key) => localStorage.removeItem(key));\n if (keysToRemove.length > 0) {\n // Use global log level for internal cleanup operations\n logger.debug(`[Cache] Cleaned up ${keysToRemove.length} expired storage entries`);\n }\n }\n\n private clearOldestStorageEntries(debug: boolean = false) {\n const entries: [string, number][] = [];\n\n for (let i = 0; i < localStorage.length; i++) {\n const key = localStorage.key(i);\n if (key?.startsWith(this.STORAGE_PREFIX)) {\n try {\n const entry = JSON.parse(localStorage.getItem(key)!) as CacheEntry<any>;\n entries.push([key, entry.timestamp]);\n } catch {\n // Remove corrupted entries\n localStorage.removeItem(key);\n }\n }\n }\n\n // Sort by timestamp (oldest first) and remove oldest 25%\n entries.sort((a, b) => a[1] - b[1]);\n const toRemove = Math.ceil(entries.length * 0.25);\n entries.slice(0, toRemove).forEach(([key]) => {\n localStorage.removeItem(key);\n });\n\n logIfEnabled('debug', `[Cache] Removed ${toRemove} oldest entries to free space`, debug);\n }\n\n private scheduleCleanup(key: string, delay: number) {\n // Cancel existing cleanup if any\n this.cancelCleanup(key);\n\n // Schedule new cleanup\n const timer = setTimeout(() => {\n this.memoryCache.delete(key);\n this.cleanupTimers.delete(key);\n }, delay);\n\n this.cleanupTimers.set(key, timer);\n }\n\n private cancelCleanup(key: string) {\n const timer = this.cleanupTimers.get(key);\n if (timer) {\n clearTimeout(timer);\n this.cleanupTimers.delete(key);\n }\n }\n\n private matchesPattern(key: string, pattern: string | RegExp): boolean {\n if (typeof pattern === 'string') {\n // Exact match or prefix match\n return key === pattern || key.startsWith(pattern);\n }\n return pattern.test(key);\n }\n\n private countStorageEntries(): number {\n let count = 0;\n for (let i = 0; i < localStorage.length; i++) {\n const key = localStorage.key(i);\n if (key?.startsWith(this.STORAGE_PREFIX)) {\n count++;\n }\n }\n return count;\n }\n}\n\n// Singleton instance\nexport const queryCache = new QueryCache();\n\n// Expose for debugging in dev mode\nif (import.meta.env.DEV) {\n (window as any).__queryCache = queryCache;\n // Always log this in dev mode\n logger.debug('[Cache] Debug available: window.__queryCache');\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useQueryCache-CUTrwJWX.js","names":["keysToRemove: string[]","entry: CacheEntry<T>","entries: Record<\n string,\n {\n data: any;\n ageMs: number;\n expiresInMs: number;\n isExpired: boolean;\n source: 'memory' | 'storage';\n }\n >","entries: [string, number][]"],"sources":["../src/composables/useQueryCache.ts"],"sourcesContent":["import { logger, logIfEnabled } from '../utils/logger';\n\ninterface CacheEntry<T> {\n data: T;\n timestamp: number;\n expiresAt: number;\n}\n\ninterface CacheOptions {\n staleTime?: number; // How long data is fresh (ms), default 5 minutes\n persist?: boolean; // Save to localStorage\n debug?: boolean; // Enable/disable debug logging for this cache operation (default: false)\n}\n\nclass QueryCache {\n private memoryCache = new Map<string, CacheEntry<any>>();\n private readonly BUILD_TAG = import.meta.env.VITE_BUILD_TAG || 'dev';\n private readonly STORAGE_PREFIX = `rpc-cache:${this.BUILD_TAG}:`;\n private readonly BUILD_TAG_KEY = 'rpc-cache-build-tag';\n private cleanupTimers = new Map<string, number>();\n\n constructor() {\n // Check if this is a new deployment and clear old cache\n this.handleDeploymentChange();\n\n // Clean up expired localStorage entries on init\n this.cleanExpiredStorage();\n }\n\n /**\n * Detect deployment changes and clear old cache\n */\n private handleDeploymentChange() {\n const lastBuildTag = localStorage.getItem(this.BUILD_TAG_KEY);\n\n // If build tag is missing, clear all cache (first load or manual clear)\n if (!lastBuildTag) {\n // Use global log level for deployment change detection\n logger.debug('[Cache] Build tag missing - clearing all cache');\n this.clearAllStorage();\n }\n // If deployment changed, clear old cache from previous build\n else if (lastBuildTag !== this.BUILD_TAG) {\n // Use global log level for deployment change detection\n logger.debug(`[Cache] New deployment detected: ${lastBuildTag} → ${this.BUILD_TAG}`);\n logger.debug('[Cache] Clearing old cache from previous deployment');\n\n // Clear all old cache entries (from previous build tag)\n this.clearAllOldDeploymentCache(lastBuildTag);\n }\n\n // Store current build tag\n localStorage.setItem(this.BUILD_TAG_KEY, this.BUILD_TAG);\n }\n\n /**\n * Clear cache from previous deployment\n */\n private clearAllOldDeploymentCache(oldBuildTag: string) {\n const oldPrefix = `rpc-cache:${oldBuildTag}:`;\n const keysToRemove: string[] = [];\n\n for (let i = 0; i < localStorage.length; i++) {\n const key = localStorage.key(i);\n if (key?.startsWith(oldPrefix)) {\n keysToRemove.push(key);\n }\n }\n\n keysToRemove.forEach((key) => localStorage.removeItem(key));\n\n if (keysToRemove.length > 0) {\n // Use global log level for deployment change detection\n logger.debug(`[Cache] Removed ${keysToRemove.length} entries from previous deployment`);\n }\n }\n\n /**\n * Get data from cache (memory first, then localStorage if persist enabled)\n */\n get<T>(key: string, options: CacheOptions = {}): T | null {\n const now = Date.now();\n const debug = options.debug ?? false;\n\n // 1. Try memory cache first\n const memoryEntry = this.memoryCache.get(key);\n if (memoryEntry) {\n if (now < memoryEntry.expiresAt) {\n return memoryEntry.data as T;\n }\n // Expired in memory\n this.memoryCache.delete(key);\n }\n\n // 2. Try localStorage if persist is enabled\n if (options.persist) {\n const storageEntry = this.getFromStorage<T>(key, debug);\n if (storageEntry) {\n if (now < storageEntry.expiresAt) {\n // Rehydrate to memory cache\n this.memoryCache.set(key, storageEntry);\n return storageEntry.data;\n }\n // Expired in storage\n this.removeFromStorage(key);\n }\n }\n\n return null;\n }\n\n /**\n * Set data in cache (memory and optionally localStorage)\n */\n set<T>(key: string, data: T, options: CacheOptions = {}) {\n const staleTime = options.staleTime ?? 300000; // Default 5 minutes\n const debug = options.debug ?? false;\n const entry: CacheEntry<T> = {\n data,\n timestamp: Date.now(),\n expiresAt: Date.now() + staleTime,\n };\n\n // 1. Set in memory\n this.memoryCache.set(key, entry);\n\n // 2. Persist to localStorage if enabled\n if (options.persist) {\n this.setInStorage(key, entry, debug);\n }\n\n // 3. Schedule automatic cleanup\n this.scheduleCleanup(key, staleTime);\n }\n\n /**\n * Invalidate cache entries matching a pattern\n */\n invalidate(pattern: string | RegExp, debug: boolean = false) {\n const keysToRemove: string[] = [];\n\n // Find matching keys in memory\n for (const key of this.memoryCache.keys()) {\n if (this.matchesPattern(key, pattern)) {\n keysToRemove.push(key);\n }\n }\n\n // Remove from memory and storage\n keysToRemove.forEach((key) => {\n this.memoryCache.delete(key);\n this.removeFromStorage(key);\n this.cancelCleanup(key);\n });\n\n logIfEnabled(\n 'debug',\n `[Cache] Invalidated ${keysToRemove.length} entries matching:`,\n debug,\n pattern,\n );\n }\n\n /**\n * Clear all cache entries\n */\n clear(debug: boolean = false) {\n // Clear memory\n this.memoryCache.clear();\n\n // Clear all cleanup timers\n for (const timer of this.cleanupTimers.values()) {\n clearTimeout(timer);\n }\n this.cleanupTimers.clear();\n\n // Clear localStorage\n this.clearAllStorage();\n\n logIfEnabled('debug', '[Cache] Cleared all entries', debug);\n }\n\n /**\n * Get cache statistics (for debugging)\n */\n inspect() {\n const entries: Record<\n string,\n {\n data: any;\n ageMs: number;\n expiresInMs: number;\n isExpired: boolean;\n source: 'memory' | 'storage';\n }\n > = {};\n\n const now = Date.now();\n\n // Memory entries\n for (const [key, value] of this.memoryCache.entries()) {\n entries[key] = {\n data: value.data,\n ageMs: now - value.timestamp,\n expiresInMs: value.expiresAt - now,\n isExpired: now > value.expiresAt,\n source: 'memory',\n };\n }\n\n // Storage entries not in memory\n for (let i = 0; i < localStorage.length; i++) {\n const storageKey = localStorage.key(i);\n if (storageKey?.startsWith(this.STORAGE_PREFIX)) {\n const key = storageKey.substring(this.STORAGE_PREFIX.length);\n if (!entries[key]) {\n try {\n const entry = JSON.parse(localStorage.getItem(storageKey)!) as CacheEntry<any>;\n entries[key] = {\n data: entry.data,\n ageMs: now - entry.timestamp,\n expiresInMs: entry.expiresAt - now,\n isExpired: now > entry.expiresAt,\n source: 'storage',\n };\n } catch {\n // Ignore parse errors\n }\n }\n }\n }\n\n return {\n totalEntries: Object.keys(entries).length,\n memoryEntries: Array.from(this.memoryCache.keys()).length,\n storageEntries: this.countStorageEntries(),\n entries,\n };\n }\n\n /**\n * Get size of cache in localStorage (approximate)\n */\n getStorageSize(): number {\n let size = 0;\n for (let i = 0; i < localStorage.length; i++) {\n const key = localStorage.key(i);\n if (key?.startsWith(this.STORAGE_PREFIX)) {\n const value = localStorage.getItem(key);\n if (value) {\n size += key.length + value.length;\n }\n }\n }\n return size;\n }\n\n // Private methods\n\n private getFromStorage<T>(key: string, debug: boolean = false): CacheEntry<T> | null {\n try {\n const stored = localStorage.getItem(this.STORAGE_PREFIX + key);\n if (!stored) return null;\n\n const entry = JSON.parse(stored) as CacheEntry<T>;\n return entry;\n } catch (error) {\n logIfEnabled('error', '[Cache] Error reading from storage:', debug, error);\n return null;\n }\n }\n\n private setInStorage<T>(key: string, entry: CacheEntry<T>, debug: boolean = false) {\n try {\n localStorage.setItem(this.STORAGE_PREFIX + key, JSON.stringify(entry));\n } catch (error) {\n // Handle quota exceeded\n if (error instanceof DOMException && error.name === 'QuotaExceededError') {\n logIfEnabled('warn', '[Cache] Storage quota exceeded, clearing old entries', debug);\n this.clearOldestStorageEntries(debug);\n // Try again\n try {\n localStorage.setItem(this.STORAGE_PREFIX + key, JSON.stringify(entry));\n } catch (retryError) {\n logIfEnabled('error', '[Cache] Still cannot write to storage after cleanup', debug);\n }\n } else {\n logIfEnabled('error', '[Cache] Error writing to storage:', debug, error);\n }\n }\n }\n\n private removeFromStorage(key: string) {\n localStorage.removeItem(this.STORAGE_PREFIX + key);\n }\n\n private clearAllStorage() {\n const keysToRemove: string[] = [];\n for (let i = 0; i < localStorage.length; i++) {\n const key = localStorage.key(i);\n if (key?.startsWith(this.STORAGE_PREFIX)) {\n keysToRemove.push(key);\n }\n }\n keysToRemove.forEach((key) => localStorage.removeItem(key));\n }\n\n private cleanExpiredStorage() {\n const now = Date.now();\n const keysToRemove: string[] = [];\n\n for (let i = 0; i < localStorage.length; i++) {\n const storageKey = localStorage.key(i);\n if (storageKey?.startsWith(this.STORAGE_PREFIX)) {\n try {\n const entry = JSON.parse(localStorage.getItem(storageKey)!) as CacheEntry<any>;\n if (now > entry.expiresAt) {\n keysToRemove.push(storageKey);\n }\n } catch {\n // Remove corrupted entries\n keysToRemove.push(storageKey);\n }\n }\n }\n\n keysToRemove.forEach((key) => localStorage.removeItem(key));\n if (keysToRemove.length > 0) {\n // Use global log level for internal cleanup operations\n logger.debug(`[Cache] Cleaned up ${keysToRemove.length} expired storage entries`);\n }\n }\n\n private clearOldestStorageEntries(debug: boolean = false) {\n const entries: [string, number][] = [];\n\n for (let i = 0; i < localStorage.length; i++) {\n const key = localStorage.key(i);\n if (key?.startsWith(this.STORAGE_PREFIX)) {\n try {\n const entry = JSON.parse(localStorage.getItem(key)!) as CacheEntry<any>;\n entries.push([key, entry.timestamp]);\n } catch {\n // Remove corrupted entries\n localStorage.removeItem(key);\n }\n }\n }\n\n // Sort by timestamp (oldest first) and remove oldest 25%\n entries.sort((a, b) => a[1] - b[1]);\n const toRemove = Math.ceil(entries.length * 0.25);\n entries.slice(0, toRemove).forEach(([key]) => {\n localStorage.removeItem(key);\n });\n\n logIfEnabled('debug', `[Cache] Removed ${toRemove} oldest entries to free space`, debug);\n }\n\n private scheduleCleanup(key: string, delay: number) {\n // Cancel existing cleanup if any\n this.cancelCleanup(key);\n\n // Schedule new cleanup\n const timer = setTimeout(() => {\n this.memoryCache.delete(key);\n this.cleanupTimers.delete(key);\n }, delay);\n\n this.cleanupTimers.set(key, timer);\n }\n\n private cancelCleanup(key: string) {\n const timer = this.cleanupTimers.get(key);\n if (timer) {\n clearTimeout(timer);\n this.cleanupTimers.delete(key);\n }\n }\n\n private matchesPattern(key: string, pattern: string | RegExp): boolean {\n if (typeof pattern === 'string') {\n // Exact match or prefix match\n return key === pattern || key.startsWith(pattern);\n }\n return pattern.test(key);\n }\n\n private countStorageEntries(): number {\n let count = 0;\n for (let i = 0; i < localStorage.length; i++) {\n const key = localStorage.key(i);\n if (key?.startsWith(this.STORAGE_PREFIX)) {\n count++;\n }\n }\n return count;\n }\n}\n\n// Singleton instance\nexport const queryCache = new QueryCache();\n\n// Expose for debugging in dev mode\nif (import.meta.env.DEV) {\n (window as any).__queryCache = queryCache;\n // Always log this in dev mode\n logger.debug('[Cache] Debug available: window.__queryCache');\n}\n"],"mappings":"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"}
|