wcz-layout 6.7.2 → 9.4.1

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 (271) hide show
  1. package/dist/Approval-Co6D1BNq.mjs +194 -0
  2. package/dist/Approval-Co6D1BNq.mjs.map +1 -0
  3. package/dist/DialogsContext-DLqA8RJ_.mjs +7 -0
  4. package/dist/DialogsContext-DLqA8RJ_.mjs.map +1 -0
  5. package/dist/Email-BzQQkbe9.mjs +20 -0
  6. package/dist/Email-BzQQkbe9.mjs.map +1 -0
  7. package/dist/FileMeta-DDqUju1Y.mjs +19 -0
  8. package/dist/FileMeta-DDqUju1Y.mjs.map +1 -0
  9. package/dist/FileMeta-ILLTOjaM.d.mts +20 -0
  10. package/dist/NotificationContext-CgwUOeW0.mjs +7 -0
  11. package/dist/NotificationContext-CgwUOeW0.mjs.map +1 -0
  12. package/dist/QueryClientParam-CzaM3akD.d.mts +11 -0
  13. package/dist/RouterListItemButton-owZVvuC_.mjs +78 -0
  14. package/dist/RouterListItemButton-owZVvuC_.mjs.map +1 -0
  15. package/dist/User-1gKoYJvW.d.mts +12 -0
  16. package/dist/auth.d.mts +25 -0
  17. package/dist/auth.mjs +88 -0
  18. package/dist/auth.mjs.map +1 -0
  19. package/dist/authMiddleware--HdlhhZO.mjs +78 -0
  20. package/dist/authMiddleware--HdlhhZO.mjs.map +1 -0
  21. package/dist/components.d.mts +107 -0
  22. package/dist/components.mjs +1500 -0
  23. package/dist/components.mjs.map +1 -0
  24. package/dist/data/client.d.mts +3217 -0
  25. package/dist/data/client.mjs +187 -0
  26. package/dist/data/client.mjs.map +1 -0
  27. package/dist/data/server.d.mts +19 -0
  28. package/dist/data/server.mjs +16 -0
  29. package/dist/data/server.mjs.map +1 -0
  30. package/dist/entra-s4ZjHq5o.mjs +101 -0
  31. package/dist/entra-s4ZjHq5o.mjs.map +1 -0
  32. package/dist/env-CoveIivr.mjs +30 -0
  33. package/dist/env-CoveIivr.mjs.map +1 -0
  34. package/dist/file-C5-a_6W6.mjs +148 -0
  35. package/dist/file-C5-a_6W6.mjs.map +1 -0
  36. package/dist/file-DM1x40eJ.mjs +179 -0
  37. package/dist/file-DM1x40eJ.mjs.map +1 -0
  38. package/dist/hooks.d.mts +226 -0
  39. package/dist/hooks.mjs +1087 -0
  40. package/dist/hooks.mjs.map +1 -0
  41. package/dist/index.d.mts +48 -0
  42. package/dist/index.mjs +1940 -0
  43. package/dist/index.mjs.map +1 -0
  44. package/dist/middleware.d.mts +46 -0
  45. package/dist/middleware.mjs +27 -0
  46. package/dist/middleware.mjs.map +1 -0
  47. package/dist/models.d.mts +598 -0
  48. package/dist/models.mjs +74 -0
  49. package/dist/models.mjs.map +1 -0
  50. package/dist/msalServer-CkNOOjjH.mjs +44 -0
  51. package/dist/msalServer-CkNOOjjH.mjs.map +1 -0
  52. package/dist/peoplesoft-DIe8H1Nu.mjs +240 -0
  53. package/dist/peoplesoft-DIe8H1Nu.mjs.map +1 -0
  54. package/dist/peoplesoft-gKd-Jh5L.d.mts +1219 -0
  55. package/dist/useDialogs-BUzVrTSP.mjs +248 -0
  56. package/dist/useDialogs-BUzVrTSP.mjs.map +1 -0
  57. package/dist/user-Cen43mlr.d.mts +19 -0
  58. package/dist/utils-2XiozDlV.mjs +156 -0
  59. package/dist/utils-2XiozDlV.mjs.map +1 -0
  60. package/dist/utils-BuWEQOuy.d.mts +65 -0
  61. package/dist/utils.d.mts +5 -0
  62. package/dist/utils.mjs +5 -0
  63. package/dist/vite.d.mts +7 -0
  64. package/dist/vite.mjs +182 -0
  65. package/dist/vite.mjs.map +1 -0
  66. package/package.json +129 -62
  67. package/skills/client-db/SKILL.md +107 -0
  68. package/skills/data-grid/SKILL.md +142 -0
  69. package/skills/db-schema/SKILL.md +71 -0
  70. package/skills/dialogs/SKILL.md +79 -0
  71. package/skills/forms/SKILL.md +82 -0
  72. package/skills/general/SKILL.md +17 -0
  73. package/skills/notifications/SKILL.md +43 -0
  74. package/skills/routing/SKILL.md +128 -0
  75. package/skills/server-functions/SKILL.md +113 -0
  76. package/skills/services/SKILL.md +29 -0
  77. package/skills/services/docs/approval.md +256 -0
  78. package/skills/services/docs/email.md +32 -0
  79. package/skills/services/docs/file.md +83 -0
  80. package/skills/services/docs/peoplesoft.md +110 -0
  81. package/skills/start/SKILL.md +46 -0
  82. package/skills/start/steps/01-git-setup.md +11 -0
  83. package/skills/start/steps/02-project-name-setup.md +14 -0
  84. package/skills/start/steps/03-apm-setup.md +208 -0
  85. package/skills/start/steps/04-database-setup.md +37 -0
  86. package/skills/start/steps/05-entra-setup.md +59 -0
  87. package/skills/start/steps/06-vault-setup.md +50 -0
  88. package/skills/start/steps/07-generate-favicon.md +10 -0
  89. package/skills/start/steps/08-commit.md +15 -0
  90. package/dist/src/components/Layout.d.ts +0 -16
  91. package/dist/src/components/Layout.js +0 -122
  92. package/dist/src/components/Layout.js.map +0 -1
  93. package/dist/src/components/dataGrid/ChipInputCell.d.ts +0 -9
  94. package/dist/src/components/dataGrid/ChipInputCell.js +0 -17
  95. package/dist/src/components/dataGrid/ChipInputCell.js.map +0 -1
  96. package/dist/src/components/dataGrid/EditableColumnHeader.d.ts +0 -2
  97. package/dist/src/components/dataGrid/EditableColumnHeader.js +0 -7
  98. package/dist/src/components/dataGrid/EditableColumnHeader.js.map +0 -1
  99. package/dist/src/components/dataGrid/GridToolbar.d.ts +0 -8
  100. package/dist/src/components/dataGrid/GridToolbar.js +0 -40
  101. package/dist/src/components/dataGrid/GridToolbar.js.map +0 -1
  102. package/dist/src/components/dataGrid/TableContainer.d.ts +0 -3
  103. package/dist/src/components/dataGrid/TableContainer.js +0 -32
  104. package/dist/src/components/dataGrid/TableContainer.js.map +0 -1
  105. package/dist/src/components/form/FormAutocomplete.d.ts +0 -7
  106. package/dist/src/components/form/FormAutocomplete.js +0 -10
  107. package/dist/src/components/form/FormAutocomplete.js.map +0 -1
  108. package/dist/src/components/form/FormCheckbox.d.ts +0 -7
  109. package/dist/src/components/form/FormCheckbox.js +0 -11
  110. package/dist/src/components/form/FormCheckbox.js.map +0 -1
  111. package/dist/src/components/form/FormDatePicker.d.ts +0 -9
  112. package/dist/src/components/form/FormDatePicker.js +0 -19
  113. package/dist/src/components/form/FormDatePicker.js.map +0 -1
  114. package/dist/src/components/form/FormDateTimePicker.d.ts +0 -9
  115. package/dist/src/components/form/FormDateTimePicker.js +0 -19
  116. package/dist/src/components/form/FormDateTimePicker.js.map +0 -1
  117. package/dist/src/components/form/FormNumberField.d.ts +0 -12
  118. package/dist/src/components/form/FormNumberField.js +0 -12
  119. package/dist/src/components/form/FormNumberField.js.map +0 -1
  120. package/dist/src/components/form/FormRadioGroup.d.ts +0 -13
  121. package/dist/src/components/form/FormRadioGroup.js +0 -11
  122. package/dist/src/components/form/FormRadioGroup.js.map +0 -1
  123. package/dist/src/components/form/FormSlider.d.ts +0 -7
  124. package/dist/src/components/form/FormSlider.js +0 -11
  125. package/dist/src/components/form/FormSlider.js.map +0 -1
  126. package/dist/src/components/form/FormSubmitButton.d.ts +0 -5
  127. package/dist/src/components/form/FormSubmitButton.js +0 -13
  128. package/dist/src/components/form/FormSubmitButton.js.map +0 -1
  129. package/dist/src/components/form/FormSwitch.d.ts +0 -7
  130. package/dist/src/components/form/FormSwitch.js +0 -11
  131. package/dist/src/components/form/FormSwitch.js.map +0 -1
  132. package/dist/src/components/form/FormTextField.d.ts +0 -7
  133. package/dist/src/components/form/FormTextField.js +0 -11
  134. package/dist/src/components/form/FormTextField.js.map +0 -1
  135. package/dist/src/components/layout/AccountMenu.d.ts +0 -9
  136. package/dist/src/components/layout/AccountMenu.js +0 -44
  137. package/dist/src/components/layout/AccountMenu.js.map +0 -1
  138. package/dist/src/components/layout/DevelopmentBanner.d.ts +0 -7
  139. package/dist/src/components/layout/DevelopmentBanner.js +0 -29
  140. package/dist/src/components/layout/DevelopmentBanner.js.map +0 -1
  141. package/dist/src/components/layout/ErrorPage.d.ts +0 -2
  142. package/dist/src/components/layout/ErrorPage.js +0 -25
  143. package/dist/src/components/layout/ErrorPage.js.map +0 -1
  144. package/dist/src/components/layout/LayoutDialog.d.ts +0 -12
  145. package/dist/src/components/layout/LayoutDialog.js +0 -12
  146. package/dist/src/components/layout/LayoutDialog.js.map +0 -1
  147. package/dist/src/components/layout/LayoutSnackbar.d.ts +0 -8
  148. package/dist/src/components/layout/LayoutSnackbar.js +0 -25
  149. package/dist/src/components/layout/LayoutSnackbar.js.map +0 -1
  150. package/dist/src/components/layout/NavigationDrawer.d.ts +0 -11
  151. package/dist/src/components/layout/NavigationDrawer.js +0 -70
  152. package/dist/src/components/layout/NavigationDrawer.js.map +0 -1
  153. package/dist/src/components/layout/NotificationMenu.d.ts +0 -8
  154. package/dist/src/components/layout/NotificationMenu.js +0 -26
  155. package/dist/src/components/layout/NotificationMenu.js.map +0 -1
  156. package/dist/src/components/layout/TypographyWithIcon.d.ts +0 -7
  157. package/dist/src/components/layout/TypographyWithIcon.js +0 -22
  158. package/dist/src/components/layout/TypographyWithIcon.js.map +0 -1
  159. package/dist/src/components/layout/Unauthorized.d.ts +0 -2
  160. package/dist/src/components/layout/Unauthorized.js +0 -26
  161. package/dist/src/components/layout/Unauthorized.js.map +0 -1
  162. package/dist/src/contexts/LayoutContext.d.ts +0 -40
  163. package/dist/src/contexts/LayoutContext.js +0 -60
  164. package/dist/src/contexts/LayoutContext.js.map +0 -1
  165. package/dist/src/contexts/UserContext.d.ts +0 -24
  166. package/dist/src/contexts/UserContext.js +0 -55
  167. package/dist/src/contexts/UserContext.js.map +0 -1
  168. package/dist/src/hooks/FormHooks.d.ts +0 -46
  169. package/dist/src/hooks/FormHooks.js +0 -31
  170. package/dist/src/hooks/FormHooks.js.map +0 -1
  171. package/dist/src/hooks/UseSnackbar.d.ts +0 -10
  172. package/dist/src/hooks/UseSnackbar.js +0 -23
  173. package/dist/src/hooks/UseSnackbar.js.map +0 -1
  174. package/dist/src/hooks/UseUser.d.ts +0 -10
  175. package/dist/src/hooks/UseUser.js +0 -25
  176. package/dist/src/hooks/UseUser.js.map +0 -1
  177. package/dist/src/index.d.ts +0 -20
  178. package/dist/src/index.js +0 -15
  179. package/dist/src/index.js.map +0 -1
  180. package/dist/src/models/Error.d.ts +0 -6
  181. package/dist/src/models/Error.js +0 -2
  182. package/dist/src/models/Error.js.map +0 -1
  183. package/dist/src/models/KeycloakSettings.d.ts +0 -8
  184. package/dist/src/models/KeycloakSettings.js +0 -2
  185. package/dist/src/models/KeycloakSettings.js.map +0 -1
  186. package/dist/src/models/LayoutPaletteColorOptions.d.ts +0 -6
  187. package/dist/src/models/LayoutPaletteColorOptions.js +0 -2
  188. package/dist/src/models/LayoutPaletteColorOptions.js.map +0 -1
  189. package/dist/src/models/LayoutRoute.d.ts +0 -14
  190. package/dist/src/models/LayoutRoute.js +0 -2
  191. package/dist/src/models/LayoutRoute.js.map +0 -1
  192. package/dist/src/models/Notification.d.ts +0 -9
  193. package/dist/src/models/Notification.js +0 -2
  194. package/dist/src/models/Notification.js.map +0 -1
  195. package/dist/src/models/PeoplesoftDepartment.d.ts +0 -14
  196. package/dist/src/models/PeoplesoftDepartment.js +0 -2
  197. package/dist/src/models/PeoplesoftDepartment.js.map +0 -1
  198. package/dist/src/models/PeoplesoftEmployee.d.ts +0 -34
  199. package/dist/src/models/PeoplesoftEmployee.js +0 -2
  200. package/dist/src/models/PeoplesoftEmployee.js.map +0 -1
  201. package/dist/src/models/Snackbar.d.ts +0 -15
  202. package/dist/src/models/Snackbar.js +0 -2
  203. package/dist/src/models/Snackbar.js.map +0 -1
  204. package/dist/src/models/User.d.ts +0 -27
  205. package/dist/src/models/User.js +0 -11
  206. package/dist/src/models/User.js.map +0 -1
  207. package/dist/src/models/types/EmployeeCategoryGroup.d.ts +0 -1
  208. package/dist/src/models/types/EmployeeCategoryGroup.js +0 -2
  209. package/dist/src/models/types/EmployeeCategoryGroup.js.map +0 -1
  210. package/dist/src/models/types/EmployeeStatus.d.ts +0 -1
  211. package/dist/src/models/types/EmployeeStatus.js +0 -2
  212. package/dist/src/models/types/EmployeeStatus.js.map +0 -1
  213. package/dist/src/utils/Auth.d.ts +0 -12
  214. package/dist/src/utils/Auth.js +0 -49
  215. package/dist/src/utils/Auth.js.map +0 -1
  216. package/dist/src/utils/Fetches.d.ts +0 -5
  217. package/dist/src/utils/Fetches.js +0 -66
  218. package/dist/src/utils/Fetches.js.map +0 -1
  219. package/dist/src/utils/FormUtils.d.ts +0 -7
  220. package/dist/src/utils/FormUtils.js +0 -9
  221. package/dist/src/utils/FormUtils.js.map +0 -1
  222. package/dist/src/utils/Helpers.d.ts +0 -11
  223. package/dist/src/utils/Helpers.js +0 -26
  224. package/dist/src/utils/Helpers.js.map +0 -1
  225. package/dist/tsconfig.tsbuildinfo +0 -1
  226. package/src/components/Layout.tsx +0 -183
  227. package/src/components/dataGrid/ChipInputCell.tsx +0 -31
  228. package/src/components/dataGrid/EditableColumnHeader.tsx +0 -7
  229. package/src/components/dataGrid/GridToolbar.tsx +0 -63
  230. package/src/components/dataGrid/TableContainer.tsx +0 -39
  231. package/src/components/form/FormAutocomplete.tsx +0 -34
  232. package/src/components/form/FormCheckbox.tsx +0 -32
  233. package/src/components/form/FormDatePicker.tsx +0 -34
  234. package/src/components/form/FormDateTimePicker.tsx +0 -34
  235. package/src/components/form/FormNumberField.tsx +0 -33
  236. package/src/components/form/FormRadioGroup.tsx +0 -43
  237. package/src/components/form/FormSlider.tsx +0 -28
  238. package/src/components/form/FormSubmitButton.tsx +0 -29
  239. package/src/components/form/FormSwitch.tsx +0 -32
  240. package/src/components/form/FormTextField.tsx +0 -26
  241. package/src/components/layout/AccountMenu.tsx +0 -160
  242. package/src/components/layout/DevelopmentBanner.tsx +0 -54
  243. package/src/components/layout/ErrorPage.tsx +0 -34
  244. package/src/components/layout/LayoutDialog.tsx +0 -50
  245. package/src/components/layout/LayoutSnackbar.tsx +0 -44
  246. package/src/components/layout/NavigationDrawer.tsx +0 -131
  247. package/src/components/layout/NotificationMenu.tsx +0 -76
  248. package/src/components/layout/TypographyWithIcon.tsx +0 -35
  249. package/src/components/layout/Unauthorized.tsx +0 -37
  250. package/src/contexts/LayoutContext.tsx +0 -127
  251. package/src/contexts/UserContext.tsx +0 -88
  252. package/src/hooks/FormHooks.ts +0 -33
  253. package/src/hooks/UseSnackbar.tsx +0 -28
  254. package/src/hooks/UseUser.tsx +0 -29
  255. package/src/index.ts +0 -27
  256. package/src/models/Error.tsx +0 -6
  257. package/src/models/KeycloakSettings.ts +0 -8
  258. package/src/models/LayoutPaletteColorOptions.tsx +0 -7
  259. package/src/models/LayoutRoute.ts +0 -15
  260. package/src/models/Notification.ts +0 -10
  261. package/src/models/PeoplesoftDepartment.ts +0 -15
  262. package/src/models/PeoplesoftEmployee.ts +0 -35
  263. package/src/models/Snackbar.ts +0 -16
  264. package/src/models/User.ts +0 -13
  265. package/src/models/types/EmployeeCategoryGroup.ts +0 -1
  266. package/src/models/types/EmployeeStatus.ts +0 -1
  267. package/src/utils/Auth.ts +0 -58
  268. package/src/utils/Fetches.ts +0 -83
  269. package/src/utils/FormUtils.ts +0 -22
  270. package/src/utils/Helpers.ts +0 -27
  271. package/tsconfig.json +0 -29
@@ -0,0 +1,187 @@
1
+ import { a as fileQueryOptions, c as updateFileMetaMutationOptions, i as fileMetasQueryOptions, l as uploadFileMutationOptions, n as deleteFileMutationOptions, o as fileThumbnailQueryOptions, r as downloadFileMutationOptions, s as openFileMutationOptions, t as batchDeleteFilesMutationOptions } from "../file-C5-a_6W6.mjs";
2
+ import { C as createApproval, D as withdrawApproval, E as resubmitApproval, S as cancelApproval, T as getApprovals, _ as getPreviousEmployeeIds, a as getActiveEmployees, c as getDepartmentEmployees, d as getEmployeeByEmployeeId, f as getEmployeeGeneralManager, g as getEmployees, h as getEmployeeSupervisor, l as getDepartmentManager, m as getEmployeeSubordinates, o as getCompanyGeneralManager, p as getEmployeeManager, s as getDepartmentById, u as getDepartments, v as searchEmployees, w as getApproval, x as approveApproval } from "../peoplesoft-DIe8H1Nu.mjs";
3
+ import { mutationOptions, queryOptions } from "@tanstack/react-query";
4
+ //#region src/data/client/approval.ts
5
+ const QUERY_KEY$1 = "approval";
6
+ const approvalsQueryOptions = (params) => queryOptions({
7
+ queryKey: [QUERY_KEY$1, params],
8
+ queryFn: () => getApprovals({ data: params })
9
+ });
10
+ const approvalQueryOptions = (params) => queryOptions({
11
+ queryKey: [QUERY_KEY$1, params],
12
+ queryFn: () => getApproval({ data: params })
13
+ });
14
+ const createApprovalMutationOptions = ({ queryClient }) => mutationOptions({
15
+ mutationFn: (data) => createApproval({ data }),
16
+ onSettled: () => queryClient.invalidateQueries({
17
+ queryKey: [QUERY_KEY$1],
18
+ exact: false
19
+ })
20
+ });
21
+ const approveApprovalMutationOptions = ({ queryClient }) => mutationOptions({
22
+ mutationFn: (data) => approveApproval({ data }),
23
+ onSettled: () => queryClient.invalidateQueries({
24
+ queryKey: [QUERY_KEY$1],
25
+ exact: false
26
+ })
27
+ });
28
+ const resubmitApprovalMutationOptions = ({ queryClient }) => mutationOptions({
29
+ mutationFn: (data) => resubmitApproval({ data }),
30
+ onSettled: () => queryClient.invalidateQueries({
31
+ queryKey: [QUERY_KEY$1],
32
+ exact: false
33
+ })
34
+ });
35
+ const withdrawApprovalMutationOptions = ({ queryClient }) => mutationOptions({
36
+ mutationFn: (data) => withdrawApproval({ data }),
37
+ onSettled: () => queryClient.invalidateQueries({
38
+ queryKey: [QUERY_KEY$1],
39
+ exact: false
40
+ })
41
+ });
42
+ const cancelApprovalMutationOptions = ({ queryClient }) => mutationOptions({
43
+ mutationFn: (data) => cancelApproval({ data }),
44
+ onSettled: () => queryClient.invalidateQueries({
45
+ queryKey: [QUERY_KEY$1],
46
+ exact: false
47
+ })
48
+ });
49
+ //#endregion
50
+ //#region src/data/client/peoplesoft.ts
51
+ const QUERY_KEY = "peoplesoft";
52
+ const DAY = 1e3 * 60 * 60 * 24;
53
+ const baseOptions = {
54
+ staleTime: DAY,
55
+ gcTime: DAY,
56
+ refetchOnWindowFocus: false
57
+ };
58
+ const searchEmployeesQueryOptions = (params) => queryOptions({
59
+ queryKey: [
60
+ QUERY_KEY,
61
+ "employee",
62
+ "search",
63
+ params
64
+ ],
65
+ queryFn: () => searchEmployees({ data: params }),
66
+ ...baseOptions
67
+ });
68
+ const employeesQueryOptions = () => queryOptions({
69
+ queryKey: [QUERY_KEY, "employee"],
70
+ queryFn: () => getEmployees(),
71
+ ...baseOptions
72
+ });
73
+ const activeEmployeesQueryOptions = () => queryOptions({
74
+ queryKey: [
75
+ QUERY_KEY,
76
+ "employee",
77
+ "active"
78
+ ],
79
+ queryFn: () => getActiveEmployees(),
80
+ ...baseOptions
81
+ });
82
+ const employeeByEmployeeIdQueryOptions = (params) => queryOptions({
83
+ queryKey: [
84
+ QUERY_KEY,
85
+ "employee",
86
+ params
87
+ ],
88
+ queryFn: () => getEmployeeByEmployeeId({ data: params }),
89
+ ...baseOptions
90
+ });
91
+ const previousEmployeeIdsQueryOptions = () => queryOptions({
92
+ queryKey: [
93
+ QUERY_KEY,
94
+ "employee",
95
+ "previousIds"
96
+ ],
97
+ queryFn: () => getPreviousEmployeeIds(),
98
+ ...baseOptions
99
+ });
100
+ const employeeSupervisorQueryOptions = (params) => queryOptions({
101
+ queryKey: [
102
+ QUERY_KEY,
103
+ "employee",
104
+ "supervisor",
105
+ params
106
+ ],
107
+ queryFn: () => getEmployeeSupervisor({ data: params }),
108
+ ...baseOptions
109
+ });
110
+ const employeeSubordinatesQueryOptions = (params) => queryOptions({
111
+ queryKey: [
112
+ QUERY_KEY,
113
+ "employee",
114
+ "subordinates",
115
+ params
116
+ ],
117
+ queryFn: () => getEmployeeSubordinates({ data: params }),
118
+ ...baseOptions
119
+ });
120
+ const employeeManagerQueryOptions = (params) => queryOptions({
121
+ queryKey: [
122
+ QUERY_KEY,
123
+ "employee",
124
+ "manager",
125
+ params
126
+ ],
127
+ queryFn: () => getEmployeeManager({ data: params }),
128
+ ...baseOptions
129
+ });
130
+ const employeeGeneralManagerQueryOptions = (params) => queryOptions({
131
+ queryKey: [
132
+ QUERY_KEY,
133
+ "employee",
134
+ "generalManager",
135
+ params
136
+ ],
137
+ queryFn: () => getEmployeeGeneralManager({ data: params }),
138
+ ...baseOptions
139
+ });
140
+ const departmentsQueryOptions = () => queryOptions({
141
+ queryKey: [QUERY_KEY, "department"],
142
+ queryFn: () => getDepartments(),
143
+ ...baseOptions
144
+ });
145
+ const departmentByIdQueryOptions = (params) => queryOptions({
146
+ queryKey: [
147
+ QUERY_KEY,
148
+ "department",
149
+ params
150
+ ],
151
+ queryFn: () => getDepartmentById({ data: params }),
152
+ ...baseOptions
153
+ });
154
+ const departmentManagerQueryOptions = (params) => queryOptions({
155
+ queryKey: [
156
+ QUERY_KEY,
157
+ "department",
158
+ "manager",
159
+ params
160
+ ],
161
+ queryFn: () => getDepartmentManager({ data: params }),
162
+ ...baseOptions
163
+ });
164
+ const departmentEmployeesQueryOptions = (params) => queryOptions({
165
+ queryKey: [
166
+ QUERY_KEY,
167
+ "department",
168
+ "employees",
169
+ params
170
+ ],
171
+ queryFn: () => getDepartmentEmployees({ data: params }),
172
+ ...baseOptions
173
+ });
174
+ const companyGeneralManagerQueryOptions = (params) => queryOptions({
175
+ queryKey: [
176
+ QUERY_KEY,
177
+ "company",
178
+ "generalManager",
179
+ params
180
+ ],
181
+ queryFn: () => getCompanyGeneralManager({ data: params }),
182
+ ...baseOptions
183
+ });
184
+ //#endregion
185
+ export { activeEmployeesQueryOptions, approvalQueryOptions, approvalsQueryOptions, approveApprovalMutationOptions, batchDeleteFilesMutationOptions, cancelApprovalMutationOptions, companyGeneralManagerQueryOptions, createApprovalMutationOptions, deleteFileMutationOptions, departmentByIdQueryOptions, departmentEmployeesQueryOptions, departmentManagerQueryOptions, departmentsQueryOptions, downloadFileMutationOptions, employeeByEmployeeIdQueryOptions, employeeGeneralManagerQueryOptions, employeeManagerQueryOptions, employeeSubordinatesQueryOptions, employeeSupervisorQueryOptions, employeesQueryOptions, fileMetasQueryOptions, fileQueryOptions, fileThumbnailQueryOptions, openFileMutationOptions, previousEmployeeIdsQueryOptions, resubmitApprovalMutationOptions, searchEmployeesQueryOptions, updateFileMetaMutationOptions, uploadFileMutationOptions, withdrawApprovalMutationOptions };
186
+
187
+ //# sourceMappingURL=client.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.mjs","names":["mutationOptions","queryOptions","z","QueryClientParam","ApproveApprovalSchema","CancelApprovalSchema","CreateApprovalSchema","ResubmitApprovalSchema","WithdrawApprovalSchema","GetApprovalSchema","GetApprovalsSchema","approveApproval","cancelApproval","createApproval","getApproval","getApprovals","resubmitApproval","withdrawApproval","QUERY_KEY","approvalsQueryOptions","params","input","queryKey","queryFn","data","approvalQueryOptions","createApprovalMutationOptions","queryClient","mutationFn","onSettled","invalidateQueries","exact","approveApprovalMutationOptions","resubmitApprovalMutationOptions","withdrawApprovalMutationOptions","cancelApprovalMutationOptions","queryOptions","z","CompanyCodeSchema","DepartmentIdSchema","EmployeeIdSchema","getActiveEmployees","getCompanyGeneralManager","getDepartmentById","getDepartmentEmployees","getDepartmentManager","getDepartments","getEmployeeByEmployeeId","getEmployeeGeneralManager","getEmployeeManager","getEmployees","getEmployeeSubordinates","getEmployeeSupervisor","getPreviousEmployeeIds","searchEmployees","SearchEmployeesSchema","QUERY_KEY","DAY","baseOptions","staleTime","gcTime","refetchOnWindowFocus","searchEmployeesQueryOptions","params","infer","queryKey","queryFn","data","employeesQueryOptions","activeEmployeesQueryOptions","employeeByEmployeeIdQueryOptions","previousEmployeeIdsQueryOptions","employeeSupervisorQueryOptions","employeeSubordinatesQueryOptions","employeeManagerQueryOptions","employeeGeneralManagerQueryOptions","departmentsQueryOptions","departmentByIdQueryOptions","departmentManagerQueryOptions","departmentEmployeesQueryOptions","companyGeneralManagerQueryOptions"],"sources":["../../src/data/client/approval.ts","../../src/data/client/peoplesoft.ts"],"sourcesContent":["import { mutationOptions, queryOptions } from \"@tanstack/react-query\";\nimport type { z } from \"zod\";\nimport type { QueryClientParam } from \"~/models/QueryClientParam\";\nimport {\n ApproveApprovalSchema,\n CancelApprovalSchema,\n CreateApprovalSchema,\n ResubmitApprovalSchema,\n WithdrawApprovalSchema,\n} from \"~/models/approval/Approval\";\nimport type { GetApprovalSchema, GetApprovalsSchema } from \"~/data/server/approval\";\nimport {\n approveApproval,\n cancelApproval,\n createApproval,\n getApproval,\n getApprovals,\n resubmitApproval,\n withdrawApproval,\n} from \"~/data/server/approval\";\n\nconst QUERY_KEY = \"approval\";\n\nexport const approvalsQueryOptions = (params: z.input<typeof GetApprovalsSchema>) =>\n queryOptions({\n queryKey: [QUERY_KEY, params],\n queryFn: () => getApprovals({ data: params }),\n });\n\nexport const approvalQueryOptions = (params: z.input<typeof GetApprovalSchema>) =>\n queryOptions({\n queryKey: [QUERY_KEY, params],\n queryFn: () => getApproval({ data: params }),\n });\n\nexport const createApprovalMutationOptions = ({ queryClient }: QueryClientParam) =>\n mutationOptions({\n mutationFn: (data: z.input<typeof CreateApprovalSchema>) => createApproval({ data }),\n onSettled: () => queryClient.invalidateQueries({ queryKey: [QUERY_KEY], exact: false }),\n });\n\nexport const approveApprovalMutationOptions = ({ queryClient }: QueryClientParam) =>\n mutationOptions({\n mutationFn: (data: z.input<typeof ApproveApprovalSchema>) => approveApproval({ data }),\n onSettled: () => queryClient.invalidateQueries({ queryKey: [QUERY_KEY], exact: false }),\n });\n\nexport const resubmitApprovalMutationOptions = ({ queryClient }: QueryClientParam) =>\n mutationOptions({\n mutationFn: (data: z.input<typeof ResubmitApprovalSchema>) => resubmitApproval({ data }),\n onSettled: () => queryClient.invalidateQueries({ queryKey: [QUERY_KEY], exact: false }),\n });\n\nexport const withdrawApprovalMutationOptions = ({ queryClient }: QueryClientParam) =>\n mutationOptions({\n mutationFn: (data: z.input<typeof WithdrawApprovalSchema>) => withdrawApproval({ data }),\n onSettled: () => queryClient.invalidateQueries({ queryKey: [QUERY_KEY], exact: false }),\n });\n\nexport const cancelApprovalMutationOptions = ({ queryClient }: QueryClientParam) =>\n mutationOptions({\n mutationFn: (data: z.input<typeof CancelApprovalSchema>) => cancelApproval({ data }),\n onSettled: () => queryClient.invalidateQueries({ queryKey: [QUERY_KEY], exact: false }),\n });\n","import { queryOptions } from \"@tanstack/react-query\";\nimport z from \"zod\";\nimport {\n CompanyCodeSchema,\n DepartmentIdSchema,\n EmployeeIdSchema,\n getActiveEmployees,\n getCompanyGeneralManager,\n getDepartmentById,\n getDepartmentEmployees,\n getDepartmentManager,\n getDepartments,\n getEmployeeByEmployeeId,\n getEmployeeGeneralManager,\n getEmployeeManager,\n getEmployees,\n getEmployeeSubordinates,\n getEmployeeSupervisor,\n getPreviousEmployeeIds,\n searchEmployees,\n SearchEmployeesSchema,\n} from \"~/data/server/peoplesoft\";\n\nconst QUERY_KEY = \"peoplesoft\";\nconst DAY = 1000 * 60 * 60 * 24;\n\nconst baseOptions = {\n staleTime: DAY,\n gcTime: DAY,\n refetchOnWindowFocus: false,\n};\n\nexport const searchEmployeesQueryOptions = (params: z.infer<typeof SearchEmployeesSchema>) =>\n queryOptions({\n queryKey: [QUERY_KEY, \"employee\", \"search\", params],\n queryFn: () => searchEmployees({ data: params }),\n ...baseOptions,\n });\n\nexport const employeesQueryOptions = () =>\n queryOptions({\n queryKey: [QUERY_KEY, \"employee\"],\n queryFn: () => getEmployees(),\n ...baseOptions,\n });\n\nexport const activeEmployeesQueryOptions = () =>\n queryOptions({\n queryKey: [QUERY_KEY, \"employee\", \"active\"],\n queryFn: () => getActiveEmployees(),\n ...baseOptions,\n });\n\nexport const employeeByEmployeeIdQueryOptions = (params: z.infer<typeof EmployeeIdSchema>) =>\n queryOptions({\n queryKey: [QUERY_KEY, \"employee\", params],\n queryFn: () => getEmployeeByEmployeeId({ data: params }),\n ...baseOptions,\n });\n\nexport const previousEmployeeIdsQueryOptions = () =>\n queryOptions({\n queryKey: [QUERY_KEY, \"employee\", \"previousIds\"],\n queryFn: () => getPreviousEmployeeIds(),\n ...baseOptions,\n });\n\nexport const employeeSupervisorQueryOptions = (params: z.infer<typeof EmployeeIdSchema>) =>\n queryOptions({\n queryKey: [QUERY_KEY, \"employee\", \"supervisor\", params],\n queryFn: () => getEmployeeSupervisor({ data: params }),\n ...baseOptions,\n });\n\nexport const employeeSubordinatesQueryOptions = (params: z.infer<typeof EmployeeIdSchema>) =>\n queryOptions({\n queryKey: [QUERY_KEY, \"employee\", \"subordinates\", params],\n queryFn: () => getEmployeeSubordinates({ data: params }),\n ...baseOptions,\n });\n\nexport const employeeManagerQueryOptions = (params: z.infer<typeof EmployeeIdSchema>) =>\n queryOptions({\n queryKey: [QUERY_KEY, \"employee\", \"manager\", params],\n queryFn: () => getEmployeeManager({ data: params }),\n ...baseOptions,\n });\n\nexport const employeeGeneralManagerQueryOptions = (params: z.infer<typeof EmployeeIdSchema>) =>\n queryOptions({\n queryKey: [QUERY_KEY, \"employee\", \"generalManager\", params],\n queryFn: () => getEmployeeGeneralManager({ data: params }),\n ...baseOptions,\n });\n\nexport const departmentsQueryOptions = () =>\n queryOptions({\n queryKey: [QUERY_KEY, \"department\"],\n queryFn: () => getDepartments(),\n ...baseOptions,\n });\n\nexport const departmentByIdQueryOptions = (params: z.infer<typeof DepartmentIdSchema>) =>\n queryOptions({\n queryKey: [QUERY_KEY, \"department\", params],\n queryFn: () => getDepartmentById({ data: params }),\n ...baseOptions,\n });\n\nexport const departmentManagerQueryOptions = (params: z.infer<typeof DepartmentIdSchema>) =>\n queryOptions({\n queryKey: [QUERY_KEY, \"department\", \"manager\", params],\n queryFn: () => getDepartmentManager({ data: params }),\n ...baseOptions,\n });\n\nexport const departmentEmployeesQueryOptions = (params: z.infer<typeof DepartmentIdSchema>) =>\n queryOptions({\n queryKey: [QUERY_KEY, \"department\", \"employees\", params],\n queryFn: () => getDepartmentEmployees({ data: params }),\n ...baseOptions,\n });\n\nexport const companyGeneralManagerQueryOptions = (params: z.infer<typeof CompanyCodeSchema>) =>\n queryOptions({\n queryKey: [QUERY_KEY, \"company\", \"generalManager\", params],\n queryFn: () => getCompanyGeneralManager({ data: params }),\n ...baseOptions,\n });\n"],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import { A as UpdateFileMetaSchema, B as uploadFile, C as createApproval, D as withdrawApproval, E as resubmitApproval, F as downloadFile, I as getFile, L as getFileMetas, M as UploadFileResult, N as batchDeleteFiles, O as FileSchema, P as deleteFile, R as getFileThumbnail, S as cancelApproval, T as getApprovals, _ as getPreviousEmployeeIds, a as getActiveEmployees, b as GetApprovalsSchema, c as getDepartmentEmployees, d as getEmployeeByEmployeeId, f as getEmployeeGeneralManager, g as getEmployees, h as getEmployeeSupervisor, i as SearchEmployeesSchema, j as UploadFileMetaSchema, k as GetFileMetasSchema, l as getDepartmentManager, m as getEmployeeSubordinates, n as DepartmentIdSchema, o as getCompanyGeneralManager, p as getEmployeeManager, r as EmployeeIdSchema, s as getDepartmentById, t as CompanyCodeSchema, u as getDepartments, v as searchEmployees, w as getApproval, x as approveApproval, y as GetApprovalSchema, z as updateFileMeta } from "../peoplesoft-gKd-Jh5L.mjs";
2
+
3
+ //#region src/data/server/email.d.ts
4
+ declare const sendEmail: import("@tanstack/start-client-core").RequiredFetcher<readonly [import("@tanstack/start-client-core").RequestMiddlewareAfterServer<{}, undefined, {
5
+ api: import("axios").AxiosInstance;
6
+ }>], import("zod").ZodObject<{
7
+ subject: import("zod").ZodString;
8
+ body: import("zod").ZodString;
9
+ to: import("zod").ZodArray<import("zod").ZodEmail>;
10
+ bcc: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodEmail>>;
11
+ cc: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodEmail>>;
12
+ attachments: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodObject<{
13
+ appName: import("zod").ZodString;
14
+ subId: import("zod").ZodUUID;
15
+ }, import("zod/v4/core").$strip>>>;
16
+ }, import("zod/v4/core").$strip>, Promise<void>>;
17
+ //#endregion
18
+ export { CompanyCodeSchema, DepartmentIdSchema, EmployeeIdSchema, FileSchema, GetApprovalSchema, GetApprovalsSchema, GetFileMetasSchema, SearchEmployeesSchema, UpdateFileMetaSchema, UploadFileMetaSchema, UploadFileResult, approveApproval, batchDeleteFiles, cancelApproval, createApproval, deleteFile, downloadFile, getActiveEmployees, getApproval, getApprovals, getCompanyGeneralManager, getDepartmentById, getDepartmentEmployees, getDepartmentManager, getDepartments, getEmployeeByEmployeeId, getEmployeeGeneralManager, getEmployeeManager, getEmployeeSubordinates, getEmployeeSupervisor, getEmployees, getFile, getFileMetas, getFileThumbnail, getPreviousEmployeeIds, resubmitApproval, searchEmployees, sendEmail, updateFileMeta, uploadFile, withdrawApproval };
19
+ //# sourceMappingURL=server.d.mts.map
@@ -0,0 +1,16 @@
1
+ import { r as apiMiddleware } from "../authMiddleware--HdlhhZO.mjs";
2
+ import { a as batchDeleteFiles, c as getFile, d as updateFileMeta, f as uploadFile, i as UploadFileMetaSchema, l as getFileMetas, n as GetFileMetasSchema, o as deleteFile, r as UpdateFileMetaSchema, s as downloadFile, t as FileSchema, u as getFileThumbnail } from "../file-DM1x40eJ.mjs";
3
+ import { t as EmailSchema } from "../Email-BzQQkbe9.mjs";
4
+ import { C as createApproval, D as withdrawApproval, E as resubmitApproval, S as cancelApproval, T as getApprovals, _ as getPreviousEmployeeIds, a as getActiveEmployees, b as GetApprovalsSchema, c as getDepartmentEmployees, d as getEmployeeByEmployeeId, f as getEmployeeGeneralManager, g as getEmployees, h as getEmployeeSupervisor, i as SearchEmployeesSchema, l as getDepartmentManager, m as getEmployeeSubordinates, n as DepartmentIdSchema, o as getCompanyGeneralManager, p as getEmployeeManager, r as EmployeeIdSchema, s as getDepartmentById, t as CompanyCodeSchema, u as getDepartments, v as searchEmployees, w as getApproval, x as approveApproval, y as GetApprovalSchema } from "../peoplesoft-DIe8H1Nu.mjs";
5
+ import { createServerFn } from "@tanstack/react-start";
6
+ //#region src/data/server/email.ts
7
+ const sendEmail = createServerFn({ method: "POST" }).validator(EmailSchema).middleware([apiMiddleware({
8
+ baseURL: "EMAIL_BASE_URL",
9
+ scopeKey: "email"
10
+ })]).handler(async ({ data, context }) => {
11
+ await context.api.post("/v1/email", data);
12
+ });
13
+ //#endregion
14
+ export { CompanyCodeSchema, DepartmentIdSchema, EmployeeIdSchema, FileSchema, GetApprovalSchema, GetApprovalsSchema, GetFileMetasSchema, SearchEmployeesSchema, UpdateFileMetaSchema, UploadFileMetaSchema, approveApproval, batchDeleteFiles, cancelApproval, createApproval, deleteFile, downloadFile, getActiveEmployees, getApproval, getApprovals, getCompanyGeneralManager, getDepartmentById, getDepartmentEmployees, getDepartmentManager, getDepartments, getEmployeeByEmployeeId, getEmployeeGeneralManager, getEmployeeManager, getEmployeeSubordinates, getEmployeeSupervisor, getEmployees, getFile, getFileMetas, getFileThumbnail, getPreviousEmployeeIds, resubmitApproval, searchEmployees, sendEmail, updateFileMeta, uploadFile, withdrawApproval };
15
+
16
+ //# sourceMappingURL=server.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.mjs","names":["createServerFn","apiMiddleware","EmailSchema","sendEmail","method","validator","middleware","baseURL","scopeKey","handler","data","context","api","post"],"sources":["../../src/data/server/email.ts"],"sourcesContent":["import { createServerFn } from \"@tanstack/react-start\";\nimport { apiMiddleware } from \"~/middleware/apiMiddleware\";\nimport { EmailSchema } from \"~/models/email/Email\";\n\nexport const sendEmail = createServerFn({ method: \"POST\" })\n .validator(EmailSchema)\n .middleware([apiMiddleware({ baseURL: \"EMAIL_BASE_URL\", scopeKey: \"email\" })])\n .handler(async ({ data, context }) => {\n await context.api.post(\"/v1/email\", data);\n });\n"],"mappings":";;;;;;AAIA,MAAaG,YAAYH,eAAe,EAAEI,QAAQ,OAAO,CAAC,CAAC,CACxDC,UAAUH,WAAW,CAAC,CACtBI,WAAW,CAACL,cAAc;CAAEM,SAAS;CAAkBC,UAAU;AAAQ,CAAC,CAAC,CAAC,CAAC,CAC7EC,QAAQ,OAAO,EAAEC,MAAMC,cAAc;CACpC,MAAMA,QAAQC,IAAIC,KAAK,aAAaH,IAAI;AAC1C,CAAC"}
@@ -0,0 +1,101 @@
1
+ import { t as serverEnv } from "./env-CoveIivr.mjs";
2
+ import { ConfidentialClientApplication, CryptoProvider } from "@azure/msal-node";
3
+ //#region src/lib/auth/entra.ts
4
+ /**
5
+ * Scopes requested during the interactive login. `offline_access` yields the
6
+ * refresh token that the session is built around; `User.Read` lets us read the
7
+ * user's Graph profile (e.g. avatar). Resource API scopes (file, approval, …) are
8
+ * acquired on demand via {@link acquireDelegatedToken} using the multi-resource
9
+ * refresh token.
10
+ */
11
+ const LOGIN_SCOPES = [
12
+ "openid",
13
+ "profile",
14
+ "offline_access",
15
+ "User.Read"
16
+ ];
17
+ /** Entra authority for this tenant. */
18
+ const ENTRA_AUTHORITY = `https://login.microsoftonline.com/${serverEnv.ENTRA_TENANT_ID}`;
19
+ /** Shared across login/callback/refresh calls — stateless and cheap to reuse. */
20
+ const cryptoProvider = new CryptoProvider();
21
+ /**
22
+ * Creates a confidential client (no persistent cache plugin).
23
+ *
24
+ * The interactive/refresh flows below deliberately use a FRESH client per token
25
+ * operation rather than a singleton: the client's in-memory cache then holds only
26
+ * that operation's tokens, so {@link extractRefreshToken} reads the correct user's
27
+ * refresh token — a shared client would accumulate (and leak) every user's tokens.
28
+ * Persisting just the refresh token (not the whole multi-KB MSAL cache) is what
29
+ * keeps the session in a small cookie with no server-side token store.
30
+ */
31
+ const createConfidentialClient = () => new ConfidentialClientApplication({ auth: {
32
+ clientId: serverEnv.ENTRA_CLIENT_ID,
33
+ clientSecret: serverEnv.ENTRA_CLIENT_SECRET,
34
+ authority: ENTRA_AUTHORITY
35
+ } });
36
+ /**
37
+ * Pulls the refresh-token secret out of a client's in-memory MSAL cache. MSAL
38
+ * intentionally hides refresh tokens, so reading the serialized cache is the only
39
+ * way to persist just the RT (instead of the whole cache) in the session cookie.
40
+ */
41
+ function extractRefreshToken(client) {
42
+ const cache = JSON.parse(client.getTokenCache().serialize());
43
+ return Object.values(cache.RefreshToken ?? {})[0]?.secret;
44
+ }
45
+ /** First leg of the auth-code flow: the URL to redirect the browser to. */
46
+ function buildAuthCodeUrl(opts) {
47
+ return createConfidentialClient().getAuthCodeUrl({
48
+ scopes: LOGIN_SCOPES,
49
+ redirectUri: opts.redirectUri,
50
+ responseMode: "query",
51
+ state: opts.state,
52
+ codeChallenge: opts.codeChallenge,
53
+ codeChallengeMethod: "S256"
54
+ });
55
+ }
56
+ /**
57
+ * Second leg of the auth-code flow: exchange the code for tokens, returning the
58
+ * refresh token and the id-token claims to persist in the session.
59
+ */
60
+ async function exchangeCodeForSession(opts) {
61
+ const client = createConfidentialClient();
62
+ const result = await client.acquireTokenByCode({
63
+ code: opts.code,
64
+ scopes: LOGIN_SCOPES,
65
+ redirectUri: opts.redirectUri,
66
+ codeVerifier: opts.codeVerifier
67
+ });
68
+ const refreshToken = extractRefreshToken(client);
69
+ if (!refreshToken) throw new Error("No refresh token returned (is the offline_access scope granted?)");
70
+ return {
71
+ refreshToken,
72
+ claims: result.idTokenClaims ?? {}
73
+ };
74
+ }
75
+ /**
76
+ * Acquires a delegated access token for `scopes` from the stored refresh token.
77
+ * Entra rotates the refresh token on each use, so the (possibly new) refresh
78
+ * token is returned for the caller to persist. Throws when the refresh token is
79
+ * expired/revoked and interaction is required.
80
+ */
81
+ async function acquireDelegatedToken(opts) {
82
+ const client = createConfidentialClient();
83
+ const result = await client.acquireTokenByRefreshToken({
84
+ refreshToken: opts.refreshToken,
85
+ scopes: [...opts.scopes],
86
+ forceCache: true
87
+ });
88
+ if (!result) throw new Error("Failed to acquire token from refresh token");
89
+ return {
90
+ accessToken: result.accessToken,
91
+ refreshToken: extractRefreshToken(client) ?? opts.refreshToken
92
+ };
93
+ }
94
+ /** Entra's front-channel logout endpoint, which clears the user's IdP session. */
95
+ function buildLogoutUrl(postLogoutRedirectUri) {
96
+ return `${`${ENTRA_AUTHORITY}/oauth2/v2.0/logout`}?post_logout_redirect_uri=${encodeURIComponent(postLogoutRedirectUri)}`;
97
+ }
98
+ //#endregion
99
+ export { acquireDelegatedToken, buildAuthCodeUrl, buildLogoutUrl, createConfidentialClient, cryptoProvider, exchangeCodeForSession };
100
+
101
+ //# sourceMappingURL=entra-s4ZjHq5o.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entra-s4ZjHq5o.mjs","names":["ConfidentialClientApplication","CryptoProvider","TokenPayload","serverEnv","LOGIN_SCOPES","ENTRA_AUTHORITY","ENTRA_TENANT_ID","cryptoProvider","createConfidentialClient","auth","clientId","ENTRA_CLIENT_ID","clientSecret","ENTRA_CLIENT_SECRET","authority","extractRefreshToken","client","cache","JSON","parse","getTokenCache","serialize","RefreshToken","Record","secret","Object","values","buildAuthCodeUrl","opts","redirectUri","state","codeChallenge","Promise","getAuthCodeUrl","scopes","responseMode","codeChallengeMethod","exchangeCodeForSession","code","codeVerifier","refreshToken","claims","result","acquireTokenByCode","Error","idTokenClaims","acquireDelegatedToken","ReadonlyArray","accessToken","acquireTokenByRefreshToken","forceCache","buildLogoutUrl","postLogoutRedirectUri","base","encodeURIComponent"],"sources":["../src/lib/auth/entra.ts"],"sourcesContent":["import { ConfidentialClientApplication, CryptoProvider } from \"@azure/msal-node\";\nimport type { TokenPayload } from \"~/models/TokenPayload\";\nimport { serverEnv } from \"~/env\";\n\n/**\n * Scopes requested during the interactive login. `offline_access` yields the\n * refresh token that the session is built around; `User.Read` lets us read the\n * user's Graph profile (e.g. avatar). Resource API scopes (file, approval, …) are\n * acquired on demand via {@link acquireDelegatedToken} using the multi-resource\n * refresh token.\n */\nexport const LOGIN_SCOPES = [\"openid\", \"profile\", \"offline_access\", \"User.Read\"];\n\n/** Entra authority for this tenant. */\nexport const ENTRA_AUTHORITY = `https://login.microsoftonline.com/${serverEnv.ENTRA_TENANT_ID}`;\n\n/** Shared across login/callback/refresh calls — stateless and cheap to reuse. */\nexport const cryptoProvider = new CryptoProvider();\n\n/**\n * Creates a confidential client (no persistent cache plugin).\n *\n * The interactive/refresh flows below deliberately use a FRESH client per token\n * operation rather than a singleton: the client's in-memory cache then holds only\n * that operation's tokens, so {@link extractRefreshToken} reads the correct user's\n * refresh token — a shared client would accumulate (and leak) every user's tokens.\n * Persisting just the refresh token (not the whole multi-KB MSAL cache) is what\n * keeps the session in a small cookie with no server-side token store.\n */\nexport const createConfidentialClient = (): ConfidentialClientApplication =>\n new ConfidentialClientApplication({\n auth: {\n clientId: serverEnv.ENTRA_CLIENT_ID,\n clientSecret: serverEnv.ENTRA_CLIENT_SECRET,\n authority: ENTRA_AUTHORITY,\n },\n });\n\n/**\n * Pulls the refresh-token secret out of a client's in-memory MSAL cache. MSAL\n * intentionally hides refresh tokens, so reading the serialized cache is the only\n * way to persist just the RT (instead of the whole cache) in the session cookie.\n */\nfunction extractRefreshToken(client: ConfidentialClientApplication): string | undefined {\n const cache = JSON.parse(client.getTokenCache().serialize()) as {\n RefreshToken?: Record<string, { secret?: string }>;\n };\n return Object.values(cache.RefreshToken ?? {})[0]?.secret;\n}\n\n/** First leg of the auth-code flow: the URL to redirect the browser to. */\nexport function buildAuthCodeUrl(opts: {\n redirectUri: string;\n state: string;\n codeChallenge: string;\n}): Promise<string> {\n return createConfidentialClient().getAuthCodeUrl({\n scopes: LOGIN_SCOPES,\n redirectUri: opts.redirectUri,\n responseMode: \"query\",\n state: opts.state,\n codeChallenge: opts.codeChallenge,\n codeChallengeMethod: \"S256\",\n });\n}\n\n/**\n * Second leg of the auth-code flow: exchange the code for tokens, returning the\n * refresh token and the id-token claims to persist in the session.\n */\nexport async function exchangeCodeForSession(opts: {\n code: string;\n redirectUri: string;\n codeVerifier: string;\n}): Promise<{ refreshToken: string; claims: TokenPayload }> {\n const client = createConfidentialClient();\n const result = await client.acquireTokenByCode({\n code: opts.code,\n scopes: LOGIN_SCOPES,\n redirectUri: opts.redirectUri,\n codeVerifier: opts.codeVerifier,\n });\n\n const refreshToken = extractRefreshToken(client);\n if (!refreshToken)\n throw new Error(\"No refresh token returned (is the offline_access scope granted?)\");\n\n return { refreshToken, claims: (result.idTokenClaims ?? {}) as TokenPayload };\n}\n\n/**\n * Acquires a delegated access token for `scopes` from the stored refresh token.\n * Entra rotates the refresh token on each use, so the (possibly new) refresh\n * token is returned for the caller to persist. Throws when the refresh token is\n * expired/revoked and interaction is required.\n */\nexport async function acquireDelegatedToken(opts: {\n refreshToken: string;\n scopes: ReadonlyArray<string>;\n}): Promise<{ accessToken: string; refreshToken: string }> {\n const client = createConfidentialClient();\n const result = await client.acquireTokenByRefreshToken({\n refreshToken: opts.refreshToken,\n scopes: [...opts.scopes],\n forceCache: true,\n });\n if (!result) throw new Error(\"Failed to acquire token from refresh token\");\n\n return {\n accessToken: result.accessToken,\n refreshToken: extractRefreshToken(client) ?? opts.refreshToken,\n };\n}\n\n/** Entra's front-channel logout endpoint, which clears the user's IdP session. */\nexport function buildLogoutUrl(postLogoutRedirectUri: string): string {\n const base = `${ENTRA_AUTHORITY}/oauth2/v2.0/logout`;\n return `${base}?post_logout_redirect_uri=${encodeURIComponent(postLogoutRedirectUri)}`;\n}\n"],"mappings":";;;;;;;;;;AAWA,MAAaI,eAAe;CAAC;CAAU;CAAW;CAAkB;AAAW;;AAG/E,MAAaC,kBAAkB,qCAAqCF,UAAUG;;AAG9E,MAAaC,iBAAiB,IAAIN,eAAe;;;;;;;;;;;AAYjD,MAAaO,iCACX,IAAIR,8BAA8B,EAChCS,MAAM;CACJC,UAAUP,UAAUQ;CACpBC,cAAcT,UAAUU;CACxBC,WAAWT;AACb,EACF,CAAC;;;;;;AAOH,SAASU,oBAAoBC,QAA2D;CACtF,MAAMC,QAAQC,KAAKC,MAAMH,OAAOI,cAAc,CAAC,CAACC,UAAU,CAAC;CAG3D,OAAOI,OAAOC,OAAOT,MAAMK,gBAAgB,CAAC,CAAC,CAAC,CAAC,EAAE,EAAEE;AACrD;;AAGA,SAAgBG,iBAAiBC,MAIb;CAClB,OAAOpB,yBAAyB,CAAC,CAACyB,eAAe;EAC/CC,QAAQ9B;EACRyB,aAAaD,KAAKC;EAClBM,cAAc;EACdL,OAAOF,KAAKE;EACZC,eAAeH,KAAKG;EACpBK,qBAAqB;CACvB,CAAC;AACH;;;;;AAMA,eAAsBC,uBAAuBT,MAIe;CAC1D,MAAMZ,SAASR,yBAAyB;CACxC,MAAMkC,SAAS,MAAM1B,OAAO2B,mBAAmB;EAC7CL,MAAMV,KAAKU;EACXJ,QAAQ9B;EACRyB,aAAaD,KAAKC;EAClBU,cAAcX,KAAKW;CACrB,CAAC;CAED,MAAMC,eAAezB,oBAAoBC,MAAM;CAC/C,IAAI,CAACwB,cACH,MAAM,IAAII,MAAM,kEAAkE;CAEpF,OAAO;EAAEJ;EAAcC,QAASC,OAAOG,iBAAiB,CAAC;CAAmB;AAC9E;;;;;;;AAQA,eAAsBC,sBAAsBlB,MAGe;CACzD,MAAMZ,SAASR,yBAAyB;CACxC,MAAMkC,SAAS,MAAM1B,OAAOiC,2BAA2B;EACrDT,cAAcZ,KAAKY;EACnBN,QAAQ,CAAC,GAAGN,KAAKM,MAAM;EACvBgB,YAAY;CACd,CAAC;CACD,IAAI,CAACR,QAAQ,MAAM,IAAIE,MAAM,4CAA4C;CAEzE,OAAO;EACLI,aAAaN,OAAOM;EACpBR,cAAczB,oBAAoBC,MAAM,KAAKY,KAAKY;CACpD;AACF;;AAGA,SAAgBW,eAAeC,uBAAuC;CAEpE,OAAO,GAAGC,GADMhD,gBAAe,qBACjB,4BAA6BiD,mBAAmBF,qBAAqB;AACrF"}
@@ -0,0 +1,30 @@
1
+ import { z as z$1 } from "zod";
2
+ import { createEnv } from "@t3-oss/env-core";
3
+ createEnv({
4
+ clientPrefix: "VITE_",
5
+ client: { VITE_MUI_LICENSE_KEY: z$1.string() },
6
+ runtimeEnv: import.meta.env,
7
+ emptyStringAsUndefined: true
8
+ });
9
+ const serverEnv = createEnv({
10
+ server: {
11
+ ENTRA_CLIENT_ID: z$1.string().min(1),
12
+ ENTRA_TENANT_ID: z$1.string().min(1),
13
+ ENTRA_CLIENT_SECRET: z$1.string().min(1),
14
+ SESSION_SECRET: z$1.string().min(32),
15
+ FILE_BASE_URL: z$1.string().min(1).optional(),
16
+ APPROVAL_BASE_URL: z$1.string().min(1).optional(),
17
+ PEOPLESOFT_BASE_URL: z$1.string().min(1).optional(),
18
+ EMAIL_BASE_URL: z$1.string().min(1).optional(),
19
+ AI_BASE_URL: z$1.string().min(1).optional(),
20
+ AI_SUBSCRIPTION_KEY: z$1.string().min(1).optional(),
21
+ AI_CLIENT_ID: z$1.string().min(1).optional(),
22
+ AI_CLIENT_SECRET: z$1.string().min(1).optional()
23
+ },
24
+ runtimeEnv: process.env,
25
+ emptyStringAsUndefined: true
26
+ });
27
+ //#endregion
28
+ export { serverEnv as t };
29
+
30
+ //# sourceMappingURL=env-CoveIivr.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env-CoveIivr.mjs","names":["createEnv","z","clientEnv","clientPrefix","client","VITE_MUI_LICENSE_KEY","string","runtimeEnv","import","meta","env","emptyStringAsUndefined","serverEnv","server","ENTRA_CLIENT_ID","min","ENTRA_TENANT_ID","ENTRA_CLIENT_SECRET","SESSION_SECRET","FILE_BASE_URL","optional","APPROVAL_BASE_URL","PEOPLESOFT_BASE_URL","EMAIL_BASE_URL","AI_BASE_URL","AI_SUBSCRIPTION_KEY","AI_CLIENT_ID","AI_CLIENT_SECRET","process"],"sources":["../src/env.ts"],"sourcesContent":["import { createEnv } from \"@t3-oss/env-core\";\nimport { z } from \"zod\";\n\nexport const clientEnv = createEnv({\n clientPrefix: \"VITE_\",\n client: {\n VITE_MUI_LICENSE_KEY: z.string(),\n },\n runtimeEnv: import.meta.env,\n emptyStringAsUndefined: true,\n});\n\nexport const serverEnv = createEnv({\n server: {\n ENTRA_CLIENT_ID: z.string().min(1),\n ENTRA_TENANT_ID: z.string().min(1),\n ENTRA_CLIENT_SECRET: z.string().min(1),\n SESSION_SECRET: z.string().min(32),\n FILE_BASE_URL: z.string().min(1).optional(),\n APPROVAL_BASE_URL: z.string().min(1).optional(),\n PEOPLESOFT_BASE_URL: z.string().min(1).optional(),\n EMAIL_BASE_URL: z.string().min(1).optional(),\n AI_BASE_URL: z.string().min(1).optional(),\n AI_SUBSCRIPTION_KEY: z.string().min(1).optional(),\n AI_CLIENT_ID: z.string().min(1).optional(),\n AI_CLIENT_SECRET: z.string().min(1).optional(),\n },\n runtimeEnv: process.env,\n emptyStringAsUndefined: true,\n});\n"],"mappings":";;AAGyBA,UAAU;CACjCG,cAAc;CACdC,QAAQ,EACNC,sBAAsBJ,IAAEK,OAAO,EACjC;CACAC,YAAYC,OAAOC,KAAKC;CACxBC,wBAAwB;AAC1B,CAAC;AAED,MAAaC,YAAYZ,UAAU;CACjCa,QAAQ;EACNC,iBAAiBb,IAAEK,OAAO,CAAC,CAACS,IAAI,CAAC;EACjCC,iBAAiBf,IAAEK,OAAO,CAAC,CAACS,IAAI,CAAC;EACjCE,qBAAqBhB,IAAEK,OAAO,CAAC,CAACS,IAAI,CAAC;EACrCG,gBAAgBjB,IAAEK,OAAO,CAAC,CAACS,IAAI,EAAE;EACjCI,eAAelB,IAAEK,OAAO,CAAC,CAACS,IAAI,CAAC,CAAC,CAACK,SAAS;EAC1CC,mBAAmBpB,IAAEK,OAAO,CAAC,CAACS,IAAI,CAAC,CAAC,CAACK,SAAS;EAC9CE,qBAAqBrB,IAAEK,OAAO,CAAC,CAACS,IAAI,CAAC,CAAC,CAACK,SAAS;EAChDG,gBAAgBtB,IAAEK,OAAO,CAAC,CAACS,IAAI,CAAC,CAAC,CAACK,SAAS;EAC3CI,aAAavB,IAAEK,OAAO,CAAC,CAACS,IAAI,CAAC,CAAC,CAACK,SAAS;EACxCK,qBAAqBxB,IAAEK,OAAO,CAAC,CAACS,IAAI,CAAC,CAAC,CAACK,SAAS;EAChDM,cAAczB,IAAEK,OAAO,CAAC,CAACS,IAAI,CAAC,CAAC,CAACK,SAAS;EACzCO,kBAAkB1B,IAAEK,OAAO,CAAC,CAACS,IAAI,CAAC,CAAC,CAACK,SAAS;CAC/C;CACAb,YAAYqB,QAAQlB;CACpBC,wBAAwB;AAC1B,CAAC"}
@@ -0,0 +1,148 @@
1
+ import { t as serverEnv } from "./env-CoveIivr.mjs";
2
+ import { l as getAccessToken } from "./utils-2XiozDlV.mjs";
3
+ import { t as getAppToken } from "./msalServer-CkNOOjjH.mjs";
4
+ import { t as authenticationMiddleware } from "./authMiddleware--HdlhhZO.mjs";
5
+ import { a as batchDeleteFiles, c as getFile, d as updateFileMeta, l as getFileMetas, o as deleteFile, s as downloadFile, u as getFileThumbnail } from "./file-DM1x40eJ.mjs";
6
+ import { createServerFn } from "@tanstack/react-start";
7
+ import { mutationOptions, queryOptions } from "@tanstack/react-query";
8
+ import { uuidv7 } from "uuidv7";
9
+ import { Upload } from "tus-js-client";
10
+ //#region src/server/actions/file.ts
11
+ const getFileUploadToken = createServerFn({ method: "GET" }).middleware([authenticationMiddleware({ optional: true })]).handler(async () => {
12
+ let token;
13
+ try {
14
+ token = await getAccessToken("file");
15
+ } catch {
16
+ token = await getAppToken("file");
17
+ }
18
+ return {
19
+ token,
20
+ endpoint: `${serverEnv.FILE_BASE_URL}/v1/upload`
21
+ };
22
+ });
23
+ //#endregion
24
+ //#region src/data/client/file.ts
25
+ const QUERY_KEY = "file";
26
+ const HOUR = 1e3 * 60 * 60;
27
+ const baseOptions = {
28
+ staleTime: HOUR,
29
+ gcTime: HOUR,
30
+ refetchOnWindowFocus: false
31
+ };
32
+ async function streamToObjectUrl(stream) {
33
+ const blob = await new Response(stream).blob();
34
+ return URL.createObjectURL(blob);
35
+ }
36
+ function saveBlob(blob, fileName) {
37
+ const url = URL.createObjectURL(blob);
38
+ const anchor = document.createElement("a");
39
+ anchor.href = url;
40
+ anchor.download = fileName;
41
+ anchor.click();
42
+ URL.revokeObjectURL(url);
43
+ }
44
+ const fileMetasQueryOptions = (params) => queryOptions({
45
+ queryKey: [
46
+ QUERY_KEY,
47
+ "meta",
48
+ params.appName,
49
+ params.subId
50
+ ],
51
+ queryFn: () => getFileMetas({ data: params }),
52
+ ...baseOptions
53
+ });
54
+ const fileThumbnailQueryOptions = (params) => queryOptions({
55
+ queryKey: [
56
+ QUERY_KEY,
57
+ "thumbnail",
58
+ params.appName,
59
+ params.id
60
+ ],
61
+ queryFn: async () => streamToObjectUrl(await getFileThumbnail({ data: params })),
62
+ enabled: !!params.id,
63
+ ...baseOptions
64
+ });
65
+ const fileQueryOptions = (params) => queryOptions({
66
+ queryKey: [
67
+ QUERY_KEY,
68
+ params.appName,
69
+ params.id
70
+ ],
71
+ queryFn: async () => streamToObjectUrl(await getFile({ data: params })),
72
+ enabled: !!params.id,
73
+ ...baseOptions
74
+ });
75
+ const downloadFileMutationOptions = () => mutationOptions({ mutationFn: async (data) => {
76
+ const stream = await downloadFile({ data });
77
+ saveBlob(await new Response(stream).blob(), `${data.fileName}.${data.fileExtension}`);
78
+ } });
79
+ const openFileMutationOptions = () => mutationOptions({ mutationFn: async (data) => {
80
+ const stream = await getFile({ data });
81
+ window.open(await streamToObjectUrl(stream));
82
+ } });
83
+ const updateFileMetaMutationOptions = ({ queryClient }) => mutationOptions({
84
+ mutationFn: (data) => updateFileMeta({ data }),
85
+ onSettled: () => queryClient.invalidateQueries({
86
+ queryKey: [QUERY_KEY, "meta"],
87
+ exact: false
88
+ })
89
+ });
90
+ const deleteFileMutationOptions = ({ queryClient }) => mutationOptions({
91
+ mutationFn: (data) => deleteFile({ data }),
92
+ onSettled: () => queryClient.invalidateQueries({
93
+ queryKey: [QUERY_KEY, "meta"],
94
+ exact: false
95
+ })
96
+ });
97
+ const batchDeleteFilesMutationOptions = ({ queryClient }) => mutationOptions({
98
+ mutationFn: (data) => batchDeleteFiles({ data }),
99
+ onSettled: () => queryClient.invalidateQueries({
100
+ queryKey: [QUERY_KEY, "meta"],
101
+ exact: false
102
+ })
103
+ });
104
+ const uploadFileMutationOptions = ({ queryClient }) => mutationOptions({
105
+ mutationFn: async ({ appName, subId, file, setProgress }) => {
106
+ const { token, endpoint } = await getFileUploadToken();
107
+ const id = uuidv7();
108
+ const dotIndex = file.name.lastIndexOf(".");
109
+ const fileExtension = dotIndex >= 0 ? file.name.slice(dotIndex + 1) : "";
110
+ await new Promise((resolve, reject) => {
111
+ new Upload(file, {
112
+ endpoint,
113
+ chunkSize: 1048576,
114
+ metadata: {
115
+ id,
116
+ appName,
117
+ subId,
118
+ fileName: file.name,
119
+ fileExtension,
120
+ mimeType: file.type
121
+ },
122
+ headers: { Authorization: `Bearer ${token}` },
123
+ onProgress: (bytesUploaded, bytesTotal) => setProgress?.(bytesUploaded / bytesTotal * 100),
124
+ onError: reject,
125
+ onSuccess: () => resolve()
126
+ }).start();
127
+ });
128
+ return {
129
+ id,
130
+ appName,
131
+ subId,
132
+ fileName: file.name
133
+ };
134
+ },
135
+ onSuccess: (result) => queryClient.invalidateQueries({
136
+ queryKey: [
137
+ QUERY_KEY,
138
+ "meta",
139
+ result.appName,
140
+ result.subId
141
+ ],
142
+ exact: false
143
+ })
144
+ });
145
+ //#endregion
146
+ export { fileQueryOptions as a, updateFileMetaMutationOptions as c, fileMetasQueryOptions as i, uploadFileMutationOptions as l, deleteFileMutationOptions as n, fileThumbnailQueryOptions as o, downloadFileMutationOptions as r, openFileMutationOptions as s, batchDeleteFilesMutationOptions as t };
147
+
148
+ //# sourceMappingURL=file-C5-a_6W6.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-C5-a_6W6.mjs","names":["createServerFn","serverEnv","getAppToken","getAccessToken","authenticationMiddleware","getFileUploadToken","method","middleware","optional","handler","token","endpoint","FILE_BASE_URL","mutationOptions","queryOptions","Upload","uuidv7","z","FileSchema","GetFileMetasSchema","UpdateFileMetaSchema","UploadFileMetaSchema","UploadFileResult","batchDeleteFiles","deleteFile","downloadFile","getFile","getFileMetas","getFileThumbnail","updateFileMeta","QueryClientParam","getFileUploadToken","QUERY_KEY","HOUR","baseOptions","staleTime","gcTime","refetchOnWindowFocus","streamToObjectUrl","stream","ReadableStream","Promise","blob","Response","URL","createObjectURL","saveBlob","Blob","fileName","url","anchor","document","createElement","href","download","click","revokeObjectURL","fileMetasQueryOptions","params","input","queryKey","appName","subId","queryFn","data","fileThumbnailQueryOptions","id","enabled","fileQueryOptions","downloadFileMutationOptions","mutationFn","fileExtension","openFileMutationOptions","Error","window","open","updateFileMetaMutationOptions","queryClient","onSettled","invalidateQueries","exact","deleteFileMutationOptions","batchDeleteFilesMutationOptions","uploadFileMutationOptions","file","setProgress","progress","token","endpoint","dotIndex","name","lastIndexOf","slice","resolve","reject","upload","chunkSize","metadata","mimeType","type","headers","Authorization","onProgress","bytesUploaded","bytesTotal","onError","onSuccess","start","result"],"sources":["../src/server/actions/file.ts","../src/data/client/file.ts"],"sourcesContent":["import { createServerFn } from \"@tanstack/react-start\";\r\nimport { serverEnv } from \"~/env\";\r\nimport { getAppToken } from \"~/lib/auth/msalServer\";\r\nimport { getAccessToken } from \"~/lib/auth/user\";\r\nimport { authenticationMiddleware } from \"~/middleware/authMiddleware\";\r\n\r\nexport const getFileUploadToken = createServerFn({ method: \"GET\" })\r\n .middleware([authenticationMiddleware({ optional: true })])\r\n .handler(async () => {\r\n let token: string;\r\n try {\r\n token = await getAccessToken(\"file\");\r\n } catch {\r\n token = await getAppToken(\"file\");\r\n }\r\n return { token, endpoint: `${serverEnv.FILE_BASE_URL}/v1/upload` };\r\n });\r\n","import { mutationOptions, queryOptions } from \"@tanstack/react-query\";\nimport { Upload } from \"tus-js-client\";\nimport { uuidv7 } from \"uuidv7\";\nimport type { z } from \"zod\";\nimport type {\n FileSchema,\n GetFileMetasSchema,\n UpdateFileMetaSchema,\n UploadFileMetaSchema,\n UploadFileResult,\n} from \"~/data/server/file\";\nimport {\n batchDeleteFiles,\n deleteFile,\n downloadFile,\n getFile,\n getFileMetas,\n getFileThumbnail,\n updateFileMeta,\n} from \"~/data/server/file\";\nimport type { QueryClientParam } from \"~/models/QueryClientParam\";\nimport { getFileUploadToken } from \"~/server/actions/file\";\n\nconst QUERY_KEY = \"file\";\nconst HOUR = 1000 * 60 * 60;\n\nconst baseOptions = {\n staleTime: HOUR,\n gcTime: HOUR,\n refetchOnWindowFocus: false,\n};\n\nasync function streamToObjectUrl(stream: ReadableStream): Promise<string> {\n const blob = await new Response(stream).blob();\n return URL.createObjectURL(blob);\n}\n\nfunction saveBlob(blob: Blob, fileName: string): void {\n const url = URL.createObjectURL(blob);\n const anchor = document.createElement(\"a\");\n anchor.href = url;\n anchor.download = fileName;\n anchor.click();\n URL.revokeObjectURL(url);\n}\n\nexport const fileMetasQueryOptions = (params: z.input<typeof GetFileMetasSchema>) =>\n queryOptions({\n queryKey: [QUERY_KEY, \"meta\", params.appName, params.subId],\n queryFn: () => getFileMetas({ data: params }),\n ...baseOptions,\n });\n\nexport const fileThumbnailQueryOptions = (params: z.input<typeof FileSchema>) =>\n queryOptions({\n queryKey: [QUERY_KEY, \"thumbnail\", params.appName, params.id],\n queryFn: async () => streamToObjectUrl(await getFileThumbnail({ data: params })),\n enabled: !!params.id,\n ...baseOptions,\n });\n\nexport const fileQueryOptions = (params: z.input<typeof FileSchema>) =>\n queryOptions({\n queryKey: [QUERY_KEY, params.appName, params.id],\n queryFn: async () => streamToObjectUrl(await getFile({ data: params })),\n enabled: !!params.id,\n ...baseOptions,\n });\n\nexport const downloadFileMutationOptions = () =>\n mutationOptions({\n mutationFn: async (\n data: z.input<typeof FileSchema> & { fileName: string; fileExtension: string },\n ) => {\n const stream = await downloadFile({ data });\n saveBlob(await new Response(stream).blob(), `${data.fileName}.${data.fileExtension}`);\n },\n });\n\nexport const openFileMutationOptions = () =>\n mutationOptions<void, Error, z.input<typeof FileSchema>>({\n mutationFn: async (data) => {\n const stream = await getFile({ data });\n window.open(await streamToObjectUrl(stream));\n },\n });\n\nexport const updateFileMetaMutationOptions = ({ queryClient }: QueryClientParam) =>\n mutationOptions({\n mutationFn: (data: z.input<typeof UpdateFileMetaSchema>) => updateFileMeta({ data }),\n onSettled: () => queryClient.invalidateQueries({ queryKey: [QUERY_KEY, \"meta\"], exact: false }),\n });\n\nexport const deleteFileMutationOptions = ({ queryClient }: QueryClientParam) =>\n mutationOptions({\n mutationFn: (data: z.input<typeof FileSchema>) => deleteFile({ data }),\n onSettled: () => queryClient.invalidateQueries({ queryKey: [QUERY_KEY, \"meta\"], exact: false }),\n });\n\nexport const batchDeleteFilesMutationOptions = ({ queryClient }: QueryClientParam) =>\n mutationOptions({\n mutationFn: (data: z.input<typeof GetFileMetasSchema>) => batchDeleteFiles({ data }),\n onSettled: () => queryClient.invalidateQueries({ queryKey: [QUERY_KEY, \"meta\"], exact: false }),\n });\n\nexport const uploadFileMutationOptions = ({ queryClient }: QueryClientParam) =>\n mutationOptions({\n mutationFn: async ({\n appName,\n subId,\n file,\n setProgress,\n }: z.input<typeof UploadFileMetaSchema> & {\n setProgress?: (progress: number) => void;\n }): Promise<UploadFileResult> => {\n const { token, endpoint } = await getFileUploadToken();\n const id = uuidv7();\n const dotIndex = file.name.lastIndexOf(\".\");\n const fileExtension = dotIndex >= 0 ? file.name.slice(dotIndex + 1) : \"\";\n\n await new Promise<void>((resolve, reject) => {\n const upload = new Upload(file, {\n endpoint,\n chunkSize: 1_048_576,\n metadata: { id, appName, subId, fileName: file.name, fileExtension, mimeType: file.type },\n headers: { Authorization: `Bearer ${token}` },\n onProgress: (bytesUploaded, bytesTotal) =>\n setProgress?.((bytesUploaded / bytesTotal) * 100),\n onError: reject,\n onSuccess: () => resolve(),\n });\n upload.start();\n });\n\n return { id, appName, subId, fileName: file.name };\n },\n onSuccess: (result) =>\n queryClient.invalidateQueries({\n queryKey: [QUERY_KEY, \"meta\", result.appName, result.subId],\n exact: false,\n }),\n });\n"],"mappings":";;;;;;;;;;AAMA,MAAaK,qBAAqBL,eAAe,EAAEM,QAAQ,MAAM,CAAC,CAAC,CAChEC,WAAW,CAACH,yBAAyB,EAAEI,UAAU,KAAK,CAAC,CAAC,CAAC,CAAC,CAC1DC,QAAQ,YAAY;CACnB,IAAIC;CACJ,IAAI;EACFA,QAAQ,MAAMP,eAAe,MAAM;CACrC,QAAQ;EACNO,QAAQ,MAAMR,YAAY,MAAM;CAClC;CACA,OAAO;EAAEQ;EAAOC,UAAU,GAAGV,UAAUW,cAAa;CAAa;AACnE,CAAC;;;ACOH,MAAMoB,YAAY;AAClB,MAAMC,OAAO,MAAO,KAAK;AAEzB,MAAMC,cAAc;CAClBC,WAAWF;CACXG,QAAQH;CACRI,sBAAsB;AACxB;AAEA,eAAeC,kBAAkBC,QAAyC;CACxE,MAAMG,OAAO,MAAM,IAAIC,SAASJ,MAAM,CAAC,CAACG,KAAK;CAC7C,OAAOE,IAAIC,gBAAgBH,IAAI;AACjC;AAEA,SAASI,SAASJ,MAAYM,UAAwB;CACpD,MAAMC,MAAML,IAAIC,gBAAgBH,IAAI;CACpC,MAAMQ,SAASC,SAASC,cAAc,GAAG;CACzCF,OAAOG,OAAOJ;CACdC,OAAOI,WAAWN;CAClBE,OAAOK,MAAM;CACbX,IAAIY,gBAAgBP,GAAG;AACzB;AAEA,MAAaQ,yBAAyBC,WACpC5C,aAAa;CACX8C,UAAU;EAAC5B;EAAW;EAAQ0B,OAAOG;EAASH,OAAOI;CAAK;CAC1DC,eAAepC,aAAa,EAAEqC,MAAMN,OAAO,CAAC;CAC5C,GAAGxB;AACL,CAAC;AAEH,MAAa+B,6BAA6BP,WACxC5C,aAAa;CACX8C,UAAU;EAAC5B;EAAW;EAAa0B,OAAOG;EAASH,OAAOQ;CAAE;CAC5DH,SAAS,YAAYzB,kBAAkB,MAAMV,iBAAiB,EAAEoC,MAAMN,OAAO,CAAC,CAAC;CAC/ES,SAAS,CAAC,CAACT,OAAOQ;CAClB,GAAGhC;AACL,CAAC;AAEH,MAAakC,oBAAoBV,WAC/B5C,aAAa;CACX8C,UAAU;EAAC5B;EAAW0B,OAAOG;EAASH,OAAOQ;CAAE;CAC/CH,SAAS,YAAYzB,kBAAkB,MAAMZ,QAAQ,EAAEsC,MAAMN,OAAO,CAAC,CAAC;CACtES,SAAS,CAAC,CAACT,OAAOQ;CAClB,GAAGhC;AACL,CAAC;AAEH,MAAamC,oCACXxD,gBAAgB,EACdyD,YAAY,OACVN,SACG;CACH,MAAMzB,SAAS,MAAMd,aAAa,EAAEuC,KAAK,CAAC;CAC1ClB,SAAS,MAAM,IAAIH,SAASJ,MAAM,CAAC,CAACG,KAAK,GAAG,GAAGsB,KAAKhB,SAAQ,GAAIgB,KAAKO,eAAe;AACtF,EACF,CAAC;AAEH,MAAaC,gCACX3D,gBAAyD,EACvDyD,YAAY,OAAON,SAAS;CAC1B,MAAMzB,SAAS,MAAMb,QAAQ,EAAEsC,KAAK,CAAC;CACrCU,OAAOC,KAAK,MAAMrC,kBAAkBC,MAAM,CAAC;AAC7C,EACF,CAAC;AAEH,MAAaqC,iCAAiC,EAAEC,kBAC9ChE,gBAAgB;CACdyD,aAAaN,SAA+CnC,eAAe,EAAEmC,KAAK,CAAC;CACnFc,iBAAiBD,YAAYE,kBAAkB;EAAEnB,UAAU,CAAC5B,WAAW,MAAM;EAAGgD,OAAO;CAAM,CAAC;AAChG,CAAC;AAEH,MAAaC,6BAA6B,EAAEJ,kBAC1ChE,gBAAgB;CACdyD,aAAaN,SAAqCxC,WAAW,EAAEwC,KAAK,CAAC;CACrEc,iBAAiBD,YAAYE,kBAAkB;EAAEnB,UAAU,CAAC5B,WAAW,MAAM;EAAGgD,OAAO;CAAM,CAAC;AAChG,CAAC;AAEH,MAAaE,mCAAmC,EAAEL,kBAChDhE,gBAAgB;CACdyD,aAAaN,SAA6CzC,iBAAiB,EAAEyC,KAAK,CAAC;CACnFc,iBAAiBD,YAAYE,kBAAkB;EAAEnB,UAAU,CAAC5B,WAAW,MAAM;EAAGgD,OAAO;CAAM,CAAC;AAChG,CAAC;AAEH,MAAaG,6BAA6B,EAAEN,kBAC1ChE,gBAAgB;CACdyD,YAAY,OAAO,EACjBT,SACAC,OACAsB,MACAC,kBAG+B;EAC/B,MAAM,EAAEE,OAAOC,aAAa,MAAMzD,mBAAmB;EACrD,MAAMmC,KAAKlD,OAAO;EAClB,MAAMyE,WAAWL,KAAKM,KAAKC,YAAY,GAAG;EAC1C,MAAMpB,gBAAgBkB,YAAY,IAAIL,KAAKM,KAAKE,MAAMH,WAAW,CAAC,IAAI;EAEtE,MAAM,IAAIhD,SAAeoD,SAASC,WAAW;GAW3CC,IAVmBhF,OAAOqE,MAAM;IAC9BI;IACAQ,WAAW;IACXC,UAAU;KAAE/B;KAAIL;KAASC;KAAOd,UAAUoC,KAAKM;KAAMnB;KAAe2B,UAAUd,KAAKe;IAAK;IACxFC,SAAS,EAAEC,eAAe,UAAUd,QAAQ;IAC5Ce,aAAaC,eAAeC,eAC1BnB,cAAekB,gBAAgBC,aAAc,GAAG;IAClDC,SAASX;IACTY,iBAAiBb,QAAQ;GAC3B,CACAE,CAAM,CAACY,MAAM;EACf,CAAC;EAED,OAAO;GAAEzC;GAAIL;GAASC;GAAOd,UAAUoC,KAAKM;EAAK;CACnD;CACAgB,YAAYE,WACV/B,YAAYE,kBAAkB;EAC5BnB,UAAU;GAAC5B;GAAW;GAAQ4E,OAAO/C;GAAS+C,OAAO9C;EAAK;EAC1DkB,OAAO;CACT,CAAC;AACL,CAAC"}