wcz-layout 6.7.2 → 9.4.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (271) hide show
  1. package/dist/Approval-Co6D1BNq.mjs +194 -0
  2. package/dist/Approval-Co6D1BNq.mjs.map +1 -0
  3. package/dist/DialogsContext-DLqA8RJ_.mjs +7 -0
  4. package/dist/DialogsContext-DLqA8RJ_.mjs.map +1 -0
  5. package/dist/Email-BzQQkbe9.mjs +20 -0
  6. package/dist/Email-BzQQkbe9.mjs.map +1 -0
  7. package/dist/FileMeta-DDqUju1Y.mjs +19 -0
  8. package/dist/FileMeta-DDqUju1Y.mjs.map +1 -0
  9. package/dist/FileMeta-ILLTOjaM.d.mts +20 -0
  10. package/dist/NotificationContext-CgwUOeW0.mjs +7 -0
  11. package/dist/NotificationContext-CgwUOeW0.mjs.map +1 -0
  12. package/dist/QueryClientParam-CzaM3akD.d.mts +11 -0
  13. package/dist/RouterListItemButton-owZVvuC_.mjs +78 -0
  14. package/dist/RouterListItemButton-owZVvuC_.mjs.map +1 -0
  15. package/dist/User-1gKoYJvW.d.mts +12 -0
  16. package/dist/auth.d.mts +25 -0
  17. package/dist/auth.mjs +88 -0
  18. package/dist/auth.mjs.map +1 -0
  19. package/dist/authMiddleware--HdlhhZO.mjs +78 -0
  20. package/dist/authMiddleware--HdlhhZO.mjs.map +1 -0
  21. package/dist/components.d.mts +107 -0
  22. package/dist/components.mjs +1500 -0
  23. package/dist/components.mjs.map +1 -0
  24. package/dist/data/client.d.mts +3217 -0
  25. package/dist/data/client.mjs +187 -0
  26. package/dist/data/client.mjs.map +1 -0
  27. package/dist/data/server.d.mts +19 -0
  28. package/dist/data/server.mjs +16 -0
  29. package/dist/data/server.mjs.map +1 -0
  30. package/dist/entra-s4ZjHq5o.mjs +101 -0
  31. package/dist/entra-s4ZjHq5o.mjs.map +1 -0
  32. package/dist/env-CoveIivr.mjs +30 -0
  33. package/dist/env-CoveIivr.mjs.map +1 -0
  34. package/dist/file-C5-a_6W6.mjs +148 -0
  35. package/dist/file-C5-a_6W6.mjs.map +1 -0
  36. package/dist/file-DM1x40eJ.mjs +179 -0
  37. package/dist/file-DM1x40eJ.mjs.map +1 -0
  38. package/dist/hooks.d.mts +226 -0
  39. package/dist/hooks.mjs +1087 -0
  40. package/dist/hooks.mjs.map +1 -0
  41. package/dist/index.d.mts +48 -0
  42. package/dist/index.mjs +1944 -0
  43. package/dist/index.mjs.map +1 -0
  44. package/dist/middleware.d.mts +46 -0
  45. package/dist/middleware.mjs +27 -0
  46. package/dist/middleware.mjs.map +1 -0
  47. package/dist/models.d.mts +598 -0
  48. package/dist/models.mjs +74 -0
  49. package/dist/models.mjs.map +1 -0
  50. package/dist/msalServer-CkNOOjjH.mjs +44 -0
  51. package/dist/msalServer-CkNOOjjH.mjs.map +1 -0
  52. package/dist/peoplesoft-DIe8H1Nu.mjs +240 -0
  53. package/dist/peoplesoft-DIe8H1Nu.mjs.map +1 -0
  54. package/dist/peoplesoft-gKd-Jh5L.d.mts +1219 -0
  55. package/dist/useDialogs-BUzVrTSP.mjs +248 -0
  56. package/dist/useDialogs-BUzVrTSP.mjs.map +1 -0
  57. package/dist/user-Cen43mlr.d.mts +19 -0
  58. package/dist/utils-2XiozDlV.mjs +156 -0
  59. package/dist/utils-2XiozDlV.mjs.map +1 -0
  60. package/dist/utils-BuWEQOuy.d.mts +65 -0
  61. package/dist/utils.d.mts +5 -0
  62. package/dist/utils.mjs +5 -0
  63. package/dist/vite.d.mts +7 -0
  64. package/dist/vite.mjs +182 -0
  65. package/dist/vite.mjs.map +1 -0
  66. package/package.json +129 -62
  67. package/skills/client-db/SKILL.md +93 -0
  68. package/skills/data-grid/SKILL.md +142 -0
  69. package/skills/db-schema/SKILL.md +71 -0
  70. package/skills/dialogs/SKILL.md +79 -0
  71. package/skills/forms/SKILL.md +82 -0
  72. package/skills/general/SKILL.md +17 -0
  73. package/skills/notifications/SKILL.md +43 -0
  74. package/skills/routing/SKILL.md +128 -0
  75. package/skills/server-functions/SKILL.md +113 -0
  76. package/skills/services/SKILL.md +30 -0
  77. package/skills/services/docs/approval.md +257 -0
  78. package/skills/services/docs/email.md +32 -0
  79. package/skills/services/docs/file.md +81 -0
  80. package/skills/services/docs/peoplesoft.md +110 -0
  81. package/skills/start/SKILL.md +46 -0
  82. package/skills/start/steps/01-git-setup.md +11 -0
  83. package/skills/start/steps/02-project-name-setup.md +14 -0
  84. package/skills/start/steps/03-apm-setup.md +208 -0
  85. package/skills/start/steps/04-database-setup.md +39 -0
  86. package/skills/start/steps/05-entra-setup.md +59 -0
  87. package/skills/start/steps/06-vault-setup.md +70 -0
  88. package/skills/start/steps/07-generate-favicon.md +10 -0
  89. package/skills/start/steps/08-commit.md +15 -0
  90. package/dist/src/components/Layout.d.ts +0 -16
  91. package/dist/src/components/Layout.js +0 -122
  92. package/dist/src/components/Layout.js.map +0 -1
  93. package/dist/src/components/dataGrid/ChipInputCell.d.ts +0 -9
  94. package/dist/src/components/dataGrid/ChipInputCell.js +0 -17
  95. package/dist/src/components/dataGrid/ChipInputCell.js.map +0 -1
  96. package/dist/src/components/dataGrid/EditableColumnHeader.d.ts +0 -2
  97. package/dist/src/components/dataGrid/EditableColumnHeader.js +0 -7
  98. package/dist/src/components/dataGrid/EditableColumnHeader.js.map +0 -1
  99. package/dist/src/components/dataGrid/GridToolbar.d.ts +0 -8
  100. package/dist/src/components/dataGrid/GridToolbar.js +0 -40
  101. package/dist/src/components/dataGrid/GridToolbar.js.map +0 -1
  102. package/dist/src/components/dataGrid/TableContainer.d.ts +0 -3
  103. package/dist/src/components/dataGrid/TableContainer.js +0 -32
  104. package/dist/src/components/dataGrid/TableContainer.js.map +0 -1
  105. package/dist/src/components/form/FormAutocomplete.d.ts +0 -7
  106. package/dist/src/components/form/FormAutocomplete.js +0 -10
  107. package/dist/src/components/form/FormAutocomplete.js.map +0 -1
  108. package/dist/src/components/form/FormCheckbox.d.ts +0 -7
  109. package/dist/src/components/form/FormCheckbox.js +0 -11
  110. package/dist/src/components/form/FormCheckbox.js.map +0 -1
  111. package/dist/src/components/form/FormDatePicker.d.ts +0 -9
  112. package/dist/src/components/form/FormDatePicker.js +0 -19
  113. package/dist/src/components/form/FormDatePicker.js.map +0 -1
  114. package/dist/src/components/form/FormDateTimePicker.d.ts +0 -9
  115. package/dist/src/components/form/FormDateTimePicker.js +0 -19
  116. package/dist/src/components/form/FormDateTimePicker.js.map +0 -1
  117. package/dist/src/components/form/FormNumberField.d.ts +0 -12
  118. package/dist/src/components/form/FormNumberField.js +0 -12
  119. package/dist/src/components/form/FormNumberField.js.map +0 -1
  120. package/dist/src/components/form/FormRadioGroup.d.ts +0 -13
  121. package/dist/src/components/form/FormRadioGroup.js +0 -11
  122. package/dist/src/components/form/FormRadioGroup.js.map +0 -1
  123. package/dist/src/components/form/FormSlider.d.ts +0 -7
  124. package/dist/src/components/form/FormSlider.js +0 -11
  125. package/dist/src/components/form/FormSlider.js.map +0 -1
  126. package/dist/src/components/form/FormSubmitButton.d.ts +0 -5
  127. package/dist/src/components/form/FormSubmitButton.js +0 -13
  128. package/dist/src/components/form/FormSubmitButton.js.map +0 -1
  129. package/dist/src/components/form/FormSwitch.d.ts +0 -7
  130. package/dist/src/components/form/FormSwitch.js +0 -11
  131. package/dist/src/components/form/FormSwitch.js.map +0 -1
  132. package/dist/src/components/form/FormTextField.d.ts +0 -7
  133. package/dist/src/components/form/FormTextField.js +0 -11
  134. package/dist/src/components/form/FormTextField.js.map +0 -1
  135. package/dist/src/components/layout/AccountMenu.d.ts +0 -9
  136. package/dist/src/components/layout/AccountMenu.js +0 -44
  137. package/dist/src/components/layout/AccountMenu.js.map +0 -1
  138. package/dist/src/components/layout/DevelopmentBanner.d.ts +0 -7
  139. package/dist/src/components/layout/DevelopmentBanner.js +0 -29
  140. package/dist/src/components/layout/DevelopmentBanner.js.map +0 -1
  141. package/dist/src/components/layout/ErrorPage.d.ts +0 -2
  142. package/dist/src/components/layout/ErrorPage.js +0 -25
  143. package/dist/src/components/layout/ErrorPage.js.map +0 -1
  144. package/dist/src/components/layout/LayoutDialog.d.ts +0 -12
  145. package/dist/src/components/layout/LayoutDialog.js +0 -12
  146. package/dist/src/components/layout/LayoutDialog.js.map +0 -1
  147. package/dist/src/components/layout/LayoutSnackbar.d.ts +0 -8
  148. package/dist/src/components/layout/LayoutSnackbar.js +0 -25
  149. package/dist/src/components/layout/LayoutSnackbar.js.map +0 -1
  150. package/dist/src/components/layout/NavigationDrawer.d.ts +0 -11
  151. package/dist/src/components/layout/NavigationDrawer.js +0 -70
  152. package/dist/src/components/layout/NavigationDrawer.js.map +0 -1
  153. package/dist/src/components/layout/NotificationMenu.d.ts +0 -8
  154. package/dist/src/components/layout/NotificationMenu.js +0 -26
  155. package/dist/src/components/layout/NotificationMenu.js.map +0 -1
  156. package/dist/src/components/layout/TypographyWithIcon.d.ts +0 -7
  157. package/dist/src/components/layout/TypographyWithIcon.js +0 -22
  158. package/dist/src/components/layout/TypographyWithIcon.js.map +0 -1
  159. package/dist/src/components/layout/Unauthorized.d.ts +0 -2
  160. package/dist/src/components/layout/Unauthorized.js +0 -26
  161. package/dist/src/components/layout/Unauthorized.js.map +0 -1
  162. package/dist/src/contexts/LayoutContext.d.ts +0 -40
  163. package/dist/src/contexts/LayoutContext.js +0 -60
  164. package/dist/src/contexts/LayoutContext.js.map +0 -1
  165. package/dist/src/contexts/UserContext.d.ts +0 -24
  166. package/dist/src/contexts/UserContext.js +0 -55
  167. package/dist/src/contexts/UserContext.js.map +0 -1
  168. package/dist/src/hooks/FormHooks.d.ts +0 -46
  169. package/dist/src/hooks/FormHooks.js +0 -31
  170. package/dist/src/hooks/FormHooks.js.map +0 -1
  171. package/dist/src/hooks/UseSnackbar.d.ts +0 -10
  172. package/dist/src/hooks/UseSnackbar.js +0 -23
  173. package/dist/src/hooks/UseSnackbar.js.map +0 -1
  174. package/dist/src/hooks/UseUser.d.ts +0 -10
  175. package/dist/src/hooks/UseUser.js +0 -25
  176. package/dist/src/hooks/UseUser.js.map +0 -1
  177. package/dist/src/index.d.ts +0 -20
  178. package/dist/src/index.js +0 -15
  179. package/dist/src/index.js.map +0 -1
  180. package/dist/src/models/Error.d.ts +0 -6
  181. package/dist/src/models/Error.js +0 -2
  182. package/dist/src/models/Error.js.map +0 -1
  183. package/dist/src/models/KeycloakSettings.d.ts +0 -8
  184. package/dist/src/models/KeycloakSettings.js +0 -2
  185. package/dist/src/models/KeycloakSettings.js.map +0 -1
  186. package/dist/src/models/LayoutPaletteColorOptions.d.ts +0 -6
  187. package/dist/src/models/LayoutPaletteColorOptions.js +0 -2
  188. package/dist/src/models/LayoutPaletteColorOptions.js.map +0 -1
  189. package/dist/src/models/LayoutRoute.d.ts +0 -14
  190. package/dist/src/models/LayoutRoute.js +0 -2
  191. package/dist/src/models/LayoutRoute.js.map +0 -1
  192. package/dist/src/models/Notification.d.ts +0 -9
  193. package/dist/src/models/Notification.js +0 -2
  194. package/dist/src/models/Notification.js.map +0 -1
  195. package/dist/src/models/PeoplesoftDepartment.d.ts +0 -14
  196. package/dist/src/models/PeoplesoftDepartment.js +0 -2
  197. package/dist/src/models/PeoplesoftDepartment.js.map +0 -1
  198. package/dist/src/models/PeoplesoftEmployee.d.ts +0 -34
  199. package/dist/src/models/PeoplesoftEmployee.js +0 -2
  200. package/dist/src/models/PeoplesoftEmployee.js.map +0 -1
  201. package/dist/src/models/Snackbar.d.ts +0 -15
  202. package/dist/src/models/Snackbar.js +0 -2
  203. package/dist/src/models/Snackbar.js.map +0 -1
  204. package/dist/src/models/User.d.ts +0 -27
  205. package/dist/src/models/User.js +0 -11
  206. package/dist/src/models/User.js.map +0 -1
  207. package/dist/src/models/types/EmployeeCategoryGroup.d.ts +0 -1
  208. package/dist/src/models/types/EmployeeCategoryGroup.js +0 -2
  209. package/dist/src/models/types/EmployeeCategoryGroup.js.map +0 -1
  210. package/dist/src/models/types/EmployeeStatus.d.ts +0 -1
  211. package/dist/src/models/types/EmployeeStatus.js +0 -2
  212. package/dist/src/models/types/EmployeeStatus.js.map +0 -1
  213. package/dist/src/utils/Auth.d.ts +0 -12
  214. package/dist/src/utils/Auth.js +0 -49
  215. package/dist/src/utils/Auth.js.map +0 -1
  216. package/dist/src/utils/Fetches.d.ts +0 -5
  217. package/dist/src/utils/Fetches.js +0 -66
  218. package/dist/src/utils/Fetches.js.map +0 -1
  219. package/dist/src/utils/FormUtils.d.ts +0 -7
  220. package/dist/src/utils/FormUtils.js +0 -9
  221. package/dist/src/utils/FormUtils.js.map +0 -1
  222. package/dist/src/utils/Helpers.d.ts +0 -11
  223. package/dist/src/utils/Helpers.js +0 -26
  224. package/dist/src/utils/Helpers.js.map +0 -1
  225. package/dist/tsconfig.tsbuildinfo +0 -1
  226. package/src/components/Layout.tsx +0 -183
  227. package/src/components/dataGrid/ChipInputCell.tsx +0 -31
  228. package/src/components/dataGrid/EditableColumnHeader.tsx +0 -7
  229. package/src/components/dataGrid/GridToolbar.tsx +0 -63
  230. package/src/components/dataGrid/TableContainer.tsx +0 -39
  231. package/src/components/form/FormAutocomplete.tsx +0 -34
  232. package/src/components/form/FormCheckbox.tsx +0 -32
  233. package/src/components/form/FormDatePicker.tsx +0 -34
  234. package/src/components/form/FormDateTimePicker.tsx +0 -34
  235. package/src/components/form/FormNumberField.tsx +0 -33
  236. package/src/components/form/FormRadioGroup.tsx +0 -43
  237. package/src/components/form/FormSlider.tsx +0 -28
  238. package/src/components/form/FormSubmitButton.tsx +0 -29
  239. package/src/components/form/FormSwitch.tsx +0 -32
  240. package/src/components/form/FormTextField.tsx +0 -26
  241. package/src/components/layout/AccountMenu.tsx +0 -160
  242. package/src/components/layout/DevelopmentBanner.tsx +0 -54
  243. package/src/components/layout/ErrorPage.tsx +0 -34
  244. package/src/components/layout/LayoutDialog.tsx +0 -50
  245. package/src/components/layout/LayoutSnackbar.tsx +0 -44
  246. package/src/components/layout/NavigationDrawer.tsx +0 -131
  247. package/src/components/layout/NotificationMenu.tsx +0 -76
  248. package/src/components/layout/TypographyWithIcon.tsx +0 -35
  249. package/src/components/layout/Unauthorized.tsx +0 -37
  250. package/src/contexts/LayoutContext.tsx +0 -127
  251. package/src/contexts/UserContext.tsx +0 -88
  252. package/src/hooks/FormHooks.ts +0 -33
  253. package/src/hooks/UseSnackbar.tsx +0 -28
  254. package/src/hooks/UseUser.tsx +0 -29
  255. package/src/index.ts +0 -27
  256. package/src/models/Error.tsx +0 -6
  257. package/src/models/KeycloakSettings.ts +0 -8
  258. package/src/models/LayoutPaletteColorOptions.tsx +0 -7
  259. package/src/models/LayoutRoute.ts +0 -15
  260. package/src/models/Notification.ts +0 -10
  261. package/src/models/PeoplesoftDepartment.ts +0 -15
  262. package/src/models/PeoplesoftEmployee.ts +0 -35
  263. package/src/models/Snackbar.ts +0 -16
  264. package/src/models/User.ts +0 -13
  265. package/src/models/types/EmployeeCategoryGroup.ts +0 -1
  266. package/src/models/types/EmployeeStatus.ts +0 -1
  267. package/src/utils/Auth.ts +0 -58
  268. package/src/utils/Fetches.ts +0 -83
  269. package/src/utils/FormUtils.ts +0 -22
  270. package/src/utils/Helpers.ts +0 -27
  271. package/tsconfig.json +0 -29
@@ -0,0 +1,78 @@
1
+ import { t as serverEnv } from "./env-CoveIivr.mjs";
2
+ import { i as buildUser, l as getAccessToken, o as hasPermission, u as getSessionUser } from "./utils-2XiozDlV.mjs";
3
+ import { n as getTokenOnBehalfOf, t as getAppToken } from "./msalServer-CkNOOjjH.mjs";
4
+ import { createMiddleware } from "@tanstack/react-start";
5
+ import axios, { AxiosError } from "axios";
6
+ import https from "node:https";
7
+ import * as jose from "jose";
8
+ //#region src/middleware/apiMiddleware.ts
9
+ const httpsAgent = new https.Agent({ rejectUnauthorized: false });
10
+ const apiMiddleware = ({ baseURL, scopeKey }) => createMiddleware().server(async ({ next, request }) => {
11
+ const resolvedBaseURL = process.env[baseURL];
12
+ if (!resolvedBaseURL) throw new Error(`"${baseURL}" env variable is not set.`);
13
+ const authHeader = request.headers.get("Authorization");
14
+ let accessToken;
15
+ if (authHeader?.startsWith("Bearer ")) accessToken = await getTokenOnBehalfOf(authHeader.substring(7), scopeKey);
16
+ else try {
17
+ accessToken = await getAccessToken(scopeKey);
18
+ } catch {
19
+ accessToken = await getAppToken(scopeKey);
20
+ }
21
+ const api = axios.create({
22
+ baseURL: resolvedBaseURL,
23
+ httpsAgent,
24
+ headers: { Authorization: `Bearer ${accessToken}` }
25
+ });
26
+ try {
27
+ return await next({ context: { api } });
28
+ } catch (error) {
29
+ if (error instanceof AxiosError) throw new Error(error.response?.data?.message ?? error.message);
30
+ throw error;
31
+ }
32
+ });
33
+ //#endregion
34
+ //#region src/middleware/authMiddleware.ts
35
+ async function resolveUser(request) {
36
+ const authHeader = request.headers.get("Authorization");
37
+ if (authHeader?.startsWith("Bearer ")) {
38
+ let payload;
39
+ try {
40
+ payload = await verifyToken(authHeader.substring(7));
41
+ } catch (error) {
42
+ throw Response.json({ message: error instanceof Error ? error.message : "Unauthorized: Invalid access token" }, { status: 401 });
43
+ }
44
+ return buildUser(payload);
45
+ }
46
+ return getSessionUser();
47
+ }
48
+ const requiredAuthenticationMiddleware = createMiddleware().server(async ({ next, request }) => {
49
+ const user = await resolveUser(request);
50
+ if (!user) throw Response.json({ message: "Unauthorized: User not signed in" }, { status: 401 });
51
+ return next({ context: { user } });
52
+ });
53
+ const publicAuthenticationMiddleware = createMiddleware().server(async ({ next, request }) => {
54
+ return next({ context: { user: await resolveUser(request) } });
55
+ });
56
+ function authenticationMiddleware(options) {
57
+ return options?.optional ? publicAuthenticationMiddleware : requiredAuthenticationMiddleware;
58
+ }
59
+ const authorizationMiddleware = (permissionKey) => createMiddleware().middleware([authenticationMiddleware()]).server(async ({ next, context }) => {
60
+ if (hasPermission(context.user, permissionKey)) return next();
61
+ throw Response.json({ message: `Forbidden: User ${context.user.name} is not authorized to access this resource` }, { status: 403 });
62
+ });
63
+ async function verifyToken(token) {
64
+ const { payload } = await jose.jwtVerify(token, getJWKS(), {
65
+ issuer: `https://login.microsoftonline.com/${serverEnv.ENTRA_TENANT_ID}/v2.0`,
66
+ audience: serverEnv.ENTRA_CLIENT_ID
67
+ });
68
+ return payload;
69
+ }
70
+ let jwksCache = null;
71
+ function getJWKS() {
72
+ jwksCache ??= jose.createRemoteJWKSet(new URL(`https://login.microsoftonline.com/${serverEnv.ENTRA_TENANT_ID}/discovery/v2.0/keys`));
73
+ return jwksCache;
74
+ }
75
+ //#endregion
76
+ export { authorizationMiddleware as n, apiMiddleware as r, authenticationMiddleware as t };
77
+
78
+ //# sourceMappingURL=authMiddleware--HdlhhZO.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authMiddleware--HdlhhZO.mjs","names":["createMiddleware","axios","AxiosError","https","serverEnv","scopes","definedScopes","getAppToken","getTokenOnBehalfOf","getAccessToken","ApiMiddlewareOptions","baseURL","scopeKey","httpsAgent","Agent","rejectUnauthorized","apiMiddleware","server","next","request","resolvedBaseURL","process","env","Error","authHeader","headers","get","accessToken","startsWith","substring","length","api","create","Authorization","context","error","response","data","message","createMiddleware","jose","permissions","serverEnv","getSessionUser","buildUser","hasPermission","TokenPayload","User","resolveUser","request","Request","Promise","authHeader","headers","get","startsWith","payload","verifyToken","substring","length","error","Response","json","message","Error","status","requiredAuthenticationMiddleware","server","user","next","context","publicAuthenticationMiddleware","authenticationMiddleware","options","optional","authorizationMiddleware","permissionKey","middleware","name","token","jwtVerify","getJWKS","issuer","ENTRA_TENANT_ID","audience","ENTRA_CLIENT_ID","jwksCache","ReturnType","createRemoteJWKSet","URL"],"sources":["../src/middleware/apiMiddleware.ts","../src/middleware/authMiddleware.ts"],"sourcesContent":["import { createMiddleware } from \"@tanstack/react-start\";\nimport axios, { AxiosError } from \"axios\";\nimport https from \"node:https\";\nimport type { serverEnv } from \"virtual:wcz-layout\";\nimport { scopes as definedScopes } from \"virtual:wcz-layout\";\nimport { getAppToken, getTokenOnBehalfOf } from \"~/lib/auth/msalServer\";\nimport { getAccessToken } from \"~/lib/auth/user\";\n\ninterface ApiMiddlewareOptions {\n baseURL: keyof typeof serverEnv & `${string}BASE_URL${string}`;\n scopeKey: keyof typeof definedScopes;\n}\n\nconst httpsAgent = new https.Agent({\n rejectUnauthorized: false,\n});\n\nexport const apiMiddleware = ({ baseURL, scopeKey }: ApiMiddlewareOptions) =>\n createMiddleware().server(async ({ next, request }) => {\n const resolvedBaseURL = process.env[baseURL];\n if (!resolvedBaseURL) throw new Error(`\"${baseURL}\" env variable is not set.`);\n\n const authHeader = request.headers.get(\"Authorization\");\n let accessToken: string;\n if (authHeader?.startsWith(\"Bearer \")) {\n accessToken = await getTokenOnBehalfOf(authHeader.substring(\"Bearer \".length), scopeKey);\n } else {\n try {\n accessToken = await getAccessToken(scopeKey);\n } catch {\n accessToken = await getAppToken(scopeKey);\n }\n }\n\n const api = axios.create({\n baseURL: resolvedBaseURL,\n httpsAgent,\n headers: { Authorization: `Bearer ${accessToken}` },\n });\n\n try {\n return await next({ context: { api } });\n } catch (error) {\n if (error instanceof AxiosError)\n throw new Error(error.response?.data?.message ?? error.message);\n throw error;\n }\n });\n","import { createMiddleware } from \"@tanstack/react-start\";\nimport * as jose from \"jose\";\nimport type { permissions } from \"virtual:wcz-layout\";\nimport { serverEnv } from \"~/env\";\nimport { getSessionUser } from \"~/lib/auth/user\";\nimport { buildUser, hasPermission } from \"~/lib/utils\";\nimport type { TokenPayload } from \"~/models/TokenPayload\";\nimport type { User } from \"~/models/User\";\n\nasync function resolveUser(request: Request): Promise<User | null> {\n const authHeader = request.headers.get(\"Authorization\");\n\n if (authHeader?.startsWith(\"Bearer \")) {\n let payload: TokenPayload;\n try {\n payload = await verifyToken(authHeader.substring(\"Bearer \".length));\n } catch (error) {\n throw Response.json(\n { message: error instanceof Error ? error.message : \"Unauthorized: Invalid access token\" },\n { status: 401 },\n );\n }\n return buildUser(payload);\n }\n\n return getSessionUser();\n}\n\nconst requiredAuthenticationMiddleware = createMiddleware().server<{ user: User }>(\n async ({ next, request }) => {\n const user = await resolveUser(request);\n\n if (!user)\n throw Response.json({ message: \"Unauthorized: User not signed in\" }, { status: 401 });\n\n return next({ context: { user } });\n },\n);\n\nconst publicAuthenticationMiddleware = createMiddleware().server<{ user: User | null }>(\n async ({ next, request }) => {\n const user = await resolveUser(request);\n return next({ context: { user } });\n },\n);\n\nexport function authenticationMiddleware(options?: {\n optional?: false;\n}): typeof requiredAuthenticationMiddleware;\n\nexport function authenticationMiddleware(options: {\n optional: true;\n}): typeof publicAuthenticationMiddleware;\n\nexport function authenticationMiddleware(options: {\n optional: boolean;\n}): typeof requiredAuthenticationMiddleware | typeof publicAuthenticationMiddleware;\n\nexport function authenticationMiddleware(options?: { optional?: boolean }) {\n return options?.optional ? publicAuthenticationMiddleware : requiredAuthenticationMiddleware;\n}\n\nexport const authorizationMiddleware = (permissionKey: keyof typeof permissions) =>\n createMiddleware()\n .middleware([authenticationMiddleware()])\n .server(async ({ next, context }) => {\n if (hasPermission(context.user, permissionKey)) return next();\n throw Response.json(\n {\n message: `Forbidden: User ${context.user.name} is not authorized to access this resource`,\n },\n { status: 403 },\n );\n });\n\nasync function verifyToken(token: string): Promise<TokenPayload> {\n const { payload } = await jose.jwtVerify(token, getJWKS(), {\n issuer: `https://login.microsoftonline.com/${serverEnv.ENTRA_TENANT_ID}/v2.0`,\n audience: serverEnv.ENTRA_CLIENT_ID,\n });\n return payload as unknown as TokenPayload;\n}\n\nlet jwksCache: ReturnType<typeof jose.createRemoteJWKSet> | null = null;\n\nfunction getJWKS() {\n jwksCache ??= jose.createRemoteJWKSet(\n new URL(`https://login.microsoftonline.com/${serverEnv.ENTRA_TENANT_ID}/discovery/v2.0/keys`),\n );\n return jwksCache;\n}\n"],"mappings":"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"}
@@ -0,0 +1,107 @@
1
+ import { t as FileMeta } from "./FileMeta-ILLTOjaM.mjs";
2
+ import { BoxProps, ButtonProps, FabProps, IconButtonProps, LinkProps, ListItemButtonProps, SxProps, TabProps, Theme, TypographyProps } from "@mui/material";
3
+ import React$1, { ComponentType, FC, ReactNode } from "react";
4
+ import * as z$2 from "zod";
5
+ import { ErrorComponentProps, LinkComponent } from "@tanstack/react-router";
6
+ import { DropzoneOptions } from "react-dropzone";
7
+ import { GridActionsCellItemProps, GridColumnHeaderParams, GridValidRowModel } from "@mui/x-data-grid-premium";
8
+
9
+ //#region src/components/core/TypographyWithIcon.d.ts
10
+ interface TypographyWithIconProps extends TypographyProps {
11
+ startIcon?: React.ReactNode;
12
+ endIcon?: React.ReactNode;
13
+ gap?: number | string;
14
+ }
15
+ declare const TypographyWithIcon: React.FC<TypographyWithIconProps>;
16
+ //#endregion
17
+ //#region src/components/core/Fullscreen.d.ts
18
+ declare const Fullscreen: FC<BoxProps>;
19
+ //#endregion
20
+ //#region src/components/file/Dropzone.d.ts
21
+ interface DropzoneProps extends DropzoneOptions {
22
+ sx?: SxProps<Theme>;
23
+ progress?: number;
24
+ }
25
+ declare const Dropzone: FC<DropzoneProps>;
26
+ //#endregion
27
+ //#region src/models/file/FileActions.d.ts
28
+ declare const FileActionsSchema: z$2.ZodObject<{
29
+ download: z$2.ZodOptional<z$2.ZodBoolean>;
30
+ delete: z$2.ZodOptional<z$2.ZodBoolean>;
31
+ }, z$2.core.$strip>;
32
+ type FileActions = z$2.infer<typeof FileActionsSchema>;
33
+ //#endregion
34
+ //#region src/components/file/fileViewer/FileViewerGrid.d.ts
35
+ type FileViewerGridItemBar = "hidden" | "always" | "onMouseEnter";
36
+ interface FileViewerGridProps {
37
+ size?: number;
38
+ itemBar?: FileViewerGridItemBar;
39
+ sx?: SxProps<Theme>;
40
+ }
41
+ //#endregion
42
+ //#region src/components/file/fileViewer/FileViewerList.d.ts
43
+ interface FileViewerListProps {
44
+ sx?: SxProps<Theme>;
45
+ }
46
+ //#endregion
47
+ //#region src/components/file/FileViewer.d.ts
48
+ interface FileViewerComponent {
49
+ Grid: ComponentType<FileViewerGridProps>;
50
+ List: ComponentType<FileViewerListProps>;
51
+ }
52
+ interface FileViewerProps {
53
+ appName: string;
54
+ subId: string;
55
+ onDelete?: (params: {
56
+ remainingFileMetas: Array<FileMeta>;
57
+ deletedFileMeta: FileMeta;
58
+ }) => void;
59
+ actions?: FileActions;
60
+ children: (component: FileViewerComponent) => ReactNode;
61
+ }
62
+ declare const FileViewer: FC<FileViewerProps>;
63
+ //#endregion
64
+ //#region src/components/data-grid/EditableColumnHeader.d.ts
65
+ declare const EditableColumnHeader: <T extends GridValidRowModel>({
66
+ colDef
67
+ }: GridColumnHeaderParams<T>) => import("react").JSX.Element;
68
+ //#endregion
69
+ //#region src/components/router/RouterButton.d.ts
70
+ declare const Component$6: React$1.ForwardRefExoticComponent<Omit<ButtonProps<"a">, "ref"> & React$1.RefAttributes<HTMLAnchorElement>>;
71
+ declare const RouterButton: LinkComponent<typeof Component$6>;
72
+ //#endregion
73
+ //#region src/components/router/RouterFab.d.ts
74
+ declare const Component$5: React$1.ForwardRefExoticComponent<Omit<FabProps<"a">, "ref"> & React$1.RefAttributes<HTMLAnchorElement>>;
75
+ declare const RouterFab: LinkComponent<typeof Component$5>;
76
+ //#endregion
77
+ //#region src/components/router/RouterGridActionsCellItem.d.ts
78
+ declare const Component$4: React$1.ForwardRefExoticComponent<GridActionsCellItemProps & React$1.RefAttributes<HTMLButtonElement>>;
79
+ declare const RouterGridActionsCellItem: LinkComponent<typeof Component$4>;
80
+ //#endregion
81
+ //#region src/components/router/RouterIconButton.d.ts
82
+ declare const Component$3: React$1.ForwardRefExoticComponent<Omit<IconButtonProps<"a">, "ref"> & React$1.RefAttributes<HTMLAnchorElement>>;
83
+ declare const RouterIconButton: LinkComponent<typeof Component$3>;
84
+ //#endregion
85
+ //#region src/components/router/RouterLink.d.ts
86
+ declare const Component$2: React$1.ForwardRefExoticComponent<Omit<LinkProps, "ref"> & React$1.RefAttributes<HTMLAnchorElement>>;
87
+ declare const RouterLink: LinkComponent<typeof Component$2>;
88
+ //#endregion
89
+ //#region src/components/router/RouterTab.d.ts
90
+ declare const Component$1: React$1.ForwardRefExoticComponent<Omit<TabProps<"a">, "ref"> & React$1.RefAttributes<HTMLAnchorElement>>;
91
+ declare const RouterTab: LinkComponent<typeof Component$1>;
92
+ //#endregion
93
+ //#region src/components/router/RouterListItemButton.d.ts
94
+ declare const Component: React$1.ForwardRefExoticComponent<Omit<ListItemButtonProps<"a">, "ref"> & React$1.RefAttributes<HTMLAnchorElement>>;
95
+ declare const RouterListItemButton: LinkComponent<typeof Component>;
96
+ //#endregion
97
+ //#region src/components/router/RouterNotFound.d.ts
98
+ declare function RouterNotFound(): import("react").JSX.Element;
99
+ //#endregion
100
+ //#region src/components/router/RouterError.d.ts
101
+ interface RouterErrorProps {
102
+ error: ErrorComponentProps["error"];
103
+ }
104
+ declare const RouterError: FC<RouterErrorProps>;
105
+ //#endregion
106
+ export { Dropzone, EditableColumnHeader, FileViewer, Fullscreen, RouterButton, RouterError, RouterFab, RouterGridActionsCellItem, RouterIconButton, RouterLink, RouterListItemButton, RouterNotFound, RouterTab, TypographyWithIcon };
107
+ //# sourceMappingURL=components.d.mts.map