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.

Files changed (67) hide show
  1. package/dist/Approval-BSQHVGsm.js +133 -0
  2. package/dist/Approval-BSQHVGsm.js.map +1 -0
  3. package/dist/{DialogsContext-D5A8xncJ.js → DialogsContext-DkePghS6.js} +1 -1
  4. package/dist/{DialogsContext-D5A8xncJ.js.map → DialogsContext-DkePghS6.js.map} +1 -1
  5. package/dist/Email-D2SPExbn.js +20 -0
  6. package/dist/Email-D2SPExbn.js.map +1 -0
  7. package/dist/FileMeta--27aYkPB.js +19 -0
  8. package/dist/FileMeta--27aYkPB.js.map +1 -0
  9. package/dist/{FileMeta-fQnJ6uFX.d.ts → FileMeta-CQz1TMre.d.ts} +1 -1
  10. package/dist/{NotificationContext-DBTYc5z-.js → NotificationContext-FQRaNZRx.js} +1 -1
  11. package/dist/{NotificationContext-DBTYc5z-.js.map → NotificationContext-FQRaNZRx.js.map} +1 -1
  12. package/dist/{RouterListItemButton-rcdkgOXQ.js → RouterListItemButton-p9U4Z0SW.js} +1 -1
  13. package/dist/{RouterListItemButton-rcdkgOXQ.js.map → RouterListItemButton-p9U4Z0SW.js.map} +1 -1
  14. package/dist/{User-C21DoZOa.d.ts → User-B92WOpE2.d.ts} +1 -1
  15. package/dist/components.d.ts +12 -11
  16. package/dist/components.js +338 -299
  17. package/dist/components.js.map +1 -1
  18. package/dist/data/client.d.ts +3081 -0
  19. package/dist/data/client.js +188 -0
  20. package/dist/data/client.js.map +1 -0
  21. package/dist/data/server.d.ts +20 -0
  22. package/dist/data/server.js +22 -0
  23. package/dist/data/server.js.map +1 -0
  24. package/dist/env-szOeLEuD.js +31 -0
  25. package/dist/env-szOeLEuD.js.map +1 -0
  26. package/dist/file-B2VFf-iX.js +100 -0
  27. package/dist/file-B2VFf-iX.js.map +1 -0
  28. package/dist/file-DSohGVd1.js +149 -0
  29. package/dist/file-DSohGVd1.js.map +1 -0
  30. package/dist/hooks.d.ts +1 -1
  31. package/dist/hooks.js +3 -3
  32. package/dist/hooks.js.map +1 -1
  33. package/dist/index.d.ts +2 -2
  34. package/dist/index.js +9 -8
  35. package/dist/index.js.map +1 -1
  36. package/dist/middleware.d.ts +1 -1
  37. package/dist/middleware.js +2 -1
  38. package/dist/middleware.js.map +1 -1
  39. package/dist/models.d.ts +35 -6
  40. package/dist/models.js +4 -118
  41. package/dist/models.js.map +1 -1
  42. package/dist/{msalClient-MNN6BwL6.d.ts → msalClient-DZjYT_QJ.d.ts} +2 -2
  43. package/dist/msalServer-DwpEEthz.js +47 -0
  44. package/dist/msalServer-DwpEEthz.js.map +1 -0
  45. package/dist/peoplesoft-COFvPG-L.js +170 -0
  46. package/dist/peoplesoft-COFvPG-L.js.map +1 -0
  47. package/dist/peoplesoft-CzeJCaYK.d.ts +1081 -0
  48. package/dist/{queryClient-CAJR3qjE.js → queryClient-1OJ5Va3i.js} +1 -1
  49. package/dist/{queryClient-CAJR3qjE.js.map → queryClient-1OJ5Va3i.js.map} +1 -1
  50. package/dist/{useDialogs-BaxhulU9.js → useDialogs-DBcNu-LV.js} +2 -2
  51. package/dist/{useDialogs-BaxhulU9.js.map → useDialogs-DBcNu-LV.js.map} +1 -1
  52. package/dist/{utils-BBQ5S6oM.d.ts → utils-BM8-Efdl.d.ts} +2 -2
  53. package/dist/{utils-CqQKSaSs.js → utils-CBa4vtgn.js} +8 -37
  54. package/dist/utils-CBa4vtgn.js.map +1 -0
  55. package/dist/utils.d.ts +2 -2
  56. package/dist/utils.js +2 -46
  57. package/dist/vite.js.map +1 -1
  58. package/package.json +21 -14
  59. package/skills/auth/SKILL.md +268 -268
  60. package/dist/FileMeta-D9HyhrGi.js +0 -42
  61. package/dist/FileMeta-D9HyhrGi.js.map +0 -1
  62. package/dist/queries-JPqCc5Tb.js +0 -551
  63. package/dist/queries-JPqCc5Tb.js.map +0 -1
  64. package/dist/query.d.ts +0 -3052
  65. package/dist/query.js +0 -3
  66. package/dist/utils-CqQKSaSs.js.map +0 -1
  67. package/dist/utils.js.map +0 -1
package/dist/query.js DELETED
@@ -1,3 +0,0 @@
1
- import { t as queryClient } from "./queryClient-CAJR3qjE.js";
2
- import { n as useUploadFile, t as query } from "./queries-JPqCc5Tb.js";
3
- export { query, queryClient, useUploadFile };
@@ -1 +0,0 @@
1
- {"version":3,"file":"utils-CqQKSaSs.js","names":["createEnv","z","clientEnv","clientPrefix","client","VITE_ENTRA_CLIENT_ID","string","VITE_ENTRA_TENANT_ID","VITE_APP_TITLE","VITE_MUI_LICENSE_KEY","runtimeEnv","import","meta","env","emptyStringAsUndefined","serverEnv","server","ENTRA_CLIENT_ID","ENTRA_TENANT_ID","ENTRA_CLIENT_SECRET","process","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","cache","cacheLocation","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/env.ts","../src/lib/auth/msalClient.ts","../src/lib/utils.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_ENTRA_CLIENT_ID: z.string(),\n VITE_ENTRA_TENANT_ID: z.string(),\n VITE_APP_TITLE: z.string(),\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(),\n ENTRA_TENANT_ID: z.string(),\n ENTRA_CLIENT_SECRET: z.string(),\n },\n runtimeEnv: process.env,\n emptyStringAsUndefined: true,\n});\n","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 cache: {\n cacheLocation: \"localStorage\",\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":"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"}
package/dist/utils.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"utils.js","names":["createServerOnlyFn","ConfidentialClientApplication","scopes","definedScopes","serverEnv","ccaInstance","getCCA","auth","clientId","ENTRA_CLIENT_ID","clientSecret","ENTRA_CLIENT_SECRET","authority","ENTRA_TENANT_ID","getTokenOnBehalfOf","userToken","scopeKey","Promise","cca","result","acquireTokenOnBehalfOf","oboAssertion","Error","accessToken","getAppToken","defaultScopes","map","scope","lastSlash","lastIndexOf","baseUri","substring","uniqueScopes","Set","acquireTokenByClientCredential"],"sources":["../src/lib/auth/msalServer.ts"],"sourcesContent":["import { createServerOnlyFn } from \"@tanstack/react-start\";\nimport { ConfidentialClientApplication } from \"@azure/msal-node\";\nimport { scopes as definedScopes } from \"virtual:wcz-layout\";\nimport { serverEnv } from \"~/env\";\n\n// Singleton instance for server\nlet ccaInstance: ConfidentialClientApplication | null = null;\nfunction getCCA(): ConfidentialClientApplication {\n ccaInstance ??= new ConfidentialClientApplication({\n auth: {\n clientId: serverEnv.ENTRA_CLIENT_ID,\n clientSecret: serverEnv.ENTRA_CLIENT_SECRET,\n authority: `https://login.microsoftonline.com/${serverEnv.ENTRA_TENANT_ID}`,\n },\n });\n return ccaInstance;\n}\n\n/**\n * On-Behalf-Of flow: Exchange user token for a token to call downstream API\n * Use when: Server needs to call microservice on behalf of the logged-in user\n */\nexport const getTokenOnBehalfOf = createServerOnlyFn(\n async (userToken: string, scopeKey: keyof typeof definedScopes): Promise<string> => {\n const cca = getCCA();\n const scopes = [...definedScopes[scopeKey]];\n const result = await cca.acquireTokenOnBehalfOf({\n oboAssertion: userToken,\n scopes,\n });\n if (!result) throw new Error(\"Failed to acquire OBO token\");\n return result.accessToken;\n },\n);\n\n/**\n * Client Credentials flow: Get app-only token (no user context)\n * Use when: Background jobs, scheduled tasks, service-to-service calls\n */\nexport const getAppToken = createServerOnlyFn(\n async (scopeKey: keyof typeof definedScopes): Promise<string> => {\n const cca = getCCA();\n const scopes = definedScopes[scopeKey];\n const defaultScopes = scopes.map((scope) => {\n const lastSlash = scope.lastIndexOf(\"/\");\n const baseUri = scope.substring(0, lastSlash);\n return `${baseUri}/.default`;\n });\n const uniqueScopes = [...new Set(defaultScopes)];\n const result = await cca.acquireTokenByClientCredential({ scopes: uniqueScopes });\n if (!result) throw new Error(\"Failed to acquire app token\");\n return result.accessToken;\n },\n);\n"],"mappings":";;;;;;;;AAMA,IAAIK,cAAoD;AACxD,SAASC,SAAwC;AAC/CD,iBAAgB,IAAIJ,8BAA8B,EAChDM,MAAM;EACJC,UAAUJ,UAAUK;EACpBC,cAAcN,UAAUO;EACxBC,WAAW,qCAAqCR,UAAUS;EAC5D,EACD,CAAC;AACF,QAAOR;;;;;;AAOT,MAAaS,qBAAqBd,mBAChC,OAAOe,WAAmBC,aAA0D;CAClF,MAAME,MAAMZ,QAAQ;CACpB,MAAMJ,WAAS,CAAC,GAAGC,OAAca,UAAU;CAC3C,MAAMG,SAAS,MAAMD,IAAIE,uBAAuB;EAC9CC,cAAcN;EACdb,QAAAA;EACD,CAAC;AACF,KAAI,CAACiB,OAAQ,OAAM,IAAIG,MAAM,8BAA8B;AAC3D,QAAOH,OAAOI;EAEjB;;;;;AAMD,MAAaC,cAAcxB,mBACzB,OAAOgB,aAA0D;CAC/D,MAAME,MAAMZ,QAAQ;CAEpB,MAAMmB,gBADStB,OAAca,UACAU,KAAKC,UAAU;EAC1C,MAAMC,YAAYD,MAAME,YAAY,IAAI;AAExC,SAAO,GADSF,MAAMI,UAAU,GAAGH,UAAU,CAC5B;GACjB;CACF,MAAMI,eAAe,CAAC,GAAG,IAAIC,IAAIR,cAAc,CAAC;CAChD,MAAMN,SAAS,MAAMD,IAAIgB,+BAA+B,EAAEhC,QAAQ8B,cAAc,CAAC;AACjF,KAAI,CAACb,OAAQ,OAAM,IAAIG,MAAM,8BAA8B;AAC3D,QAAOH,OAAOI;EAEjB"}