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.
- package/dist/Approval-Co6D1BNq.mjs +194 -0
- package/dist/Approval-Co6D1BNq.mjs.map +1 -0
- package/dist/DialogsContext-DLqA8RJ_.mjs +7 -0
- package/dist/DialogsContext-DLqA8RJ_.mjs.map +1 -0
- package/dist/Email-BzQQkbe9.mjs +20 -0
- package/dist/Email-BzQQkbe9.mjs.map +1 -0
- package/dist/FileMeta-DDqUju1Y.mjs +19 -0
- package/dist/FileMeta-DDqUju1Y.mjs.map +1 -0
- package/dist/FileMeta-ILLTOjaM.d.mts +20 -0
- package/dist/NotificationContext-CgwUOeW0.mjs +7 -0
- package/dist/NotificationContext-CgwUOeW0.mjs.map +1 -0
- package/dist/QueryClientParam-CzaM3akD.d.mts +11 -0
- package/dist/RouterListItemButton-owZVvuC_.mjs +78 -0
- package/dist/RouterListItemButton-owZVvuC_.mjs.map +1 -0
- package/dist/User-1gKoYJvW.d.mts +12 -0
- package/dist/auth.d.mts +25 -0
- package/dist/auth.mjs +88 -0
- package/dist/auth.mjs.map +1 -0
- package/dist/authMiddleware--HdlhhZO.mjs +78 -0
- package/dist/authMiddleware--HdlhhZO.mjs.map +1 -0
- package/dist/components.d.mts +107 -0
- package/dist/components.mjs +1500 -0
- package/dist/components.mjs.map +1 -0
- package/dist/data/client.d.mts +3217 -0
- package/dist/data/client.mjs +187 -0
- package/dist/data/client.mjs.map +1 -0
- package/dist/data/server.d.mts +19 -0
- package/dist/data/server.mjs +16 -0
- package/dist/data/server.mjs.map +1 -0
- package/dist/entra-s4ZjHq5o.mjs +101 -0
- package/dist/entra-s4ZjHq5o.mjs.map +1 -0
- package/dist/env-CoveIivr.mjs +30 -0
- package/dist/env-CoveIivr.mjs.map +1 -0
- package/dist/file-C5-a_6W6.mjs +148 -0
- package/dist/file-C5-a_6W6.mjs.map +1 -0
- package/dist/file-DM1x40eJ.mjs +179 -0
- package/dist/file-DM1x40eJ.mjs.map +1 -0
- package/dist/hooks.d.mts +226 -0
- package/dist/hooks.mjs +1087 -0
- package/dist/hooks.mjs.map +1 -0
- package/dist/index.d.mts +48 -0
- package/dist/index.mjs +1940 -0
- package/dist/index.mjs.map +1 -0
- package/dist/middleware.d.mts +46 -0
- package/dist/middleware.mjs +27 -0
- package/dist/middleware.mjs.map +1 -0
- package/dist/models.d.mts +598 -0
- package/dist/models.mjs +74 -0
- package/dist/models.mjs.map +1 -0
- package/dist/msalServer-CkNOOjjH.mjs +44 -0
- package/dist/msalServer-CkNOOjjH.mjs.map +1 -0
- package/dist/peoplesoft-DIe8H1Nu.mjs +240 -0
- package/dist/peoplesoft-DIe8H1Nu.mjs.map +1 -0
- package/dist/peoplesoft-gKd-Jh5L.d.mts +1219 -0
- package/dist/useDialogs-BUzVrTSP.mjs +248 -0
- package/dist/useDialogs-BUzVrTSP.mjs.map +1 -0
- package/dist/user-Cen43mlr.d.mts +19 -0
- package/dist/utils-2XiozDlV.mjs +156 -0
- package/dist/utils-2XiozDlV.mjs.map +1 -0
- package/dist/utils-BuWEQOuy.d.mts +65 -0
- package/dist/utils.d.mts +5 -0
- package/dist/utils.mjs +5 -0
- package/dist/vite.d.mts +7 -0
- package/dist/vite.mjs +182 -0
- package/dist/vite.mjs.map +1 -0
- package/package.json +129 -62
- package/skills/client-db/SKILL.md +107 -0
- package/skills/data-grid/SKILL.md +142 -0
- package/skills/db-schema/SKILL.md +71 -0
- package/skills/dialogs/SKILL.md +79 -0
- package/skills/forms/SKILL.md +82 -0
- package/skills/general/SKILL.md +17 -0
- package/skills/notifications/SKILL.md +43 -0
- package/skills/routing/SKILL.md +128 -0
- package/skills/server-functions/SKILL.md +113 -0
- package/skills/services/SKILL.md +29 -0
- package/skills/services/docs/approval.md +256 -0
- package/skills/services/docs/email.md +32 -0
- package/skills/services/docs/file.md +83 -0
- package/skills/services/docs/peoplesoft.md +110 -0
- package/skills/start/SKILL.md +46 -0
- package/skills/start/steps/01-git-setup.md +11 -0
- package/skills/start/steps/02-project-name-setup.md +14 -0
- package/skills/start/steps/03-apm-setup.md +208 -0
- package/skills/start/steps/04-database-setup.md +37 -0
- package/skills/start/steps/05-entra-setup.md +59 -0
- package/skills/start/steps/06-vault-setup.md +50 -0
- package/skills/start/steps/07-generate-favicon.md +10 -0
- package/skills/start/steps/08-commit.md +15 -0
- package/dist/src/components/Layout.d.ts +0 -16
- package/dist/src/components/Layout.js +0 -122
- package/dist/src/components/Layout.js.map +0 -1
- package/dist/src/components/dataGrid/ChipInputCell.d.ts +0 -9
- package/dist/src/components/dataGrid/ChipInputCell.js +0 -17
- package/dist/src/components/dataGrid/ChipInputCell.js.map +0 -1
- package/dist/src/components/dataGrid/EditableColumnHeader.d.ts +0 -2
- package/dist/src/components/dataGrid/EditableColumnHeader.js +0 -7
- package/dist/src/components/dataGrid/EditableColumnHeader.js.map +0 -1
- package/dist/src/components/dataGrid/GridToolbar.d.ts +0 -8
- package/dist/src/components/dataGrid/GridToolbar.js +0 -40
- package/dist/src/components/dataGrid/GridToolbar.js.map +0 -1
- package/dist/src/components/dataGrid/TableContainer.d.ts +0 -3
- package/dist/src/components/dataGrid/TableContainer.js +0 -32
- package/dist/src/components/dataGrid/TableContainer.js.map +0 -1
- package/dist/src/components/form/FormAutocomplete.d.ts +0 -7
- package/dist/src/components/form/FormAutocomplete.js +0 -10
- package/dist/src/components/form/FormAutocomplete.js.map +0 -1
- package/dist/src/components/form/FormCheckbox.d.ts +0 -7
- package/dist/src/components/form/FormCheckbox.js +0 -11
- package/dist/src/components/form/FormCheckbox.js.map +0 -1
- package/dist/src/components/form/FormDatePicker.d.ts +0 -9
- package/dist/src/components/form/FormDatePicker.js +0 -19
- package/dist/src/components/form/FormDatePicker.js.map +0 -1
- package/dist/src/components/form/FormDateTimePicker.d.ts +0 -9
- package/dist/src/components/form/FormDateTimePicker.js +0 -19
- package/dist/src/components/form/FormDateTimePicker.js.map +0 -1
- package/dist/src/components/form/FormNumberField.d.ts +0 -12
- package/dist/src/components/form/FormNumberField.js +0 -12
- package/dist/src/components/form/FormNumberField.js.map +0 -1
- package/dist/src/components/form/FormRadioGroup.d.ts +0 -13
- package/dist/src/components/form/FormRadioGroup.js +0 -11
- package/dist/src/components/form/FormRadioGroup.js.map +0 -1
- package/dist/src/components/form/FormSlider.d.ts +0 -7
- package/dist/src/components/form/FormSlider.js +0 -11
- package/dist/src/components/form/FormSlider.js.map +0 -1
- package/dist/src/components/form/FormSubmitButton.d.ts +0 -5
- package/dist/src/components/form/FormSubmitButton.js +0 -13
- package/dist/src/components/form/FormSubmitButton.js.map +0 -1
- package/dist/src/components/form/FormSwitch.d.ts +0 -7
- package/dist/src/components/form/FormSwitch.js +0 -11
- package/dist/src/components/form/FormSwitch.js.map +0 -1
- package/dist/src/components/form/FormTextField.d.ts +0 -7
- package/dist/src/components/form/FormTextField.js +0 -11
- package/dist/src/components/form/FormTextField.js.map +0 -1
- package/dist/src/components/layout/AccountMenu.d.ts +0 -9
- package/dist/src/components/layout/AccountMenu.js +0 -44
- package/dist/src/components/layout/AccountMenu.js.map +0 -1
- package/dist/src/components/layout/DevelopmentBanner.d.ts +0 -7
- package/dist/src/components/layout/DevelopmentBanner.js +0 -29
- package/dist/src/components/layout/DevelopmentBanner.js.map +0 -1
- package/dist/src/components/layout/ErrorPage.d.ts +0 -2
- package/dist/src/components/layout/ErrorPage.js +0 -25
- package/dist/src/components/layout/ErrorPage.js.map +0 -1
- package/dist/src/components/layout/LayoutDialog.d.ts +0 -12
- package/dist/src/components/layout/LayoutDialog.js +0 -12
- package/dist/src/components/layout/LayoutDialog.js.map +0 -1
- package/dist/src/components/layout/LayoutSnackbar.d.ts +0 -8
- package/dist/src/components/layout/LayoutSnackbar.js +0 -25
- package/dist/src/components/layout/LayoutSnackbar.js.map +0 -1
- package/dist/src/components/layout/NavigationDrawer.d.ts +0 -11
- package/dist/src/components/layout/NavigationDrawer.js +0 -70
- package/dist/src/components/layout/NavigationDrawer.js.map +0 -1
- package/dist/src/components/layout/NotificationMenu.d.ts +0 -8
- package/dist/src/components/layout/NotificationMenu.js +0 -26
- package/dist/src/components/layout/NotificationMenu.js.map +0 -1
- package/dist/src/components/layout/TypographyWithIcon.d.ts +0 -7
- package/dist/src/components/layout/TypographyWithIcon.js +0 -22
- package/dist/src/components/layout/TypographyWithIcon.js.map +0 -1
- package/dist/src/components/layout/Unauthorized.d.ts +0 -2
- package/dist/src/components/layout/Unauthorized.js +0 -26
- package/dist/src/components/layout/Unauthorized.js.map +0 -1
- package/dist/src/contexts/LayoutContext.d.ts +0 -40
- package/dist/src/contexts/LayoutContext.js +0 -60
- package/dist/src/contexts/LayoutContext.js.map +0 -1
- package/dist/src/contexts/UserContext.d.ts +0 -24
- package/dist/src/contexts/UserContext.js +0 -55
- package/dist/src/contexts/UserContext.js.map +0 -1
- package/dist/src/hooks/FormHooks.d.ts +0 -46
- package/dist/src/hooks/FormHooks.js +0 -31
- package/dist/src/hooks/FormHooks.js.map +0 -1
- package/dist/src/hooks/UseSnackbar.d.ts +0 -10
- package/dist/src/hooks/UseSnackbar.js +0 -23
- package/dist/src/hooks/UseSnackbar.js.map +0 -1
- package/dist/src/hooks/UseUser.d.ts +0 -10
- package/dist/src/hooks/UseUser.js +0 -25
- package/dist/src/hooks/UseUser.js.map +0 -1
- package/dist/src/index.d.ts +0 -20
- package/dist/src/index.js +0 -15
- package/dist/src/index.js.map +0 -1
- package/dist/src/models/Error.d.ts +0 -6
- package/dist/src/models/Error.js +0 -2
- package/dist/src/models/Error.js.map +0 -1
- package/dist/src/models/KeycloakSettings.d.ts +0 -8
- package/dist/src/models/KeycloakSettings.js +0 -2
- package/dist/src/models/KeycloakSettings.js.map +0 -1
- package/dist/src/models/LayoutPaletteColorOptions.d.ts +0 -6
- package/dist/src/models/LayoutPaletteColorOptions.js +0 -2
- package/dist/src/models/LayoutPaletteColorOptions.js.map +0 -1
- package/dist/src/models/LayoutRoute.d.ts +0 -14
- package/dist/src/models/LayoutRoute.js +0 -2
- package/dist/src/models/LayoutRoute.js.map +0 -1
- package/dist/src/models/Notification.d.ts +0 -9
- package/dist/src/models/Notification.js +0 -2
- package/dist/src/models/Notification.js.map +0 -1
- package/dist/src/models/PeoplesoftDepartment.d.ts +0 -14
- package/dist/src/models/PeoplesoftDepartment.js +0 -2
- package/dist/src/models/PeoplesoftDepartment.js.map +0 -1
- package/dist/src/models/PeoplesoftEmployee.d.ts +0 -34
- package/dist/src/models/PeoplesoftEmployee.js +0 -2
- package/dist/src/models/PeoplesoftEmployee.js.map +0 -1
- package/dist/src/models/Snackbar.d.ts +0 -15
- package/dist/src/models/Snackbar.js +0 -2
- package/dist/src/models/Snackbar.js.map +0 -1
- package/dist/src/models/User.d.ts +0 -27
- package/dist/src/models/User.js +0 -11
- package/dist/src/models/User.js.map +0 -1
- package/dist/src/models/types/EmployeeCategoryGroup.d.ts +0 -1
- package/dist/src/models/types/EmployeeCategoryGroup.js +0 -2
- package/dist/src/models/types/EmployeeCategoryGroup.js.map +0 -1
- package/dist/src/models/types/EmployeeStatus.d.ts +0 -1
- package/dist/src/models/types/EmployeeStatus.js +0 -2
- package/dist/src/models/types/EmployeeStatus.js.map +0 -1
- package/dist/src/utils/Auth.d.ts +0 -12
- package/dist/src/utils/Auth.js +0 -49
- package/dist/src/utils/Auth.js.map +0 -1
- package/dist/src/utils/Fetches.d.ts +0 -5
- package/dist/src/utils/Fetches.js +0 -66
- package/dist/src/utils/Fetches.js.map +0 -1
- package/dist/src/utils/FormUtils.d.ts +0 -7
- package/dist/src/utils/FormUtils.js +0 -9
- package/dist/src/utils/FormUtils.js.map +0 -1
- package/dist/src/utils/Helpers.d.ts +0 -11
- package/dist/src/utils/Helpers.js +0 -26
- package/dist/src/utils/Helpers.js.map +0 -1
- package/dist/tsconfig.tsbuildinfo +0 -1
- package/src/components/Layout.tsx +0 -183
- package/src/components/dataGrid/ChipInputCell.tsx +0 -31
- package/src/components/dataGrid/EditableColumnHeader.tsx +0 -7
- package/src/components/dataGrid/GridToolbar.tsx +0 -63
- package/src/components/dataGrid/TableContainer.tsx +0 -39
- package/src/components/form/FormAutocomplete.tsx +0 -34
- package/src/components/form/FormCheckbox.tsx +0 -32
- package/src/components/form/FormDatePicker.tsx +0 -34
- package/src/components/form/FormDateTimePicker.tsx +0 -34
- package/src/components/form/FormNumberField.tsx +0 -33
- package/src/components/form/FormRadioGroup.tsx +0 -43
- package/src/components/form/FormSlider.tsx +0 -28
- package/src/components/form/FormSubmitButton.tsx +0 -29
- package/src/components/form/FormSwitch.tsx +0 -32
- package/src/components/form/FormTextField.tsx +0 -26
- package/src/components/layout/AccountMenu.tsx +0 -160
- package/src/components/layout/DevelopmentBanner.tsx +0 -54
- package/src/components/layout/ErrorPage.tsx +0 -34
- package/src/components/layout/LayoutDialog.tsx +0 -50
- package/src/components/layout/LayoutSnackbar.tsx +0 -44
- package/src/components/layout/NavigationDrawer.tsx +0 -131
- package/src/components/layout/NotificationMenu.tsx +0 -76
- package/src/components/layout/TypographyWithIcon.tsx +0 -35
- package/src/components/layout/Unauthorized.tsx +0 -37
- package/src/contexts/LayoutContext.tsx +0 -127
- package/src/contexts/UserContext.tsx +0 -88
- package/src/hooks/FormHooks.ts +0 -33
- package/src/hooks/UseSnackbar.tsx +0 -28
- package/src/hooks/UseUser.tsx +0 -29
- package/src/index.ts +0 -27
- package/src/models/Error.tsx +0 -6
- package/src/models/KeycloakSettings.ts +0 -8
- package/src/models/LayoutPaletteColorOptions.tsx +0 -7
- package/src/models/LayoutRoute.ts +0 -15
- package/src/models/Notification.ts +0 -10
- package/src/models/PeoplesoftDepartment.ts +0 -15
- package/src/models/PeoplesoftEmployee.ts +0 -35
- package/src/models/Snackbar.ts +0 -16
- package/src/models/User.ts +0 -13
- package/src/models/types/EmployeeCategoryGroup.ts +0 -1
- package/src/models/types/EmployeeStatus.ts +0 -1
- package/src/utils/Auth.ts +0 -58
- package/src/utils/Fetches.ts +0 -83
- package/src/utils/FormUtils.ts +0 -22
- package/src/utils/Helpers.ts +0 -27
- 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":"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"}
|