@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.
Files changed (198) hide show
  1. package/dist/{ChangePasswordPage-Dy8lFUcI.js → ChangePasswordPage-CR91NZP4.js} +2 -2
  2. package/dist/{ChangePasswordPage-Dy8lFUcI.js.map → ChangePasswordPage-CR91NZP4.js.map} +1 -1
  3. package/dist/ChangePasswordPage-qLd6YZVO.js +7 -0
  4. package/dist/{ConsentRequired-Bhkxu0rv.js → ConsentRequired-DtUwfpk0.js} +36 -27
  5. package/dist/ConsentRequired-DtUwfpk0.js.map +1 -0
  6. package/dist/CreateTeamForm-BK8PJeXz.js +12 -0
  7. package/dist/{CreateTeamForm-bpLbK18g.js → CreateTeamForm-BQewI0Gn.js} +3 -3
  8. package/dist/{CreateTeamForm-bpLbK18g.js.map → CreateTeamForm-BQewI0Gn.js.map} +1 -1
  9. package/dist/{CreateTeamMemberForm-DeUyXnVa.js → CreateTeamMemberForm-B3jxlAsC.js} +4 -4
  10. package/dist/{CreateTeamMemberForm-DeUyXnVa.js.map → CreateTeamMemberForm-B3jxlAsC.js.map} +1 -1
  11. package/dist/CreateTeamMemberForm-BYsZNxTq.js +12 -0
  12. package/dist/{CreateUserPage-CqKcY7_X.js → CreateUserPage-BcCIat_l.js} +2 -2
  13. package/dist/{CreateUserPage-CqKcY7_X.js.map → CreateUserPage-BcCIat_l.js.map} +1 -1
  14. package/dist/CreateUserPage-D0oMJnGd.js +7 -0
  15. package/dist/CreditBalanceDashboard-C2QnVfjU.js +13 -0
  16. package/dist/{CreditBalanceDashboard-BEsOr0Rw.js → CreditBalanceDashboard-CRHrhlSZ.js} +2 -2
  17. package/dist/{CreditBalanceDashboard-BEsOr0Rw.js.map → CreditBalanceDashboard-CRHrhlSZ.js.map} +1 -1
  18. package/dist/{CreditManagement-DiVSMbWZ.js → CreditManagement-7xiygPYj.js} +3 -3
  19. package/dist/{CreditManagement-DiVSMbWZ.js.map → CreditManagement-7xiygPYj.js.map} +1 -1
  20. package/dist/CreditManagement-CAaf_rVj.js +13 -0
  21. package/dist/{CreditTransactionHistory-mcacl2xG.js → CreditTransactionHistory-CP7ufh7Z.js} +5 -5
  22. package/dist/{CreditTransactionHistory-mcacl2xG.js.map → CreditTransactionHistory-CP7ufh7Z.js.map} +1 -1
  23. package/dist/CustomerCreateSupportTicketForm-C3DSzhJR.js +14 -0
  24. package/dist/{CustomerCreateSupportTicketForm-IefplMnK.js → CustomerCreateSupportTicketForm-Cd3ijzWy.js} +4 -4
  25. package/dist/{CustomerCreateSupportTicketForm-IefplMnK.js.map → CustomerCreateSupportTicketForm-Cd3ijzWy.js.map} +1 -1
  26. package/dist/{CustomerSupportTicketDetailPage-Dengb4Zx.js → CustomerSupportTicketDetailPage-DwpkxpYV.js} +8 -8
  27. package/dist/{CustomerSupportTicketDetailPage-Dengb4Zx.js.map → CustomerSupportTicketDetailPage-DwpkxpYV.js.map} +1 -1
  28. package/dist/CustomerSupportTicketList-BrTX8SUV.js +64 -0
  29. package/dist/CustomerSupportTicketParent-C0uMeN09.js +8 -0
  30. package/dist/{CustomerSupportTicketParent-rl4Ym8oa.js → CustomerSupportTicketParent-D9FuZjPz.js} +2 -2
  31. package/dist/{CustomerSupportTicketParent-rl4Ym8oa.js.map → CustomerSupportTicketParent-D9FuZjPz.js.map} +1 -1
  32. package/dist/CustomerSupportTicketSuccess-BLSMAjQN.js +12 -0
  33. package/dist/{CustomerSupportTicketSuccess-RQskseXP.js → CustomerSupportTicketSuccess-k3DX9NhV.js} +2 -2
  34. package/dist/{CustomerSupportTicketSuccess-RQskseXP.js.map → CustomerSupportTicketSuccess-k3DX9NhV.js.map} +1 -1
  35. package/dist/{DefaultReferralTeamPage-Be7-RI3s.js → DefaultReferralTeamPage-fS1SlVow.js} +6 -6
  36. package/dist/{DefaultReferralTeamPage-Be7-RI3s.js.map → DefaultReferralTeamPage-fS1SlVow.js.map} +1 -1
  37. package/dist/{EditTeamForm-RBO99ocN.js → EditTeamForm-CETmPEZ7.js} +3 -3
  38. package/dist/{EditTeamForm-RBO99ocN.js.map → EditTeamForm-CETmPEZ7.js.map} +1 -1
  39. package/dist/EditTeamForm-DiZXp6vh.js +12 -0
  40. package/dist/EditTeamMemberForm-BKbWq88S.js +9 -0
  41. package/dist/{EditTeamMemberForm-D9cofrUM.js → EditTeamMemberForm-D6vf9hp-.js} +2 -2
  42. package/dist/{EditTeamMemberForm-D9cofrUM.js.map → EditTeamMemberForm-D6vf9hp-.js.map} +1 -1
  43. package/dist/EditUserPage-DCdj6EYd.js +8 -0
  44. package/dist/{EditUserPage-DGuV8pzp.js → EditUserPage-Dy61CCle.js} +3 -3
  45. package/dist/{EditUserPage-DGuV8pzp.js.map → EditUserPage-Dy61CCle.js.map} +1 -1
  46. package/dist/{EnhancedRefreshTokenHandler-C6tZCcfX.js → EnhancedRefreshTokenHandler-s8wUXtB5.js} +2 -2
  47. package/dist/{EnhancedRefreshTokenHandler-C6tZCcfX.js.map → EnhancedRefreshTokenHandler-s8wUXtB5.js.map} +1 -1
  48. package/dist/{ForgotPassword-DZ-d8rWX.js → ForgotPassword-BykH9B9R.js} +2 -2
  49. package/dist/{ForgotPassword-DZ-d8rWX.js.map → ForgotPassword-BykH9B9R.js.map} +1 -1
  50. package/dist/ForgotPassword-Xb1yVZ6C.js +8 -0
  51. package/dist/{InlineAttachments-DAn_QknY.js → InlineAttachments-Ywf9r3jd.js} +4 -4
  52. package/dist/{InlineAttachments-DAn_QknY.js.map → InlineAttachments-Ywf9r3jd.js.map} +1 -1
  53. package/dist/LoginForm-B5wYdKhY.js +8 -0
  54. package/dist/{LoginForm-DEgTB9RF.js → LoginForm-CjF4NSgM.js} +3 -3
  55. package/dist/{LoginForm-DEgTB9RF.js.map → LoginForm-CjF4NSgM.js.map} +1 -1
  56. package/dist/{Logout-Bb2xe5BM.js → Logout-DmpC8Rwh.js} +3 -3
  57. package/dist/{Logout-Bb2xe5BM.js.map → Logout-DmpC8Rwh.js.map} +1 -1
  58. package/dist/Logout-qyH2t-1a.js +8 -0
  59. package/dist/{MfaSetup-m080C6iX.js → MfaSetup-DCLKIMaS.js} +2 -2
  60. package/dist/{MfaSetup-m080C6iX.js.map → MfaSetup-DCLKIMaS.js.map} +1 -1
  61. package/dist/MfaSetup-DMLXL9fk.js +9 -0
  62. package/dist/MfaVerify-C4xGQZlQ.js +9 -0
  63. package/dist/{MfaVerify-D8Ch-8hN.js → MfaVerify-Dm2Yc0Da.js} +3 -3
  64. package/dist/{MfaVerify-D8Ch-8hN.js.map → MfaVerify-Dm2Yc0Da.js.map} +1 -1
  65. package/dist/{ResetPassword-DflPd8Qg.js → ResetPassword-iVcY7eBY.js} +2 -2
  66. package/dist/{ResetPassword-DflPd8Qg.js.map → ResetPassword-iVcY7eBY.js.map} +1 -1
  67. package/dist/ResetPassword-ulR2HviU.js +8 -0
  68. package/dist/{SavedFiltersPage-ey8wOr0T.js → SavedFiltersPage-CTLpYU2c.js} +50 -50
  69. package/dist/{SavedFiltersPage-ey8wOr0T.js.map → SavedFiltersPage-CTLpYU2c.js.map} +1 -1
  70. package/dist/Signup-D4xILUym.js +10 -0
  71. package/dist/{Signup-KuiKHB4h.js → Signup-D6vnyS4w.js} +28 -28
  72. package/dist/Signup-D6vnyS4w.js.map +1 -0
  73. package/dist/{SignupRequirementsPage-CwnsnQKb.js → SignupRequirementsPage-BnOkXd7w.js} +6 -6
  74. package/dist/{SignupRequirementsPage-CwnsnQKb.js.map → SignupRequirementsPage-BnOkXd7w.js.map} +1 -1
  75. package/dist/StaffCreateSupportTicketForm-BnpxlQaG.js +14 -0
  76. package/dist/{StaffCreateSupportTicketForm-75Bo0jdz.js → StaffCreateSupportTicketForm-gPZizMKW.js} +6 -6
  77. package/dist/{StaffCreateSupportTicketForm-75Bo0jdz.js.map → StaffCreateSupportTicketForm-gPZizMKW.js.map} +1 -1
  78. package/dist/{StaffSupportTicketDetailPage-6VyPNdw7.js → StaffSupportTicketDetailPage-DUqLTHVT.js} +8 -8
  79. package/dist/{StaffSupportTicketDetailPage-6VyPNdw7.js.map → StaffSupportTicketDetailPage-DUqLTHVT.js.map} +1 -1
  80. package/dist/StaffSupportTicketList-Qp0vQw8X.js +64 -0
  81. package/dist/{StaffSupportTicketParent-DPvdLUii.js → StaffSupportTicketParent-CZllER18.js} +2 -2
  82. package/dist/{StaffSupportTicketParent-DPvdLUii.js.map → StaffSupportTicketParent-CZllER18.js.map} +1 -1
  83. package/dist/StaffSupportTicketParent-D4FKQAmp.js +8 -0
  84. package/dist/StaffSupportTicketSuccess-BvwrpoAb.js +12 -0
  85. package/dist/{StaffSupportTicketSuccess-BYoBXx1i.js → StaffSupportTicketSuccess-C9vqsC51.js} +2 -2
  86. package/dist/{StaffSupportTicketSuccess-BYoBXx1i.js.map → StaffSupportTicketSuccess-C9vqsC51.js.map} +1 -1
  87. package/dist/{SupportStaffPage-CLxWU628.js → SupportStaffPage--vinFIlV.js} +6 -6
  88. package/dist/{SupportStaffPage-CLxWU628.js.map → SupportStaffPage--vinFIlV.js.map} +1 -1
  89. package/dist/{SupportTicketMaintenancePage-B07avInx.js → SupportTicketMaintenancePage-C-BWD49g.js} +5 -5
  90. package/dist/{SupportTicketMaintenancePage-B07avInx.js.map → SupportTicketMaintenancePage-C-BWD49g.js.map} +1 -1
  91. package/dist/TeamAttachmentsTab-CnAvlIbn.js +64 -0
  92. package/dist/{TeamHistoryTab-CxzA4u_G.js → TeamHistoryTab-5kNQ_XAq.js} +3 -3
  93. package/dist/{TeamHistoryTab-CxzA4u_G.js.map → TeamHistoryTab-5kNQ_XAq.js.map} +1 -1
  94. package/dist/TeamHistoryTab-CBWeRKXM.js +6 -0
  95. package/dist/{TeamList-DXQj_Omo.js → TeamList-C0Mbkbja.js} +4 -4
  96. package/dist/{TeamList-DXQj_Omo.js.map → TeamList-C0Mbkbja.js.map} +1 -1
  97. package/dist/TeamList-Fb6EfybL.js +8 -0
  98. package/dist/{TeamMemberList-BYUANoBg.js → TeamMemberList-DyfXcR6F.js} +4 -4
  99. package/dist/{TeamMemberList-BYUANoBg.js.map → TeamMemberList-DyfXcR6F.js.map} +1 -1
  100. package/dist/TeamMemberList-X2hzYZFT.js +7 -0
  101. package/dist/{TeamMemberParent-DmYcHU3n.js → TeamMemberParent-2zISixbT.js} +3 -3
  102. package/dist/{TeamMemberParent-DmYcHU3n.js.map → TeamMemberParent-2zISixbT.js.map} +1 -1
  103. package/dist/TeamMemberParent-DKxE1ziP.js +10 -0
  104. package/dist/{TeamNotesTab-Cego-QT3.js → TeamNotesTab-BREl3Vr0.js} +5 -5
  105. package/dist/{TeamNotesTab-Cego-QT3.js.map → TeamNotesTab-BREl3Vr0.js.map} +1 -1
  106. package/dist/TeamNotesTab-DxMN3WZo.js +8 -0
  107. package/dist/{TeamParent-6JhqsYaO.js → TeamParent-COSOJ-ZZ.js} +3 -3
  108. package/dist/{TeamParent-6JhqsYaO.js.map → TeamParent-COSOJ-ZZ.js.map} +1 -1
  109. package/dist/TeamParent-XgBD3twV.js +11 -0
  110. package/dist/{TimelineNoteInput-P3ycD18j.js → TimelineNoteInput-CrivEMUP.js} +2 -2
  111. package/dist/{TimelineNoteInput-P3ycD18j.js.map → TimelineNoteInput-CrivEMUP.js.map} +1 -1
  112. package/dist/{UserListPage-DelzxCID.js → UserListPage-CCl0K7Gk.js} +3 -3
  113. package/dist/{UserListPage-DelzxCID.js.map → UserListPage-CCl0K7Gk.js.map} +1 -1
  114. package/dist/UserListPage-CYkvaHwL.js +5 -0
  115. package/dist/UserProfilePage-BMmz7SGl.js +8 -0
  116. package/dist/{UserProfilePage-BYitd7QV.js → UserProfilePage-D7FNmca1.js} +4 -4
  117. package/dist/{UserProfilePage-BYitd7QV.js.map → UserProfilePage-D7FNmca1.js.map} +1 -1
  118. package/dist/{VerifyEmail-Cy2s4yP0.js → VerifyEmail-KCti4rzf.js} +5 -5
  119. package/dist/{VerifyEmail-Cy2s4yP0.js.map → VerifyEmail-KCti4rzf.js.map} +1 -1
  120. package/dist/VerifyEmail-Xd31Com7.js +10 -0
  121. package/dist/ViewTeam-BXSq4M0V.js +8 -0
  122. package/dist/{ViewTeam-ByZdYEJG.js → ViewTeam-DGaNNd8N.js} +2 -2
  123. package/dist/{ViewTeam-ByZdYEJG.js.map → ViewTeam-DGaNNd8N.js.map} +1 -1
  124. package/dist/{ViewTeamMember-DqWZ3F_h.js → ViewTeamMember-Dsl2GKI1.js} +2 -2
  125. package/dist/{ViewTeamMember-DqWZ3F_h.js.map → ViewTeamMember-Dsl2GKI1.js.map} +1 -1
  126. package/dist/ViewTeamMember-bmry5QZ0.js +7 -0
  127. package/dist/{customerSupportTicketRoutes-DvfXGaSC.js → customerSupportTicketRoutes-BjqjQc9A.js} +8 -8
  128. package/dist/{customerSupportTicketRoutes-DvfXGaSC.js.map → customerSupportTicketRoutes-BjqjQc9A.js.map} +1 -1
  129. package/dist/index.d.ts +1015 -980
  130. package/dist/index.js +50 -50
  131. package/dist/{saved_filter-erjEgsdK.js → saved_filter-DXWnU4Zb.js} +5 -5
  132. package/dist/{saved_filter-erjEgsdK.js.map → saved_filter-DXWnU4Zb.js.map} +1 -1
  133. package/dist/{src-DSF_hIBe.js → src-B7oHTH_y.js} +215 -163
  134. package/dist/src-B7oHTH_y.js.map +1 -0
  135. package/dist/{staffSupportTicketRoutes-73ceKhL-.js → staffSupportTicketRoutes-CeuduGmG.js} +8 -8
  136. package/dist/{staffSupportTicketRoutes-73ceKhL-.js.map → staffSupportTicketRoutes-CeuduGmG.js.map} +1 -1
  137. package/dist/{teamRoutes-CSBq1DNq.js → teamRoutes-A7plQKi0.js} +11 -11
  138. package/dist/{teamRoutes-CSBq1DNq.js.map → teamRoutes-A7plQKi0.js.map} +1 -1
  139. package/dist/{team_memberRoutes-BgjY9Kwq.js → team_memberRoutes-mO1f-Y4o.js} +7 -7
  140. package/dist/{team_memberRoutes-BgjY9Kwq.js.map → team_memberRoutes-mO1f-Y4o.js.map} +1 -1
  141. package/dist/useAuthFlowNextStep-zlvxflBZ.js +64 -0
  142. package/dist/useAuthFlowNextStep-zlvxflBZ.js.map +1 -0
  143. package/dist/{useEmailVerificationChannel-C76Gnyi1.js → useEmailVerificationChannel-DYiMSAES.js} +2 -2
  144. package/dist/{useEmailVerificationChannel-C76Gnyi1.js.map → useEmailVerificationChannel-DYiMSAES.js.map} +1 -1
  145. package/dist/{useMutation-BLNuJoYl.js → useMutation-BXSu7_-s.js} +6 -4
  146. package/dist/useMutation-BXSu7_-s.js.map +1 -0
  147. package/dist/{useQuery-BzUGEOj0.js → useQuery-DownvLRA.js} +4 -4
  148. package/dist/{useQuery-BzUGEOj0.js.map → useQuery-DownvLRA.js.map} +1 -1
  149. package/dist/{useQueryCache-alzaRWEb.js → useQueryCache-CUTrwJWX.js} +2 -2
  150. package/dist/{useQueryCache-alzaRWEb.js.map → useQueryCache-CUTrwJWX.js.map} +1 -1
  151. package/dist/{useRpcAuth-CJtq1dqM.js → useRpcAuth-BFdprNWb.js} +5 -7
  152. package/dist/useRpcAuth-BFdprNWb.js.map +1 -0
  153. package/dist/{userAuthorized-3RiCDXxr.js → userAuthorized-qmzUYDa-.js} +2 -2
  154. package/dist/{userAuthorized-3RiCDXxr.js.map → userAuthorized-qmzUYDa-.js.map} +1 -1
  155. package/package.json +2 -2
  156. package/dist/ChangePasswordPage-D1LGJ02W.js +0 -7
  157. package/dist/ConsentRequired-Bhkxu0rv.js.map +0 -1
  158. package/dist/CreateTeamForm-BHgTTHAk.js +0 -12
  159. package/dist/CreateTeamMemberForm-CayF2tIJ.js +0 -12
  160. package/dist/CreateUserPage-C9uOeYDJ.js +0 -7
  161. package/dist/CreditBalanceDashboard-DZQqekKa.js +0 -13
  162. package/dist/CreditManagement-ByFH6IHV.js +0 -13
  163. package/dist/CustomerCreateSupportTicketForm-CroUyX15.js +0 -14
  164. package/dist/CustomerSupportTicketList-CpOaBgNr.js +0 -64
  165. package/dist/CustomerSupportTicketParent-D3Gj4Hel.js +0 -8
  166. package/dist/CustomerSupportTicketSuccess-BPUwEn4h.js +0 -12
  167. package/dist/EditTeamForm-KX2cNn24.js +0 -12
  168. package/dist/EditTeamMemberForm-Bh6zVNyJ.js +0 -9
  169. package/dist/EditUserPage-AcRFhChk.js +0 -8
  170. package/dist/ExternalLinkIcon-BKVV5Gjm.js +0 -34
  171. package/dist/ExternalLinkIcon-BKVV5Gjm.js.map +0 -1
  172. package/dist/ForgotPassword-LnjRUIY7.js +0 -8
  173. package/dist/LoginForm-D-gfB2hS.js +0 -8
  174. package/dist/Logout-Ctq-a1GS.js +0 -8
  175. package/dist/MfaSetup-6E6apXWC.js +0 -9
  176. package/dist/MfaVerify-C95WB9v2.js +0 -9
  177. package/dist/ResetPassword-9DFz-Qt3.js +0 -8
  178. package/dist/Signup-C052ykf5.js +0 -9
  179. package/dist/Signup-KuiKHB4h.js.map +0 -1
  180. package/dist/StaffCreateSupportTicketForm-DYEddYii.js +0 -14
  181. package/dist/StaffSupportTicketList-CxV6u2gF.js +0 -64
  182. package/dist/StaffSupportTicketParent-Dyybqx74.js +0 -8
  183. package/dist/StaffSupportTicketSuccess-FfnJXc_k.js +0 -12
  184. package/dist/TeamAttachmentsTab-D0DOmdnr.js +0 -64
  185. package/dist/TeamHistoryTab-wRpRizDE.js +0 -6
  186. package/dist/TeamList-hmP44hfw.js +0 -8
  187. package/dist/TeamMemberList-B16SuLwM.js +0 -7
  188. package/dist/TeamMemberParent-BJl8nBmP.js +0 -10
  189. package/dist/TeamNotesTab-BQN9niw-.js +0 -8
  190. package/dist/TeamParent-BI9ItLoY.js +0 -11
  191. package/dist/UserListPage-9jhUu3TH.js +0 -5
  192. package/dist/UserProfilePage-Dmxp7oqP.js +0 -8
  193. package/dist/VerifyEmail-DBKMZJMx.js +0 -10
  194. package/dist/ViewTeam-DEOe7wqT.js +0 -8
  195. package/dist/ViewTeamMember-B5U8kZBw.js +0 -7
  196. package/dist/src-DSF_hIBe.js.map +0 -1
  197. package/dist/useMutation-BLNuJoYl.js.map +0 -1
  198. package/dist/useRpcAuth-CJtq1dqM.js.map +0 -1
@@ -1,5 +1,5 @@
1
- import { o as createLastUsedPresetGuard } from "./saved_filter-erjEgsdK.js";
2
- import { c as userAuthenticated, s as staffOnly } from "./userAuthorized-3RiCDXxr.js";
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-CxV6u2gF.js"),
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-DYEddYii.js"),
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-FfnJXc_k.js"),
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-Dyybqx74.js"),
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-6VyPNdw7.js"),
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-73ceKhL-.js.map
135
+ //# sourceMappingURL=staffSupportTicketRoutes-CeuduGmG.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"staffSupportTicketRoutes-73ceKhL-.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
+ {"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-3RiCDXxr.js";
2
- import { n as teamMemberRoutes, t as teamMemberPaths } from "./team_memberRoutes-BgjY9Kwq.js";
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-hmP44hfw.js"),
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-BHgTTHAk.js"),
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-BI9ItLoY.js"),
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-DEOe7wqT.js"),
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-KX2cNn24.js"),
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-BQN9niw-.js"),
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-D0DOmdnr.js"),
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-wRpRizDE.js"),
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-CSBq1DNq.js.map
192
+ //# sourceMappingURL=teamRoutes-A7plQKi0.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"teamRoutes-CSBq1DNq.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
+ {"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-3RiCDXxr.js";
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-B16SuLwM.js"),
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-CayF2tIJ.js"),
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-BJl8nBmP.js"),
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-B5U8kZBw.js"),
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-Bh6zVNyJ.js"),
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-BgjY9Kwq.js.map
84
+ //# sourceMappingURL=team_memberRoutes-mO1f-Y4o.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"team_memberRoutes-BgjY9Kwq.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"}
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"}
@@ -1,4 +1,4 @@
1
- import { o as useUserSessionStore } from "./useRpcAuth-CJtq1dqM.js";
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-C76Gnyi1.js.map
37
+ //# sourceMappingURL=useEmailVerificationChannel-DYiMSAES.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useEmailVerificationChannel-C76Gnyi1.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
+ {"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-CJtq1dqM.js";
2
- import { r as getRefreshTokenHandler } from "./EnhancedRefreshTokenHandler-C6tZCcfX.js";
3
- import { t as queryCache } from "./useQueryCache-alzaRWEb.js";
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-BLNuJoYl.js.map
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-CJtq1dqM.js";
2
- import { r as getRefreshTokenHandler } from "./EnhancedRefreshTokenHandler-C6tZCcfX.js";
3
- import { t as queryCache } from "./useQueryCache-alzaRWEb.js";
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-BzUGEOj0.js.map
108
+ //# sourceMappingURL=useQuery-DownvLRA.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useQuery-BzUGEOj0.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
+ {"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-CJtq1dqM.js";
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-alzaRWEb.js.map
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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"}