wcz-layout 8.0.2 → 8.0.3
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.
Potentially problematic release.
This version of wcz-layout might be problematic. Click here for more details.
- package/dist/Approval-BSQHVGsm.js +133 -0
- package/dist/Approval-BSQHVGsm.js.map +1 -0
- package/dist/{DialogsContext-D5A8xncJ.js → DialogsContext-DkePghS6.js} +1 -1
- package/dist/{DialogsContext-D5A8xncJ.js.map → DialogsContext-DkePghS6.js.map} +1 -1
- package/dist/Email-D2SPExbn.js +20 -0
- package/dist/Email-D2SPExbn.js.map +1 -0
- package/dist/FileMeta--27aYkPB.js +19 -0
- package/dist/FileMeta--27aYkPB.js.map +1 -0
- package/dist/{FileMeta-fQnJ6uFX.d.ts → FileMeta-CQz1TMre.d.ts} +1 -1
- package/dist/{NotificationContext-DBTYc5z-.js → NotificationContext-FQRaNZRx.js} +1 -1
- package/dist/{NotificationContext-DBTYc5z-.js.map → NotificationContext-FQRaNZRx.js.map} +1 -1
- package/dist/{RouterListItemButton-rcdkgOXQ.js → RouterListItemButton-p9U4Z0SW.js} +1 -1
- package/dist/{RouterListItemButton-rcdkgOXQ.js.map → RouterListItemButton-p9U4Z0SW.js.map} +1 -1
- package/dist/{User-C21DoZOa.d.ts → User-B92WOpE2.d.ts} +1 -1
- package/dist/components.d.ts +12 -11
- package/dist/components.js +338 -299
- package/dist/components.js.map +1 -1
- package/dist/data/client.d.ts +3081 -0
- package/dist/data/client.js +188 -0
- package/dist/data/client.js.map +1 -0
- package/dist/data/server.d.ts +20 -0
- package/dist/data/server.js +22 -0
- package/dist/data/server.js.map +1 -0
- package/dist/env-szOeLEuD.js +31 -0
- package/dist/env-szOeLEuD.js.map +1 -0
- package/dist/file-B2VFf-iX.js +100 -0
- package/dist/file-B2VFf-iX.js.map +1 -0
- package/dist/file-DSohGVd1.js +149 -0
- package/dist/file-DSohGVd1.js.map +1 -0
- package/dist/hooks.d.ts +1 -1
- package/dist/hooks.js +3 -3
- package/dist/hooks.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js +9 -8
- package/dist/index.js.map +1 -1
- package/dist/middleware.d.ts +1 -1
- package/dist/middleware.js +2 -1
- package/dist/middleware.js.map +1 -1
- package/dist/models.d.ts +35 -6
- package/dist/models.js +4 -118
- package/dist/models.js.map +1 -1
- package/dist/{msalClient-MNN6BwL6.d.ts → msalClient-DZjYT_QJ.d.ts} +2 -2
- package/dist/msalServer-DwpEEthz.js +47 -0
- package/dist/msalServer-DwpEEthz.js.map +1 -0
- package/dist/peoplesoft-COFvPG-L.js +170 -0
- package/dist/peoplesoft-COFvPG-L.js.map +1 -0
- package/dist/peoplesoft-CzeJCaYK.d.ts +1081 -0
- package/dist/{queryClient-CAJR3qjE.js → queryClient-1OJ5Va3i.js} +1 -1
- package/dist/{queryClient-CAJR3qjE.js.map → queryClient-1OJ5Va3i.js.map} +1 -1
- package/dist/{useDialogs-BaxhulU9.js → useDialogs-DBcNu-LV.js} +2 -2
- package/dist/{useDialogs-BaxhulU9.js.map → useDialogs-DBcNu-LV.js.map} +1 -1
- package/dist/{utils-BBQ5S6oM.d.ts → utils-BM8-Efdl.d.ts} +2 -2
- package/dist/{utils-CqQKSaSs.js → utils-CBa4vtgn.js} +8 -37
- package/dist/utils-CBa4vtgn.js.map +1 -0
- package/dist/utils.d.ts +2 -2
- package/dist/utils.js +2 -46
- package/dist/vite.js.map +1 -1
- package/package.json +21 -14
- package/skills/auth/SKILL.md +268 -268
- package/dist/FileMeta-D9HyhrGi.js +0 -42
- package/dist/FileMeta-D9HyhrGi.js.map +0 -1
- package/dist/queries-JPqCc5Tb.js +0 -551
- package/dist/queries-JPqCc5Tb.js.map +0 -1
- package/dist/query.d.ts +0 -3052
- package/dist/query.js +0 -3
- package/dist/utils-CqQKSaSs.js.map +0 -1
- package/dist/utils.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queryClient-
|
|
1
|
+
{"version":3,"file":"queryClient-1OJ5Va3i.js","names":["QueryClient","queryClient"],"sources":["../src/lib/queryClient.ts"],"sourcesContent":["import { QueryClient } from \"@tanstack/react-query\";\n\nexport const queryClient = new QueryClient();\n"],"mappings":";;AAEA,MAAaC,cAAc,IAAID,aAAa"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { t as DialogsContext } from "./DialogsContext-
|
|
1
|
+
import { t as DialogsContext } from "./DialogsContext-DkePghS6.js";
|
|
2
2
|
import { c } from "react/compiler-runtime";
|
|
3
3
|
import { Button, Dialog, DialogActions, DialogContent, DialogTitle, useEventCallback } from "@mui/material";
|
|
4
4
|
import { useContext } from "react";
|
|
@@ -245,4 +245,4 @@ function useDialogs() {
|
|
|
245
245
|
//#endregion
|
|
246
246
|
export { useDialogs as t };
|
|
247
247
|
|
|
248
|
-
//# sourceMappingURL=useDialogs-
|
|
248
|
+
//# sourceMappingURL=useDialogs-DBcNu-LV.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useDialogs-
|
|
1
|
+
{"version":3,"file":"useDialogs-DBcNu-LV.js","names":["Button","Dialog","DialogActions","DialogContent","DialogTitle","useEventCallback","useContext","useTranslation","DialogsContext","ReactNode","OpenDialogOptions","onClose","result","TResult","Promise","AlertOptions","title","ConfirmOptions","cancelText","DialogProps","payload","TPayload","open","OpenAlertDialog","message","options","OpenConfirmDialog","DialogComponent","React","ComponentType","OpenDialog","Component","CloseDialog","dialog","AlertDialogPayload","AlertDialogProps","AlertDialog","t0","$","_c","$i","Symbol","for","t","t1","t2","t3","t4","t5","t6","t7","t8","ConfirmDialogPayload","ConfirmDialogProps","ConfirmDialog","t9","t10","t11","t12","DialogHook","alert","confirm","close","useDialogs","undefined","message_0","options_0"],"sources":["../src/hooks/useDialogs.tsx"],"sourcesContent":["import {\r\n Button,\r\n Dialog,\r\n DialogActions,\r\n DialogContent,\r\n DialogTitle,\r\n useEventCallback,\r\n} from \"@mui/material\";\r\nimport { useContext } from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { DialogsContext } from \"../contexts/DialogsContext\";\r\nimport type { ReactNode } from \"react\";\r\n\r\nexport interface OpenDialogOptions<TResult> {\r\n onClose?: (result: TResult) => Promise<void>;\r\n}\r\n\r\nexport interface AlertOptions {\r\n title?: ReactNode;\r\n}\r\n\r\nexport interface ConfirmOptions {\r\n title?: ReactNode;\r\n cancelText?: ReactNode;\r\n}\r\n\r\nexport interface DialogProps<TPayload = undefined, TResult = void> {\r\n payload: TPayload;\r\n open: boolean;\r\n onClose: (result: TResult) => Promise<void>;\r\n}\r\n\r\nexport type OpenAlertDialog = (message: ReactNode, options?: AlertOptions) => Promise<void>;\r\n\r\nexport type OpenConfirmDialog = (message: ReactNode, options?: ConfirmOptions) => Promise<boolean>;\r\n\r\nexport type DialogComponent<TPayload, TResult> = React.ComponentType<\r\n DialogProps<TPayload, TResult>\r\n>;\r\n\r\nexport interface OpenDialog {\r\n <TPayload extends undefined, TResult>(\r\n Component: DialogComponent<TPayload, TResult>,\r\n payload?: TPayload,\r\n options?: OpenDialogOptions<TResult>,\r\n ): Promise<TResult>;\r\n <TPayload, TResult>(\r\n Component: DialogComponent<TPayload, TResult>,\r\n payload: TPayload,\r\n options?: OpenDialogOptions<TResult>,\r\n ): Promise<TResult>;\r\n}\r\n\r\nexport type CloseDialog = <TResult>(dialog: Promise<TResult>, result: TResult) => Promise<TResult>;\r\n\r\nexport interface AlertDialogPayload extends AlertOptions {\r\n message: ReactNode;\r\n}\r\n\r\nexport type AlertDialogProps = DialogProps<AlertDialogPayload, void>;\r\n\r\nexport function AlertDialog({ open, payload, onClose }: Readonly<AlertDialogProps>) {\r\n const { t } = useTranslation();\r\n\r\n return (\r\n <Dialog maxWidth=\"xs\" fullWidth open={open} onClose={() => onClose()} disableRestoreFocus>\r\n <DialogTitle>{payload.title ?? t(\"Layout.Dialog.Alert\")}</DialogTitle>\r\n <DialogContent>{payload.message}</DialogContent>\r\n <DialogActions>\r\n <Button onClick={() => onClose()} autoFocus>\r\n {t(\"Layout.Dialog.Confirm\")}\r\n </Button>\r\n </DialogActions>\r\n </Dialog>\r\n );\r\n}\r\n\r\nexport interface ConfirmDialogPayload extends ConfirmOptions {\r\n message: ReactNode;\r\n}\r\n\r\nexport type ConfirmDialogProps = DialogProps<ConfirmDialogPayload, boolean>;\r\n\r\nexport function ConfirmDialog({ open, payload, onClose }: Readonly<ConfirmDialogProps>) {\r\n const { t } = useTranslation();\r\n\r\n return (\r\n <Dialog maxWidth=\"xs\" fullWidth open={open} onClose={() => onClose(false)} disableRestoreFocus>\r\n <DialogTitle>{payload.title ?? t(\"Layout.Dialog.Confirm\")}</DialogTitle>\r\n <DialogContent>{payload.message}</DialogContent>\r\n <DialogActions>\r\n <Button onClick={() => onClose(false)}>\r\n {payload.cancelText ?? t(\"Layout.Dialog.Cancel\")}\r\n </Button>\r\n <Button onClick={() => onClose(true)} autoFocus>\r\n {t(\"Layout.Dialog.Confirm\")}\r\n </Button>\r\n </DialogActions>\r\n </Dialog>\r\n );\r\n}\r\n\r\ninterface DialogHook {\r\n alert: OpenAlertDialog;\r\n confirm: OpenConfirmDialog;\r\n open: OpenDialog;\r\n close: CloseDialog;\r\n}\r\n\r\nexport function useDialogs(): DialogHook {\r\n const { open, close } = useContext(DialogsContext);\r\n\r\n const alert = useEventCallback<OpenAlertDialog>((message, { ...options } = {}) =>\r\n open(AlertDialog, { ...options, message }),\r\n );\r\n\r\n const confirm = useEventCallback<OpenConfirmDialog>((message, { ...options } = {}) =>\r\n open(ConfirmDialog, { ...options, message }),\r\n );\r\n\r\n return { alert, confirm, open, close };\r\n}\r\n"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { t as User } from "./User-
|
|
1
|
+
import { t as User } from "./User-B92WOpE2.js";
|
|
2
2
|
import { permissions } from "virtual:wcz-layout";
|
|
3
3
|
//#region src/lib/utils.d.ts
|
|
4
4
|
declare const WISTRON_PRIMARY_COLOR = "#00506E";
|
|
@@ -53,4 +53,4 @@ declare const requirePermission: (permissionKey: keyof typeof permissions) => ()
|
|
|
53
53
|
type FormOmittedProps = "name" | "value" | "onChange" | "onBlur" | "error" | "helperText" | "renderInput" | "type" | "aria-label";
|
|
54
54
|
//#endregion
|
|
55
55
|
export { requirePermission as a, WISTRON_SECONDARY_COLOR as i, Platform as n, rootRouteHead as o, WISTRON_PRIMARY_COLOR as r, FormOmittedProps as t };
|
|
56
|
-
//# sourceMappingURL=utils-
|
|
56
|
+
//# sourceMappingURL=utils-BM8-Efdl.d.ts.map
|
|
@@ -1,39 +1,13 @@
|
|
|
1
|
+
import { t as clientEnv } from "./env-szOeLEuD.js";
|
|
1
2
|
import { permissions, scopes } from "virtual:wcz-layout";
|
|
2
|
-
import { z } from "zod";
|
|
3
3
|
import { BrowserAuthError, EventType, InteractionRequiredAuthError, NavigationClient, PublicClientApplication } from "@azure/msal-browser";
|
|
4
|
-
import { createEnv } from "@t3-oss/env-core";
|
|
5
4
|
import { createClientOnlyFn, createIsomorphicFn } from "@tanstack/react-start";
|
|
6
|
-
//#region src/env.ts
|
|
7
|
-
const clientEnv = createEnv({
|
|
8
|
-
clientPrefix: "VITE_",
|
|
9
|
-
client: {
|
|
10
|
-
VITE_ENTRA_CLIENT_ID: z.string(),
|
|
11
|
-
VITE_ENTRA_TENANT_ID: z.string(),
|
|
12
|
-
VITE_APP_TITLE: z.string(),
|
|
13
|
-
VITE_MUI_LICENSE_KEY: z.string()
|
|
14
|
-
},
|
|
15
|
-
runtimeEnv: import.meta.env,
|
|
16
|
-
emptyStringAsUndefined: true
|
|
17
|
-
});
|
|
18
|
-
const serverEnv = createEnv({
|
|
19
|
-
server: {
|
|
20
|
-
ENTRA_CLIENT_ID: z.string(),
|
|
21
|
-
ENTRA_TENANT_ID: z.string(),
|
|
22
|
-
ENTRA_CLIENT_SECRET: z.string()
|
|
23
|
-
},
|
|
24
|
-
runtimeEnv: process.env,
|
|
25
|
-
emptyStringAsUndefined: true
|
|
26
|
-
});
|
|
27
|
-
//#endregion
|
|
28
5
|
//#region src/lib/auth/msalClient.ts
|
|
29
|
-
const pca = new PublicClientApplication({
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
},
|
|
35
|
-
cache: { cacheLocation: "localStorage" }
|
|
36
|
-
});
|
|
6
|
+
const pca = new PublicClientApplication({ auth: {
|
|
7
|
+
clientId: clientEnv.VITE_ENTRA_CLIENT_ID,
|
|
8
|
+
authority: `https://login.microsoftonline.com/${clientEnv.VITE_ENTRA_TENANT_ID}`,
|
|
9
|
+
redirectUri: "/"
|
|
10
|
+
} });
|
|
37
11
|
const restoreActiveAccount = () => {
|
|
38
12
|
if (pca.getActiveAccount()) return;
|
|
39
13
|
const [firstAccount] = pca.getAllAccounts();
|
|
@@ -194,9 +168,6 @@ const getFieldStatus = (field) => {
|
|
|
194
168
|
helperText: meta.errors[0]?.message
|
|
195
169
|
};
|
|
196
170
|
};
|
|
197
|
-
const toKebabCase = (str) => {
|
|
198
|
-
return str.replaceAll(/([a-z])([A-Z])/g, "$1-$2").replaceAll(/[\s_]+/g, "-").replaceAll(/[^a-zA-Z0-9-]/g, "").toLowerCase().replaceAll(/-+/g, "-").replaceAll(/(^-|-$)/g, "");
|
|
199
|
-
};
|
|
200
171
|
const decodeJwt = (token) => {
|
|
201
172
|
const base64 = token.split(".")[1].replace(/-/g, "+").replace(/_/g, "/");
|
|
202
173
|
const payload = decodeURIComponent(atob(base64).split("").map((c) => "%" + ("00" + c.charCodeAt(0).toString(16)).slice(-2)).join(""));
|
|
@@ -214,6 +185,6 @@ const buildUser = (payload) => ({
|
|
|
214
185
|
}
|
|
215
186
|
});
|
|
216
187
|
//#endregion
|
|
217
|
-
export { getFieldStatus as a,
|
|
188
|
+
export { getFieldStatus as a, TanStackNavigationClient as c, pca as d, buildUser as i, getAccessToken as l, WISTRON_PRIMARY_COLOR as n, requirePermission as o, WISTRON_SECONDARY_COLOR as r, rootRouteHead as s, Platform as t, getUser as u };
|
|
218
189
|
|
|
219
|
-
//# sourceMappingURL=utils-
|
|
190
|
+
//# sourceMappingURL=utils-CBa4vtgn.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils-CBa4vtgn.js","names":["AuthenticationResult","BrowserAuthError","EventMessage","EventType","InteractionRequiredAuthError","NavigationClient","NavigationOptions","PublicClientApplication","useNavigate","createClientOnlyFn","createIsomorphicFn","scopes","definedScopes","clientEnv","buildUser","decodeJwt","User","pca","auth","clientId","VITE_ENTRA_CLIENT_ID","authority","VITE_ENTRA_TENANT_ID","redirectUri","restoreActiveAccount","getActiveAccount","firstAccount","getAllAccounts","setActiveAccount","initializeMsal","globalThis","window","undefined","initialize","addEventCallback","event","eventType","LOGIN_SUCCESS","payload","account","response","handleRedirectPromise","initializationPromise","msalReady","TanStackNavigationClient","constructor","navigate","ReturnType","navigateInternal","url","options","relative","replace","location","origin","to","noHistory","getUser","server","client","Promise","idToken","getAccessToken","scopeKey","Error","accessToken","acquireTokenSilent","error","acquireTokenRedirect","redirectError","errorCode","AnyFieldApi","permissions","clientEnv","TokenPayload","User","getUser","WISTRON_PRIMARY_COLOR","WISTRON_SECONDARY_COLOR","Platform","isAndroid","test","userAgent","isIOS","isWindows","isMacOS","navigator","RootRouteHeadOptions","manifest","rootRouteHead","options","meta","charSet","name","content","title","VITE_APP_TITLE","links","rel","sizes","href","type","requirePermission","permissionKey","user","hasPermission","Error","FormOmittedProps","getFieldStatus","field","state","isTouched","hasError","errors","length","helperText","message","toKebabCase","str","replaceAll","toLowerCase","decodeJwt","token","base64Payload","split","base64","replace","payload","decodeURIComponent","atob","map","c","charCodeAt","toString","slice","join","JSON","parse","buildUser","id","sub","email","preferred_username","department","toUpperCase","employeeId","companyName","key","allowedGroups","some","k","groups","includes"],"sources":["../src/lib/auth/msalClient.ts","../src/lib/utils.ts"],"sourcesContent":["import {\n AuthenticationResult,\n BrowserAuthError,\n EventMessage,\n EventType,\n InteractionRequiredAuthError,\n NavigationClient,\n NavigationOptions,\n PublicClientApplication,\n} from \"@azure/msal-browser\";\nimport { useNavigate } from \"@tanstack/react-router\";\nimport { createClientOnlyFn, createIsomorphicFn } from \"@tanstack/react-start\";\nimport { scopes as definedScopes } from \"virtual:wcz-layout\";\nimport { clientEnv } from \"~/env\";\nimport { buildUser, decodeJwt } from \"~/lib/utils\";\nimport type { User } from \"~/models/User\";\n\nexport const pca = new PublicClientApplication({\n auth: {\n clientId: clientEnv.VITE_ENTRA_CLIENT_ID,\n authority: `https://login.microsoftonline.com/${clientEnv.VITE_ENTRA_TENANT_ID}`,\n redirectUri: \"/\",\n }\n});\n\nconst restoreActiveAccount = () => {\n if (pca.getActiveAccount()) return;\n const [firstAccount] = pca.getAllAccounts();\n if (firstAccount) pca.setActiveAccount(firstAccount);\n};\n\nconst initializeMsal = async () => {\n if (globalThis.window === undefined) return;\n\n await pca.initialize();\n\n pca.addEventCallback((event: EventMessage) => {\n if (event.eventType === EventType.LOGIN_SUCCESS && event.payload) {\n const payload = event.payload as AuthenticationResult;\n pca.setActiveAccount(payload.account);\n }\n });\n\n const response = await pca.handleRedirectPromise();\n if (response?.account) {\n pca.setActiveAccount(response.account);\n return;\n }\n\n restoreActiveAccount();\n};\n\nconst initializationPromise = initializeMsal();\nawait initializationPromise;\n\nexport const msalReady = () => initializationPromise;\n\nexport class TanStackNavigationClient extends NavigationClient {\n constructor(private readonly navigate: ReturnType<typeof useNavigate>) {\n super();\n }\n async navigateInternal(url: string, options: NavigationOptions) {\n const relative = url.replace(location.origin, \"\");\n this.navigate({ to: relative, replace: options.noHistory });\n return false;\n }\n}\n\nexport const getUser = createIsomorphicFn()\n .server(() => null)\n .client(async (): Promise<User | null> => {\n await initializationPromise;\n restoreActiveAccount();\n\n const account = pca.getActiveAccount();\n if (!account?.idToken) return null;\n\n return buildUser(decodeJwt(account.idToken));\n });\n\n/**\n * Token Acquisition: Get authenticated access token.\n * Use when: Making API calls from the browser to secured endpoints.\n */\nexport const getAccessToken = createClientOnlyFn(async (scopeKey: keyof typeof definedScopes) => {\n await initializationPromise;\n restoreActiveAccount();\n\n const account = pca.getActiveAccount();\n if (!account) throw new Error(\"No active account. User not signed in.\");\n\n const scopes = [...definedScopes[scopeKey]];\n\n try {\n const { accessToken } = await pca.acquireTokenSilent({ scopes, account });\n return accessToken;\n } catch (error) {\n if (error instanceof InteractionRequiredAuthError) {\n try {\n await pca.acquireTokenRedirect({ scopes, account });\n } catch (redirectError) {\n // Another interaction is already in progress — MSAL will handle it.\n if (\n !(redirectError instanceof BrowserAuthError) ||\n redirectError.errorCode !== \"interaction_in_progress\"\n ) {\n throw redirectError;\n }\n }\n\n // Keep the caller suspended until the page navigates away so pending\n // server functions don't fire without an Authorization header.\n await new Promise<never>(() => {});\n }\n\n throw error;\n }\n});\n","import type { AnyFieldApi } from \"@tanstack/react-form\";\nimport { permissions } from \"virtual:wcz-layout\";\nimport { clientEnv } from \"~/env\";\nimport type { TokenPayload } from \"~/models/TokenPayload\";\nimport type { User } from \"~/models/User\";\nimport { getUser } from \"./auth/msalClient\";\n\nexport const WISTRON_PRIMARY_COLOR = \"#00506E\";\nexport const WISTRON_SECONDARY_COLOR = \"#64DC00\";\n\nexport class Platform {\n static get isAndroid() {\n return /android/i.test(this.userAgent);\n }\n static get isIOS() {\n return /iPad|iPhone|iPod/.test(this.userAgent);\n }\n static get isWindows() {\n return /windows/i.test(this.userAgent);\n }\n static get isMacOS() {\n return /Macintosh|MacIntel|MacPPC|Mac68K/.test(this.userAgent);\n }\n\n private static get userAgent() {\n return typeof navigator === \"undefined\" ? \"\" : navigator.userAgent;\n }\n}\n\ninterface RootRouteHeadOptions {\n manifest?: string;\n}\n\nexport const rootRouteHead = (options?: RootRouteHeadOptions) => ({\n meta: [\n { charSet: \"utf-8\" },\n { name: \"viewport\", content: \"width=device-width, initial-scale=1\" },\n { title: clientEnv.VITE_APP_TITLE },\n { name: \"og:type\", content: \"website\" },\n { name: \"og:title\", content: clientEnv.VITE_APP_TITLE },\n { name: \"og:image\", content: \"/favicon-32x32.png\" },\n ],\n links: [\n { rel: \"apple-touch-icon\", sizes: \"180x180\", href: \"/apple-touch-icon.png\" },\n { rel: \"icon\", type: \"image/png\", sizes: \"32x32\", href: \"/favicon-32x32.png\" },\n { rel: \"icon\", type: \"image/png\", sizes: \"16x16\", href: \"/favicon-16x16.png\" },\n { rel: \"manifest\", href: options?.manifest || \"/manifest.json\" },\n { rel: \"icon\", href: \"/favicon.ico\" },\n ],\n});\n\nexport const requirePermission = (permissionKey: keyof typeof permissions) => {\n return async () => {\n const user = await getUser();\n\n if (!user?.hasPermission(permissionKey))\n throw new Error(\"You do not have permission to access this page.\");\n\n return { user };\n };\n};\n\n/* Internal Utils */\nexport type FormOmittedProps =\n | \"name\"\n | \"value\"\n | \"onChange\"\n | \"onBlur\"\n | \"error\"\n | \"helperText\"\n | \"renderInput\"\n | \"type\"\n | \"aria-label\";\n\nexport const getFieldStatus = (field: AnyFieldApi) => {\n const { meta } = field.state;\n\n const isTouched = meta.isTouched;\n const hasError = !!meta.errors.length;\n const helperText = meta.errors[0]?.message;\n\n return { isTouched, hasError, helperText };\n};\n\nexport const toKebabCase = (str: string): string => {\n return str\n .replaceAll(/([a-z])([A-Z])/g, \"$1-$2\")\n .replaceAll(/[\\s_]+/g, \"-\")\n .replaceAll(/[^a-zA-Z0-9-]/g, \"\")\n .toLowerCase()\n .replaceAll(/-+/g, \"-\")\n .replaceAll(/(^-|-$)/g, \"\");\n};\n\nexport const decodeJwt = (token: string) => {\n const base64Payload = token.split(\".\")[1];\n const base64 = base64Payload.replace(/-/g, \"+\").replace(/_/g, \"/\");\n const payload = decodeURIComponent(\n atob(base64)\n .split(\"\")\n .map((c) => \"%\" + (\"00\" + c.charCodeAt(0).toString(16)).slice(-2))\n .join(\"\"),\n );\n return JSON.parse(payload) as TokenPayload;\n};\n\nexport const buildUser = (payload: TokenPayload): User => ({\n id: payload.sub,\n name: payload.name?.split(\"/\")[0],\n email: payload.preferred_username?.toLowerCase(),\n department: payload.department?.toUpperCase() || \"\",\n employeeId: payload.employeeId?.toUpperCase() || \"\",\n companyName: payload.companyName || \"\",\n hasPermission: (key: keyof typeof permissions) => {\n const allowedGroups = permissions[key];\n return allowedGroups.some((k) => (payload.groups ?? []).includes(k));\n },\n});\n"],"mappings":";;;;;AAiBA,MAAaiB,MAAM,IAAIV,wBAAwB,EAC7CW,MAAM;CACJC,UAAUN,UAAUO;CACpBC,WAAW,qCAAqCR,UAAUS;CAC1DC,aAAa;CACf,EACD,CAAC;AAEF,MAAMC,6BAA6B;AACjC,KAAIP,IAAIQ,kBAAkB,CAAE;CAC5B,MAAM,CAACC,gBAAgBT,IAAIU,gBAAgB;AAC3C,KAAID,aAAcT,KAAIW,iBAAiBF,aAAa;;AAGtD,MAAMG,iBAAiB,YAAY;AACjC,KAAIC,WAAWC,WAAWC,KAAAA,EAAW;AAErC,OAAMf,IAAIgB,YAAY;AAEtBhB,KAAIiB,kBAAkBC,UAAwB;AAC5C,MAAIA,MAAMC,cAAcjC,UAAUkC,iBAAiBF,MAAMG,SAAS;GAChE,MAAMA,UAAUH,MAAMG;AACtBrB,OAAIW,iBAAiBU,QAAQC,QAAQ;;GAEvC;CAEF,MAAMC,WAAW,MAAMvB,IAAIwB,uBAAuB;AAClD,KAAID,UAAUD,SAAS;AACrBtB,MAAIW,iBAAiBY,SAASD,QAAQ;AACtC;;AAGFf,uBAAsB;;AAGxB,MAAMkB,wBAAwBb,gBAAgB;AAC9C,MAAMa;AAIN,IAAaE,2BAAb,cAA8CvC,iBAAiB;CAC7DwC,YAAY,UAA2D;AACrE,SAAO;AADoBC,OAAAA,WAAAA;;CAG7B,MAAME,iBAAiBC,KAAaC,SAA4B;EAC9D,MAAMC,WAAWF,IAAIG,QAAQC,SAASC,QAAQ,GAAG;AACjD,OAAKR,SAAS;GAAES,IAAIJ;GAAUC,SAASF,QAAQM;GAAW,CAAC;AAC3D,SAAO;;;AAIX,MAAaC,UAAU/C,oBAAoB,CACxCgD,aAAa,KAAK,CAClBC,OAAO,YAAkC;AACxC,OAAMjB;AACNlB,uBAAsB;CAEtB,MAAMe,UAAUtB,IAAIQ,kBAAkB;AACtC,KAAI,CAACc,SAASsB,QAAS,QAAO;AAE9B,QAAO/C,UAAUC,UAAUwB,QAAQsB,QAAQ,CAAC;EAC5C;;;;;AAMJ,MAAaC,iBAAiBrD,mBAAmB,OAAOsD,aAAyC;AAC/F,OAAMrB;AACNlB,uBAAsB;CAEtB,MAAMe,UAAUtB,IAAIQ,kBAAkB;AACtC,KAAI,CAACc,QAAS,OAAM,IAAIyB,MAAM,yCAAyC;CAEvE,MAAMrD,WAAS,CAAC,GAAGC,OAAcmD,UAAU;AAE3C,KAAI;EACF,MAAM,EAAEE,gBAAgB,MAAMhD,IAAIiD,mBAAmB;GAAEvD,QAAAA;GAAQ4B;GAAS,CAAC;AACzE,SAAO0B;UACAE,OAAO;AACd,MAAIA,iBAAiB/D,8BAA8B;AACjD,OAAI;AACF,UAAMa,IAAImD,qBAAqB;KAAEzD,QAAAA;KAAQ4B;KAAS,CAAC;YAC5C8B,eAAe;AAEtB,QACE,EAAEA,yBAAyBpE,qBAC3BoE,cAAcC,cAAc,0BAE5B,OAAMD;;AAMV,SAAM,IAAIT,cAAqB,GAAG;;AAGpC,QAAMO;;EAER;;;AC9GF,MAAaU,wBAAwB;AACrC,MAAaC,0BAA0B;AAEvC,IAAaC,WAAb,MAAsB;CACpB,WAAWC,YAAY;AACrB,SAAO,WAAWC,KAAK,KAAKC,UAAU;;CAExC,WAAWC,QAAQ;AACjB,SAAO,mBAAmBF,KAAK,KAAKC,UAAU;;CAEhD,WAAWE,YAAY;AACrB,SAAO,WAAWH,KAAK,KAAKC,UAAU;;CAExC,WAAWG,UAAU;AACnB,SAAO,mCAAmCJ,KAAK,KAAKC,UAAU;;CAGhE,WAAmBA,YAAY;AAC7B,SAAO,OAAOI,cAAc,cAAc,KAAKA,UAAUJ;;;AAQ7D,MAAaO,iBAAiBC,aAAoC;CAChEC,MAAM;EACJ,EAAEC,SAAS,SAAS;EACpB;GAAEC,MAAM;GAAYC,SAAS;GAAuC;EACpE,EAAEC,OAAOtB,UAAUuB,gBAAgB;EACnC;GAAEH,MAAM;GAAWC,SAAS;GAAW;EACvC;GAAED,MAAM;GAAYC,SAASrB,UAAUuB;GAAgB;EACvD;GAAEH,MAAM;GAAYC,SAAS;GAAsB;EACpD;CACDG,OAAO;EACL;GAAEC,KAAK;GAAoBC,OAAO;GAAWC,MAAM;GAAyB;EAC5E;GAAEF,KAAK;GAAQG,MAAM;GAAaF,OAAO;GAASC,MAAM;GAAsB;EAC9E;GAAEF,KAAK;GAAQG,MAAM;GAAaF,OAAO;GAASC,MAAM;GAAsB;EAC9E;GAAEF,KAAK;GAAYE,MAAMV,SAASF,YAAY;GAAkB;EAChE;GAAEU,KAAK;GAAQE,MAAM;GAAgB;EAAA;CAExC;AAED,MAAaE,qBAAqBC,kBAA4C;AAC5E,QAAO,YAAY;EACjB,MAAMC,OAAO,MAAM5B,SAAS;AAE5B,MAAI,CAAC4B,MAAMC,cAAcF,cAAc,CACrC,OAAM,IAAIG,MAAM,kDAAkD;AAEpE,SAAO,EAAEF,MAAM;;;AAgBnB,MAAaI,kBAAkBC,UAAuB;CACpD,MAAM,EAAElB,SAASkB,MAAMC;AAMvB,QAAO;EAAEC,WAJSpB,KAAKoB;EAIHC,UAAAA,CAHF,CAACrB,KAAKsB,OAAOC;EAGDC,YAFXxB,KAAKsB,OAAO,IAAIG;EAEO;;AAa5C,MAAaK,aAAaC,UAAkB;CAE1C,MAAMG,SADgBH,MAAME,MAAM,IAAI,CAAC,GACVE,QAAQ,MAAM,IAAI,CAACA,QAAQ,MAAM,IAAI;CAClE,MAAMC,UAAUC,mBACdC,KAAKJ,OAAO,CACTD,MAAM,GAAG,CACTM,KAAKC,MAAM,OAAO,OAAOA,EAAEC,WAAW,EAAE,CAACC,SAAS,GAAG,EAAEC,MAAM,GAAG,CAAC,CACjEC,KAAK,GACV,CAAC;AACD,QAAOC,KAAKC,MAAMV,QAAQ;;AAG5B,MAAaW,aAAaX,aAAiC;CACzDY,IAAIZ,QAAQa;CACZ/C,MAAMkC,QAAQlC,MAAM+B,MAAM,IAAI,CAAC;CAC/BiB,OAAOd,QAAQe,oBAAoBtB,aAAa;CAChDuB,YAAYhB,QAAQgB,YAAYC,aAAa,IAAI;CACjDC,YAAYlB,QAAQkB,YAAYD,aAAa,IAAI;CACjDE,aAAanB,QAAQmB,eAAe;CACpCzC,gBAAgB0C,QAAkC;AAEhD,SADsB3E,YAAY2E,KACbE,MAAMC,OAAOvB,QAAQwB,UAAU,EAAE,EAAEC,SAASF,EAAE,CAAC;;CAEvE"}
|
package/dist/utils.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { a as requirePermission, n as Platform } from "./utils-
|
|
2
|
-
import { t as getAccessToken } from "./msalClient-
|
|
1
|
+
import { a as requirePermission, n as Platform } from "./utils-BM8-Efdl.js";
|
|
2
|
+
import { t as getAccessToken } from "./msalClient-DZjYT_QJ.js";
|
|
3
3
|
import i18next, { t } from "i18next";
|
|
4
4
|
import { scopes } from "virtual:wcz-layout";
|
|
5
5
|
import { createEnv } from "@t3-oss/env-core";
|
package/dist/utils.js
CHANGED
|
@@ -1,50 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { l as getAccessToken, o as requirePermission, t as Platform } from "./utils-CBa4vtgn.js";
|
|
2
|
+
import { n as getTokenOnBehalfOf, t as getAppToken } from "./msalServer-DwpEEthz.js";
|
|
2
3
|
import i18next, { t } from "i18next";
|
|
3
|
-
import { scopes } from "virtual:wcz-layout";
|
|
4
4
|
import { createEnv } from "@t3-oss/env-core";
|
|
5
|
-
import { createServerOnlyFn } from "@tanstack/react-start";
|
|
6
5
|
import { uuidv7 } from "uuidv7";
|
|
7
|
-
import { ConfidentialClientApplication } from "@azure/msal-node";
|
|
8
|
-
//#region src/lib/auth/msalServer.ts
|
|
9
|
-
let ccaInstance = null;
|
|
10
|
-
function getCCA() {
|
|
11
|
-
ccaInstance ??= new ConfidentialClientApplication({ auth: {
|
|
12
|
-
clientId: serverEnv.ENTRA_CLIENT_ID,
|
|
13
|
-
clientSecret: serverEnv.ENTRA_CLIENT_SECRET,
|
|
14
|
-
authority: `https://login.microsoftonline.com/${serverEnv.ENTRA_TENANT_ID}`
|
|
15
|
-
} });
|
|
16
|
-
return ccaInstance;
|
|
17
|
-
}
|
|
18
|
-
/**
|
|
19
|
-
* On-Behalf-Of flow: Exchange user token for a token to call downstream API
|
|
20
|
-
* Use when: Server needs to call microservice on behalf of the logged-in user
|
|
21
|
-
*/
|
|
22
|
-
const getTokenOnBehalfOf = createServerOnlyFn(async (userToken, scopeKey) => {
|
|
23
|
-
const cca = getCCA();
|
|
24
|
-
const scopes$1 = [...scopes[scopeKey]];
|
|
25
|
-
const result = await cca.acquireTokenOnBehalfOf({
|
|
26
|
-
oboAssertion: userToken,
|
|
27
|
-
scopes: scopes$1
|
|
28
|
-
});
|
|
29
|
-
if (!result) throw new Error("Failed to acquire OBO token");
|
|
30
|
-
return result.accessToken;
|
|
31
|
-
});
|
|
32
|
-
/**
|
|
33
|
-
* Client Credentials flow: Get app-only token (no user context)
|
|
34
|
-
* Use when: Background jobs, scheduled tasks, service-to-service calls
|
|
35
|
-
*/
|
|
36
|
-
const getAppToken = createServerOnlyFn(async (scopeKey) => {
|
|
37
|
-
const cca = getCCA();
|
|
38
|
-
const defaultScopes = scopes[scopeKey].map((scope) => {
|
|
39
|
-
const lastSlash = scope.lastIndexOf("/");
|
|
40
|
-
return `${scope.substring(0, lastSlash)}/.default`;
|
|
41
|
-
});
|
|
42
|
-
const uniqueScopes = [...new Set(defaultScopes)];
|
|
43
|
-
const result = await cca.acquireTokenByClientCredential({ scopes: uniqueScopes });
|
|
44
|
-
if (!result) throw new Error("Failed to acquire app token");
|
|
45
|
-
return result.accessToken;
|
|
46
|
-
});
|
|
47
|
-
//#endregion
|
|
48
6
|
export { Platform, createEnv, getAccessToken, getAppToken, getTokenOnBehalfOf, i18next, requirePermission, t, uuidv7 };
|
|
49
|
-
|
|
50
|
-
//# sourceMappingURL=utils.js.map
|
package/dist/vite.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vite.js","names":["z","VaultConfigSchema","object","VAULT_ADDRESS","url","VAULT_USERNAME","string","min","VAULT_PASSWORD","VAULT_SECRET_PATH","VAULT_MOUNT_POINT","default","VaultConfig","infer","fs","https","path","axios","loadEnv","VaultConfigSchema","Resource","Plugin","fetchVaultSecrets","env","Record","Promise","config","parse","VAULT_ADDRESS","VAULT_USERNAME","VAULT_PASSWORD","VAULT_SECRET_PATH","VAULT_MOUNT_POINT","client","create","baseURL","httpsAgent","Agent","rejectUnauthorized","data","loginData","post","password","secretData","get","headers","auth","client_token","secrets","Error","Object","fromEntries","entries","map","key","value","JSON","stringify","loadVaultSecrets","command","process","cwd","forEach","e","console","warn","message","loadLocaleResources","localesPath","addWatchFile","existsSync","mkdirSync","recursive","enPath","join","writeFileSync","files","readdirSync","resources","file","filter","f","endsWith","lang","basename","filePath","translation","readFileSync","ensurePermissionsFile","permissionsPath","dir","dirname","ensureScopesFile","scopesPath","viteWczLayout","virtualModuleId","resolvedVirtualModuleId","name","enforce","configResolved","resolvedConfig","resolve","root","_","optimizeDeps","exclude","include","configureServer","server","refresh","includes","module","moduleGraph","getModuleById","invalidateModule","ws","send","type","watcher","add","on","resolveId","id","load","bind","normalizedPermissionsPath","split","sep","posix","normalizedScopesPath"],"sources":["../src/models/VaultConfig.ts","../src/lib/vite-plugin.ts"],"sourcesContent":["import z from \"zod\";\n\nexport const VaultConfigSchema = z.object({\n VAULT_ADDRESS: z.url(),\n VAULT_USERNAME: z.string().min(1),\n VAULT_PASSWORD: z.string().min(1),\n VAULT_SECRET_PATH: z.string().min(1),\n VAULT_MOUNT_POINT: z.string().default(\"release\"),\n});\n\nexport type VaultConfig = z.infer<typeof VaultConfigSchema>;\n","import fs from \"node:fs\";\nimport https from \"node:https\";\nimport path from \"node:path\";\nimport axios from \"axios\";\nimport { loadEnv } from \"vite\";\nimport { VaultConfigSchema } from \"../models/VaultConfig\";\nimport type { Resource } from \"i18next\";\nimport type { Plugin } from \"vite\";\n\nasync function fetchVaultSecrets(env: Record<string, string>): Promise<Record<string, string>> {\n const config = VaultConfigSchema.parse(env);\n const { VAULT_ADDRESS, VAULT_USERNAME, VAULT_PASSWORD, VAULT_SECRET_PATH, VAULT_MOUNT_POINT } =\n config;\n\n const client = axios.create({\n baseURL: VAULT_ADDRESS,\n httpsAgent: new https.Agent({ rejectUnauthorized: false }),\n });\n\n const { data: loginData } = await client.post(`/v1/auth/userpass/login/${VAULT_USERNAME}`, {\n password: VAULT_PASSWORD,\n });\n\n const { data: secretData } = await client.get(\n `/v1/${VAULT_MOUNT_POINT}/data/${VAULT_SECRET_PATH}`,\n {\n headers: { \"X-Vault-Token\": loginData.auth.client_token },\n },\n );\n\n const secrets = secretData?.data?.data;\n if (!secrets) throw new Error(\"No secrets found\");\n\n return Object.fromEntries(\n Object.entries(secrets).map(([key, value]) => [\n key,\n typeof value === \"string\" ? value : JSON.stringify(value),\n ]),\n );\n}\n\nasync function loadVaultSecrets(command: string): Promise<void> {\n if (command !== \"serve\") return;\n\n const env = loadEnv(\"development\", process.cwd(), \"\");\n if (!env.VAULT_ADDRESS) return;\n\n try {\n const secrets = await fetchVaultSecrets(env);\n Object.entries(secrets).forEach(([key, value]) => {\n process.env[key] ??= value;\n });\n } catch (e) {\n console.warn(\"[vite:wcz-layout] Vault failed:\", e instanceof Error ? e.message : e);\n }\n}\n\nfunction loadLocaleResources(localesPath: string, addWatchFile: (path: string) => void): Resource {\n if (!fs.existsSync(localesPath)) fs.mkdirSync(localesPath, { recursive: true });\n\n const enPath = path.join(localesPath, \"en.json\");\n if (!fs.existsSync(enPath)) fs.writeFileSync(enPath, JSON.stringify({}));\n\n const files = fs.readdirSync(localesPath);\n const resources: Resource = {};\n\n for (const file of files.filter((f) => f.endsWith(\".json\"))) {\n const lang = path.basename(file, \".json\");\n const filePath = path.join(localesPath, file);\n try {\n resources[lang] = { translation: JSON.parse(fs.readFileSync(filePath, \"utf-8\")) };\n } catch {\n resources[lang] = { translation: {} };\n }\n addWatchFile(filePath);\n }\n\n return resources;\n}\n\nfunction ensurePermissionsFile(\n permissionsPath: string,\n addWatchFile: (path: string) => void,\n): void {\n const dir = path.dirname(permissionsPath);\n if (!fs.existsSync(dir)) fs.mkdirSync(dir, { recursive: true });\n if (!fs.existsSync(permissionsPath)) {\n fs.writeFileSync(\n permissionsPath,\n 'export const permissions = {\\n admin: [\"wcz-developers\"]\\n} as const;',\n );\n }\n addWatchFile(permissionsPath);\n}\n\nfunction ensureScopesFile(scopesPath: string, addWatchFile: (path: string) => void): void {\n const dir = path.dirname(scopesPath);\n if (!fs.existsSync(dir)) fs.mkdirSync(dir, { recursive: true });\n if (!fs.existsSync(scopesPath)) {\n fs.writeFileSync(scopesPath, \"export const scopes = {\\n} as const;\");\n }\n addWatchFile(scopesPath);\n}\n\nexport function viteWczLayout(): Plugin {\n const virtualModuleId = \"virtual:wcz-layout\";\n const resolvedVirtualModuleId = \"\\0\" + virtualModuleId;\n\n let localesPath: string;\n let permissionsPath: string;\n let scopesPath: string;\n\n return {\n name: \"vite:wcz-layout\",\n enforce: \"pre\",\n configResolved(resolvedConfig) {\n localesPath = path.resolve(resolvedConfig.root, \"src/locales\");\n permissionsPath = path.resolve(resolvedConfig.root, \"src/lib/auth/permissions.ts\");\n scopesPath = path.resolve(resolvedConfig.root, \"src/lib/auth/scopes.ts\");\n },\n async config(_, { command }) {\n await loadVaultSecrets(command);\n\n return {\n optimizeDeps: {\n exclude: [virtualModuleId],\n include: [\n \"prop-types\",\n \"react-is\",\n \"hoist-non-react-statics\",\n \"url-parse\",\n \"file-saver\",\n \"attr-accept\",\n ],\n },\n };\n },\n configureServer(server) {\n const refresh = (filePath: string) => {\n if (\n filePath.includes(localesPath) ||\n filePath === permissionsPath ||\n filePath === scopesPath\n ) {\n const module = server.moduleGraph.getModuleById(resolvedVirtualModuleId);\n if (module) server.moduleGraph.invalidateModule(module);\n server.ws.send({ type: \"full-reload\", path: \"*\" });\n }\n };\n\n server.watcher.add([localesPath, permissionsPath, scopesPath]);\n server.watcher.on(\"add\", refresh);\n server.watcher.on(\"change\", refresh);\n server.watcher.on(\"unlink\", refresh);\n },\n resolveId(id) {\n if (id === virtualModuleId) return resolvedVirtualModuleId;\n return null;\n },\n load(id) {\n if (id !== resolvedVirtualModuleId) return null;\n\n const resources = loadLocaleResources(localesPath, this.addWatchFile.bind(this));\n ensurePermissionsFile(permissionsPath, this.addWatchFile.bind(this));\n ensureScopesFile(scopesPath, this.addWatchFile.bind(this));\n\n const normalizedPermissionsPath = permissionsPath.split(path.sep).join(path.posix.sep);\n const normalizedScopesPath = scopesPath.split(path.sep).join(path.posix.sep);\n return `\n export const resources = ${JSON.stringify(resources)};\n export { permissions } from \"${normalizedPermissionsPath}\";\n export { scopes } from \"${normalizedScopesPath}\";\n `;\n },\n };\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"vite.js","names":["z","VaultConfigSchema","object","VAULT_ADDRESS","url","VAULT_USERNAME","string","min","VAULT_PASSWORD","VAULT_SECRET_PATH","VAULT_MOUNT_POINT","default","VaultConfig","infer","fs","https","path","axios","loadEnv","VaultConfigSchema","Resource","Plugin","fetchVaultSecrets","env","Record","Promise","config","parse","VAULT_ADDRESS","VAULT_USERNAME","VAULT_PASSWORD","VAULT_SECRET_PATH","VAULT_MOUNT_POINT","client","create","baseURL","httpsAgent","Agent","rejectUnauthorized","data","loginData","post","password","secretData","get","headers","auth","client_token","secrets","Error","Object","fromEntries","entries","map","key","value","JSON","stringify","loadVaultSecrets","command","process","cwd","forEach","e","console","warn","message","loadLocaleResources","localesPath","addWatchFile","existsSync","mkdirSync","recursive","enPath","join","writeFileSync","files","readdirSync","resources","file","filter","f","endsWith","lang","basename","filePath","translation","readFileSync","ensurePermissionsFile","permissionsPath","dir","dirname","ensureScopesFile","scopesPath","viteWczLayout","virtualModuleId","resolvedVirtualModuleId","name","enforce","configResolved","resolvedConfig","resolve","root","_","optimizeDeps","exclude","include","configureServer","server","refresh","includes","module","moduleGraph","getModuleById","invalidateModule","ws","send","type","watcher","add","on","resolveId","id","load","bind","normalizedPermissionsPath","split","sep","posix","normalizedScopesPath"],"sources":["../src/models/VaultConfig.ts","../src/lib/vite-plugin.ts"],"sourcesContent":["import z from \"zod\";\n\nexport const VaultConfigSchema = z.object({\n VAULT_ADDRESS: z.url(),\n VAULT_USERNAME: z.string().min(1),\n VAULT_PASSWORD: z.string().min(1),\n VAULT_SECRET_PATH: z.string().min(1),\n VAULT_MOUNT_POINT: z.string().default(\"release\"),\n});\n\nexport type VaultConfig = z.infer<typeof VaultConfigSchema>;\n","import fs from \"node:fs\";\nimport https from \"node:https\";\nimport path from \"node:path\";\nimport axios from \"axios\";\nimport { loadEnv } from \"vite\";\nimport { VaultConfigSchema } from \"../models/VaultConfig\";\nimport type { Resource } from \"i18next\";\nimport type { Plugin } from \"vite\";\n\nasync function fetchVaultSecrets(env: Record<string, string>): Promise<Record<string, string>> {\n const config = VaultConfigSchema.parse(env);\n const { VAULT_ADDRESS, VAULT_USERNAME, VAULT_PASSWORD, VAULT_SECRET_PATH, VAULT_MOUNT_POINT } =\n config;\n\n const client = axios.create({\n baseURL: VAULT_ADDRESS,\n httpsAgent: new https.Agent({ rejectUnauthorized: false }),\n });\n\n const { data: loginData } = await client.post(`/v1/auth/userpass/login/${VAULT_USERNAME}`, {\n password: VAULT_PASSWORD,\n });\n\n const { data: secretData } = await client.get(\n `/v1/${VAULT_MOUNT_POINT}/data/${VAULT_SECRET_PATH}`,\n {\n headers: { \"X-Vault-Token\": loginData.auth.client_token },\n },\n );\n\n const secrets = secretData?.data?.data;\n if (!secrets) throw new Error(\"No secrets found\");\n\n return Object.fromEntries(\n Object.entries(secrets).map(([key, value]) => [\n key,\n typeof value === \"string\" ? value : JSON.stringify(value),\n ]),\n );\n}\n\nasync function loadVaultSecrets(command: string): Promise<void> {\n if (command !== \"serve\") return;\n\n const env = loadEnv(\"development\", process.cwd(), \"\");\n if (!env.VAULT_ADDRESS) return;\n\n try {\n const secrets = await fetchVaultSecrets(env);\n Object.entries(secrets).forEach(([key, value]) => {\n process.env[key] ??= value;\n });\n } catch (e) {\n console.warn(\"[vite:wcz-layout] Vault failed:\", e instanceof Error ? e.message : e);\n }\n}\n\nfunction loadLocaleResources(localesPath: string, addWatchFile: (path: string) => void): Resource {\n if (!fs.existsSync(localesPath)) fs.mkdirSync(localesPath, { recursive: true });\n\n const enPath = path.join(localesPath, \"en.json\");\n if (!fs.existsSync(enPath)) fs.writeFileSync(enPath, JSON.stringify({}));\n\n const files = fs.readdirSync(localesPath);\n const resources: Resource = {};\n\n for (const file of files.filter((f) => f.endsWith(\".json\"))) {\n const lang = path.basename(file, \".json\");\n const filePath = path.join(localesPath, file);\n try {\n resources[lang] = { translation: JSON.parse(fs.readFileSync(filePath, \"utf-8\")) };\n } catch {\n resources[lang] = { translation: {} };\n }\n addWatchFile(filePath);\n }\n\n return resources;\n}\n\nfunction ensurePermissionsFile(\n permissionsPath: string,\n addWatchFile: (path: string) => void,\n): void {\n const dir = path.dirname(permissionsPath);\n if (!fs.existsSync(dir)) fs.mkdirSync(dir, { recursive: true });\n if (!fs.existsSync(permissionsPath)) {\n fs.writeFileSync(\n permissionsPath,\n 'export const permissions = {\\n admin: [\"wcz-developers\"]\\n} as const;',\n );\n }\n addWatchFile(permissionsPath);\n}\n\nfunction ensureScopesFile(scopesPath: string, addWatchFile: (path: string) => void): void {\n const dir = path.dirname(scopesPath);\n if (!fs.existsSync(dir)) fs.mkdirSync(dir, { recursive: true });\n if (!fs.existsSync(scopesPath)) {\n fs.writeFileSync(scopesPath, \"export const scopes = {\\n} as const;\");\n }\n addWatchFile(scopesPath);\n}\n\nexport function viteWczLayout(): Plugin {\n const virtualModuleId = \"virtual:wcz-layout\";\n const resolvedVirtualModuleId = \"\\0\" + virtualModuleId;\n\n let localesPath: string;\n let permissionsPath: string;\n let scopesPath: string;\n\n return {\n name: \"vite:wcz-layout\",\n enforce: \"pre\",\n configResolved(resolvedConfig) {\n localesPath = path.resolve(resolvedConfig.root, \"src/locales\");\n permissionsPath = path.resolve(resolvedConfig.root, \"src/lib/auth/permissions.ts\");\n scopesPath = path.resolve(resolvedConfig.root, \"src/lib/auth/scopes.ts\");\n },\n async config(_, { command }) {\n await loadVaultSecrets(command);\n\n return {\n optimizeDeps: {\n exclude: [virtualModuleId],\n include: [\n \"prop-types\",\n \"react-is\",\n \"hoist-non-react-statics\",\n \"url-parse\",\n \"file-saver\",\n \"attr-accept\",\n ],\n },\n };\n },\n configureServer(server) {\n const refresh = (filePath: string) => {\n if (\n filePath.includes(localesPath) ||\n filePath === permissionsPath ||\n filePath === scopesPath\n ) {\n const module = server.moduleGraph.getModuleById(resolvedVirtualModuleId);\n if (module) server.moduleGraph.invalidateModule(module);\n server.ws.send({ type: \"full-reload\", path: \"*\" });\n }\n };\n\n server.watcher.add([localesPath, permissionsPath, scopesPath]);\n server.watcher.on(\"add\", refresh);\n server.watcher.on(\"change\", refresh);\n server.watcher.on(\"unlink\", refresh);\n },\n resolveId(id) {\n if (id === virtualModuleId) return resolvedVirtualModuleId;\n return null;\n },\n load(id) {\n if (id !== resolvedVirtualModuleId) return null;\n\n const resources = loadLocaleResources(localesPath, this.addWatchFile.bind(this));\n ensurePermissionsFile(permissionsPath, this.addWatchFile.bind(this));\n ensureScopesFile(scopesPath, this.addWatchFile.bind(this));\n\n const normalizedPermissionsPath = permissionsPath.split(path.sep).join(path.posix.sep);\n const normalizedScopesPath = scopesPath.split(path.sep).join(path.posix.sep);\n return `\n export const resources = ${JSON.stringify(resources)};\n export { permissions } from \"${normalizedPermissionsPath}\";\n export { scopes } from \"${normalizedScopesPath}\";\n `;\n },\n };\n}\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "wcz-layout",
|
|
3
|
-
"version": "8.0.
|
|
3
|
+
"version": "8.0.3",
|
|
4
4
|
"private": false,
|
|
5
5
|
"keywords": [
|
|
6
6
|
"tanstack-intent"
|
|
@@ -27,8 +27,11 @@
|
|
|
27
27
|
"models": [
|
|
28
28
|
"./dist/models.d.ts"
|
|
29
29
|
],
|
|
30
|
-
"
|
|
31
|
-
"./dist/
|
|
30
|
+
"data/client": [
|
|
31
|
+
"./dist/data/client.d.ts"
|
|
32
|
+
],
|
|
33
|
+
"data/server": [
|
|
34
|
+
"./dist/data/server.d.ts"
|
|
32
35
|
],
|
|
33
36
|
"utils": [
|
|
34
37
|
"./dist/utils.d.ts"
|
|
@@ -59,9 +62,13 @@
|
|
|
59
62
|
"types": "./dist/models.d.ts",
|
|
60
63
|
"import": "./dist/models.js"
|
|
61
64
|
},
|
|
62
|
-
"./
|
|
63
|
-
"types": "./dist/
|
|
64
|
-
"import": "./dist/
|
|
65
|
+
"./data/client": {
|
|
66
|
+
"types": "./dist/data/client.d.ts",
|
|
67
|
+
"import": "./dist/data/client.js"
|
|
68
|
+
},
|
|
69
|
+
"./data/server": {
|
|
70
|
+
"types": "./dist/data/server.d.ts",
|
|
71
|
+
"import": "./dist/data/server.js"
|
|
65
72
|
},
|
|
66
73
|
"./utils": {
|
|
67
74
|
"types": "./dist/utils.d.ts",
|
|
@@ -82,16 +89,16 @@
|
|
|
82
89
|
"prepublishOnly": "npm run build"
|
|
83
90
|
},
|
|
84
91
|
"dependencies": {
|
|
85
|
-
"@azure/msal-browser": "^5.
|
|
86
|
-
"@azure/msal-node": "^5.1.
|
|
87
|
-
"@azure/msal-react": "^5.3.
|
|
92
|
+
"@azure/msal-browser": "^5.9.0",
|
|
93
|
+
"@azure/msal-node": "^5.1.5",
|
|
94
|
+
"@azure/msal-react": "^5.3.2",
|
|
88
95
|
"@t3-oss/env-core": "^0.13.11",
|
|
89
96
|
"file-saver": "^2.0.5",
|
|
90
|
-
"i18next": "^26.0.
|
|
97
|
+
"i18next": "^26.0.8",
|
|
91
98
|
"i18next-browser-languagedetector": "^8.2.1",
|
|
92
|
-
"jose": "^6.2.
|
|
99
|
+
"jose": "^6.2.3",
|
|
93
100
|
"react-dropzone": "^15.0.0",
|
|
94
|
-
"react-i18next": "^17.0.
|
|
101
|
+
"react-i18next": "^17.0.6",
|
|
95
102
|
"react-intersection-observer": "^10.0.3",
|
|
96
103
|
"react-number-format": "^5.4.5",
|
|
97
104
|
"tus-js-client": "^4.3.1",
|
|
@@ -99,7 +106,7 @@
|
|
|
99
106
|
},
|
|
100
107
|
"devDependencies": {
|
|
101
108
|
"@rolldown/plugin-babel": "^0.2.3",
|
|
102
|
-
"@tanstack/intent": "^0.0.
|
|
109
|
+
"@tanstack/intent": "^0.0.36",
|
|
103
110
|
"@types/file-saver": "^2.0.7",
|
|
104
111
|
"@types/node": "^24.10.13",
|
|
105
112
|
"@types/react": "^19.2.14",
|
|
@@ -136,5 +143,5 @@
|
|
|
136
143
|
"overrides": {
|
|
137
144
|
"vite": "npm:@voidzero-dev/vite-plus-core@latest"
|
|
138
145
|
},
|
|
139
|
-
"packageManager": "npm@11.
|
|
146
|
+
"packageManager": "npm@11.13.0"
|
|
140
147
|
}
|